![]() |
Kea
2.5.2
|
Represents DHCPv6 Encrypted DNS Option (code 144). More...
#include <option6_dnr.h>
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... | |
![]() | |
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 OptionBuffer & | getData () 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... | |
OptionCollection & | getMutableOptions () |
Returns all encapsulated options. More... | |
OptionPtr | getOption (uint16_t type) const |
Returns shared_ptr to suboption of specific type. More... | |
const OptionCollection & | getOptions () 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... | |
Option & | operator= (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... | |
![]() | |
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 | |
![]() | |
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... | |
![]() | |
typedef std::vector< isc::asiolink::IOAddress > | AddressContainer |
A Type defined for container holding IP addresses. More... | |
![]() | |
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 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 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... | |
![]() | |
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... | |
![]() | |
uint16_t | dnrInstanceLen () const |
Calculates and returns length of DNR Instance data in octets. More... | |
![]() | |
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... | |
![]() | |
uint16_t | addr_length_ |
Length of included IP addresses in octets. More... | |
boost::shared_ptr< isc::dns::Name > | adn_ |
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... | |
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:
Definition at line 27 of file option6_dnr.h.
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.
begin | Iterator pointing to the beginning of the buffer holding an option. |
end | Iterator pointing to the end of the buffer holding an option. |
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 16 of file option6_dnr.cc.
References unpack().
|
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.
service_priority | Service priority |
adn | ADN FQDN |
ip_addresses | Container of IP addresses |
svc_params | Service Parameters |
InvalidOptionDnrDomainName | Thrown in case of any issue with parsing ADN |
InvalidOptionDnrSvcParams | Thrown when checkSvcParams(from_wire_data) throws |
OutOfRange | Thrown in case of no IP addresses found or when IP addresses length is too big |
Definition at line 58 of file option6_dnr.h.
|
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.
service_priority | Service priority |
adn | ADN FQDN |
InvalidOptionDnrDomainName | Thrown in case of any issue with parsing ADN |
Definition at line 75 of file option6_dnr.h.
|
overridevirtual |
Copies this option and returns a pointer to the copy.
Reimplemented from isc::dhcp::Option.
Definition at line 22 of file option6_dnr.cc.
|
overridevirtual |
Returns length of the complete option (data length + DHCPv4/DHCPv6 option header)
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().
|
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 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().
|
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 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().
|
overridevirtual |
Returns string representation of the option.
indent | number of spaces before printing text |
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_.
|
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 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().
|
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. |
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().