Kea 2.7.6
|
Class that represents IAPREFIX option in DHCPv6. More...
#include <option6_iaprefix.h>
Public Member Functions | |
Option6IAPrefix (uint16_t type, const isc::asiolink::IOAddress &addr, uint8_t prefix_length, uint32_t preferred, uint32_t valid) | |
Constructor, used for options constructed (during transmission). | |
Option6IAPrefix (uint32_t type, OptionBuffer::const_iterator begin, OptionBuffer::const_iterator end) | |
Constructor, used for received options. | |
virtual OptionPtr | clone () const |
Copies this option and returns a pointer to the copy. | |
uint8_t | getLength () const |
virtual uint16_t | len () const |
returns data length (data length + DHCPv4/DHCPv6 option header) | |
void | pack (isc::util::OutputBuffer &buf, bool check=true) const |
Writes option in wire-format. | |
void | setPrefix (const isc::asiolink::IOAddress &prefix, uint8_t length) |
sets address in this option. | |
virtual std::string | toText (int indent=0) const |
Returns string representation of the option. | |
virtual void | unpack (OptionBufferConstIter begin, OptionBufferConstIter end) |
Parses received buffer. | |
Public Member Functions inherited from isc::dhcp::Option6IAAddr | |
Option6IAAddr (uint16_t type, const isc::asiolink::IOAddress &addr, uint32_t preferred, uint32_t valid) | |
Constructor, used for options constructed (during transmission). | |
Option6IAAddr (uint32_t type, OptionBuffer::const_iterator begin, OptionBuffer::const_iterator end) | |
Constructor, used for received options. | |
isc::asiolink::IOAddress | getAddress () const |
Returns address contained within this option. | |
unsigned int | getPreferred () const |
Returns preferred lifetime of an address. | |
unsigned int | getValid () const |
Returns valid lifetime of an address. | |
void | setAddress (const isc::asiolink::IOAddress &addr) |
sets address in this option. | |
void | setPreferred (unsigned int pref) |
Sets preferred lifetime (in seconds) | |
void | setValid (unsigned int valid) |
Sets valid lifetime (in seconds). | |
Public Member Functions inherited from isc::dhcp::Option | |
Option (const Option &source) | |
Copy constructor. | |
Option (Universe u, uint16_t type) | |
ctor, used for options constructed, usually during transmission | |
Option (Universe u, uint16_t type, const OptionBuffer &data) | |
Constructor, used for received options. | |
Option (Universe u, uint16_t type, OptionBufferConstIter first, OptionBufferConstIter last) | |
Constructor, used for received options. | |
virtual | ~Option () |
just to force that every option has virtual dtor | |
void | addOption (OptionPtr opt) |
Adds a sub-option. | |
bool | delOption (uint16_t type) |
Attempts to delete first suboption of requested type. | |
virtual bool | equals (const Option &other) const |
Checks if two options are equal. | |
bool | equals (const OptionPtr &other) const |
Checks if options are equal. | |
virtual const OptionBuffer & | getData () const |
Returns pointer to actual data. | |
std::string | getEncapsulatedSpace () const |
Returns the name of the option space encapsulated by this option. | |
virtual uint16_t | getHeaderLen () const |
Returns length of header (2 for v4, 4 for v6) | |
OptionCollection & | getMutableOptions () |
Returns all encapsulated options. | |
OptionPtr | getOption (uint16_t type) const |
Returns shared_ptr to suboption of specific type. | |
const OptionCollection & | getOptions () const |
Returns all encapsulated options. | |
void | getOptionsCopy (OptionCollection &options_copy) const |
Performs deep copy of suboptions. | |
uint16_t | getType () const |
Returns option type (0-255 for DHCPv4, 0-65535 for DHCPv6) | |
uint16_t | getUint16 () const |
Returns content of first word. | |
uint32_t | getUint32 () const |
Returns content of first double word. | |
uint8_t | getUint8 () const |
Returns content of first byte. | |
Universe | getUniverse () const |
returns option universe (V4 or V6) | |
Option & | operator= (const Option &rhs) |
Assignment operator. | |
template<typename InputIterator > | |
void | setData (InputIterator first, InputIterator last) |
Sets content of this option from buffer. | |
void | setEncapsulatedSpace (const std::string &encapsulated_space) |
Sets the name of the option space encapsulated by this option. | |
void | setUint16 (uint16_t value) |
Sets content of this option to a single uint16 value. | |
void | setUint32 (uint32_t value) |
Sets content of this option to a single uint32 value. | |
void | setUint8 (uint8_t value) |
Sets content of this option to a single uint8 value. | |
virtual std::vector< uint8_t > | toBinary (const bool include_header=false) const |
Returns binary representation of the option. | |
virtual std::string | toHexString (const bool include_header=false) const |
Returns string containing hexadecimal representation of option. | |
virtual std::string | toString () const |
Returns string representation of the value. | |
virtual bool | valid () const |
returns if option is valid (e.g. | |
Static Public Attributes | |
static const size_t | OPTION6_IAPREFIX_LEN = 25 |
length of the fixed part of the IAPREFIX option | |
Static Public Attributes inherited from isc::dhcp::Option6IAAddr | |
static const size_t | OPTION6_IAADDR_LEN = 24 |
length of the fixed part of the IAADDR option | |
Static Public Attributes inherited from isc::dhcp::Option | |
static bool | lenient_parsing_ |
Governs whether options should be parsed less strictly. | |
static const size_t | OPTION4_HDR_LEN = 2 |
length of the usual DHCPv4 option header (there are exceptions) | |
static const size_t | OPTION6_HDR_LEN = 4 |
length of any DHCPv6 option header | |
Additional Inherited Members | |
Public Types inherited from isc::dhcp::Option | |
typedef OptionPtr | Factory(Option::Universe u, uint16_t type, const OptionBuffer &buf) |
a factory function prototype | |
enum | Universe { V4 , V6 } |
defines option universe DHCPv4 or DHCPv6 More... | |
Static Public Member Functions inherited from isc::dhcp::Option | |
static OptionPtr | create (Universe u, uint16_t type) |
Factory function creating an instance of the Option . | |
static OptionPtr | create (Universe u, uint16_t type, const OptionBuffer &data) |
Factory function creating an instance of the Option . | |
static OptionPtr | factory (Option::Universe u, uint16_t type) |
Factory function to create instance of option. | |
static OptionPtr | factory (Option::Universe u, uint16_t type, const OptionBuffer &buf) |
Factory function to create instance of option. | |
Protected Member Functions inherited from isc::dhcp::Option | |
void | check () const |
A protected method used for option correctness. | |
template<typename OptionType > | |
OptionPtr | cloneInternal () const |
Copies this option and returns a pointer to the copy. | |
std::string | headerToText (const int indent=0, const std::string &type_name="") const |
Returns option header in the textual format. | |
void | packHeader (isc::util::OutputBuffer &buf, bool check=true) const |
Store option's header in a buffer. | |
void | packOptions (isc::util::OutputBuffer &buf, bool check=true) const |
Store sub options in a buffer. | |
std::string | suboptionsToText (const int indent=0) const |
Returns collection of suboptions in the textual format. | |
void | unpackOptions (const OptionBuffer &buf) |
Builds a collection of sub options from the buffer. | |
Protected Attributes inherited from isc::dhcp::Option6IAAddr | |
isc::asiolink::IOAddress | addr_ |
contains an IPv6 address | |
unsigned int | preferred_ |
contains preferred-lifetime timer (in seconds) | |
unsigned int | valid_ |
contains valid-lifetime timer (in seconds) | |
Protected Attributes inherited from isc::dhcp::Option | |
OptionBuffer | data_ |
contains content of this data | |
std::string | encapsulated_space_ |
Name of the option space being encapsulated by this option. | |
OptionCollection | options_ |
collection for storing suboptions | |
uint16_t | type_ |
option type (0-255 for DHCPv4, 0-65535 for DHCPv6) | |
Universe | universe_ |
option universe (V4 or V6) | |
Class that represents IAPREFIX option in DHCPv6.
It is based on a similar class that handles addresses. There are major differences, though. The fields are in different order. There is also additional prefix length field.
It should be noted that to get a full prefix (2 values: base prefix, and a prefix length) 2 methods are used: getAddress() and getLength(). Although using getAddress() to obtain base prefix is somewhat counter-intuitive at first, it becomes obvious when one realizes that an address is a special case of a prefix with /128. It makes everyone's life much easier, because the base prefix doubles as a regular address in many cases, e.g. when searching for a lease.
When searching for a prefix in the database or simply comparing two prefixes for equality, it is important that only the significant parts of the prefixes are compared. It is possible that the client or a server sends a prefix which has non-significant bits (beyond prefix length) set. The server or client receiving such a prefix should be liberal and not discard this prefix. It should rather ignore the non-significant bits. Therefore the unpack() function, which parses the prefix from the wire, always sets the non-significant bits to 0 so as two prefixes received on the wire can be compared without additional processing.
Definition at line 51 of file option6_iaprefix.h.
isc::dhcp::Option6IAPrefix::Option6IAPrefix | ( | uint16_t | type, |
const isc::asiolink::IOAddress & | addr, | ||
uint8_t | prefix_length, | ||
uint32_t | preferred, | ||
uint32_t | valid ) |
Constructor, used for options constructed (during transmission).
type | option type |
addr | reference to an address |
prefix_length | length (1-128) |
preferred | address preferred lifetime (in seconds) |
valid | address valid lifetime (in seconds) |
Definition at line 29 of file option6_iaprefix.cc.
References DHCP6_OPTION_SPACE, isc_throw, and isc::dhcp::Option::setEncapsulatedSpace().
isc::dhcp::Option6IAPrefix::Option6IAPrefix | ( | uint32_t | type, |
OptionBuffer::const_iterator | begin, | ||
OptionBuffer::const_iterator | end ) |
Constructor, used for received options.
OutOfRange | if buffer is too short |
type | option type |
begin | iterator to first byte of option data |
end | iterator to end of option data (first byte after option end) |
Definition at line 41 of file option6_iaprefix.cc.
References DHCP6_OPTION_SPACE, isc::dhcp::Option::setEncapsulatedSpace(), and unpack().
|
virtual |
Copies this option and returns a pointer to the copy.
Reimplemented from isc::dhcp::Option6IAAddr.
Definition at line 49 of file option6_iaprefix.cc.
References isc::dhcp::Option::cloneInternal().
|
inline |
Definition at line 119 of file option6_iaprefix.h.
|
virtual |
returns data length (data length + DHCPv4/DHCPv6 option header)
Reimplemented from isc::dhcp::Option6IAAddr.
Definition at line 110 of file option6_iaprefix.cc.
References isc::dhcp::Option::OPTION6_HDR_LEN, OPTION6_IAPREFIX_LEN, and isc::dhcp::Option::options_.
Referenced by pack().
|
virtual |
Writes option in wire-format.
Writes option in wire-format to buf, returns pointer to first unused byte after stored option.
BadValue | if the address is not IPv6 |
buf | pointer to a buffer |
check | if set to false, allows options larger than 255 for v4 |
Reimplemented from isc::dhcp::Option6IAAddr.
Definition at line 53 of file option6_iaprefix.cc.
References isc::dhcp::Option6IAAddr::addr_, isc::dhcp::Option::getHeaderLen(), isc_throw, isc::asiolink::IOAddress::isV6(), len(), isc::dhcp::Option::packOptions(), isc::dhcp::Option6IAAddr::preferred_, isc::asiolink::IOAddress::toBytes(), isc::dhcp::Option::type_, isc::dhcp::Option6IAAddr::valid_, isc::util::OutputBuffer::writeData(), isc::util::OutputBuffer::writeUint16(), isc::util::OutputBuffer::writeUint32(), and isc::util::OutputBuffer::writeUint8().
|
inline |
sets address in this option.
prefix | prefix to be sent in this option |
length | prefix length |
Definition at line 116 of file option6_iaprefix.h.
References isc::dhcp::Option6IAAddr::addr_.
|
virtual |
Returns string representation of the option.
indent | number of spaces before printing text |
Reimplemented from isc::dhcp::Option6IAAddr.
Definition at line 99 of file option6_iaprefix.cc.
References isc::dhcp::Option6IAAddr::addr_, isc::dhcp::Option::headerToText(), isc::dhcp::Option6IAAddr::preferred_, isc::dhcp::Option::suboptionsToText(), and isc::dhcp::Option6IAAddr::valid_.
|
virtual |
Parses received buffer.
This function calls the Option6IAPrefix::mask
function to set the non-significant bits of the prefix (bits beyond the length of the prefix) to zero. See the Option6IAPrefix
class documentation for details why it is done.
OutOfRange | when buffer is shorter than 25 bytes |
begin | iterator to first byte of option data |
end | iterator to end of option data (first byte after option end) |
Reimplemented from isc::dhcp::Option6IAAddr.
Definition at line 74 of file option6_iaprefix.cc.
References isc::dhcp::Option6IAAddr::addr_, isc::asiolink::IOAddress::fromBytes(), isc_throw, OPTION6_IAPREFIX_LEN, isc::dhcp::Option6IAAddr::preferred_, isc::util::readUint32(), isc::dhcp::Option::type_, isc::dhcp::Option::unpackOptions(), and isc::dhcp::Option6IAAddr::valid_.
Referenced by Option6IAPrefix().
|
static |
length of the fixed part of the IAPREFIX option
Definition at line 55 of file option6_iaprefix.h.
Referenced by isc::dhcp::OptionDefinition::factoryIAPrefix6(), len(), and unpack().