36 #include <tins/macros.h>    37 #include <tins/cxxstd.h>    38 #include <tins/exceptions.h>   182         USER_DEFINED_PDU = 1000
   234         : inner_pdu_(0), parent_pdu_(0) {
   235             std::swap(inner_pdu_, rhs.inner_pdu_);
   237                 inner_pdu_->parent_pdu(
this);
   249             std::swap(inner_pdu_, rhs.inner_pdu_);
   251                 inner_pdu_->parent_pdu(
this);
   267     virtual uint32_t header_size() 
const = 0;
   281     uint32_t size() 
const;
   312     PDU* release_inner_pdu();
   322     void inner_pdu(
PDU* next_pdu);
   331     void inner_pdu(
const PDU& next_pdu);
   342     serialization_type serialize();
   357                 return static_cast<T*
>(pdu);
   371         return const_cast<PDU*
>(
this)->find_pdu<T>(type);
   385         T* ptr = find_pdu<T>(type);
   399         return const_cast<PDU*
>(
this)->rfind_pdu<T>(type);
   410     virtual PDU* clone() 
const = 0;
   451     virtual bool matches_response(
const uint8_t* ptr, uint32_t total_sz) 
const;
   462        return flag == pdu_type();
   470     virtual PDUType pdu_type() 
const = 0;
   480     PDU& operator=(
const PDU& other);
   486     void copy_inner_pdu(
const PDU& pdu);
   499     virtual void prepare_for_serialize();
   507     void serialize(uint8_t* buffer, uint32_t total_sz);
   517     virtual void write_serialization(uint8_t* buffer, uint32_t total_sz) = 0;
   519     void parent_pdu(
PDU* parent);
   575 namespace Internals {
   587 template<
typename T, 
typename U>
   588 T tins_cast(U* pdu) {
   589     typedef typename Internals::remove_pointer<T>::type TrueT;
   590     return pdu && (TrueT::pdu_flag == pdu->pdu_type()) ?
   591            static_cast<T>(pdu) : 0;
   594 template<
typename T, 
typename U>
   595 T& tins_cast(U& pdu) {
   596     T* ptr = tins_cast<T*>(&pdu);
 
virtual bool matches_flag(PDUType flag) const 
Check whether this PDU matches the specified flag. 
Definition: pdu.h:461
Class that represents an ICMP PDU. 
Definition: icmp.h:65
Represents a TCP PDU. 
Definition: tcp.h:76
Exception thrown when a PDU is not found when using PDU::rfind_pdu. 
Definition: exceptions.h:80
const T & rfind_pdu(PDUType type=T::pdu_flag) const 
Finds and returns the first PDU that matches the given flag. 
Definition: pdu.h:398
Class that represents an IP PDU. 
Definition: ip.h:63
Represents a Linux cooked-mode capture (SLL) PDU. 
Definition: sll.h:45
std::vector< uint8_t > byte_array
Definition: pdu.h:45
Represents an MPLS PDU. 
Definition: mpls.h:46
Represents a DNS PDU. 
Definition: dns.h:85
PDUType
Enum which identifies each type of PDU. 
Definition: pdu.h:127
const T * find_pdu(PDUType type=T::pdu_flag) const 
Finds and returns the first PDU that matches the given flag. 
Definition: pdu.h:370
T * find_pdu(PDUType type=T::pdu_flag)
Finds and returns the first PDU that matches the given flag. 
Definition: pdu.h:353
Sends packets through a network interface. 
Definition: packet_sender.h:116
virtual uint32_t trailer_size() const 
Trailer's size. 
Definition: pdu.h:273
PDU & operator=(PDU &&rhs) TINS_NOEXCEPT
Move assignment operator. 
Definition: pdu.h:246
Represents an ARP PDU. 
Definition: arp.h:50
Represents an ICMPv6 PDU. 
Definition: icmpv6.h:57
AddressRange< HWAddress< n > > operator/(const HWAddress< n > &addr, int mask)
Constructs an AddressRange from a base address and a mask. 
Definition: address_range.h:304
PDU * parent_pdu() const 
Definition: pdu.h:295
Represents a DHCPv6 PDU. 
Definition: dhcpv6.h:52
Represents a Spanning Tree Protocol PDU. 
Definition: stp.h:44
Represents an UDP PDU. 
Definition: udp.h:63
Class representing an IEEE 802.3 PDU. 
Definition: dot3.h:46
The Tins namespace. 
Definition: address_range.h:38
Representing a LLC frame. 
Definition: llc.h:47
Class that represents the RC4 EAPOL PDU. 
Definition: eapol.h:198
Class that represents the RSN EAPOL PDU. 
Definition: eapol.h:397
Abstraction of a network interface. 
Definition: network_interface.h:47
T & operator/=(T &lop, const PDU &rop)
Concatenation operator. 
Definition: pdu.h:544
PDU * inner_pdu() const 
Getter for the inner PDU. 
Definition: pdu.h:287
Represents the DHCP PDU. 
Definition: dhcp.h:67
Represents the EAP encapsulation over LAN. 
Definition: eapol.h:56
Represents a SNAP frame. 
Definition: snap.h:48
virtual PDU * clone() const =0
Clones this packet. 
PDU(PDU &&rhs) TINS_NOEXCEPT
Move constructor. 
Definition: pdu.h:233
byte_array serialization_type
Definition: pdu.h:112
T & rfind_pdu(PDUType type=T::pdu_flag)
Finds and returns the first PDU that matches the given flag. 
Definition: pdu.h:384
Base class for protocol data units. 
Definition: pdu.h:107
endian_type
Definition: pdu.h:117
Exception thrown when a call to tins_cast fails. 
Definition: exceptions.h:175