Kea: isc::perfdhcp::PerfPkt4 Class Reference

| Kea 3.2.0-git

isc::perfdhcp::PerfPkt4 Class Reference

PerfPkt4 (DHCPv4 packet). More...

`#include <perf_pkt4.h>`

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

## Public Types
typedef boost::shared_ptr< LocalizedOption > | LocalizedOptionPtr
| Localized option pointer type.

## Public Member Functions
| PerfPkt4 (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::Pkt4
| Pkt4 (const uint8_t *data, size_t len)
| Constructor, used in message reception.
| Pkt4 (uint8_t msg_type, uint32_t transid)
| Constructor, used in replying to a message.
virtual void | addOption (const OptionPtr &opt)
| Add an option.
const isc::asiolink::IOAddress & | getCiaddr () const
| Returns ciaddr field.
std::list< uint16_t > & | getDeferredOptions ()
| Returns a reference to option codes which unpacking will be deferred.
const OptionBuffer | getFile () const
| Returns file field.
uint16_t | getFlags () const
| Returns flags field.
const isc::asiolink::IOAddress & | getGiaddr () const
| Returns giaddr field.
uint8_t | getHlen () const
| Returns hlen field.
uint8_t | getHops () const
| Returns hops field.
uint8_t | getHtype () const
| Returns htype field.
HWAddrPtr | getHWAddr () const
| returns hardware address information
std::string | getHWAddrLabel () const
| Returns text representation of the hardware address.
std::string | getLabel () const
| Returns text representation of the primary packet identifiers.
HWAddrPtr | getLocalHWAddr () const
| Returns local HW address.
const char * | getName () const
| Returns name of the DHCP message.
uint8_t | getOp () const
| Returns op field.
uint16_t | getSecs () const
| Returns secs field.
const isc::asiolink::IOAddress & | getSiaddr () const
| Returns siaddr field.
const OptionBuffer | getSname () const
| Returns sname field.
uint8_t | getType () const
| Returns DHCP message type (e.g.
const isc::asiolink::IOAddress & | getYiaddr () const
| Returns yiaddr field.
virtual bool | isDhcp4o6 () const
| Checks if a DHCPv4 message has been transported over DHCPv6.
bool | isRelayed () const
| Checks if a DHCPv4 message has been relayed.
size_t | len ()
| Returns the size of the required buffer to build the packet.
virtual void | pack ()
| Prepares on-wire format of DHCPv4 packet.
void | setCiaddr (const isc::asiolink::IOAddress &ciaddr)
| Sets ciaddr field.
void | setFile (const uint8_t *file, size_t file_len)
| Sets file field.
void | setFlags (uint16_t flags)
| Sets flags field.
void | setGiaddr (const isc::asiolink::IOAddress &giaddr)
| Sets giaddr field.
void | setHops (uint8_t hops)
| Sets hops field.
void | setHWAddr (const HWAddrPtr &addr)
| Sets hardware address.
void | setHWAddr (uint8_t htype, uint8_t hlen, const std::vector< uint8_t > &mac_addr)
| Sets hardware address.
void | setLocalHWAddr (const HWAddrPtr &addr)
| Sets local HW address.
void | setLocalHWAddr (const uint8_t htype, const uint8_t hlen, const std::vector< uint8_t > &mac_addr)
| Sets local HW address.
void | setSecs (uint16_t secs)
| Sets secs field.
void | setSiaddr (const isc::asiolink::IOAddress &siaddr)
| Sets siaddr field.
void | setSname (const uint8_t *sname, size_t sname_len)
| Sets sname field.
void | setType (uint8_t type)
| Sets DHCP message type (e.g.
void | setYiaddr (const isc::asiolink::IOAddress &yiaddr)
| Sets yiaddr field.
std::string | toText (bool verbose=false) const
| Returns text representation of the packet.
virtual void | unpack ()
| Parses on-wire form of DHCPv4 packet.
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.
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::Pkt4
static const char * | getName (const uint8_t type)
| Returns name of the DHCP message for a given type number.
static std::string | makeLabel (const HWAddrPtr &hwaddr, const ClientIdPtr &client_id)
| Returns text representation of the given packet identifiers.
static std::string | makeLabel (const HWAddrPtr &hwaddr, const ClientIdPtr &client_id, const uint32_t transid)
| Returns text representation of the given packet identifiers.
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::Pkt4
static const size_t | DHCPV4_PKT_HDR_LEN = 236
| specifies DHCPv4 packet header length (fixed part)
static const uint16_t | FLAG_BROADCAST_MASK = 0x8000
| Mask for the value of flags field in the DHCPv4 message to check whether client requested broadcast response.
static const size_t | MAX_CHADDR_LEN = 16
| length of the CHADDR field in DHCPv4 message
static const size_t | MAX_FILE_LEN = 128
| length of the FILE field in DHCPv4 message
static const size_t | MAX_SNAME_LEN = 64
| length of the SNAME field in DHCPv4 message
Protected Member Functions inherited from isc::dhcp::Pkt4
uint8_t | DHCPTypeToBootpType (uint8_t dhcpType)
| converts DHCP message type to BOOTP op type
virtual HWAddrPtr | getMACFromDocsisCMTS ()
| No-op.
virtual HWAddrPtr | getMACFromDocsisModem ()
| No-op.
virtual HWAddrPtr | getMACFromDUID ()
| No-op.
virtual HWAddrPtr | getMACFromIPv6RelayOpt ()
| No-op.
virtual HWAddrPtr | getMACFromRemoteIdRelayOption ()
| No-op.
virtual HWAddrPtr | getMACFromSrcLinkLocalAddr ()
| No-op.
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::Pkt4
isc::asiolink::IOAddress | ciaddr_
| ciaddr field (32 bits): Client's IP address
std::list< uint16_t > | deferred_options_
| List of deferred option codes.
uint8_t | file_ [MAX_FILE_LEN]
| file field (128 bytes)
uint16_t | flags_
| flags
isc::asiolink::IOAddress | giaddr_
| giaddr field (32 bits): Gateway IP address
uint8_t | hops_
| Number of relay agents traversed.
HWAddrPtr | hwaddr_
| link-layer address and hardware information represents 3 fields: htype (hardware type, 1 byte), hlen (length of the hardware address, up to 16) and chaddr (hardware address field, 16 bytes)
HWAddrPtr | local_hwaddr_
| local HW address (dst if receiving packet, src if sending packet)
uint8_t | op_
| message operation code
uint16_t | secs_
| elapsed (number of seconds since beginning of transmission)
isc::asiolink::IOAddress | siaddr_
| siaddr field (32 bits): next server IP address in boot process(e.g.TFTP)
uint8_t | sname_ [MAX_SNAME_LEN]
| sname field (64 bytes)
isc::asiolink::IOAddress | yiaddr_
| yiaddr field (32 bits): Client's IP address ("your"), set by server
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

PerfPkt4 (DHCPv4 packet).

This class extends the functionality of isc::dhcp::Pkt4 by adding the ability to specify an options offset in the DHCP message and to override 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 data from the template file and pass it to this class in a buffer.

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

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

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

Definition at line 42 of file perf_pkt4.h.

## Member Typedef Documentation

## ◆ LocalizedOptionPtr

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

Localized option pointer type.

Definition at line 46 of file perf_pkt4.h.

## Constructor & Destructor Documentation

## ◆ PerfPkt4()

isc::perfdhcp::PerfPkt4::PerfPkt4 | ( | 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 DHCPv4 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 PerfPkt4::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 21 of file perf_pkt4.cc.

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

Here is the call graph for this function:

## Member Function Documentation

## ◆ getTransidOffset()

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

Returns transaction id offset in packet buffer.

Returns
  Transaction ID offset in packet buffer

Definition at line 72 of file perf_pkt4.h.

Referenced by rawPack(), and rawUnpack().

## ◆ rawPack()

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

Prepares on-wire format from raw buffer.

The method copies the buffer provided in the 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 DHCPv4 message when you use template packets that require replacement of selected options' contents before sending.

Returns
  false ID pack operation failed.

Definition at line 31 of file perf_pkt4.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::V4.

Here is the call graph for this function:

## ◆ rawUnpack()

bool isc::perfdhcp::PerfPkt4::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 41 of file perf_pkt4.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::V4.

Here is the call graph for this function:

## ◆ writeAt()

void isc::perfdhcp::PerfPkt4::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 55 of file perf_pkt4.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::PerfPkt4::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 119 of file perf_pkt4.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_pkt4.h
- perf_pkt4.cc