libtins  4.0
 All Classes Namespaces Functions Variables Typedefs Enumerations Enumerator Friends Pages
Classes | Public Types | Public Member Functions | Static Public Member Functions | Static Public Attributes | List of all members
Tins::DHCPv6 Class Reference

Represents a DHCPv6 PDU. More...

#include <dhcpv6.h>

Inheritance diagram for Tins::DHCPv6:
Tins::PDU

Classes

struct  authentication_type
 
struct  duid_en
 
struct  duid_ll
 
struct  duid_llt
 
struct  duid_type
 
struct  ia_address_type
 
struct  ia_na_type
 
struct  ia_ta_type
 
struct  status_code_type
 
struct  user_class_type
 
struct  vendor_class_type
 
struct  vendor_info_type
 

Public Types

enum  MessageType {
  SOLICIT = 1, ADVERTISE, REQUEST, CONFIRM,
  RENEW, REBIND, REPLY, RELEASE,
  DECLINE, RECONFIGURE, INFO_REQUEST, RELAY_FORWARD,
  RELAY_REPLY, LEASE_QUERY, LEASE_QUERY_REPLY, LEASE_QUERY_DONE,
  LEASE_QUERY_DATA
}
 
enum  OptionTypes {
  CLIENTID = 1, SERVERID, IA_NA, IA_TA,
  IA_ADDR, OPTION_REQUEST, PREFERENCE, ELAPSED_TIME,
  RELAY_MSG, AUTH = 11, UNICAST, STATUS_CODE,
  RAPID_COMMIT, USER_CLASS, VENDOR_CLASS, VENDOR_OPTS,
  INTERFACE_ID, RECONF_MSG, RECONF_ACCEPT, SIP_SERVER_D,
  SIP_SERVER_A, DNS_SERVERS, DOMAIN_LIST, IA_PD,
  IAPREFIX, NIS_SERVERS, NISP_SERVERS, NIS_DOMAIN_NAME,
  NISP_DOMAIN_NAME, SNTP_SERVERS, INFORMATION_REFRESH_TIME, BCMCS_SERVER_D,
  BCMCS_SERVER_A, GEOCONF_CIVIC = 36, REMOTE_ID, SUBSCRIBER_ID,
  CLIENT_FQDN, PANA_AGENT, NEW_POSIX_TIMEZONE, NEW_TZDB_TIMEZONE,
  ERO, LQ_QUERY, CLIENT_DATA, CLT_TIME,
  LQ_RELAY_DATA, LQ_CLIENT_LINK, MIP6_HNIDF, MIP6_VDINF,
  V6_LOST, CAPWAP_AC_V6, RELAY_ID, NTP_SERVER,
  V6_ACCESS_DOMAIN, SIP_UA_CS_LIST, BOOTFILE_URL, BOOTFILE_PARAM,
  CLIENT_ARCH_TYPE, NII, GEOLOCATION, AFTR_NAME,
  ERP_LOCAL_DOMAIN_NAME, RSOO, PD_EXCLUDE, VSS,
  MIP6_IDINF, MIP6_UDINF, MIP6_HNP, MIP6_HAA,
  MIP6_HAF, RDNSS_SELECTION, KRB_PRINCIPAL_NAME, KRB_REALM_NAME,
  KRB_DEFAULT_REALM_NAME, KRB_KDC
}
 
typedef PDUOption< uint16_t,
DHCPv6
option
 
typedef std::vector< optionoptions_type
 
typedef IPv6Address ipaddress_type
 
typedef std::vector< uint8_t > class_option_data_type
 
typedef std::vector< uint16_t > option_request_type
 
typedef std::vector< uint8_t > relay_msg_type
 
typedef std::vector< uint8_t > interface_id_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, DOT1Q, PPPOE, STP,
  PPI, IPSEC_AH, IPSEC_ESP, PKTAP,
  MPLS, UNKNOWN = 999, USER_DEFINED_PDU = 1000
}
 Enum which identifies each type of PDU. More...
 
typedef byte_array serialization_type
 

Public Member Functions

 DHCPv6 ()
 
 DHCPv6 (const uint8_t *buffer, uint32_t total_sz)
 Constructs a DHCPv6 object from a buffer. More...
 
MessageType msg_type () const
 Getter for the message type field. More...
 
uint8_t hop_count () const
 Getter for the hop count field. More...
 
small_uint< 24 > transaction_id () const
 Getter for the transaction id field. More...
 
const ipaddress_typepeer_address () const
 Getter for the peer address field. More...
 
const ipaddress_typelink_address () const
 Getter for the link address field. More...
 
const options_typeoptions () const
 Getter for the DHCPv6 options. More...
 
void msg_type (MessageType type)
 Setter for the message type field. More...
 
void hop_count (uint8_t count)
 Setter for the hop count field. More...
 
void transaction_id (small_uint< 24 > id)
 Setter for the transaction id field. More...
 
void peer_address (const ipaddress_type &addr)
 Setter for the peer address field. More...
 
void link_address (const ipaddress_type &addr)
 Setter for the link address field. More...
 
ia_na_type ia_na () const
 Getter for the Identity Association for Non-Temporary Addresses option. More...
 
ia_ta_type ia_ta () const
 Getter for the Identity Association for Temporary Addresses option. More...
 
ia_address_type ia_address () const
 Getter for the Identity Association Address option. More...
 
option_request_type option_request () const
 Getter for the Option Request option. More...
 
uint8_t preference () const
 Getter for the Preference option. More...
 
uint16_t elapsed_time () const
 Getter for the Elapsed Time option. More...
 
relay_msg_type relay_message () const
 Getter for the Relay Message option. More...
 
authentication_type authentication () const
 Getter for the Authentication option. More...
 
ipaddress_type server_unicast () const
 Getter for the Server Unicast option. More...
 
status_code_type status_code () const
 Getter for the Server Unicast option. More...
 
bool has_rapid_commit () const
 Getter for the Rapid Commit option. More...
 
user_class_type user_class () const
 Getter for the User Class option. More...
 
vendor_class_type vendor_class () const
 Getter for the Vendor Class option. More...
 
vendor_info_type vendor_info () const
 Getter for the Vendor-specific Information option. More...
 
interface_id_type interface_id () const
 Getter for the Interface ID option. More...
 
uint8_t reconfigure_msg () const
 Getter for the Reconfigure Message option. More...
 
bool has_reconfigure_accept () const
 Getter for the Reconfigure Accept option. More...
 
duid_type client_id () const
 Getter for the Client Identifier option. More...
 
duid_type server_id () const
 Getter for the Server Identifier option. More...
 
void ia_na (const ia_na_type &value)
 Setter for the Identity Association for Non-Temporary Addresses option. More...
 
void ia_ta (const ia_ta_type &value)
 Setter for the Identity Association for Temporary Addresses option. More...
 
void ia_address (const ia_address_type &value)
 Setter for the Identity Association Address option. More...
 
void option_request (const option_request_type &value)
 Setter for the Identity Association Address option. More...
 
void preference (uint8_t value)
 Setter for the Preference option. More...
 
void elapsed_time (uint16_t value)
 Setter for the Elapsed Time option. More...
 
void relay_message (const relay_msg_type &value)
 Setter for the Relay Message option. More...
 
void authentication (const authentication_type &value)
 Setter for the Authentication option. More...
 
void server_unicast (const ipaddress_type &value)
 Setter for the Server Unicast option. More...
 
void status_code (const status_code_type &value)
 Setter for the Status Code option. More...
 
void rapid_commit ()
 Adds a Rapid Commit option.
 
void user_class (const user_class_type &value)
 Setter for the User Class option. More...
 
void vendor_class (const vendor_class_type &value)
 Setter for the Vendor Class option. More...
 
void vendor_info (const vendor_info_type &value)
 Setter for the Vendor-specific Information option. More...
 
void interface_id (const interface_id_type &value)
 Setter for the Interface ID option. More...
 
void reconfigure_msg (uint8_t value)
 Setter for the Reconfigure Message option. More...
 
void reconfigure_accept ()
 Adds a Reconfigure Accept option.
 
void client_id (const duid_type &value)
 Setter for the Client Identifier option. More...
 
void server_id (const duid_type &value)
 Setter for the Server Identifier option. More...
 
bool is_relay_message () const
 
void add_option (const option &opt)
 Adds a DHCPv6 option. More...
 
bool remove_option (OptionTypes type)
 Removes a DHCPv6 option. More...
 
const optionsearch_option (OptionTypes type) const
 Searchs for an option that matchs the given type. 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...
 
PDUType pdu_type () const
 Getter for the PDU's type. More...
 
DHCPv6clone () const
 
- 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...
 
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 void send (PacketSender &sender, const NetworkInterface &iface)
 Send the stack of PDUs through a PacketSender. More...
 
virtual PDUrecv_response (PacketSender &sender, const NetworkInterface &iface)
 Receives a matching response for this packet. 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::DHCPv6
 
- 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 a DHCPv6 PDU.

Member Typedef Documentation

typedef std::vector<uint8_t> Tins::DHCPv6::class_option_data_type

The type used to store the User Class option's user class data.

typedef std::vector<uint8_t> Tins::DHCPv6::interface_id_type

The type used to store the Interface-ID option.

The type used to store IP addresses.

Represents a DHCPv6 option.

typedef std::vector<uint16_t> Tins::DHCPv6::option_request_type

The type used to store the Option Request option.

typedef std::vector<option> Tins::DHCPv6::options_type

The type used to store the DHCPv6 options.

typedef std::vector<uint8_t> Tins::DHCPv6::relay_msg_type

The type used to store the Relay Message option.

Member Enumeration Documentation

The message types.

The DHCPv6 options.

Constructor & Destructor Documentation

Tins::DHCPv6::DHCPv6 ( )

Default constructor.

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

Constructs a DHCPv6 object from a buffer.

If there is not enough size for the DHCPv6 header, or any of the TLV options contains an invalid size field, 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

void Tins::DHCPv6::add_option ( const option opt)

Adds a DHCPv6 option.

The option is added after the last option in the option fields.

Parameters
optThe option to be added
DHCPv6::authentication_type Tins::DHCPv6::authentication ( ) const

Getter for the Authentication option.

This method will throw an option_not_found exception if the option is not found.

void Tins::DHCPv6::authentication ( const authentication_type value)

Setter for the Authentication option.

Parameters
valueThe new Authentication option data.
DHCPv6::duid_type Tins::DHCPv6::client_id ( ) const

Getter for the Client Identifier option.

This method will throw an option_not_found exception if the option is not found.

void Tins::DHCPv6::client_id ( const duid_type value)

Setter for the Client Identifier option.

Parameters
valueThe new Client Identifier option data.
DHCPv6* Tins::DHCPv6::clone ( ) const
inlinevirtual
See Also
PDU::clone

Implements Tins::PDU.

uint16_t Tins::DHCPv6::elapsed_time ( ) const

Getter for the Elapsed Time option.

This method will throw an option_not_found exception if the option is not found.

void Tins::DHCPv6::elapsed_time ( uint16_t  value)

Setter for the Elapsed Time option.

Parameters
valueThe new Elapsed Time option data.
PDU::metadata Tins::DHCPv6::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
bool Tins::DHCPv6::has_rapid_commit ( ) const

Getter for the Rapid Commit option.

This method will throw an option_not_found exception if the option is not found.

bool Tins::DHCPv6::has_reconfigure_accept ( ) const

Getter for the Reconfigure Accept option.

This method will throw an option_not_found exception if the option is not found.

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

Returns the header size.

This method overrides PDU::header_size.

See Also
PDU::header_size

Implements Tins::PDU.

uint8_t Tins::DHCPv6::hop_count ( ) const
inline

Getter for the hop count field.

Returns
The stored hop count field.
void Tins::DHCPv6::hop_count ( uint8_t  count)

Setter for the hop count field.

Parameters
countThe new hop count.
DHCPv6::ia_address_type Tins::DHCPv6::ia_address ( ) const

Getter for the Identity Association Address option.

This method will throw an option_not_found exception if the option is not found.

void Tins::DHCPv6::ia_address ( const ia_address_type value)

Setter for the Identity Association Address option.

Parameters
valueThe new IA Address option data.
DHCPv6::ia_na_type Tins::DHCPv6::ia_na ( ) const

Getter for the Identity Association for Non-Temporary Addresses option.

This method will throw an option_not_found exception if the option is not found.

void Tins::DHCPv6::ia_na ( const ia_na_type value)

Setter for the Identity Association for Non-Temporary Addresses option.

Parameters
valueThe new IA_NA option data.
DHCPv6::ia_ta_type Tins::DHCPv6::ia_ta ( ) const

Getter for the Identity Association for Temporary Addresses option.

This method will throw an option_not_found exception if the option is not found.

void Tins::DHCPv6::ia_ta ( const ia_ta_type value)

Setter for the Identity Association for Temporary Addresses option.

Parameters
valueThe new IA_TA option data.
DHCPv6::interface_id_type Tins::DHCPv6::interface_id ( ) const

Getter for the Interface ID option.

This method will throw an option_not_found exception if the option is not found.

void Tins::DHCPv6::interface_id ( const interface_id_type value)

Setter for the Interface ID option.

Parameters
valueThe new Interface ID option data.
bool Tins::DHCPv6::is_relay_message ( ) const

Indicates whether this is a relay agent/server message

const ipaddress_type& Tins::DHCPv6::link_address ( ) const
inline

Getter for the link address field.

Returns
The stored link address field.
void Tins::DHCPv6::link_address ( const ipaddress_type addr)

Setter for the link address field.

Parameters
countThe new link address.
bool Tins::DHCPv6::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.

MessageType Tins::DHCPv6::msg_type ( ) const
inline

Getter for the message type field.

Returns
The stored message type field.
void Tins::DHCPv6::msg_type ( MessageType  type)

Setter for the message type field.

Parameters
typeThe new message type.
DHCPv6::option_request_type Tins::DHCPv6::option_request ( ) const

Getter for the Option Request option.

This method will throw an option_not_found exception if the option is not found.

void Tins::DHCPv6::option_request ( const option_request_type value)

Setter for the Identity Association Address option.

Parameters
valueThe new Option Request option data.
const options_type& Tins::DHCPv6::options ( ) const
inline

Getter for the DHCPv6 options.

Returns
The stored options.
PDUType Tins::DHCPv6::pdu_type ( ) const
inlinevirtual

Getter for the PDU's type.

See Also
PDU::pdu_type

Implements Tins::PDU.

const ipaddress_type& Tins::DHCPv6::peer_address ( ) const
inline

Getter for the peer address field.

Returns
The stored peer address field.
void Tins::DHCPv6::peer_address ( const ipaddress_type addr)

Setter for the peer address field.

Parameters
countThe new peer address.
uint8_t Tins::DHCPv6::preference ( ) const

Getter for the Preference option.

This method will throw an option_not_found exception if the option is not found.

void Tins::DHCPv6::preference ( uint8_t  value)

Setter for the Preference option.

Parameters
valueThe new Preference option data.
uint8_t Tins::DHCPv6::reconfigure_msg ( ) const

Getter for the Reconfigure Message option.

This method will throw an option_not_found exception if the option is not found.

void Tins::DHCPv6::reconfigure_msg ( uint8_t  value)

Setter for the Reconfigure Message option.

Parameters
valueThe new Reconfigure Message option data.
DHCPv6::relay_msg_type Tins::DHCPv6::relay_message ( ) const

Getter for the Relay Message option.

This method will throw an option_not_found exception if the option is not found.

void Tins::DHCPv6::relay_message ( const relay_msg_type value)

Setter for the Relay Message option.

Parameters
valueThe new Relay Message option data.
bool Tins::DHCPv6::remove_option ( OptionTypes  type)

Removes a DHCPv6 option.

If there are multiple options of the given type, only the first one will be removed.

Parameters
typeThe type of the option to be removed.
Returns
true if the option was removed, false otherwise.
const DHCPv6::option * Tins::DHCPv6::search_option ( OptionTypes  type) const

Searchs for an option that matchs the given type.

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

Parameters
typeThe option identifier to be searched.
DHCPv6::duid_type Tins::DHCPv6::server_id ( ) const

Getter for the Server Identifier option.

This method will throw an option_not_found exception if the option is not found.

void Tins::DHCPv6::server_id ( const duid_type value)

Setter for the Server Identifier option.

Parameters
valueThe new Server Identifier option data.
DHCPv6::ipaddress_type Tins::DHCPv6::server_unicast ( ) const

Getter for the Server Unicast option.

This method will throw an option_not_found exception if the option is not found.

void Tins::DHCPv6::server_unicast ( const ipaddress_type value)

Setter for the Server Unicast option.

Parameters
valueThe new Server Unicast option data.
DHCPv6::status_code_type Tins::DHCPv6::status_code ( ) const

Getter for the Server Unicast option.

This method will throw an option_not_found exception if the option is not found.

void Tins::DHCPv6::status_code ( const status_code_type value)

Setter for the Status Code option.

Parameters
valueThe new Status Code option data.
small_uint<24> Tins::DHCPv6::transaction_id ( ) const
inline

Getter for the transaction id field.

Returns
The stored transaction id field.
void Tins::DHCPv6::transaction_id ( small_uint< 24 >  id)

Setter for the transaction id field.

Parameters
idThe new transaction id.
DHCPv6::user_class_type Tins::DHCPv6::user_class ( ) const

Getter for the User Class option.

This method will throw an option_not_found exception if the option is not found.

void Tins::DHCPv6::user_class ( const user_class_type value)

Setter for the User Class option.

Parameters
valueThe new User Class option data.
DHCPv6::vendor_class_type Tins::DHCPv6::vendor_class ( ) const

Getter for the Vendor Class option.

This method will throw an option_not_found exception if the option is not found.

void Tins::DHCPv6::vendor_class ( const vendor_class_type value)

Setter for the Vendor Class option.

Parameters
valueThe new Vendor Class option data.
DHCPv6::vendor_info_type Tins::DHCPv6::vendor_info ( ) const

Getter for the Vendor-specific Information option.

This method will throw an option_not_found exception if the option is not found.

void Tins::DHCPv6::vendor_info ( const vendor_info_type value)

Setter for the Vendor-specific Information option.

Parameters
valueThe new Vendor-specific Information option data.

Member Data Documentation

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

This PDU's flag.


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