Kea 2.7.6
|
Represents DHCPv4-over-DHCPv6 packet. More...
#include <pkt4o6.h>
Public Member Functions | |
Pkt4o6 (const OptionBuffer &pkt4, const Pkt6Ptr &pkt6) | |
Constructor, used in message reception. | |
Pkt4o6 (const Pkt4Ptr &pkt4, const Pkt6Ptr &pkt6) | |
Constructor, used in replying to a message. | |
Pkt6Ptr | getPkt6 () const |
Returns encapsulating DHCPv6 message. | |
virtual bool | isDhcp4o6 () const |
Checks if a DHCPv4 message has been transported over DHCPv6. | |
virtual void | pack () |
Prepares on-wire format of DHCPv4-over-DHCPv6 packet. | |
virtual void | setCopyRetrievedOptions (const bool copy) |
Overrides the Pkt::setCopyRetrievedOptions to also set the flag for encapsulated Pkt6 instance. | |
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. | |
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. | |
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 () 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 ×tamp=PktEvent::now()) |
Adds an event to the end of the event stack. | |
void | addPktEvent (const std::string &label, const struct timeval ×tamp) |
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. | |
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 ×tamp=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 ×tamp) |
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_ |
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. | |
Represents DHCPv4-over-DHCPv6 packet.
This class derives from Pkt4
in order to be handled by the DHCPv4 server code. It includes a shared pointer to the DHCPv6 message too.
This is an implementation of the DHCPv4-query/response DHCPv6 messages defined in RFC 7341 (http://ietf.org/rfc/rfc7341.txt). See also https://gitlab.isc.org/isc-projects/kea/wikis/designs/dhcpv4o6-design for design discussions.
isc::dhcp::Pkt4o6::Pkt4o6 | ( | const OptionBuffer & | pkt4, |
const Pkt6Ptr & | pkt6 ) |
Constructor, used in message reception.
pkt4 | Content of the DHCPv4-message option |
pkt6 | encapsulating unpacked DHCPv6 message the DHCPv4 message option will be removed |
Definition at line 23 of file pkt4o6.cc.
References D6O_DHCPV4_MSG, isc::dhcp::Pkt::setIface(), isc::dhcp::Pkt::setIndex(), and isc::dhcp::Pkt::setRemoteAddr().
|
inline |
|
inlinevirtual |
Checks if a DHCPv4 message has been transported over DHCPv6.
Reimplemented from isc::dhcp::Pkt4.
|
virtual |
Prepares on-wire format of DHCPv4-over-DHCPv6 packet.
Calls pack() on both DHCPv4 and DHCPv6 parts Inserts the DHCPv4-message option Pkt4::pack and Pkt6::pack
Reimplemented from isc::dhcp::Pkt4.
Definition at line 36 of file pkt4o6.cc.
References D6O_DHCPV4_MSG, isc::dhcp::Pkt::getBuffer(), isc::util::OutputBuffer::getVector(), isc::dhcp::Pkt4::pack(), and isc::dhcp::Option::V6.
|
virtual |
Overrides the Pkt::setCopyRetrievedOptions to also set the flag for encapsulated Pkt6 instance.
When the flag is set for the instance of the Pkt4o6 the encapsulated Pkt6, retrieved with Pkt4o6::getPkt6, will inherit this setting.
copy | Indicates if the options should be copied when retrieved (if true), or not copied (if false). |
Reimplemented from isc::dhcp::Pkt.
Definition at line 49 of file pkt4o6.cc.
References isc::data::copy(), and isc::dhcp::Pkt::setCopyRetrievedOptions().