Kea: isc::perfdhcp::PerfPkt6 Class Reference

| Kea 3.2.0-git

isc::perfdhcp::PerfPkt6 Class Reference

PerfPkt6 (DHCPv6 packet). More...

`#include <perf_pkt6.h>`

Inheritance diagram for isc::perfdhcp::PerfPkt6:
[legend]

## Public Types
typedef boost::shared_ptr< LocalizedOption > | LocalizedOptionPtr
| Localized option pointer type.
Public Types inherited from isc::dhcp::Pkt6
enum | DHCPv6Proto { UDP = 0 , TCP = 1 }
| DHCPv6 transport protocol. More...
enum | RelaySearchOrder { RELAY_SEARCH_FROM_CLIENT = 1 , RELAY_SEARCH_FROM_SERVER = 2 , RELAY_GET_FIRST = 3 , RELAY_GET_LAST = 4 }
| defines relay search pattern More...

## Public Member Functions
| PerfPkt6 (const uint8_t *buf, size_t len, size_t transid_offset=1, uint32_t transid=0)
| Constructor, used to create messages from packet template files.
size_t | getTransidOffset () const
| Returns transaction id offset in packet buffer.
bool | rawPack ()
| Prepares on-wire format from raw buffer.
bool | rawUnpack ()
| Handles limited binary packet parsing for packets with custom offsets of options and transaction id.
void | writeAt (size_t dest_pos, std::vector< uint8_t >::iterator first, std::vector< uint8_t >::iterator last)
| Replace contents of buffer with data.
template<typename T>
void | writeValueAt (size_t dest_pos, T val)
| Replace contents of buffer with value.
Public Member Functions inherited from isc::dhcp::Pkt6
| Pkt6 (const uint8_t *buf, uint32_t len, DHCPv6Proto proto=UDP)
| Constructor, used in message transmission.
| Pkt6 (uint8_t msg_type, uint32_t transid, DHCPv6Proto proto=UDP)
| Constructor, used in replying to a message.
void | addRelayInfo (const RelayInfo &relay)
| add information about one traversed relay
void | copyRelayInfo (const Pkt6Ptr &question)
| copies relay information from client's packet to server's response
OptionCollection | getAllRelayOptions (const uint16_t option_code, const RelaySearchOrder &order)
| Return first instances of a specified option.
OptionPtr | getAnyRelayOption (const uint16_t option_code, const RelaySearchOrder &order)
| Return first instance of a specified option.
DuidPtr | getClientId () const
| Retrieves the DUID from the Client Identifier option.
virtual std::string | getLabel () const
| Returns text representation of the primary packet identifiers.
const char * | getName () const
| Returns name of the DHCPv6 message.
DHCPv6Proto | getProto ()
| Returns protocol of this packet (UDP or TCP).
const isc::asiolink::IOAddress & | getRelay6LinkAddress (uint8_t relay_level) const
| return the link address field from a relay option
const isc::asiolink::IOAddress & | getRelay6PeerAddress (uint8_t relay_level) const
| return the peer address field from a relay option
OptionPtr | getRelayOption (uint16_t option_code, uint8_t nesting_level)
| Returns option inserted by relay.
OptionCollection | getRelayOptions (uint16_t option_code, uint8_t nesting_level)
| Returns options inserted by relay.
virtual uint8_t | getType () const
| Returns message type (e.g.
virtual size_t | len ()
| Returns length of the packet.
virtual void | pack ()
| Prepares on-wire format.
void | setProto (DHCPv6Proto proto=UDP)
| Sets protocol of this packet.
virtual void | setType (uint8_t type)
| Sets message type (e.g.
virtual std::string | toText (bool verbose=false) const
| Returns text representation of the packet.
virtual void | unpack ()
| Dispatch method that handles binary packet parsing.
Public Member Functions inherited from isc::dhcp::Pkt
virtual | ~Pkt ()
| Virtual destructor.
void | addAdditionalClass (const isc::dhcp::ClientClass &client_class)
| Adds a specified class to the packet's additional class list.
void | addClass (const isc::dhcp::ClientClass &client_class)
| Adds a specified class to the packet.
virtual void | addOption (const OptionPtr &opt)
| Adds an option to this packet.
void | addPktEvent (const std::string &label, const boost::posix_time::ptime &timestamp=PktEvent::now())
| Adds an event to the end of the event stack.
void | addPktEvent (const std::string &label, const struct timeval &timestamp)
| Adds an event to the end of the event stack with the timestamp specified as a struct timeval.
void | addSubClass (const isc::dhcp::ClientClass &class_def, const isc::dhcp::ClientClass &subclass)
| Adds a specified subclass to the packet.
void | clearPktEvents ()
| Discards contents of the packet event stack.
OptionCollection | cloneOptions ()
| Clones all options so that they can be safely modified.
bool | delOption (uint16_t type)
| Attempts to delete first suboption of requested type.
std::string | dumpPktEvents (bool verbose=false) const
| Creates a dump of the stack contents to a string for logging.
const ClientClasses & | getAdditionalClasses () const
| Returns the additional class list.
isc::util::OutputBuffer & | getBuffer ()
| Returns reference to output buffer.
const ClientClasses & | getClasses () const
| Returns the class set.
std::string | getIface () const
| Returns interface name.
int | getIndex () const
| Returns interface index.
const isc::asiolink::IOAddress & | getLocalAddr () const
| Returns local IP address.
uint16_t | getLocalPort () const
| Returns local UDP (and soon TCP) port.
HWAddrPtr | getMAC (uint32_t hw_addr_src)
| Returns MAC address.
OptionPtr | getOption (const uint16_t type)
| Returns the first option of specified type.
isc::dhcp::OptionCollection | getOptions (const uint16_t type)
| Returns all instances of specified type.
const std::list< PktEvent > & | getPktEvents ()
| Fetches the current event stack contents.
boost::posix_time::ptime | getPktEventTime (const std::string &label) const
| Fetches the timestamp for a given event in the stack.
const isc::asiolink::IOAddress & | getRemoteAddr () const
| Returns remote IP address.
HWAddrPtr | getRemoteHWAddr () const
| Returns the remote HW address obtained from raw sockets.
uint16_t | getRemotePort () const
| Returns remote port.
const SubClassRelationContainer & | getSubClassesRelations () const
| Returns the class set including template classes associated with subclasses.
const boost::posix_time::ptime & | getTimestamp () const
| Returns packet timestamp.
uint32_t | getTransid () const
| Returns value of transaction-id field.
bool | inClass (const isc::dhcp::ClientClass &client_class)
| Checks whether a client belongs to a given class.
bool | indexSet () const
| Checks if interface index has been set.
bool | isCopyRetrievedOptions () const
| Returns whether the copying of retrieved options is enabled.
void | repack ()
| Copies content of input buffer to output buffer.
void | resetIndex ()
| Resets interface index to negative value.
virtual void | setCopyRetrievedOptions (const bool copy)
| Controls whether the option retrieved by the Pkt::getOption should be copied before being returned.
void | setIface (const std::string &iface)
| Sets interface name.
void | setIndex (const unsigned int ifindex)
| Sets interface index.
void | setLocalAddr (const isc::asiolink::IOAddress &local)
| Sets local IP address.
void | setLocalPort (uint16_t local)
| Sets local UDP (and soon TCP) port.
void | setPktEvent (const std::string &label, const boost::posix_time::ptime &timestamp=PktEvent::now())
| Updates (or adds) an event in the event stack.
void | setRemoteAddr (const isc::asiolink::IOAddress &remote)
| Sets remote IP address.
void | setRemoteHWAddr (const HWAddrPtr &hw_addr)
| Sets remote hardware address.
void | setRemoteHWAddr (const uint8_t htype, const uint8_t hlen, const std::vector< uint8_t > &hw_addr)
| Sets remote hardware address.
void | setRemotePort (uint16_t remote)
| Sets remote UDP (and soon TCP) port.
void | setTimestamp (boost::posix_time::ptime &timestamp)
| Set socket receive timestamp.
void | setTransid (uint32_t transid)
| Sets transaction-id value.
void | updateTimestamp ()
| Update packet timestamp.
Public Member Functions inherited from isc::hooks::CalloutHandleAssociate
| CalloutHandleAssociate ()
| Constructor.
CalloutHandlePtr | getCalloutHandle ()
| Returns callout handle.
void | resetCalloutHandle ()
| Reset callout handle.

## Additional Inherited Members
Static Public Member Functions inherited from isc::dhcp::Pkt6
static const char * | getName (const uint8_t type)
| Returns name of the DHCPv6 message for a given type number.
static std::string | makeLabel (const DuidPtr duid, const HWAddrPtr &hwaddr)
| Returns text representation of the given packet identifiers.
static std::string | makeLabel (const DuidPtr duid, const uint32_t transid, const HWAddrPtr &hwaddr)
| Returns text representation of the given packet identifiers.
Public Attributes inherited from isc::dhcp::Pkt6
std::vector< RelayInfo > | relay_info_
| Relay information.
Public Attributes inherited from isc::dhcp::Pkt
ClientClasses | additional_classes_
| Classes to be evaluated during additional class evaluation.
ClientClasses | classes_
| Classes this packet belongs to.
OptionBuffer | data_
| Unparsed data (in received packets).
isc::dhcp::OptionCollection | options_
| Collection of options present in this message.
SubClassRelationContainer | subclasses_
| SubClasses this packet belongs to.
Static Public Attributes inherited from isc::dhcp::Pkt6
static const size_t | DHCPV6_PKT_HDR_LEN = 4
| specifies non-relayed DHCPv6 packet header length (over UDP)
static const size_t | DHCPV6_RELAY_HDR_LEN = 34
| specifies relay DHCPv6 packet header length (over UDP)
Protected Member Functions inherited from isc::dhcp::Pkt6
uint16_t | calculateRelaySizes ()
| Calculates overhead for all relays defined for this message.
uint16_t | directLen () const
| Calculates size of the message as if it was not relayed at all.
virtual HWAddrPtr | getMACFromDocsisCMTS ()
| Attempts to extract MAC/Hardware address from DOCSIS options.
virtual HWAddrPtr | getMACFromDocsisModem ()
| Attempts to extract MAC/Hardware address from DOCSIS options inserted by the modem itself.
virtual HWAddrPtr | getMACFromDUID ()
| Extract MAC/Hardware address from client-id.
virtual HWAddrPtr | getMACFromIPv6RelayOpt ()
| Extract MAC/Hardware address from client link-layer address.
virtual HWAddrPtr | getMACFromRemoteIdRelayOption ()
| Attempts to obtain MAC address from remote-id relay option.
virtual HWAddrPtr | getMACFromSrcLinkLocalAddr ()
| Attempts to generate MAC/Hardware address from IPv6 link-local address.
OptionCollection | getNonCopiedAllRelayOptions (const uint16_t option_code, const RelaySearchOrder &order) const
| Returns pointers to instances of specified option.
OptionPtr | getNonCopiedAnyRelayOption (const uint16_t option_code, const RelaySearchOrder &order) const
| Returns pointer to an instance of specified option.
OptionPtr | getNonCopiedRelayOption (const uint16_t opt_type, const uint8_t relay_level) const
| Returns pointer to an option inserted by relay agent.
OptionCollection | getNonCopiedRelayOptions (const uint16_t opt_type, const uint8_t relay_level) const
| Returns all option instances inserted by relay agent.
uint16_t | getRelayOverhead (const RelayInfo &relay) const
| Calculates overhead introduced in specified relay.
void | packTCP ()
| Builds on wire packet for TCP transmission.
void | packUDP ()
| Builds on wire packet for UDP transmission.
void | unpackMsg (OptionBuffer::const_iterator begin, OptionBuffer::const_iterator end)
| Unpacks direct (non-relayed) message.
void | unpackRelayMsg ()
| Unpacks relayed message (RELAY-FORW or RELAY-REPL).
void | unpackTCP ()
| Parses on-wire form of TCP DHCPv6 packet.
void | unpackUDP ()
| Parses on-wire form of UDP DHCPv6 packet.
Protected Member Functions inherited from isc::dhcp::Pkt
| Pkt (const uint8_t *buf, uint32_t len, const isc::asiolink::IOAddress &local_addr, const isc::asiolink::IOAddress &remote_addr, uint16_t local_port, uint16_t remote_port)
| Constructor.
| Pkt (uint32_t transid, const isc::asiolink::IOAddress &local_addr, const isc::asiolink::IOAddress &remote_addr, uint16_t local_port, uint16_t remote_port)
| Constructor.
HWAddrPtr | getMACFromIPv6 (const isc::asiolink::IOAddress &addr)
| Attempts to convert IPv6 address into MAC.
OptionPtr | getNonCopiedOption (const uint16_t type) const
| Returns the first option of specified type without copying.
OptionCollection | getNonCopiedOptions (const uint16_t opt_type) const
| Returns all option instances of specified type without copying.
Protected Attributes inherited from isc::dhcp::Pkt6
uint8_t | msg_type_
| DHCPv6 message type.
DHCPv6Proto | proto_
| UDP (usually) or TCP (bulk leasequery or failover).
Protected Attributes inherited from isc::dhcp::Pkt
isc::util::OutputBuffer | buffer_out_
| Output buffer (used during message transmission).
bool | copy_retrieved_options_
| Indicates if a copy of the retrieved option should be returned when Pkt::getOption is called.
std::string | iface_
| Name of the network interface the packet was received/to be sent over.
unsigned int | ifindex_
| Interface index.
isc::asiolink::IOAddress | local_addr_
| Local IP (v4 or v6) address.
uint16_t | local_port_
| local TDP or UDP port
isc::asiolink::IOAddress | remote_addr_
| Remote IP address.
HWAddrPtr | remote_hwaddr_
uint16_t | remote_port_
| remote TCP or UDP port
boost::posix_time::ptime | timestamp_
| packet timestamp
uint32_t | transid_
| Transaction-id (32 bits for v4, 24 bits for v6).
Protected Attributes inherited from isc::hooks::CalloutHandleAssociate
CalloutHandlePtr | callout_handle_
| Callout handle stored.

## Detailed Description

PerfPkt6 (DHCPv6 packet).

This class extends the functionality of isc::dhcp::Pkt6 by adding the ability to specify an options offset in the DHCP message and so override the options' contents. This is particularly useful when we create a packet object using a template file (i.e. do not build it dynamically). The client class should read the data from the template file and pass it to this class as a buffer.

The contents of such packet can be later partially replaced: in particular, selected options and the transaction ID can be altered. (The transaction ID and its offset in the template file is passed via the constructor.)

In order to replace the contents of options, the client class has to create a collection of LocalizedOption by adding them using dhcp::Pkt6::addOption.

Note
  If you don't use template files, simply use constructors inherited from parent class and the isc::dhcp::Option type instead.

Definition at line 41 of file perf_pkt6.h.

## Member Typedef Documentation

## ◆ LocalizedOptionPtr

typedef boost::shared_ptr<LocalizedOption> isc::perfdhcp::PerfPkt6::LocalizedOptionPtr

Localized option pointer type.

Definition at line 45 of file perf_pkt6.h.

## Constructor & Destructor Documentation

## ◆ PerfPkt6()

isc::perfdhcp::PerfPkt6::PerfPkt6 | ( | const uint8_t * | buf,
|  | size_t | len,
|  | size_t | transid_offset = 1,
|  | uint32_t | transid = 0 )

Constructor, used to create messages from packet template files.

Creates a new DHCPv6 message using the provided buffer. The transaction ID and its offset are specified via this constructor. The transaction ID is stored in outgoing message when client class calls PerfPkt6::rawPack. Transaction id offset value is used for incoming and outgoing messages to identify transaction ID field's position in incoming and outgoing messages.

Parameters

  buf | buffer holding contents of the message (this can be directly read from template file).
  len | length of the data in the buffer.
  transid_offset | transaction id offset in a message.
  transid | transaction id to be stored in outgoing message.

Definition at line 25 of file perf_pkt6.cc.

References isc::dhcp::Pkt6::Pkt6(), isc::dhcp::Pkt6::len(), isc::dhcp::Pkt::setTransid(), and isc::dhcp::Pkt6::UDP.

Here is the call graph for this function:

## Member Function Documentation

## ◆ getTransidOffset()

size_t isc::perfdhcp::PerfPkt6::getTransidOffset | ( |  | ) | const
| inline

Returns transaction id offset in packet buffer.

Returns
  Transaction ID offset in the packet buffer.

Definition at line 71 of file perf_pkt6.h.

Referenced by rawPack(), and rawUnpack().

## ◆ rawPack()

bool isc::perfdhcp::PerfPkt6::rawPack | ( |  | ) |

Prepares on-wire format from raw buffer.

The method copies the buffer provided in constructor to the output buffer and replaces the transaction ID and selected options with new data.

Note
  Use this method to prepare an on-wire DHCPv6 message when you use template packets that require replacement of selected options' contents before sending.

Returns
  false ID pack operation failed.

Definition at line 35 of file perf_pkt6.cc.

References isc::dhcp::Pkt::buffer_out_, isc::dhcp::Pkt::data_, isc::dhcp::Pkt::getTransid(), getTransidOffset(), isc::dhcp::Pkt::options_, isc::perfdhcp::PktTransform::pack(), and isc::dhcp::Option::V6.

Here is the call graph for this function:

## ◆ rawUnpack()

bool isc::perfdhcp::PerfPkt6::rawUnpack | ( |  | ) |

Handles limited binary packet parsing for packets with custom offsets of options and transaction id.

This method handles the parsing of packets that have custom offsets of options or transaction ID. Use isc::dhcp::Pkt4::addOption to specify which options to parse. Options should be of the isc::perfdhcp::LocalizedOption type with offset values provided. Each added option will be updated with actual data read from the binary packet buffer.

Returns
  false if unpack operation failed.

Definition at line 45 of file perf_pkt6.cc.

References isc::dhcp::Pkt::data_, isc::dhcp::Pkt::getTransid(), getTransidOffset(), isc::dhcp::Pkt::options_, isc::dhcp::Pkt::setTransid(), isc::perfdhcp::PktTransform::unpack(), and isc::dhcp::Option::V6.

Here is the call graph for this function:

## ◆ writeAt()

void isc::perfdhcp::PerfPkt6::writeAt | ( | size_t | dest_pos,
|  | std::vector< uint8_t >::iterator | first,
|  | std::vector< uint8_t >::iterator | last )

Replace contents of buffer with data.

Function replaces part of the buffer with data from vector.

Parameters

  dest_pos | position in buffer where data is replaced.
  first | beginning of data range in source vector.
  last | end of data range in source vector.

Definition at line 59 of file perf_pkt6.cc.

References isc::dhcp::Pkt::data_, and isc::perfdhcp::PktTransform::writeAt().

Here is the call graph for this function:

## ◆ writeValueAt()

template<typename T>

void isc::perfdhcp::PerfPkt6::writeValueAt | ( | size_t | dest_pos,
|  | T | val )
| inline

Replace contents of buffer with value.

Function replaces part of buffer with value.

Parameters

  dest_pos | position in buffer where value is to be written.
  val | value to be written.

Definition at line 118 of file perf_pkt6.h.

References isc::dhcp::Pkt::data_, and isc::perfdhcp::PktTransform::writeValueAt().

Here is the call graph for this function:

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

- perf_pkt6.h
- perf_pkt6.cc