Kea: isc::dhcp::DnrInstance Class Reference

| Kea 3.2.0-git

isc::dhcp::DnrInstance Class Reference

Represents DNR Instance which is used both in DHCPv4 and DHCPv6 Encrypted DNS Option. More...

`#include <option4_dnr.h>`

Inheritance diagram for isc::dhcp::DnrInstance:
[legend]

## Public Types
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.

## Public Member Functions
| 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.
virtual void | packAddresses (isc::util::OutputBuffer &buf) const
| Writes the IP address(es) in the wire format into a buffer.
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.
virtual void | unpackAddresses (OptionBufferConstIter &begin, OptionBufferConstIter end)
| Unpacks IP address(es) from wire data and stores it/them in `ip_addresses_`.
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_`.

## Static Public Attributes
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
uint16_t | dnrInstanceLen () const
| Calculates and returns length of DNR Instance data in octets.

## Protected Attributes
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.

## Detailed Description

Represents DNR Instance which is used both in DHCPv4 and DHCPv6 Encrypted DNS Option.

DNR Instance includes the configuration data of an encrypted DNS resolver. It is used to build OPTION_V4_DNR (code 162). There may be multiple DNR Instances in one OPTION_V4_DNR Option. OPTION_V6_DNR (code 144) is using very similar structure, only that there must be only one DNR Instance per one OPTION_V6_DNR Option. That's why `Option6Dnr` class can derive from this `DnrInstance` class, whereas `Option4Dnr` class should have a container of `DnrInstance's`.

DNR Instance Data Format has been defined in the `RFC9463`.

Definition at line 55 of file option4_dnr.h.

## Member Typedef Documentation

## ◆ AddressContainer

typedef std::vector<isc::asiolink::IOAddress> isc::dhcp::DnrInstance::AddressContainer

A Type defined for container holding IP addresses.

Definition at line 58 of file option4_dnr.h.

## ◆ SvcParamsMap

typedef boost::bimap<std::string, uint16_t> isc::dhcp::DnrInstance::SvcParamsMap

A Type defined for boost Bimap holding SvcParamKeys.

Definition at line 61 of file option4_dnr.h.

## Constructor & Destructor Documentation

## ◆ DnrInstance()

isc::dhcp::DnrInstance::DnrInstance | ( | Option::Universe | universe | ) |
| explicit

Constructor of the empty DNR Instance.

Parameters

  universe | either V4 or V6 Option universe

Definition at line 212 of file option4_dnr.cc.

References addr_length_, adn_length_, adn_only_mode_, alpn_http_, dnr_instance_data_length_, service_priority_, svc_params_length_, and universe_.

Referenced by isc::dhcp::Option6Dnr::Option6Dnr().

## ◆ ~DnrInstance()

virtual isc::dhcp::DnrInstance::~DnrInstance | ( |  | ) |
| virtualdefault

Default destructor.

## Member Function Documentation

## ◆ addIpAddress()

void isc::dhcp::DnrInstance::addIpAddress | ( | const asiolink::IOAddress & | ip_address | ) |

Adds IP address to `ip_addresses_` container.

Parameters

  ip_address | IP address to be added

Definition at line 387 of file option4_dnr.cc.

References ip_addresses_.

Referenced by unpackAddresses(), and isc::dhcp::Option6Dnr::unpackAddresses().

## ◆ dnrInstanceLen()

uint16_t isc::dhcp::DnrInstance::dnrInstanceLen | ( |  | ) | const
| protected

Calculates and returns length of DNR Instance data in octets.

Returns
  length of DNR Instance data in octets.

Definition at line 377 of file option4_dnr.cc.

References addr_length_, adn_length_, adn_only_mode_, getAddrLengthSize(), getAdnLengthSize(), SERVICE_PRIORITY_SIZE, and svc_params_length_.

Referenced by isc::dhcp::Option6Dnr::len(), and setDnrInstanceDataLength().

Here is the call graph for this function:

## ◆ getAddresses()

AddressContainer isc::dhcp::DnrInstance::getAddresses | ( |  | ) | const
| inline

Returns vector with addresses.

We return a copy of our list. Although this includes overhead, it also makes this list safe to use after this option object is no longer available. As options are expected to hold only a few (1-3) addresses, the overhead is not that big.

Returns
  Address container with addresses.

Definition at line 162 of file option4_dnr.h.

References ip_addresses_.

## ◆ getAddrLength()

uint16_t isc::dhcp::DnrInstance::getAddrLength | ( |  | ) | const
| inline

Getter of the `addr_length_`.

Returns
  Length of enclosed IP addresses in octets.

Definition at line 143 of file option4_dnr.h.

References addr_length_.

## ◆ getAddrLengthSize()

uint8_t isc::dhcp::DnrInstance::getAddrLengthSize | ( |  | ) | const
| inline

Returns size in octets of Addr Length field.

Definition at line 181 of file option4_dnr.h.

Referenced by dnrInstanceLen(), unpackAddresses(), and isc::dhcp::Option6Dnr::unpackAddresses().

## ◆ getAdnAsText()

std::string isc::dhcp::DnrInstance::getAdnAsText | ( |  | ) | const

Returns the Authentication domain name in the text format.

FQDN data stored in `adn_` is converted into text format and returned.

Returns
  Authentication domain name in the text format.

Definition at line 255 of file option4_dnr.cc.

References adn_.

Referenced by getDnrInstanceAsText().

## ◆ getAdnLength()

uint16_t isc::dhcp::DnrInstance::getAdnLength | ( |  | ) | const
| inline

Getter of the `adn_length_`.

Returns
  Length of the authentication-domain-name data in octets.

Definition at line 124 of file option4_dnr.h.

References adn_length_.

## ◆ getAdnLengthSize()

uint8_t isc::dhcp::DnrInstance::getAdnLengthSize | ( |  | ) | const
| inline

Returns size in octets of ADN Length field.

Definition at line 191 of file option4_dnr.h.

Referenced by dnrInstanceLen(), and unpackAdn().

## ◆ getDnrInstanceAsText()

std::string isc::dhcp::DnrInstance::getDnrInstanceAsText | ( |  | ) | const

Returns string representation of the DNR instance.

Returns
  String with text representation.

Definition at line 345 of file option4_dnr.cc.

References addr_length_, adn_length_, adn_only_mode_, getAdnAsText(), ip_addresses_, service_priority_, SVC_PARAMS, svc_params_length_, and svc_params_map_.

Referenced by isc::dhcp::Option6Dnr::toText().

Here is the call graph for this function:

## ◆ getDnrInstanceDataLength()

uint16_t isc::dhcp::DnrInstance::getDnrInstanceDataLength | ( |  | ) | const
| inline

Getter of the `dnr_instance_data_length_`.

Returns
  Length of all following data inside this DNR instance in octets.

Definition at line 110 of file option4_dnr.h.

References dnr_instance_data_length_.

Referenced by isc::dhcp::Option4Dnr::unpack().

## ◆ getDnrInstanceDataLengthSize()

uint8_t isc::dhcp::DnrInstance::getDnrInstanceDataLengthSize | ( |  | ) | const
| inline

Returns size in octets of DNR Instance Data Length field.

Definition at line 186 of file option4_dnr.h.

Referenced by unpackDnrInstanceDataLength().

## ◆ getLogPrefix()

std::string isc::dhcp::DnrInstance::getLogPrefix | ( |  | ) | const
| inline

Returns Log prefix depending on V4/V6 Option universe.

Returns
  Log prefix as a string which can be used for prints when throwing an exception.

Definition at line 198 of file option4_dnr.h.

Referenced by isc::dhcp::Option6Dnr::packAddresses(), packAdn(), parseDnrInstanceConfigData(), isc::dhcp::Option4Dnr::unpack(), isc::dhcp::Option6Dnr::unpack(), unpackAddresses(), isc::dhcp::Option6Dnr::unpackAddresses(), unpackAdn(), unpackDnrInstanceDataLength(), and unpackSvcParams().

## ◆ getMinimalLength()

uint8_t isc::dhcp::DnrInstance::getMinimalLength | ( |  | ) | const
| inline

Returns minimal length of the DNR instance data (without headers) in octets.

Returns
  Minimal length of the DNR instance data (without headers) in octets.

Definition at line 176 of file option4_dnr.h.

Referenced by isc::dhcp::Option4Dnr::unpack(), and isc::dhcp::Option6Dnr::unpack().

## ◆ getServicePriority()

uint16_t isc::dhcp::DnrInstance::getServicePriority | ( |  | ) | const
| inline

Getter of the `service_priority_`.

Returns
  The priority of this DNR instance compared to other instances.

Definition at line 117 of file option4_dnr.h.

References service_priority_.

## ◆ getSvcParams()

const OptionBuffer & isc::dhcp::DnrInstance::getSvcParams | ( |  | ) | const
| inline

Returns a reference to the buffer holding SvcParam data.

Returns
  a reference to the Service Parameters buffer

Definition at line 169 of file option4_dnr.h.

References svc_params_buf_.

## ◆ getSvcParamsLength()

uint16_t isc::dhcp::DnrInstance::getSvcParamsLength | ( |  | ) | const
| inline

Getter of the `svc_params_length_`.

Returns
  Length of Service Parameters field in octets.

Definition at line 150 of file option4_dnr.h.

References svc_params_length_.

## ◆ isAdnOnlyMode()

bool isc::dhcp::DnrInstance::isAdnOnlyMode | ( |  | ) | const
| inline

Returns whether ADN only mode is enabled or disabled.

Definition at line 203 of file option4_dnr.h.

References adn_only_mode_.

## ◆ packAddresses()

void isc::dhcp::DnrInstance::packAddresses | ( | isc::util::OutputBuffer & | buf | ) | const
| virtual

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] | buf | buffer where IP address(es) will be written.

Reimplemented in isc::dhcp::Option6Dnr.

Definition at line 239 of file option4_dnr.cc.

References ip_addresses_, and isc::util::OutputBuffer::writeUint32().

Here is the call graph for this function:

## ◆ packAdn()

void isc::dhcp::DnrInstance::packAdn | ( | isc::util::OutputBuffer & | buf | ) | const

Writes the ADN FQDN in the wire format into a buffer.

The Authentication Domain Name - fully qualified domain name of the encrypted DNS resolver data is appended at the end of the buffer.

Parameters

  [out] | buf | buffer where ADN FQDN will be written.

Exceptions

  InvalidOptionDnrDomainName | Thrown when mandatory field ADN is empty.

Definition at line 221 of file option4_dnr.cc.

References adn_, isc::dns::LabelSequence::getData(), isc::dns::LabelSequence::getDataLength(), getLogPrefix(), isc_throw, and isc::util::OutputBuffer::writeData().

Referenced by isc::dhcp::Option6Dnr::pack().

Here is the call graph for this function:

## ◆ packSvcParams()

void isc::dhcp::DnrInstance::packSvcParams | ( | isc::util::OutputBuffer & | buf | ) | const

Writes the Service Parameters in the wire format into a buffer.

The Service Parameters (`svc_params_`) data is appended at the end of the buffer.

Parameters

  [out] | buf | buffer where SvcParams will be written.

Definition at line 248 of file option4_dnr.cc.

References svc_params_buf_, svc_params_length_, and isc::util::OutputBuffer::writeData().

Referenced by isc::dhcp::Option6Dnr::pack().

Here is the call graph for this function:

## ◆ parseDnrInstanceConfigData()

void isc::dhcp::DnrInstance::parseDnrInstanceConfigData | ( | const std::string & | config_txt | ) |

Parses a convenient notation of the option data, which may be used in config.

As an alternative to the binary format, we provide convenience option definition as a string in format: (for DNRv6) "100, dot1.example.org., 2001:db8::1 2001:db8::2, alpn=dot\\,doq\\,h2\\,h3 port=8530 dohpath=/q{?dns}" "200, resolver.example." - ADN only mode (for DNRv4) "100, dot1.example.org., 10.0.3.4 10.1.5.6, alpn=dot\\,doq\\,h2\\,h3 port=8530 dohpath=/q{?dns}" "200, resolver.example." - ADN only mode

Note that comma and pipe chars ("," 0x2C and "|" 0x7C) are used as separators in this syntax. That's why whenever they are used in config in fields' values, they must be escaped with double backslash as in example.

Note that this function parses single DnrInstance. For DNRv4 it is possible to have more than one DnrInstance per one Option. In that case this function must be called for each DnrInstance config.

Parameters

  config_txt | convenient notation of the option data received as string

Exceptions

  BadValue | Thrown in case parser found wrong format of received string.
  InvalidOptionDnrDomainName | Thrown in case parser had problems with extracting ADN FQDN.

Definition at line 551 of file option4_dnr.cc.

References adn_, adn_length_, getLogPrefix(), isc_throw, service_priority_, setAdnOnlyMode(), isc::util::str::tokens(), and isc::util::str::trim().

Referenced by isc::dhcp::Option6Dnr::unpack().

Here is the call graph for this function:

## ◆ setAdnOnlyMode()

void isc::dhcp::DnrInstance::setAdnOnlyMode | ( | bool | adn_only_mode | ) |
| inline

Setter of the `adn_only_mode_` field.

Parameters

  adn_only_mode | enabled/disabled setting

Definition at line 210 of file option4_dnr.h.

References adn_only_mode_.

Referenced by parseDnrInstanceConfigData(), and isc::dhcp::Option4Dnr::unpack().

## ◆ setDnrInstanceDataLength()

void isc::dhcp::DnrInstance::setDnrInstanceDataLength | ( |  | ) |
| inline

Setter of the `dnr_instance_data_length_` field.

Size is calculated basing on set Service Priority, ADN, IP address(es) and SvcParams. This should be called after all fields are set. This is only used for DHCPv4 Encrypted DNS Option.

Definition at line 219 of file option4_dnr.h.

References dnr_instance_data_length_, and dnrInstanceLen().

Here is the call graph for this function:

## ◆ unpackAddresses()

void isc::dhcp::DnrInstance::unpackAddresses | ( | OptionBufferConstIter & | begin,
|  | OptionBufferConstIter | end )
| virtual

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

  begin | beginning of the buffer from which the field will be read
  end | end of the buffer from which the field will be read

Exceptions

  BadValue | Thrown in case of any issue with unpacking opaque data of the IP addresses.
  OutOfRange | Thrown in case of malformed data detected during parsing e.g. Addr Len not divisible by 4, Addr Len is 0.

Reimplemented in isc::dhcp::Option6Dnr.

Definition at line 410 of file option4_dnr.cc.

References addIpAddress(), addr_length_, getAddrLengthSize(), isc::dhcp::OpaqueDataTuple::getLength(), getLogPrefix(), isc_throw, isc::dhcp::OpaqueDataTuple::LENGTH_1_BYTE, isc::util::readUint32(), isc::dhcp::OpaqueDataTuple::unpack(), and isc::Exception::what().

Referenced by isc::dhcp::Option4Dnr::unpack().

Here is the call graph for this function:

## ◆ unpackAdn()

void isc::dhcp::DnrInstance::unpackAdn | ( | OptionBufferConstIter & | begin,
|  | OptionBufferConstIter | end )

Unpacks the ADN from given wire data buffer and stores it in `adn_` field.

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

Parameters

  begin | beginning of the buffer from which the ADN will be read
  end | end of the buffer from which the ADN will be read

Exceptions

  BadValue | Thrown in case of any issue with unpacking opaque data of the ADN.
  InvalidOptionDnrDomainName | Thrown in case of any issue with parsing ADN from given wire data.

Definition at line 260 of file option4_dnr.cc.

References adn_, adn_length_, getAdnLengthSize(), isc::dhcp::OpaqueDataTuple::getData(), isc::dhcp::OpaqueDataTuple::getLength(), getLogPrefix(), isc::dhcp::OptionDataTypeUtil::getTupleLenFieldType(), isc_throw, universe_, isc::dhcp::OpaqueDataTuple::unpack(), and isc::Exception::what().

Referenced by isc::dhcp::Option4Dnr::unpack(), and isc::dhcp::Option6Dnr::unpack().

Here is the call graph for this function:

## ◆ unpackDnrInstanceDataLength()

void isc::dhcp::DnrInstance::unpackDnrInstanceDataLength | ( | OptionBufferConstIter & | begin,
|  | OptionBufferConstIter | end )

Unpacks DNR Instance Data Length from wire data buffer and stores it in `dnr_instance_data_length_`.

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

Parameters

  begin | beginning of the buffer from which the field will be read
  end | end of the buffer from which the field will be read

Exceptions

  OutOfRange | Thrown in case of truncated data detected.

Definition at line 392 of file option4_dnr.cc.

References dnr_instance_data_length_, getDnrInstanceDataLengthSize(), getLogPrefix(), isc_throw, and isc::util::readUint16().

Referenced by isc::dhcp::Option4Dnr::unpack().

Here is the call graph for this function:

## ◆ unpackServicePriority()

void isc::dhcp::DnrInstance::unpackServicePriority | ( | OptionBufferConstIter & | begin | ) |

Unpacks Service Priority from wire data buffer and stores it in `service_priority_`.

Parameters

  begin | beginning of the buffer from which the field will be read

Definition at line 404 of file option4_dnr.cc.

References isc::util::readUint16(), service_priority_, and SERVICE_PRIORITY_SIZE.

Referenced by isc::dhcp::Option4Dnr::unpack(), and isc::dhcp::Option6Dnr::unpack().

Here is the call graph for this function:

## ◆ unpackSvcParams()

void isc::dhcp::DnrInstance::unpackSvcParams | ( | OptionBufferConstIter & | begin,
|  | OptionBufferConstIter | end )

Unpacks Service Parameters from wire data buffer and stores it in `svc_params_buf_`.

Parameters

  begin | beginning of the buffer from which the field will be read
  end | end of the buffer from which the field will be read

Exceptions

  OutOfRange | Thrown when truncated data is detected.
  InvalidOptionDnrSvcParams | Thrown when invalid SvcParams syntax is detected.

Definition at line 448 of file option4_dnr.cc.

References FORBIDDEN_SVC_PARAMS, getLogPrefix(), isc::dhcp::OpaqueDataTuple::getTotalLength(), isc_throw, isc::dhcp::OpaqueDataTuple::LENGTH_2_BYTES, isc::util::readUint16(), SUPPORTED_SVC_PARAMS, SVC_PARAMS, svc_params_buf_, svc_params_length_, svc_params_map_, isc::dhcp::OpaqueDataTuple::unpack(), and isc::Exception::what().

Referenced by isc::dhcp::Option4Dnr::unpack(), and isc::dhcp::Option6Dnr::unpack().

Here is the call graph for this function:

## Member Data Documentation

## ◆ addr_length_

uint16_t isc::dhcp::DnrInstance::addr_length_
| protected

Length of included IP addresses in octets.

Definition at line 352 of file option4_dnr.h.

Referenced by DnrInstance(), dnrInstanceLen(), getAddrLength(), getDnrInstanceAsText(), isc::dhcp::Option6Dnr::pack(), unpackAddresses(), and isc::dhcp::Option6Dnr::unpackAddresses().

## ◆ adn_

boost::shared_ptr<isc::dns::Name> isc::dhcp::DnrInstance::adn_
| protected

Authentication domain name field of variable length.

Authentication domain name field of variable length holding a fully qualified domain name of the encrypted DNS resolver. This field is formatted as specified in Section 10 of RFC9915.

Definition at line 338 of file option4_dnr.h.

Referenced by getAdnAsText(), packAdn(), parseDnrInstanceConfigData(), and unpackAdn().

## ◆ adn_length_

uint16_t isc::dhcp::DnrInstance::adn_length_
| protected

Length of the authentication-domain-name data in octets.

Definition at line 349 of file option4_dnr.h.

Referenced by DnrInstance(), dnrInstanceLen(), getAdnLength(), getDnrInstanceAsText(), isc::dhcp::Option6Dnr::pack(), parseDnrInstanceConfigData(), and unpackAdn().

## ◆ adn_only_mode_

bool isc::dhcp::DnrInstance::adn_only_mode_
| protected

Flag stating whether ADN only mode is used or not.

"Addr Length", "IP(v4/v6) Address(es)", and "Service Parameters (SvcParams)" fields are not present if the ADN-only mode is used.

Definition at line 369 of file option4_dnr.h.

Referenced by DnrInstance(), dnrInstanceLen(), getDnrInstanceAsText(), isAdnOnlyMode(), isc::dhcp::Option6Dnr::pack(), setAdnOnlyMode(), and isc::dhcp::Option6Dnr::unpack().

## ◆ alpn_http_

bool isc::dhcp::DnrInstance::alpn_http_
| protected

Indicates whether the "alpn" SvcParam contains support for HTTP.

Defaults to false.

Definition at line 394 of file option4_dnr.h.

Referenced by DnrInstance().

## ◆ ALPN_IDS

const std::unordered_set< std::string > isc::dhcp::DnrInstance::ALPN_IDS
| static

Possible ALPN protocol IDs.

The IANA registry is maintained at https://www.iana.org/assignments/tls-extensiontype-values/tls-extensiontype-values.xhtml#alpn-protocol-ids

Definition at line 97 of file option4_dnr.h.

## ◆ dnr_instance_data_length_

uint16_t isc::dhcp::DnrInstance::dnr_instance_data_length_
| protected

Length of all following data inside this DNR instance in octets.

This field is only used for DHCPv4 Encrypted DNS Option.

Definition at line 343 of file option4_dnr.h.

Referenced by DnrInstance(), getDnrInstanceDataLength(), setDnrInstanceDataLength(), and unpackDnrInstanceDataLength().

## ◆ FORBIDDEN_SVC_PARAMS

const std::unordered_set< std::string > isc::dhcp::DnrInstance::FORBIDDEN_SVC_PARAMS = {"ipv4hint", "ipv6hint"}
| static

Set of forbidden SvcParams.

The service parameters MUST NOT include "ipv4hint" or "ipv6hint" SvcParams as they are superseded by the included IP addresses.

Definition at line 71 of file option4_dnr.h.

Referenced by unpackSvcParams().

## ◆ ip_addresses_

AddressContainer isc::dhcp::DnrInstance::ip_addresses_
| protected

Vector container holding one or more IP addresses.

One or more IP addresses to reach the encrypted DNS resolver. In case of DHCPv4, both private and public IPv4 addresses can be included in this field. In case of DHCPv6, an address can be link-local, ULA, or GUA.

Definition at line 360 of file option4_dnr.h.

Referenced by addIpAddress(), getAddresses(), getDnrInstanceAsText(), packAddresses(), and isc::dhcp::Option6Dnr::packAddresses().

## ◆ service_priority_

uint16_t isc::dhcp::DnrInstance::service_priority_
| protected

The priority of this instance compared to other DNR instances.

Definition at line 346 of file option4_dnr.h.

Referenced by DnrInstance(), getDnrInstanceAsText(), getServicePriority(), isc::dhcp::Option6Dnr::pack(), parseDnrInstanceConfigData(), and unpackServicePriority().

## ◆ SERVICE_PRIORITY_SIZE

const uint8_t isc::dhcp::DnrInstance::SERVICE_PRIORITY_SIZE = 2
| static

Size in octets of Service Priority field.

Definition at line 64 of file option4_dnr.h.

Referenced by dnrInstanceLen(), and unpackServicePriority().

## ◆ SUPPORTED_SVC_PARAMS

const std::set< uint8_t > isc::dhcp::DnrInstance::SUPPORTED_SVC_PARAMS = {1, 3, 7}
| static

Ordered set of supported SvcParamKeys.

As per RFC9463 Section 3.1.5: The following service parameters MUST be supported by a DNR implementation: SvcParamKey=1 alpn: Used to indicate the set of supported protocols (Section 7.1 of [RFC9460]). SvcParamKey=3 port: Used to indicate the target port number for the encrypted DNS connection (Section 7.2 of [RFC9460]).

In addition, the following service parameter is RECOMMENDED to be supported by a DNR implementation: SvcParamKey=7 dohpath: Used to supply a relative DoH URI Template (Section 5.1 of [RFC9461]).

Definition at line 91 of file option4_dnr.h.

Referenced by unpackSvcParams().

## ◆ SVC_PARAMS

const DnrInstance::SvcParamsMap isc::dhcp::DnrInstance::SVC_PARAMS
| static

Initial value:
=
boost::assign::list_of<DnrInstance::SvcParamsMap::relation>
("mandatory", 0)
("alpn", 1)
("no-default-alpn", 2)
("port", 3)
("ipv4hint", 4)
("ech", 5)
("ipv6hint", 6)
("dohpath", 7)
("ohttp", 8)

Service parameters, used in DNR options in DHCPv4 and DHCPv6, but also in RA and DNS.

The IANA registry is maintained at https://www.iana.org/assignments/dns-svcb/dns-svcb.xhtml

Definition at line 76 of file option4_dnr.h.

Referenced by getDnrInstanceAsText(), and unpackSvcParams().

## ◆ svc_params_buf_

OptionBuffer isc::dhcp::DnrInstance::svc_params_buf_
| protected

Service Parameters (SvcParams) (variable length) as on-wire data buffer.

Specifies a set of service parameters that are encoded following the rules in Section 2.2 of RFC9460.

Definition at line 375 of file option4_dnr.h.

Referenced by getSvcParams(), packSvcParams(), and unpackSvcParams().

## ◆ svc_params_length_

uint16_t isc::dhcp::DnrInstance::svc_params_length_
| protected

Length of Service Parameters field in octets.

Definition at line 363 of file option4_dnr.h.

Referenced by DnrInstance(), dnrInstanceLen(), getDnrInstanceAsText(), getSvcParamsLength(), packSvcParams(), and unpackSvcParams().

## ◆ svc_params_map_

std::map<uint16_t, OpaqueDataTuple> isc::dhcp::DnrInstance::svc_params_map_
| protected

Service Parameters stored in a map.

A set of service parameters that are encoded following the same rules for encoding SvcParams using the wire format specified in Section 2.2 of RFC9460. SvcParams are stored here in a map where the key is the SvcParamKey as an uint_16. (Defined values are in Section 14.3.2 of RFC9460 - listed in `SVC_PARAMS`). The value is an OpaqueDataTuple containing:

- the length of the SvcParamValue as an uint_16 integer in network byte order
- data buffer with the SvcParamValue in a format determined by the SvcParamKey.

Definition at line 386 of file option4_dnr.h.

Referenced by getDnrInstanceAsText(), and unpackSvcParams().

## ◆ universe_

Option::Universe isc::dhcp::DnrInstance::universe_
| protected

Either V4 or V6 Option universe.

Definition at line 331 of file option4_dnr.h.

Referenced by DnrInstance(), and unpackAdn().

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

- option4_dnr.h
- option4_dnr.cc