Kea 2.5.8
isc::dhcp::Option6IAPrefix Class Reference

Class that represents IAPREFIX option in DHCPv6. More...

#include <option6_iaprefix.h>

+ Inheritance diagram for isc::dhcp::Option6IAPrefix:

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.
 
virtual OptionPtr clone () const
 Copies this option and returns a pointer to the copy.
 
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.
 
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 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).
 
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::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.
 
virtual OptionPtr clone () const
 Copies this option and returns a pointer to the copy.
 
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 OptionBuffergetData () 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)
 
OptionCollectiongetMutableOptions ()
 Returns all encapsulated options.
 
OptionPtr getOption (uint16_t type) const
 Returns shared_ptr to suboption of specific type.
 
const OptionCollectiongetOptions () 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)
 
virtual uint16_t len () const
 Returns length of the complete option (data length + DHCPv4/DHCPv6 option header)
 
Optionoperator= (const Option &rhs)
 Assignment operator.
 
virtual void pack (isc::util::OutputBuffer &buf, bool check=true) const
 Writes option in wire-format to a buffer.
 
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 std::string toText (int indent=0) const
 Returns string representation of the option.
 
virtual void unpack (OptionBufferConstIter begin, OptionBufferConstIter end)
 Parses received buffer.
 
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)
 

Detailed Description

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.

Todo:
Currently, the constructor which creates the option from the textual format doesn't set non-significant bits to 0. This is because it is assumed that the prefixes from the string are created locally (not received over the wire) and should be validated before the option is created. If we wanted to set non-significant bits to 0 when the prefix is created from the textual format it would have some performance implications, because the option would need to be turned into wire format, appropriate bits set to 0 and then option would need to be created again from the wire format. We may consider doing it if we find a use case where it is required.

Definition at line 51 of file option6_iaprefix.h.

Constructor & Destructor Documentation

◆ Option6IAPrefix() [1/2]

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).

Parameters
typeoption type
addrreference to an address
prefix_lengthlength (1-128)
preferredaddress preferred lifetime (in seconds)
validaddress valid lifetime (in seconds)

Definition at line 29 of file option6_iaprefix.cc.

References DHCP6_OPTION_SPACE, isc_throw, and isc::dhcp::Option::setEncapsulatedSpace().

+ Here is the call graph for this function:

◆ Option6IAPrefix() [2/2]

isc::dhcp::Option6IAPrefix::Option6IAPrefix ( uint32_t  type,
OptionBuffer::const_iterator  begin,
OptionBuffer::const_iterator  end 
)

Constructor, used for received options.

Exceptions
OutOfRangeif buffer is too short
Parameters
typeoption type
beginiterator to first byte of option data
enditerator 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().

+ Here is the call graph for this function:

Member Function Documentation

◆ clone()

OptionPtr isc::dhcp::Option6IAPrefix::clone ( ) const
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.

◆ getLength()

uint8_t isc::dhcp::Option6IAPrefix::getLength ( ) const
inline

Definition at line 119 of file option6_iaprefix.h.

◆ len()

uint16_t isc::dhcp::Option6IAPrefix::len ( ) const
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().

◆ pack()

void isc::dhcp::Option6IAPrefix::pack ( isc::util::OutputBuffer buf,
bool  check = true 
) const
virtual

Writes option in wire-format.

Writes option in wire-format to buf, returns pointer to first unused byte after stored option.

Exceptions
BadValueif the address is not IPv6
Parameters
bufpointer to a buffer
checkif 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().

+ Here is the call graph for this function:

◆ setPrefix()

void isc::dhcp::Option6IAPrefix::setPrefix ( const isc::asiolink::IOAddress prefix,
uint8_t  length 
)
inline

sets address in this option.

Parameters
prefixprefix to be sent in this option
lengthprefix length

Definition at line 116 of file option6_iaprefix.h.

References isc::dhcp::Option6IAAddr::addr_.

◆ toText()

std::string isc::dhcp::Option6IAPrefix::toText ( int  indent = 0) const
virtual

Returns string representation of the option.

Parameters
indentnumber of spaces before printing text
Returns
string with text representation.

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_.

+ Here is the call graph for this function:

◆ unpack()

void isc::dhcp::Option6IAPrefix::unpack ( OptionBufferConstIter  begin,
OptionBufferConstIter  end 
)
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.

Exceptions
OutOfRangewhen buffer is shorter than 25 bytes
Parameters
beginiterator to first byte of option data
enditerator 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().

+ Here is the call graph for this function:

Member Data Documentation

◆ OPTION6_IAPREFIX_LEN

const size_t isc::dhcp::Option6IAPrefix::OPTION6_IAPREFIX_LEN = 25
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().


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