From: Piotrek Zadroga Date: Tue, 4 Apr 2023 15:04:20 +0000 (+0200) Subject: [#2536] Changing DNR options defs X-Git-Tag: Kea-2.3.8~187 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=7906ad46ada49b99bff9528f39d6e49f831d49ef;p=thirdparty%2Fkea.git [#2536] Changing DNR options defs --- diff --git a/src/lib/dhcp/option_definition.cc b/src/lib/dhcp/option_definition.cc index dd8c43ad76..0b20cf7d64 100644 --- a/src/lib/dhcp/option_definition.cc +++ b/src/lib/dhcp/option_definition.cc @@ -19,6 +19,7 @@ #include #include #include +#include #include #include #include @@ -866,6 +867,9 @@ OptionDefinition::factorySpecialFormatOption(Option::Universe u, // Prefix Exclude (option code 67), return (OptionPtr(new Option6PDExclude(begin, end))); + case D6O_V6_DNR: + return (OptionPtr(new OptionDNR6(begin, end))); + default: break; } @@ -894,6 +898,9 @@ OptionDefinition::factorySpecialFormatOption(Option::Universe u, // DHCPv4 SZTP Redirect Option (option code 143). return (factoryOpaqueDataTuples(Option::V4, getCode(), begin, end, OpaqueDataTuple::LENGTH_2_BYTES)); + case DHO_V4_DNR: + return (OptionPtr(new OptionDNR4(begin, end))); + default: break; } diff --git a/src/lib/dhcp/option_dnr.cc b/src/lib/dhcp/option_dnr.cc index 7a336e741e..c3e3701130 100644 --- a/src/lib/dhcp/option_dnr.cc +++ b/src/lib/dhcp/option_dnr.cc @@ -6,17 +6,18 @@ #include +#include +#include #include namespace isc { namespace dhcp { -OptionDNR6::OptionDNR6(const uint16_t type) : Option(Universe::V6, type) { +OptionDNR6::OptionDNR6() : Option(V6, D6O_V6_DNR) { } -OptionDNR6::OptionDNR6(const uint16_t type, - OptionBufferConstIter begin, - OptionBufferConstIter end) : Option(Universe::V6, type) { +OptionDNR6::OptionDNR6(OptionBufferConstIter begin, OptionBufferConstIter end) + : Option(V6, D6O_V6_DNR) { unpack(begin, end); } @@ -45,12 +46,11 @@ OptionDNR6::len() const { return Option::len(); } -OptionDNR4::OptionDNR4(const uint16_t type) : Option(V4, type) { +OptionDNR4::OptionDNR4() : Option(V4, DHO_V4_DNR) { } -OptionDNR4::OptionDNR4(const uint16_t type, - OptionBufferConstIter begin, - OptionBufferConstIter end) : Option(V4, type) { +OptionDNR4::OptionDNR4(OptionBufferConstIter begin, OptionBufferConstIter end) + : Option(V4, DHO_V4_DNR) { unpack(begin, end); } diff --git a/src/lib/dhcp/option_dnr.h b/src/lib/dhcp/option_dnr.h index 3bf9eefada..630947cc7e 100644 --- a/src/lib/dhcp/option_dnr.h +++ b/src/lib/dhcp/option_dnr.h @@ -13,11 +13,9 @@ namespace isc { namespace dhcp { class OptionDNR6 : public Option { - OptionDNR6(const uint16_t type); - - OptionDNR6(const uint16_t type, OptionBufferConstIter begin, OptionBufferConstIter end); - public: + OptionDNR6(); + OptionDNR6(OptionBufferConstIter begin, OptionBufferConstIter end); virtual OptionPtr clone() const; virtual void pack(util::OutputBuffer& buf, bool check) const; virtual void unpack(OptionBufferConstIter begin, OptionBufferConstIter end); @@ -26,11 +24,9 @@ public: }; class OptionDNR4 : public Option { - OptionDNR4(const uint16_t type); - - OptionDNR4(const uint16_t type, OptionBufferConstIter begin, OptionBufferConstIter end); - public: + OptionDNR4(); + OptionDNR4(OptionBufferConstIter begin, OptionBufferConstIter end); virtual OptionPtr clone() const; virtual void pack(util::OutputBuffer& buf, bool check) const; virtual void unpack(OptionBufferConstIter begin, OptionBufferConstIter end); diff --git a/src/lib/dhcp/std_option_defs.h b/src/lib/dhcp/std_option_defs.h index 1a14abe6f2..bcd1a3b371 100644 --- a/src/lib/dhcp/std_option_defs.h +++ b/src/lib/dhcp/std_option_defs.h @@ -107,13 +107,6 @@ RECORD_DECL(V4_PORTPARAMS_RECORDS, OPT_UINT8_TYPE, OPT_PSID_TYPE); RECORD_DECL(OPT_6RD_RECORDS, OPT_UINT8_TYPE, OPT_UINT8_TYPE, OPT_IPV6_ADDRESS_TYPE, OPT_IPV4_ADDRESS_TYPE); -// RFC-draft-ietf-add-dnr DHCPv4 DNR option. -// -// DNR Instance Data Length (2 octets), Service Priority (2 octets), ADN Length (1 octet), -// authentication-domain-name FQDN(s), Addr Length (1 octet), IPv4 address(es), SvcParams -//RECORD_DECL(V4_DNR_RECORDS, OPT_UINT16_TYPE, OPT_UINT16_TYPE, OPT_UINT8_TYPE, OPT_FQDN_TYPE, -// OPT_UINT8_TYPE, OPT_IPV4_ADDRESS_TYPE, OPT_BINARY_TYPE); - /// @brief Definitions of standard DHCPv4 options. const OptionDefParams STANDARD_V4_OPTION_DEFINITIONS[] = { { "subnet-mask", DHO_SUBNET_MASK, DHCP4_OPTION_SPACE, @@ -373,7 +366,7 @@ const OptionDefParams STANDARD_V4_OPTION_DEFINITIONS[] = { OPT_UINT8_TYPE, false, NO_RECORD_DEF, "" }, { "v4-portparams", DHO_V4_PORTPARAMS, DHCP4_OPTION_SPACE, OPT_RECORD_TYPE, false, RECORD_DEF(V4_PORTPARAMS_RECORDS), "" }, - { "v4-dnr", DHO_V4_DNR, DHCP4_OPTION_SPACE, OPT_TUPLE_TYPE, + { "v4-dnr", DHO_V4_DNR, DHCP4_OPTION_SPACE, OPT_BINARY_TYPE, true, NO_RECORD_DEF, "" }, { "option-6rd", DHO_6RD, DHCP4_OPTION_SPACE, OPT_RECORD_TYPE, true, RECORD_DEF(OPT_6RD_RECORDS), "" }, @@ -499,9 +492,10 @@ RECORD_DECL(CLIENT_NII_RECORDS, OPT_UINT8_TYPE, OPT_UINT8_TYPE, OPT_UINT8_TYPE); // RFC-draft-ietf-add-dnr DHCPv6 DNR option. // // Service Priority (2 octets), ADN Length (2 octets), -// authentication-domain-name FQDN(s), Addr Length (2 octets), IPv6 address(es), SvcParams -RECORD_DECL(V6_DNR_RECORDS, OPT_UINT16_TYPE, OPT_UINT16_TYPE, OPT_FQDN_TYPE, OPT_UINT16_TYPE, - OPT_IPV6_ADDRESS_TYPE, OPT_BINARY_TYPE); +// Opaque data is represented here by the binary data field. +// It must contain at least authentication-domain-name FQDN(s). +// It may contain Addr Length (2 octets), IPv6 address(es), SvcParams. +RECORD_DECL(V6_DNR_RECORDS, OPT_UINT16_TYPE, OPT_UINT16_TYPE, OPT_BINARY_TYPE); /// Standard DHCPv6 option definitions. ///