8 #ifndef FL2TPV3FRAME_H_
9 #define FL2TPV3FRAME_H_ 1
14 #include "../endian_conversion.h"
17 #include "../openflow/openflow.h"
18 #include "../fframe.h"
19 #include "../croflexception.h"
41 enum l2tpv3_ip_proto_t {
42 L2TPV3_IP_PROTO = 115,
55 #define TBIT_FLAG (1 << 15)
56 #define LBIT_FLAG (1 << 14)
57 #define SBIT_FLAG (1 << 11)
58 #define VERS_MASK (0x000f)
62 uint32_t pseudo_session_id;
83 } __attribute__((packed));
91 } __attribute__((packed));
97 } __attribute__((packed));
101 enum l2tp_encap_t encap_type;
105 uint8_t* l2tpv3u_hdr;
112 #define l2tpv3_hdr l2tpv3u.l2tpv3u_hdr
113 #define l2tpv3_ctl_hdr_ip_encap l2tpv3u.l2tpv3u_ctl_hdr_ip_encap
114 #define l2tpv3_data_hdr_ip_encap l2tpv3u.l2tpv3u_data_hdr_ip_encap
115 #define l2tpv3_ctl_hdr_udp_encap l2tpv3u.l2tpv3u_ctl_hdr_udp_encap
116 #define l2tpv3_data_hdr_udp_encap l2tpv3u.l2tpv3u_data_hdr_udp_encap
124 enum l2tp_encap_t encap_type,
132 enum l2tp_encap_t encap_type,
146 enum l2tp_encap_t encap_type,
334 set_cookie(uint64_t cookie);
359 uint16_t total_len = 0)
const;
401 os <<
"<fl2tpv3frame: ";
402 os <<
"vers:" << (int)f.get_version() <<
" ";
403 os <<
"type:" << ((f.get_Tbit() ==
true) ?
"control " :
"data ");
404 os <<
"encap:" << f.get_encap() <<
" ";
405 if (f.get_Tbit() ==
true) {
406 os <<
"T:" << (f.get_Tbit() ==
true ?
"1":
"0") <<
" ";
407 os <<
"L:" << (f.get_Lbit() ==
true ?
"1":
"0") <<
" ";
408 os <<
"S:" << (f.get_Sbit() ==
true ?
"1":
"0") <<
" ";
409 os <<
"len:" << (int)f.get_length() <<
" ";
410 os <<
"ccid:" << (int)f.get_ccid() <<
" ";
411 os <<
"Ns:" << (int)f.get_Ns() <<
" ";
412 os <<
"Nr:" << (int)f.get_Nr() <<
" ";
414 os <<
"T:" << (f.get_Tbit() ==
true ?
"1":
"0") <<
" ";
415 os <<
"sid:" << (int)f.get_session_id() <<
" ";
void set_version(uint8_t version=L2TP_VERSION_3)
Set version of L2TP frame: currently only L2TPv3 is supported.
Definition: fl2tpv3frame.cc:466
virtual bool complete() const
Definition: fl2tpv3frame.cc:154
bool get_Sbit() const
Returns L2TPv3 S-bit indicating presence of the message fields Ns and Nr (only valid for control mess...
Definition: fl2tpv3frame.cc:399
virtual size_t pdulen() const
Returns length of this PDU.
Definition: fl2tpv3frame.cc:80
virtual uint8_t * sopdu() const
Returns pointer to begin of this PDU.
Definition: fl2tpv3frame.cc:73
virtual void payload_insert(uint8_t *data, size_t datalen)
Definition: fl2tpv3frame.cc:254
virtual size_t sdulen() const
Returns length of this SDU.
Definition: fl2tpv3frame.cc:120
virtual uint8_t * payload() const
Definition: fl2tpv3frame.cc:262
bool get_Lbit() const
Returns L2TPv3 L-bit indicating presence of the message length field (only valid for control messages...
Definition: fl2tpv3frame.cc:358
bool is_ctl_msg() const
Returns true, when the message is a control message.
Definition: fl2tpv3frame.cc:299
Definition: fl2tpv3frame.h:29
virtual void initialize()
Definition: fl2tpv3frame.cc:247
bool get_Tbit() const
Returns L2TPv3 T-bit indicating the message type, true:control packet, false:data packet...
Definition: fl2tpv3frame.cc:316
uint32_t get_session_id() const
Return L2TPv3 session ID. The session ID is also present in a control message as a pseudo session id ...
Definition: fl2tpv3frame.cc:491
Definition: fl2tpv3frame.h:86
virtual size_t payloadlen() const
Definition: fl2tpv3frame.cc:270
Definition: fl2tpv3frame.h:71
void set_Nr(uint16_t Nr)
Set Nr field in L2TPv3 control message header.
Definition: fl2tpv3frame.cc:676
Definition: fl2tpv3frame.h:26
Definition: fl2tpv3frame.h:77
virtual uint8_t * sosdu() const
Returns pointer to begin of SDU encapsulated in this PDU (if any).
Definition: fl2tpv3frame.cc:87
void set_Tbit(bool Tbit=true)
Set L2TPv3 T-bit indicating the message type, true: control packet, false:data packet (default)...
Definition: fl2tpv3frame.cc:334
uint16_t get_Nr() const
Returns Nr field from L2TPv3 control message header.
Definition: fl2tpv3frame.cc:655
virtual void validate(uint16_t total_len=0) const
Definition: fl2tpv3frame.cc:238
virtual size_t need_bytes() const
Definition: fl2tpv3frame.cc:186
Definition: fl2tpv3frame.h:34
Definition: fl2tpv3frame.h:61
void set_Sbit(bool Sbit=true)
Set L2TPv3 L-bit indicating presence of the message fields Ns and Nr (only valid for control messages...
Definition: fl2tpv3frame.cc:417
void set_session_id(uint32_t sid)
Set L2TPv3 session ID. The session ID is also present in a control message as a pseudo session id for...
Definition: fl2tpv3frame.cc:511
uint8_t get_version() const
Returns version of L2TP frame: currently only L2TPv3 is supported.
Definition: fl2tpv3frame.cc:440
uint32_t get_ccid() const
Return control connection ID field from L2TPv3 control message header.
Definition: fl2tpv3frame.cc:573
Definition: fl2tpv3frame.h:94
uint16_t get_Ns() const
Returns Ns field from L2TPv3 control message header.
Definition: fl2tpv3frame.cc:614
std::string get_encap() const
Return L2TPv3 encapsulation mode.
Definition: fl2tpv3frame.cc:287
Definition: fl2tpv3frame.h:27
void set_Lbit(bool Lbit=true)
Set L2TPv3 L-bit indicating presence of the message length field (only valid for control messages) ...
Definition: fl2tpv3frame.cc:376
void set_length(uint16_t len)
Set length field in L2TPv3 control message header.
Definition: fl2tpv3frame.cc:553
Definition: fl2tpv3frame.h:25
Definition: fl2tpv3frame.h:28
void set_ccid(uint32_t ccid)
Set control connection ID field in L2TPv3 control message header.
Definition: fl2tpv3frame.cc:594
void set_Ns(uint16_t Ns)
Set Ns field in L2TPv3 control message header.
Definition: fl2tpv3frame.cc:635
uint16_t get_length() const
Returns length field from L2TPv3 control message header.
Definition: fl2tpv3frame.cc:531