libtins 4.5
|
#include <dot1q.h>
Public Member Functions | |
Dot1Q (small_uint< 12 > tag_id=0, bool append_pad=true) | |
Dot1Q (const uint8_t *buffer, uint32_t total_sz) | |
Constructs a Dot1Q object from a buffer and adds all identifiable PDUs found in the buffer as children of this one. | |
uint32_t | header_size () const |
Returns the header size. | |
uint32_t | trailer_size () const |
Returns the frame's trailer size. | |
small_uint< 3 > | priority () const |
Getter for the priority field. | |
small_uint< 1 > | cfi () const |
Getter for the Canonical Format Identifier field. | |
small_uint< 12 > | id () const |
Getter for the VLAN ID field. | |
uint16_t | payload_type () const |
Getter for the payload type field. | |
PDUType | pdu_type () const |
Getter for the PDU's type. | |
Dot1Q * | clone () const |
bool | append_padding () const |
Retrieves the flag indicating whether padding will be appended at the end of this packet. | |
void | priority (small_uint< 3 > new_priority) |
Setter for the priority field. | |
void | cfi (small_uint< 1 > new_cfi) |
Setter for the Canonical Format Identifie field. | |
void | id (small_uint< 12 > new_id) |
Setter for the VLAN ID field. | |
void | payload_type (uint16_t new_type) |
Setter for the payload type field. | |
void | append_padding (bool value) |
Indicates whether the appropriate padding will be at the end of the packet. | |
bool | matches_response (const uint8_t *ptr, uint32_t total_sz) const |
Check whether ptr points to a valid response for this PDU. | |
![]() | |
PDU () | |
Default constructor. | |
PDU (PDU &&rhs) TINS_NOEXCEPT | |
Move constructor. | |
PDU & | operator= (PDU &&rhs) TINS_NOEXCEPT |
Move assignment operator. | |
virtual | ~PDU () |
PDU destructor. | |
uint32_t | size () const |
The whole chain of PDU's size, including this one. | |
virtual uint32_t | advertised_size () const |
The whole chain of PDU's advertised size, including this one. | |
PDU * | inner_pdu () const |
Getter for the inner PDU. | |
PDU * | parent_pdu () const |
PDU * | release_inner_pdu () |
Releases the inner PDU. | |
void | inner_pdu (PDU *next_pdu) |
Sets the child PDU. | |
void | inner_pdu (const PDU &next_pdu) |
Sets the child PDU. | |
serialization_type | serialize () |
Serializes the whole chain of PDU's, including this one. | |
template<typename T > | |
T * | find_pdu (PDUType type=T::pdu_flag) |
Finds and returns the first PDU that matches the given flag. | |
template<typename T > | |
const T * | find_pdu (PDUType type=T::pdu_flag) const |
Finds and returns the first PDU that matches the given flag. | |
template<typename T > | |
T & | rfind_pdu (PDUType type=T::pdu_flag) |
Finds and returns the first PDU that matches the given flag. | |
template<typename T > | |
const T & | rfind_pdu (PDUType type=T::pdu_flag) const |
Finds and returns the first PDU that matches the given flag. | |
virtual void | send (PacketSender &sender, const NetworkInterface &iface) |
Send the stack of PDUs through a PacketSender. | |
virtual PDU * | recv_response (PacketSender &sender, const NetworkInterface &iface) |
Receives a matching response for this packet. | |
virtual bool | matches_flag (PDUType flag) const |
Check whether this PDU matches the specified flag. | |
Static Public Member Functions | |
static metadata | extract_metadata (const uint8_t *buffer, uint32_t total_sz) |
Extracts metadata for this protocol based on the buffer provided. | |
Static Public Attributes | |
static const PDU::PDUType | pdu_flag = PDU::DOT1Q |
![]() | |
static const endian_type | endianness = BE |
Additional Inherited Members | |
![]() | |
enum | endian_type { BE , LE } |
enum | PDUType { RAW , ETHERNET_II , IEEE802_3 , DOT3 = IEEE802_3 , RADIOTAP , DOT11 , DOT11_ACK , DOT11_ASSOC_REQ , DOT11_ASSOC_RESP , DOT11_AUTH , DOT11_BEACON , DOT11_BLOCK_ACK , DOT11_BLOCK_ACK_REQ , DOT11_CF_END , DOT11_DATA , DOT11_CONTROL , DOT11_DEAUTH , DOT11_DIASSOC , DOT11_END_CF_ACK , DOT11_MANAGEMENT , DOT11_PROBE_REQ , DOT11_PROBE_RESP , DOT11_PS_POLL , DOT11_REASSOC_REQ , DOT11_REASSOC_RESP , DOT11_RTS , DOT11_QOS_DATA , LLC , SNAP , IP , ARP , TCP , UDP , ICMP , BOOTP , DHCP , EAPOL , RC4EAPOL , RSNEAPOL , DNS , LOOPBACK , IPv6 , ICMPv6 , SLL , DHCPv6 , DOT1AD , DOT1Q , PPPOE , STP , PPI , IPSEC_AH , IPSEC_ESP , PKTAP , MPLS , DOT11_CONTROL_TA , VXLAN , UNKNOWN = 999 , USER_DEFINED_PDU = 1000 } |
Enum which identifies each type of PDU. More... | |
typedef byte_array | serialization_type |
![]() | |
PDU (const PDU &other) | |
Copy constructor. | |
PDU & | operator= (const PDU &other) |
Copy assignment operator. | |
void | copy_inner_pdu (const PDU &pdu) |
Copy other PDU's inner PDU(if any). | |
virtual void | prepare_for_serialize () |
Prepares this PDU for serialization. | |
void | serialize (uint8_t *buffer, uint32_t total_sz) |
Serializes this PDU and propagates this action to child PDUs. | |
Represents an IEEE 802.1q PDU.
Tins::Dot1Q::Dot1Q | ( | small_uint< 12 > | tag_id = 0, |
bool | append_pad = true ) |
Default constructor
Tins::Dot1Q::Dot1Q | ( | const uint8_t * | buffer, |
uint32_t | total_sz ) |
Constructs a Dot1Q object from a buffer and adds all identifiable PDUs found in the buffer as children of this one.
If the next PDU is not recognized, then a RawPDU is used.
If there is not enough size for a Dot1Q header in the buffer, a malformed_packet exception is thrown.
buffer | The buffer from which this PDU will be constructed. |
total_sz | The total size of the buffer. |
void Tins::Dot1Q::append_padding | ( | bool | value | ) |
Indicates whether the appropriate padding will be at the end of the packet.
This flag could be disabled in case two or more contiguous Dot1Q PDUs are added to a packet. In that case, only the Dot1Q which is closer to the link layer should add the padding at the end.
value | A boolean indicating whether padding will be appended. |
|
inline |
Getter for the Canonical Format Identifier field.
void Tins::Dot1Q::cfi | ( | small_uint< 1 > | new_cfi | ) |
Setter for the Canonical Format Identifie field.
new_cfi | The new CFI field value. |
|
inlinevirtual |
Implements Tins::PDU.
|
static |
Extracts metadata for this protocol based on the buffer provided.
buffer | Pointer to a buffer |
total_sz | Size of the buffer pointed by buffer |
|
virtual |
Returns the header size.
This method overrides PDU::header_size.
Implements Tins::PDU.
|
inline |
Getter for the VLAN ID field.
void Tins::Dot1Q::id | ( | small_uint< 12 > | new_id | ) |
Setter for the VLAN ID field.
new_id | The new VLAN ID field value. |
|
virtual |
Check whether ptr points to a valid response for this PDU.
ptr | The pointer to the buffer. |
total_sz | The size of the buffer. |
Reimplemented from Tins::PDU.
|
inline |
Getter for the payload type field.
void Tins::Dot1Q::payload_type | ( | uint16_t | new_type | ) |
Setter for the payload type field.
new_type | The new type field value. |
|
inlinevirtual |
|
inline |
Getter for the priority field.
void Tins::Dot1Q::priority | ( | small_uint< 3 > | new_priority | ) |
Setter for the priority field.
new_priority | The new priority field value. |
|
virtual |
|
static |
This PDU's flag.