Kea  2.5.2
isc::dhcp::Option6Dnr Class Reference

Represents DHCPv6 Encrypted DNS Option (code 144). More...

#include <option6_dnr.h>

+ Inheritance diagram for isc::dhcp::Option6Dnr:

Public Member Functions

 Option6Dnr (const uint16_t service_priority, const std::string &adn)
 Constructor of the Option in ADN only mode. More...
 
 Option6Dnr (const uint16_t service_priority, const std::string &adn, const Option6Dnr::AddressContainer &ip_addresses, const std::string &svc_params)
 Constructor of the Option with all fields from params. More...
 
 Option6Dnr (OptionBufferConstIter begin, OptionBufferConstIter end)
 Constructor of the Option from on-wire data. More...
 
OptionPtr clone () const override
 Copies this option and returns a pointer to the copy. More...
 
uint16_t len () const override
 Returns length of the complete option (data length + DHCPv4/DHCPv6 option header) More...
 
void pack (util::OutputBuffer &buf, bool check=false) const override
 Writes option in wire-format to a buffer. More...
 
void packAddresses (isc::util::OutputBuffer &buf) const override
 Writes the IP address(es) in the wire format into a buffer. More...
 
std::string toText (int indent=0) const override
 Returns string representation of the option. More...
 
void unpack (OptionBufferConstIter begin, OptionBufferConstIter end) override
 Parses received wire data buffer. More...
 
void unpackAddresses (OptionBufferConstIter &begin, OptionBufferConstIter end) override
 Unpacks IP address(es) from wire data and stores it/them in ip_addresses_. More...
 
- Public Member Functions inherited from isc::dhcp::Option
 Option (const Option &source)
 Copy constructor. More...
 
 Option (Universe u, uint16_t type)
 ctor, used for options constructed, usually during transmission More...
 
 Option (Universe u, uint16_t type, const OptionBuffer &data)
 Constructor, used for received options. More...
 
 Option (Universe u, uint16_t type, OptionBufferConstIter first, OptionBufferConstIter last)
 Constructor, used for received options. More...
 
virtual ~Option ()
 just to force that every option has virtual dtor More...
 
void addOption (OptionPtr opt)
 Adds a sub-option. More...
 
bool delOption (uint16_t type)
 Attempts to delete first suboption of requested type. More...
 
virtual bool equals (const Option &other) const
 Checks if two options are equal. More...
 
bool equals (const OptionPtr &other) const
 Checks if options are equal. More...
 
virtual const OptionBuffergetData () const
 Returns pointer to actual data. More...
 
std::string getEncapsulatedSpace () const
 Returns the name of the option space encapsulated by this option. More...
 
virtual uint16_t getHeaderLen () const
 Returns length of header (2 for v4, 4 for v6) More...
 
OptionCollectiongetMutableOptions ()
 Returns all encapsulated options. More...
 
OptionPtr getOption (uint16_t type) const
 Returns shared_ptr to suboption of specific type. More...
 
const OptionCollectiongetOptions () const
 Returns all encapsulated options. More...
 
void getOptionsCopy (OptionCollection &options_copy) const
 Performs deep copy of suboptions. More...
 
uint16_t getType () const
 Returns option type (0-255 for DHCPv4, 0-65535 for DHCPv6) More...
 
uint16_t getUint16 () const
 Returns content of first word. More...
 
uint32_t getUint32 () const
 Returns content of first double word. More...
 
uint8_t getUint8 () const
 Returns content of first byte. More...
 
Universe getUniverse () const
 returns option universe (V4 or V6) More...
 
Optionoperator= (const Option &rhs)
 Assignment operator. More...
 
template<typename InputIterator >
void setData (InputIterator first, InputIterator last)
 Sets content of this option from buffer. More...
 
void setEncapsulatedSpace (const std::string &encapsulated_space)
 Sets the name of the option space encapsulated by this option. More...
 
void setUint16 (uint16_t value)
 Sets content of this option to a single uint16 value. More...
 
void setUint32 (uint32_t value)
 Sets content of this option to a single uint32 value. More...
 
void setUint8 (uint8_t value)
 Sets content of this option to a single uint8 value. More...
 
virtual std::vector< uint8_t > toBinary (const bool include_header=false) const
 Returns binary representation of the option. More...
 
virtual std::string toHexString (const bool include_header=false) const
 Returns string containing hexadecimal representation of option. More...
 
virtual std::string toString () const
 Returns string representation of the value. More...
 
virtual bool valid () const
 returns if option is valid (e.g. More...
 
- Public Member Functions inherited from isc::dhcp::DnrInstance
 DnrInstance (Option::Universe universe)
 Constructor of the empty DNR Instance. More...
 
 DnrInstance (Option::Universe universe, uint16_t service_priority, const std::string &adn)
 Constructor of the DNR Instance in ADN only mode. More...
 
 DnrInstance (Option::Universe universe, uint16_t service_priority, const std::string &adn, const AddressContainer &ip_addresses, const std::string &svc_params)
 Constructor of the DNR Instance with all fields from params. More...
 
virtual ~DnrInstance ()=default
 Default destructor. More...
 
void addIpAddress (const asiolink::IOAddress &ip_address)
 Adds IP address to ip_addresses_ container. More...
 
void checkFields ()
 Checks IP address(es) field if data is correct and throws in case of issue found. More...
 
void checkSvcParams (bool from_wire_data=true)
 Checks SvcParams field if encoded correctly and throws in case of issue found. More...
 
AddressContainer getAddresses () const
 Returns vector with addresses. More...
 
uint16_t getAddrLength () const
 Getter of the addr_length_. More...
 
uint8_t getAddrLengthSize () const
 Returns size in octets of Addr Length field. More...
 
std::string getAdnAsText () const
 Returns the Authentication domain name in the text format. More...
 
uint16_t getAdnLength () const
 Getter of the adn_length_. More...
 
uint8_t getAdnLengthSize () const
 Returns size in octets of ADN Length field. More...
 
std::string getDnrInstanceAsText () const
 Returns string representation of the DNR instance. More...
 
uint16_t getDnrInstanceDataLength () const
 Getter of the dnr_instance_data_length_. More...
 
uint8_t getDnrInstanceDataLengthSize () const
 Returns size in octets of DNR Instance Data Length field. More...
 
std::string getLogPrefix () const
 Returns Log prefix depending on V4/V6 Option universe. More...
 
uint8_t getMinimalLength () const
 Returns minimal length of the DNR instance data (without headers) in octets. More...
 
uint16_t getServicePriority () const
 Getter of the service_priority_. More...
 
const std::string & getSvcParams () const
 Getter of the svc_params_ field. More...
 
uint16_t getSvcParamsLength () const
 Getter of the svc_params_length_. More...
 
bool isAdnOnlyMode () const
 Returns whether ADN only mode is enabled or disabled. More...
 
void packAdn (isc::util::OutputBuffer &buf) const
 Writes the ADN FQDN in the wire format into a buffer. More...
 
void packSvcParams (isc::util::OutputBuffer &buf) const
 Writes the Service Parameters in the wire format into a buffer. More...
 
void setAdn (const std::string &adn)
 Sets Authentication domain name from given string. More...
 
void setAdnOnlyMode (bool adn_only_mode)
 Setter of the adn_only_mode_ field. More...
 
void unpackAdn (OptionBufferConstIter &begin, OptionBufferConstIter end)
 Unpacks the ADN from given wire data buffer and stores it in adn_ field. More...
 
void unpackDnrInstanceDataLength (OptionBufferConstIter &begin, OptionBufferConstIter end)
 Unpacks DNR Instance Data Length from wire data buffer and stores it in dnr_instance_data_length_. More...
 
void unpackServicePriority (OptionBufferConstIter &begin)
 Unpacks Service Priority from wire data buffer and stores it in service_priority_. More...
 
void unpackSvcParams (OptionBufferConstIter &begin, OptionBufferConstIter end)
 Unpacks Service Parameters from wire data buffer and stores it in svc_params_. More...
 

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 More...
 
enum  Universe { V4 , V6 }
 defines option universe DHCPv4 or DHCPv6 More...
 
- Public Types inherited from isc::dhcp::DnrInstance
typedef std::vector< isc::asiolink::IOAddressAddressContainer
 A Type defined for container holding IP addresses. 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. More...
 
static OptionPtr create (Universe u, uint16_t type, const OptionBuffer &data)
 Factory function creating an instance of the Option. More...
 
static OptionPtr factory (Option::Universe u, uint16_t type)
 Factory function to create instance of option. More...
 
static OptionPtr factory (Option::Universe u, uint16_t type, const OptionBuffer &buf)
 Factory function to create instance of option. More...
 
- Static Public Attributes inherited from isc::dhcp::Option
static bool lenient_parsing_
 Governs whether options should be parsed less strictly. More...
 
static const size_t OPTION4_HDR_LEN = 2
 length of the usual DHCPv4 option header (there are exceptions) More...
 
static const size_t OPTION6_HDR_LEN = 4
 length of any DHCPv6 option header More...
 
- Static Public Attributes inherited from isc::dhcp::DnrInstance
static const std::unordered_set< std::string > FORBIDDEN_SVC_PARAMS = {"ipv4hint", "ipv6hint"}
 Set of forbidden SvcParams. More...
 
static const uint8_t SERVICE_PRIORITY_SIZE = 2
 Size in octets of Service Priority field. More...
 
- Protected Member Functions inherited from isc::dhcp::Option
void check () const
 A protected method used for option correctness. More...
 
template<typename OptionType >
OptionPtr cloneInternal () const
 Copies this option and returns a pointer to the copy. More...
 
std::string headerToText (const int indent=0, const std::string &type_name="") const
 Returns option header in the textual format. More...
 
void packHeader (isc::util::OutputBuffer &buf, bool check=true) const
 Store option's header in a buffer. More...
 
void packOptions (isc::util::OutputBuffer &buf, bool check=true) const
 Store sub options in a buffer. More...
 
std::string suboptionsToText (const int indent=0) const
 Returns collection of suboptions in the textual format. More...
 
void unpackOptions (const OptionBuffer &buf)
 Builds a collection of sub options from the buffer. More...
 
- Protected Member Functions inherited from isc::dhcp::DnrInstance
uint16_t dnrInstanceLen () const
 Calculates and returns length of DNR Instance data in octets. More...
 
- Protected Attributes inherited from isc::dhcp::Option
OptionBuffer data_
 contains content of this data More...
 
std::string encapsulated_space_
 Name of the option space being encapsulated by this option. More...
 
OptionCollection options_
 collection for storing suboptions More...
 
uint16_t type_
 option type (0-255 for DHCPv4, 0-65535 for DHCPv6) More...
 
Universe universe_
 option universe (V4 or V6) More...
 
- Protected Attributes inherited from isc::dhcp::DnrInstance
uint16_t addr_length_
 Length of included IP addresses in octets. More...
 
boost::shared_ptr< isc::dns::Nameadn_
 Authentication domain name field of variable length. More...
 
uint16_t adn_length_
 Length of the authentication-domain-name data in octets. More...
 
bool adn_only_mode_
 Flag stating whether ADN only mode is used or not. More...
 
uint16_t dnr_instance_data_length_
 Length of all following data inside this DNR instance in octets. More...
 
AddressContainer ip_addresses_
 Vector container holding one or more IP addresses. More...
 
uint16_t service_priority_
 The priority of this instance compared to other DNR instances. More...
 
std::string svc_params_
 Service Parameters (SvcParams) (variable length). More...
 
uint16_t svc_params_length_
 Length of Service Parameters field in octets. More...
 
Option::Universe universe_
 Either V4 or V6 Option universe. More...
 

Detailed Description

Represents DHCPv6 Encrypted DNS Option (code 144).

This option has been defined in the draft-ietf-add-dnr (to be replaced with published RFC) and it has a following structure:

  • option-code = 144 (2 octets)
  • option-len (2 octets)
  • Service Priority (2 octets)
  • ADN Length (2 octets)
  • Authentication Domain Name (variable length)
  • Addr Length (2 octets)
  • IPv6 Address(es) (variable length)
  • Service Parameters (variable length).

Definition at line 27 of file option6_dnr.h.

Constructor & Destructor Documentation

◆ Option6Dnr() [1/3]

isc::dhcp::Option6Dnr::Option6Dnr ( OptionBufferConstIter  begin,
OptionBufferConstIter  end 
)

Constructor of the Option from on-wire data.

This constructor creates an instance of the option using a buffer with on-wire data. It may throw an exception if the unpack method throws.

Parameters
beginIterator pointing to the beginning of the buffer holding an option.
endIterator pointing to the end of the buffer holding an option.
Exceptions
OutOfRangeThrown in case of truncated data.
BadValueThrown when DnrInstance::unpackAdn(begin,end) throws.
InvalidOptionDnrDomainNameThrown when DnrInstance::unpackAdn(begin,end) throws.

Definition at line 16 of file option6_dnr.cc.

References unpack().

+ Here is the call graph for this function:

◆ Option6Dnr() [2/3]

isc::dhcp::Option6Dnr::Option6Dnr ( const uint16_t  service_priority,
const std::string &  adn,
const Option6Dnr::AddressContainer ip_addresses,
const std::string &  svc_params 
)
inline

Constructor of the Option with all fields from params.

Constructor of the Option where all fields i.e. Service priority, ADN, IP address(es) and Service params are provided as ctor parameters.

Parameters
service_priorityService priority
adnADN FQDN
ip_addressesContainer of IP addresses
svc_paramsService Parameters
Exceptions
InvalidOptionDnrDomainNameThrown in case of any issue with parsing ADN
InvalidOptionDnrSvcParamsThrown when checkSvcParams(from_wire_data) throws
OutOfRangeThrown in case of no IP addresses found or when IP addresses length is too big

Definition at line 58 of file option6_dnr.h.

◆ Option6Dnr() [3/3]

isc::dhcp::Option6Dnr::Option6Dnr ( const uint16_t  service_priority,
const std::string &  adn 
)
inline

Constructor of the Option in ADN only mode.

Constructor of the Option in ADN only mode i.e. only Service priority and ADN FQDN are provided as ctor parameters.

Parameters
service_priorityService priority
adnADN FQDN
Exceptions
InvalidOptionDnrDomainNameThrown in case of any issue with parsing ADN

Definition at line 75 of file option6_dnr.h.

Member Function Documentation

◆ clone()

OptionPtr isc::dhcp::Option6Dnr::clone ( ) const
overridevirtual

Copies this option and returns a pointer to the copy.

Returns
Pointer to the copy of the option.

Reimplemented from isc::dhcp::Option.

Definition at line 22 of file option6_dnr.cc.

◆ len()

uint16_t isc::dhcp::Option6Dnr::len ( ) const
overridevirtual

Returns length of the complete option (data length + DHCPv4/DHCPv6 option header)

Returns
length of the option

Reimplemented from isc::dhcp::Option.

Definition at line 93 of file option6_dnr.cc.

References isc::dhcp::DnrInstance::dnrInstanceLen(), and isc::dhcp::Option::OPTION6_HDR_LEN.

Referenced by toText().

+ Here is the call graph for this function:

◆ pack()

void isc::dhcp::Option6Dnr::pack ( util::OutputBuffer buf,
bool  check = false 
) const
overridevirtual

Writes option in wire-format to a buffer.

Writes option in wire-format to buffer, returns pointer to first unused byte after stored option (that is useful for writing options one after another).

Parameters
bufpointer to a buffer
checkflag which indicates if checking the option length is required (used only in V4)
Exceptions
InvalidOptionDnrDomainNameThrown when Option's mandatory field ADN is empty.

Reimplemented from isc::dhcp::Option.

Definition at line 27 of file option6_dnr.cc.

References isc::dhcp::DnrInstance::addr_length_, isc::dhcp::DnrInstance::adn_length_, isc::dhcp::DnrInstance::adn_only_mode_, isc::dhcp::Option::check(), packAddresses(), isc::dhcp::DnrInstance::packAdn(), isc::dhcp::Option::packHeader(), isc::dhcp::DnrInstance::packSvcParams(), isc::dhcp::DnrInstance::service_priority_, and isc::util::OutputBuffer::writeUint16().

+ Here is the call graph for this function:

◆ packAddresses()

void isc::dhcp::Option6Dnr::packAddresses ( isc::util::OutputBuffer buf) const
overridevirtual

Writes the IP address(es) in the wire format into a buffer.

The IP address(es) (ip_addresses_) data is appended at the end of the buffer.

Parameters
[out]bufbuffer where IP address(es) will be written.
Exceptions
BadValueThrown when trying to pack address which is not an IPv6 address

Reimplemented from isc::dhcp::DnrInstance.

Definition at line 43 of file option6_dnr.cc.

References isc::dhcp::DnrInstance::getLogPrefix(), isc::dhcp::DnrInstance::ip_addresses_, isc_throw, and isc::util::OutputBuffer::writeData().

Referenced by pack().

+ Here is the call graph for this function:

◆ toText()

std::string isc::dhcp::Option6Dnr::toText ( int  indent = 0) const
overridevirtual

Returns string representation of the option.

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

Reimplemented from isc::dhcp::Option.

Definition at line 84 of file option6_dnr.cc.

References isc::dhcp::DnrInstance::getDnrInstanceAsText(), isc::dhcp::Option::getHeaderLen(), len(), and isc::dhcp::Option::type_.

+ Here is the call graph for this function:

◆ unpack()

void isc::dhcp::Option6Dnr::unpack ( OptionBufferConstIter  begin,
OptionBufferConstIter  end 
)
overridevirtual

Parses received wire data buffer.

Parameters
beginiterator to first byte of option data
enditerator to end of option data (first byte after option end)
Exceptions
OutOfRangeThrown in case of truncated data.
BadValueThrown when DnrInstance::unpackAdn(begin,end) throws.
InvalidOptionDnrDomainNameThrown when DnrInstance::unpackAdn(begin,end) throws.

Reimplemented from isc::dhcp::Option.

Definition at line 55 of file option6_dnr.cc.

References isc::dhcp::DnrInstance::adn_only_mode_, isc::dhcp::DnrInstance::getLogPrefix(), isc::dhcp::DnrInstance::getMinimalLength(), isc_throw, isc::dhcp::Option::setData(), unpackAddresses(), isc::dhcp::DnrInstance::unpackAdn(), isc::dhcp::DnrInstance::unpackServicePriority(), and isc::dhcp::DnrInstance::unpackSvcParams().

Referenced by Option6Dnr().

+ Here is the call graph for this function:

◆ unpackAddresses()

void isc::dhcp::Option6Dnr::unpackAddresses ( OptionBufferConstIter begin,
OptionBufferConstIter  end 
)
overridevirtual

Unpacks IP address(es) from wire data and stores it/them in ip_addresses_.

It may throw in case of malformed data detected during parsing.

Parameters
beginbeginning of the buffer from which the field will be read
endend of the buffer from which the field will be read
Exceptions
OutOfRangeThrown in case of malformed data detected during parsing e.g. Addr Len not divisible by 16, Addr Len is 0, addresses data truncated etc.

Reimplemented from isc::dhcp::DnrInstance.

Definition at line 98 of file option6_dnr.cc.

References isc::dhcp::DnrInstance::addr_length_, isc::dhcp::DnrInstance::getAddrLengthSize(), isc::dhcp::DnrInstance::getLogPrefix(), isc_throw, and isc::util::readUint16().

Referenced by unpack().

+ Here is the call graph for this function:

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