Kea 2.7.6
|
Represents DHCPv6 Encrypted DNS Option (code 144). More...
#include <option6_dnr.h>
Public Member Functions | |
Option6Dnr (OptionBufferConstIter begin, OptionBufferConstIter end, bool convenient_notation=false) | |
Constructor of the Option from on-wire data. | |
OptionPtr | clone () const override |
Copies this option and returns a pointer to the copy. | |
uint16_t | len () const override |
Returns length of the complete option (data length + DHCPv4/DHCPv6 option header) | |
void | pack (util::OutputBuffer &buf, bool check=false) const override |
Writes option in wire-format to a buffer. | |
void | packAddresses (isc::util::OutputBuffer &buf) const override |
Writes the IP address(es) in the wire format into a buffer. | |
std::string | toText (int indent=0) const override |
Returns string representation of the option. | |
void | unpack (OptionBufferConstIter begin, OptionBufferConstIter end) override |
Parses received wire data buffer. | |
void | unpackAddresses (OptionBufferConstIter &begin, OptionBufferConstIter end) override |
Unpacks IP address(es) from wire data and stores it/them in ip_addresses_ . | |
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. | |
Public Member Functions inherited from isc::dhcp::DnrInstance | |
DnrInstance (Option::Universe universe) | |
Constructor of the empty DNR Instance. | |
virtual | ~DnrInstance ()=default |
Default destructor. | |
void | addIpAddress (const asiolink::IOAddress &ip_address) |
Adds IP address to ip_addresses_ container. | |
AddressContainer | getAddresses () const |
Returns vector with addresses. | |
uint16_t | getAddrLength () const |
Getter of the addr_length_ . | |
uint8_t | getAddrLengthSize () const |
Returns size in octets of Addr Length field. | |
std::string | getAdnAsText () const |
Returns the Authentication domain name in the text format. | |
uint16_t | getAdnLength () const |
Getter of the adn_length_ . | |
uint8_t | getAdnLengthSize () const |
Returns size in octets of ADN Length field. | |
std::string | getDnrInstanceAsText () const |
Returns string representation of the DNR instance. | |
uint16_t | getDnrInstanceDataLength () const |
Getter of the dnr_instance_data_length_ . | |
uint8_t | getDnrInstanceDataLengthSize () const |
Returns size in octets of DNR Instance Data Length field. | |
std::string | getLogPrefix () const |
Returns Log prefix depending on V4/V6 Option universe. | |
uint8_t | getMinimalLength () const |
Returns minimal length of the DNR instance data (without headers) in octets. | |
uint16_t | getServicePriority () const |
Getter of the service_priority_ . | |
const OptionBuffer & | getSvcParams () const |
Returns a reference to the buffer holding SvcParam data. | |
uint16_t | getSvcParamsLength () const |
Getter of the svc_params_length_ . | |
bool | isAdnOnlyMode () const |
Returns whether ADN only mode is enabled or disabled. | |
void | packAdn (isc::util::OutputBuffer &buf) const |
Writes the ADN FQDN in the wire format into a buffer. | |
void | packSvcParams (isc::util::OutputBuffer &buf) const |
Writes the Service Parameters in the wire format into a buffer. | |
void | parseDnrInstanceConfigData (const std::string &config_txt) |
Parses a convenient notation of the option data, which may be used in config. | |
void | setAdnOnlyMode (bool adn_only_mode) |
Setter of the adn_only_mode_ field. | |
void | setDnrInstanceDataLength () |
Setter of the dnr_instance_data_length_ field. | |
void | unpackAdn (OptionBufferConstIter &begin, OptionBufferConstIter end) |
Unpacks the ADN from given wire data buffer and stores it in adn_ field. | |
void | unpackDnrInstanceDataLength (OptionBufferConstIter &begin, OptionBufferConstIter end) |
Unpacks DNR Instance Data Length from wire data buffer and stores it in dnr_instance_data_length_ . | |
void | unpackServicePriority (OptionBufferConstIter &begin) |
Unpacks Service Priority from wire data buffer and stores it in service_priority_ . | |
void | unpackSvcParams (OptionBufferConstIter &begin, OptionBufferConstIter end) |
Unpacks Service Parameters from wire data buffer and stores it in svc_params_buf_ . | |
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... | |
Public Types inherited from isc::dhcp::DnrInstance | |
typedef std::vector< isc::asiolink::IOAddress > | AddressContainer |
A Type defined for container holding IP addresses. | |
typedef boost::bimap< std::string, uint16_t > | SvcParamsMap |
A Type defined for boost Bimap holding SvcParamKeys. | |
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. | |
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 | |
Static Public Attributes inherited from isc::dhcp::DnrInstance | |
static const std::unordered_set< std::string > | ALPN_IDS |
Possible ALPN protocol IDs. | |
static const std::unordered_set< std::string > | FORBIDDEN_SVC_PARAMS = {"ipv4hint", "ipv6hint"} |
Set of forbidden SvcParams. | |
static const uint8_t | SERVICE_PRIORITY_SIZE = 2 |
Size in octets of Service Priority field. | |
static const std::set< uint8_t > | SUPPORTED_SVC_PARAMS = {1, 3, 7} |
Ordered set of supported SvcParamKeys. | |
static const SvcParamsMap | SVC_PARAMS |
Service parameters, used in DNR options in DHCPv4 and DHCPv6, but also in RA and DNS. | |
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 Member Functions inherited from isc::dhcp::DnrInstance | |
uint16_t | dnrInstanceLen () const |
Calculates and returns length of DNR Instance data in octets. | |
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) | |
Protected Attributes inherited from isc::dhcp::DnrInstance | |
uint16_t | addr_length_ |
Length of included IP addresses in octets. | |
boost::shared_ptr< isc::dns::Name > | adn_ |
Authentication domain name field of variable length. | |
uint16_t | adn_length_ |
Length of the authentication-domain-name data in octets. | |
bool | adn_only_mode_ |
Flag stating whether ADN only mode is used or not. | |
bool | alpn_http_ |
Indicates whether the "alpn" SvcParam contains support for HTTP. | |
uint16_t | dnr_instance_data_length_ |
Length of all following data inside this DNR instance in octets. | |
AddressContainer | ip_addresses_ |
Vector container holding one or more IP addresses. | |
uint16_t | service_priority_ |
The priority of this instance compared to other DNR instances. | |
OptionBuffer | svc_params_buf_ |
Service Parameters (SvcParams) (variable length) as on-wire data buffer. | |
uint16_t | svc_params_length_ |
Length of Service Parameters field in octets. | |
std::map< uint16_t, OpaqueDataTuple > | svc_params_map_ |
Service Parameters stored in a map. | |
Option::Universe | universe_ |
Either V4 or V6 Option universe. | |
Represents DHCPv6 Encrypted DNS Option (code 144).
This option has been defined in the RFC9463
and it has a following structure:
Definition at line 26 of file option6_dnr.h.
isc::dhcp::Option6Dnr::Option6Dnr | ( | OptionBufferConstIter | begin, |
OptionBufferConstIter | end, | ||
bool | convenient_notation = false ) |
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.
begin | Iterator pointing to the beginning of the buffer holding an option. |
end | Iterator pointing to the end of the buffer holding an option. |
convenient_notation | Flag stating whether data in buffer is a convenient notation string that needs custom parsing or binary data. Defaults to false . |
OutOfRange | Thrown in case of truncated data. |
BadValue | Thrown when DnrInstance::unpackAdn(begin,end) throws. |
InvalidOptionDnrDomainName | Thrown when DnrInstance::unpackAdn(begin,end) throws. |
Definition at line 18 of file option6_dnr.cc.
References unpack().
|
overridevirtual |
Copies this option and returns a pointer to the copy.
Reimplemented from isc::dhcp::Option.
Definition at line 26 of file option6_dnr.cc.
References isc::dhcp::Option::cloneInternal().
|
overridevirtual |
Returns length of the complete option (data length + DHCPv4/DHCPv6 option header)
Reimplemented from isc::dhcp::Option.
Definition at line 103 of file option6_dnr.cc.
References isc::dhcp::DnrInstance::dnrInstanceLen(), and isc::dhcp::Option::OPTION6_HDR_LEN.
Referenced by toText().
|
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).
buf | pointer to a buffer |
check | flag which indicates if checking the option length is required (used only in V4) |
InvalidOptionDnrDomainName | Thrown when Option's mandatory field ADN is empty. |
Reimplemented from isc::dhcp::Option.
Definition at line 31 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().
|
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.
[out] | buf | buffer where IP address(es) will be written. |
BadValue | Thrown when trying to pack address which is not an IPv6 address |
Reimplemented from isc::dhcp::DnrInstance.
Definition at line 47 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().
|
overridevirtual |
Returns string representation of the option.
indent | number of spaces before printing text |
Reimplemented from isc::dhcp::Option.
Definition at line 94 of file option6_dnr.cc.
References isc::dhcp::DnrInstance::getDnrInstanceAsText(), isc::dhcp::Option::getHeaderLen(), len(), and isc::dhcp::Option::type_.
|
overridevirtual |
Parses received wire data buffer.
begin | iterator to first byte of option data |
end | iterator to end of option data (first byte after option end) |
OutOfRange | Thrown in case of truncated data. |
BadValue | Thrown when DnrInstance::unpackAdn(begin,end) throws. |
InvalidOptionDnrDomainName | Thrown when DnrInstance::unpackAdn(begin,end) throws. |
Reimplemented from isc::dhcp::Option.
Definition at line 59 of file option6_dnr.cc.
References isc::dhcp::DnrInstance::adn_only_mode_, isc::dhcp::DnrInstance::getLogPrefix(), isc::dhcp::DnrInstance::getMinimalLength(), isc_throw, isc::dhcp::DnrInstance::parseDnrInstanceConfigData(), isc::dhcp::Option::setData(), unpackAddresses(), isc::dhcp::DnrInstance::unpackAdn(), isc::dhcp::DnrInstance::unpackServicePriority(), and isc::dhcp::DnrInstance::unpackSvcParams().
Referenced by Option6Dnr().
|
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.
begin | beginning of the buffer from which the field will be read |
end | end of the buffer from which the field will be read |
OutOfRange | Thrown in case of malformed data detected during parsing e.g. Addr Len not divisible by 16, Addr Len is 0, addresses data truncated etc. |
BadValue | Thrown when trying to unpack address which is not an IPv6 address |
Reimplemented from isc::dhcp::DnrInstance.
Definition at line 108 of file option6_dnr.cc.
References isc::dhcp::DnrInstance::addIpAddress(), isc::dhcp::DnrInstance::addr_length_, isc::asiolink::IOAddress::fromBytes(), isc::dhcp::DnrInstance::getAddrLengthSize(), isc::dhcp::DnrInstance::getLogPrefix(), isc_throw, isc::util::readUint16(), and isc::Exception::what().
Referenced by unpack().