libtins  4.4
Classes | Public Types | Public Member Functions | Static Public Member Functions | Static Public Attributes | List of all members
Tins::IPv6 Class Reference

#include <ipv6.h>

Inheritance diagram for Tins::IPv6:
Tins::PDU

Classes

struct  destination_routing_header
 
struct  fragment_header
 The type used to store Fragment Extension headers. More...
 
struct  hop_by_hop_header
 
struct  routing_header
 The type used to store Routing Extension headers. More...
 

Public Types

enum  ExtensionHeader {
  HOP_BY_HOP = 0 , DESTINATION_ROUTING_OPTIONS = 60 , ROUTING = 43 , FRAGMENT = 44 ,
  AUTHENTICATION = 51 , SECURITY_ENCAPSULATION = 50 , DESTINATION_OPTIONS = 60 , MOBILITY = 135 ,
  NO_NEXT_HEADER = 59
}
 
enum  OptionType { PAD_1 = 0 , PAD_N = 1 , JUMBO_PAYLOAD = 0xC2 }
 
typedef IPv6Address address_type
 
typedef PDUOption< uint8_t, IPv6ext_header
 
typedef std::vector< ext_headerheaders_type
 
typedef std::pair< uint8_t, std::vector< uint8_t > > header_option_type
 
- Public Types inherited from Tins::PDU
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 , UNKNOWN = 999 ,
  USER_DEFINED_PDU = 1000
}
 Enum which identifies each type of PDU. More...
 
typedef byte_array serialization_type
 

Public Member Functions

 IPv6 (address_type ip_dst=address_type(), address_type ip_src=address_type(), PDU *child=0)
 Constructs an IPv6 object. More...
 
 IPv6 (const uint8_t *buffer, uint32_t total_sz)
 Constructs an IPv6 object from a buffer and adds all identifiable PDUs found in the buffer as children of this one. More...
 
small_uint< 4 > version () const
 Getter for the version field. More...
 
uint8_t traffic_class () const
 Getter for the traffic_class field. More...
 
small_uint< 20 > flow_label () const
 Getter for the flow_label field. More...
 
uint16_t payload_length () const
 Getter for the payload_length field. More...
 
uint8_t next_header () const
 Getter for the next_header field. More...
 
uint8_t hop_limit () const
 Getter for the hop_limit field. More...
 
address_type src_addr () const
 Getter for the src_addr field. More...
 
address_type dst_addr () const
 Getter for the dst_addr field. More...
 
const headers_typeheaders () const
 Getter for the IPv6 extension headers. More...
 
void version (small_uint< 4 > new_version)
 Setter for the version field. More...
 
void traffic_class (uint8_t new_traffic_class)
 Setter for the traffic_class field. More...
 
void flow_label (small_uint< 20 > new_flow_label)
 Setter for the flow_label field. More...
 
void payload_length (uint16_t new_payload_length)
 Setter for the payload_length field. More...
 
void next_header (uint8_t new_next_header)
 Setter for the next_header field. More...
 
void hop_limit (uint8_t new_hop_limit)
 Setter for the hop_limit field. More...
 
void src_addr (const address_type &new_src_addr)
 Setter for the src_addr field. More...
 
void dst_addr (const address_type &new_dst_addr)
 Setter for the dst_addr field. More...
 
uint32_t header_size () const
 Returns the header size. More...
 
bool matches_response (const uint8_t *ptr, uint32_t total_sz) const
 Check whether ptr points to a valid response for this PDU. More...
 
IPv6clone () const
 
PDUType pdu_type () const
 Getter for the PDU's type. More...
 
void send (PacketSender &sender, const NetworkInterface &)
 
PDUrecv_response (PacketSender &sender, const NetworkInterface &)
 Receives a matching response for this packet. More...
 
 TINS_DEPRECATED (void add_ext_header(const ext_header &header))
 
void add_header (const ext_header &header)
 
void add_header (ext_header &&header)
 
template<typename... Args>
void add_header (Args &&... args)
 
const ext_headersearch_header (ExtensionHeader id) const
 Searchs for an extension header that matchs the given flag. More...
 
- Public Member Functions inherited from Tins::PDU
 PDU ()
 Default constructor.
 
 PDU (PDU &&rhs) TINS_NOEXCEPT
 Move constructor. More...
 
PDUoperator= (PDU &&rhs) TINS_NOEXCEPT
 Move assignment operator. More...
 
virtual ~PDU ()
 PDU destructor. More...
 
virtual uint32_t trailer_size () const
 Trailer's size. More...
 
uint32_t size () const
 The whole chain of PDU's size, including this one. More...
 
virtual uint32_t advertised_size () const
 The whole chain of PDU's advertised size, including this one. More...
 
PDUinner_pdu () const
 Getter for the inner PDU. More...
 
PDUparent_pdu () const
 
PDUrelease_inner_pdu ()
 Releases the inner PDU. More...
 
void inner_pdu (PDU *next_pdu)
 Sets the child PDU. More...
 
void inner_pdu (const PDU &next_pdu)
 Sets the child PDU. More...
 
serialization_type serialize ()
 Serializes the whole chain of PDU's, including this one. More...
 
template<typename T >
T * find_pdu (PDUType type=T::pdu_flag)
 Finds and returns the first PDU that matches the given flag. More...
 
template<typename T >
const T * find_pdu (PDUType type=T::pdu_flag) const
 Finds and returns the first PDU that matches the given flag. More...
 
template<typename T >
T & rfind_pdu (PDUType type=T::pdu_flag)
 Finds and returns the first PDU that matches the given flag. More...
 
template<typename T >
const T & rfind_pdu (PDUType type=T::pdu_flag) const
 Finds and returns the first PDU that matches the given flag. More...
 
virtual bool matches_flag (PDUType flag) const
 Check whether this PDU matches the specified flag. More...
 

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. More...
 

Static Public Attributes

static const PDU::PDUType pdu_flag = PDU::IPv6
 
- Static Public Attributes inherited from Tins::PDU
static const endian_type endianness = BE
 

Additional Inherited Members

- Protected Member Functions inherited from Tins::PDU
 PDU (const PDU &other)
 Copy constructor.
 
PDUoperator= (const PDU &other)
 Copy assignment operator.
 
void copy_inner_pdu (const PDU &pdu)
 Copy other PDU's inner PDU(if any). More...
 
virtual void prepare_for_serialize ()
 Prepares this PDU for serialization. More...
 
void serialize (uint8_t *buffer, uint32_t total_sz)
 Serializes this PDU and propagates this action to child PDUs. More...
 

Detailed Description

Represents an IPv6 PDU.

Member Typedef Documentation

◆ address_type

The type used to store addresses.

◆ ext_header

The type used to represent IPv6 extension headers.

◆ header_option_type

typedef std::pair<uint8_t, std::vector<uint8_t> > Tins::IPv6::header_option_type

The type used to store an extension header option.

◆ headers_type

typedef std::vector<ext_header> Tins::IPv6::headers_type

The type used to store the extension headers.

Member Enumeration Documentation

◆ ExtensionHeader

The values used to identify extension headers.

◆ OptionType

The values used to identify Hop-By-Hop Options and Destination Options.

Constructor & Destructor Documentation

◆ IPv6() [1/2]

Tins::IPv6::IPv6 ( address_type  ip_dst = address_type(),
address_type  ip_src = address_type(),
PDU child = 0 
)

Constructs an IPv6 object.

Parameters
ip_dstThe destination ip address(optional).
ip_srcThe source ip address(optional).
childpointer to a PDU which will be set as the inner_pdu for the packet being constructed(optional).

◆ IPv6() [2/2]

Tins::IPv6::IPv6 ( const uint8_t *  buffer,
uint32_t  total_sz 
)

Constructs an IPv6 object from a buffer and adds all identifiable PDUs found in the buffer as children of this one.

If there is not enough size for an IPv6 header, a malformed_packet exception is thrown.

Parameters
bufferThe buffer from which this PDU will be constructed.
total_szThe total size of the buffer.

Member Function Documentation

◆ add_header() [1/3]

template<typename... Args>
void Tins::IPv6::add_header ( Args &&...  args)
inline

Adds an extension header by using the provided parameters

Parameters
headerThe extension header to be added.

◆ add_header() [2/3]

void Tins::IPv6::add_header ( const ext_header header)

Adds an extension header

Deprecated:
Use IPv6::add_header
Parameters
headerThe extension header to be added.

◆ add_header() [3/3]

void Tins::IPv6::add_header ( ext_header &&  header)
inline

Adds an extension header by moving it

Parameters
headerThe extension header to be added.

◆ clone()

IPv6* Tins::IPv6::clone ( ) const
inlinevirtual
See also
PDU::clone

Implements Tins::PDU.

◆ dst_addr() [1/2]

address_type Tins::IPv6::dst_addr ( ) const
inline

Getter for the dst_addr field.

Returns
The stored dst_addr field value.

◆ dst_addr() [2/2]

void Tins::IPv6::dst_addr ( const address_type new_dst_addr)

Setter for the dst_addr field.

Parameters
new_dst_addrThe new dst_addr field value.

◆ extract_metadata()

PDU::metadata Tins::IPv6::extract_metadata ( const uint8_t *  buffer,
uint32_t  total_sz 
)
static

Extracts metadata for this protocol based on the buffer provided.

Parameters
bufferPointer to a buffer
total_szSize of the buffer pointed by buffer

◆ flow_label() [1/2]

small_uint<20> Tins::IPv6::flow_label ( ) const
inline

Getter for the flow_label field.

Returns
The stored flow_label field value.

◆ flow_label() [2/2]

void Tins::IPv6::flow_label ( small_uint< 20 >  new_flow_label)

Setter for the flow_label field.

Parameters
new_flow_labelThe new flow_label field value.

◆ header_size()

uint32_t Tins::IPv6::header_size ( ) const
virtual

Returns the header size.

This method overrides PDU::header_size.

See also
PDU::header_size

Implements Tins::PDU.

◆ headers()

const headers_type& Tins::IPv6::headers ( ) const
inline

Getter for the IPv6 extension headers.

Returns
The stored headers.

◆ hop_limit() [1/2]

uint8_t Tins::IPv6::hop_limit ( ) const
inline

Getter for the hop_limit field.

Returns
The stored hop_limit field value.

◆ hop_limit() [2/2]

void Tins::IPv6::hop_limit ( uint8_t  new_hop_limit)

Setter for the hop_limit field.

Parameters
new_hop_limitThe new hop_limit field value.

◆ matches_response()

bool Tins::IPv6::matches_response ( const uint8_t *  ptr,
uint32_t  total_sz 
) const
virtual

Check whether ptr points to a valid response for this PDU.

See also
PDU::matches_response
Parameters
ptrThe pointer to the buffer.
total_szThe size of the buffer.

Reimplemented from Tins::PDU.

◆ next_header() [1/2]

uint8_t Tins::IPv6::next_header ( ) const
inline

Getter for the next_header field.

Returns
The stored next_header field value.

◆ next_header() [2/2]

void Tins::IPv6::next_header ( uint8_t  new_next_header)

Setter for the next_header field.

Parameters
new_next_headerThe new next_header field value.

◆ payload_length() [1/2]

uint16_t Tins::IPv6::payload_length ( ) const
inline

Getter for the payload_length field.

Returns
The stored payload_length field value.

◆ payload_length() [2/2]

void Tins::IPv6::payload_length ( uint16_t  new_payload_length)

Setter for the payload_length field.

Parameters
new_payload_lengthThe new payload_length field value.

◆ pdu_type()

PDUType Tins::IPv6::pdu_type ( ) const
inlinevirtual

Getter for the PDU's type.

See also
PDU::pdu_type

Implements Tins::PDU.

◆ recv_response()

PDU * Tins::IPv6::recv_response ( PacketSender sender,
const NetworkInterface  
)
virtual

Receives a matching response for this packet.

See also
PDU::recv_response
Parameters
senderThe packet sender which will receive the packet.

Reimplemented from Tins::PDU.

◆ search_header()

const IPv6::ext_header * Tins::IPv6::search_header ( ExtensionHeader  id) const

Searchs for an extension header that matchs the given flag.

If the header is not found, a null pointer is returned. Deleting the returned pointer will result in undefined behaviour.

Parameters
idThe header identifier to be searched.

◆ send()

void Tins::IPv6::send ( PacketSender sender,
const NetworkInterface interface 
)
virtual
See also
PDU::send()

Reimplemented from Tins::PDU.

◆ src_addr() [1/2]

address_type Tins::IPv6::src_addr ( ) const
inline

Getter for the src_addr field.

Returns
The stored src_addr field value.

◆ src_addr() [2/2]

void Tins::IPv6::src_addr ( const address_type new_src_addr)

Setter for the src_addr field.

Parameters
new_src_addrThe new src_addr field value.

◆ TINS_DEPRECATED()

Tins::IPv6::TINS_DEPRECATED ( void   add_ext_headerconst ext_header &header)

Adds an extension header.

Deprecated:
Use IPv6::add_header
Parameters
headerThe extension header to be added.

◆ traffic_class() [1/2]

uint8_t Tins::IPv6::traffic_class ( ) const
inline

Getter for the traffic_class field.

Returns
The stored traffic_class field value.

◆ traffic_class() [2/2]

void Tins::IPv6::traffic_class ( uint8_t  new_traffic_class)

Setter for the traffic_class field.

Parameters
new_traffic_classThe new traffic_class field value.

◆ version() [1/2]

small_uint<4> Tins::IPv6::version ( ) const
inline

Getter for the version field.

Returns
The stored version field value.

◆ version() [2/2]

void Tins::IPv6::version ( small_uint< 4 >  new_version)

Setter for the version field.

Parameters
new_versionThe new version field value.

Member Data Documentation

◆ pdu_flag

const PDU::PDUType Tins::IPv6::pdu_flag = PDU::IPv6
static

This PDU's flag.


The documentation for this class was generated from the following files: