]> git.ipfire.org Git - thirdparty/kea.git/commitdiff
[#2536] Changing DNR options defs
authorPiotrek Zadroga <piotrek@isc.org>
Tue, 4 Apr 2023 15:04:20 +0000 (17:04 +0200)
committerPiotrek Zadroga <piotrek@isc.org>
Thu, 4 May 2023 21:17:18 +0000 (23:17 +0200)
src/lib/dhcp/option_definition.cc
src/lib/dhcp/option_dnr.cc
src/lib/dhcp/option_dnr.h
src/lib/dhcp/std_option_defs.h

index dd8c43ad76b548ff1db48e8d1a81193d125229e2..0b20cf7d64cf80c2219bb0012be52ea26d8d6f24 100644 (file)
@@ -19,6 +19,7 @@
 #include <dhcp/option6_status_code.h>
 #include <dhcp/option_custom.h>
 #include <dhcp/option_definition.h>
+#include <dhcp/option_dnr.h>
 #include <dhcp/option_int.h>
 #include <dhcp/option_int_array.h>
 #include <dhcp/option_opaque_data_tuples.h>
@@ -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;
         }
index 7a336e741e5bf02b2260c3498ec54264a84c1a44..c3e37011301f5280b72104952ff5732299989194 100644 (file)
@@ -6,17 +6,18 @@
 
 #include <config.h>
 
+#include <dhcp/dhcp4.h>
+#include <dhcp/dhcp6.h>
 #include <dhcp/option_dnr.h>
 
 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);
 }
 
index 3bf9eefadafc95f4e34a4fbec39d19eb07d6ce80..630947cc7e40450ebcd0798e94497f0b7c83bb3a 100644 (file)
@@ -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);
index 1a14abe6f2edb28d0623449a6b35e0cbc1d1d1be..bcd1a3b3714deb05c3fd36023072a7800fe93d38 100644 (file)
@@ -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.
 ///