]> git.ipfire.org Git - thirdparty/kea.git/commitdiff
[#2527] added options 151-157 from RFC6926
authorRazvan Becheriu <razvan@isc.org>
Mon, 22 Aug 2022 15:13:55 +0000 (18:13 +0300)
committerRazvan Becheriu <razvan@isc.org>
Fri, 26 Aug 2022 15:07:21 +0000 (18:07 +0300)
src/lib/dhcp/dhcp4.h
src/lib/dhcp/iface_mgr.cc
src/lib/dhcp/packet_queue.h
src/lib/dhcp/packet_queue_ring.h
src/lib/dhcp/pkt4.h
src/lib/dhcp/std_option_defs.h
src/lib/dhcp/tests/libdhcp++_unittest.cc

index 8be31dd67ece40c2ee3b0721937703606c4789a0..042f1e3fdaa775053b205ba273522587ab551a56 100644 (file)
@@ -145,7 +145,7 @@ enum DHCPOptionType {
     DHO_STDASERVER                   = 76,
     DHO_USER_CLASS                   = 77, /* RFC3004 */
     DHO_DIRECTORY_AGENT              = 78, /* RFC2610 */
-    DHO_SERVICE_SCOPE                = 79, /* RFC4039 */
+    DHO_SERVICE_SCOPE                = 79, /* RFC2610 */
 //  DHO_RAPID_COMMIT                 = 80, /* RFC4702 */
     DHO_FQDN                         = 81, /* RFC4702 */
     DHO_DHCP_AGENT_OPTIONS           = 82, /* RFC3046 */
@@ -203,13 +203,13 @@ enum DHCPOptionType {
     DHO_RDNSS_SELECT                 = 146,
     // 147-149 are removed/unassigned
     // 150 have multiple definitions
-//  DHO_STATUS_CODE                  = 151,
-//  DHO_BASE_TIME                    = 152,
-//  DHO_START_TIME_OF_STATE          = 153,
-//  DHO_QUERY_START_TIME             = 154,
-//  DHO_QUERY_END_TIME               = 155,
-//  DHO_DHCP_STATE                   = 156,
-//  DHO_DATA_SOURCE                  = 157,
+    DHO_STATUS_CODE                  = 151, /* RFC6926 */
+    DHO_BASE_TIME                    = 152, /* RFC6926 */
+    DHO_START_TIME_OF_STATE          = 153, /* RFC6926 */
+    DHO_QUERY_START_TIME             = 154, /* RFC6926 */
+    DHO_QUERY_END_TIME               = 155, /* RFC6926 */
+    DHO_DHCP_STATE                   = 156, /* RFC6926 */
+    DHO_DATA_SOURCE                  = 157, /* RFC6926 */
 //  DHO_V4_PCP_SERVER                = 158,
     DHO_V4_PORTPARAMS                = 159,
     // 160 used to be assigned in RFC7710, but was removed in RFC8910
index abb0f27d6f3b666550787ab79239142ef132fb33..ebb5bf0a9be1686a3057be4b0cadadc3fc4a91a8 100644 (file)
@@ -1999,7 +1999,7 @@ IfaceMgr::configureDHCPPacketQueue(uint16_t family, data::ConstElementPtr queue_
         }
     }
 
-    return(enable_queue);
+    return (enable_queue);
 }
 
 void
index e3b968bbc837ee562cd8fe5d1bf9deca86db94be..04affc087be6e260e6fc1235770358c11531dd64 100644 (file)
@@ -99,7 +99,7 @@ public:
     virtual data::ElementPtr getInfo() const {
        data::ElementPtr info = data::Element::createMap();
        info->set("queue-type", data::Element::create(queue_type_));
-       return(info);
+       return (info);
     }
 
     /// @brief Fetches a JSON string representation of queue operational info
index 8fce6ed85b99e24c49cdf4872b64a461e3fd5d52..cd8949de7ce7fceda71bf8756e598237b0d289f4 100644 (file)
@@ -64,7 +64,7 @@ public:
     /// if the queue is empty.
     virtual PacketTypePtr dequeuePacket() {
         eatPackets(QueueEnd::FRONT);
-        return(popPacket());
+        return (popPacket());
     }
 
     /// @brief Determines if a packet should be discarded.
@@ -164,7 +164,7 @@ public:
     /// @brief Returns True if the queue is empty.
     virtual bool empty() const {
         std::lock_guard<std::mutex> lock(*mutex_);
-        return(queue_.empty());
+        return (queue_.empty());
     }
 
     /// @brief Returns the maximum number of packets allowed in the buffer.
@@ -204,7 +204,7 @@ public:
        data::ElementPtr info = PacketQueue<PacketTypePtr>::getInfo();
        info->set("capacity", data::Element::create(static_cast<int64_t>(getCapacity())));
        info->set("size", data::Element::create(static_cast<int64_t>(getSize())));
-       return(info);
+       return (info);
     }
 
 private:
index 59d1bc1d32c4afeabb424072cdaf429c733365bf..398f05d135679f36eaa8cf8a93beab6b24cef109 100644 (file)
@@ -485,8 +485,8 @@ protected:
     /// Currently it is a no-op, it always returns NULL.
     ///
     /// @return always NULL
-    virtual HWAddrPtr getMACFromRemoteIdRelayOption(){
-        return(HWAddrPtr());
+    virtual HWAddrPtr getMACFromRemoteIdRelayOption() {
+        return (HWAddrPtr());
     }
 
     /// @brief local HW address (dst if receiving packet, src if sending packet)
index bc0cd6a81b9d5ef22e7778d3fbbd4e6332d27c48..a5f527e1a16ef85c73efb262f6bfe43c33879e6a 100644 (file)
@@ -93,6 +93,9 @@ RECORD_DECL(UUID_GUID_RECORDS, OPT_UINT8_TYPE, OPT_BINARY_TYPE);
 RECORD_DECL(V4_RDNSS_SELECT_RECORDS, OPT_UINT8_TYPE, OPT_IPV4_ADDRESS_TYPE,
             OPT_IPV4_ADDRESS_TYPE, OPT_FQDN_TYPE);
 
+// RFC6926 DHCPv4 Bulk Leasequery Status Code option.
+RECORD_DECL(V4_STATUS_CODE_RECORDS, OPT_UINT8_TYPE, OPT_STRING_TYPE);
+
 // RFC7618 DHCPv4 Port Parameter option.
 //
 // PSID offset, PSID-len and PSID
@@ -345,6 +348,20 @@ const OptionDefParams STANDARD_V4_OPTION_DEFINITIONS[] = {
       OPT_FQDN_TYPE, true, NO_RECORD_DEF, "" },
     { "rdnss-selection", DHO_RDNSS_SELECT, DHCP4_OPTION_SPACE, OPT_RECORD_TYPE,
       true, RECORD_DEF(V4_RDNSS_SELECT_RECORDS), "" },
+    { "status-code", DHO_STATUS_CODE, DHCP4_OPTION_SPACE,
+      OPT_RECORD_TYPE, false, RECORD_DEF(V4_STATUS_CODE_RECORDS), "" },
+    { "base-time", DHO_BASE_TIME, DHCP4_OPTION_SPACE,
+      OPT_UINT32_TYPE, false, NO_RECORD_DEF, "" },
+    { "start-time-of-state", DHO_START_TIME_OF_STATE, DHCP4_OPTION_SPACE,
+      OPT_UINT32_TYPE, false, NO_RECORD_DEF, "" },
+    { "query-start-time", DHO_QUERY_START_TIME, DHCP4_OPTION_SPACE,
+      OPT_UINT32_TYPE, false, NO_RECORD_DEF, "" },
+    { "query-end-time", DHO_QUERY_END_TIME, DHCP4_OPTION_SPACE,
+      OPT_UINT32_TYPE, false, NO_RECORD_DEF, "" },
+    { "dhcp-state", DHO_DHCP_STATE, DHCP4_OPTION_SPACE,
+      OPT_UINT8_TYPE, false, NO_RECORD_DEF, "" },
+    { "data-source", DHO_DATA_SOURCE, DHCP4_OPTION_SPACE,
+      OPT_UINT8_TYPE, false, NO_RECORD_DEF, "" },
     { "v4-portparams", DHO_V4_PORTPARAMS, DHCP4_OPTION_SPACE, OPT_RECORD_TYPE,
       false, RECORD_DEF(V4_PORTPARAMS_RECORDS), "" },
     { "option-6rd", DHO_6RD, DHCP4_OPTION_SPACE, OPT_RECORD_TYPE, true,
@@ -403,7 +420,7 @@ RECORD_DECL(S46_V4V6BIND, OPT_IPV4_ADDRESS_TYPE, OPT_IPV6_PREFIX_TYPE);
 // s46-portparams
 RECORD_DECL(S46_PORTPARAMS, OPT_UINT8_TYPE, OPT_PSID_TYPE);
 // status-code
-RECORD_DECL(STATUS_CODE_RECORDS, OPT_UINT16_TYPE, OPT_STRING_TYPE);
+RECORD_DECL(V6_STATUS_CODE_RECORDS, OPT_UINT16_TYPE, OPT_STRING_TYPE);
 // vendor-class
 RECORD_DECL(VENDOR_CLASS_RECORDS, OPT_UINT32_TYPE, OPT_BINARY_TYPE);
 // rdnss-selection
@@ -458,7 +475,7 @@ const OptionDefParams STANDARD_V6_OPTION_DEFINITIONS[] = {
     { "unicast", D6O_UNICAST, DHCP6_OPTION_SPACE, OPT_IPV6_ADDRESS_TYPE,
       false, NO_RECORD_DEF, "" },
     { "status-code", D6O_STATUS_CODE, DHCP6_OPTION_SPACE, OPT_RECORD_TYPE,
-      false, RECORD_DEF(STATUS_CODE_RECORDS), "" },
+      false, RECORD_DEF(V6_STATUS_CODE_RECORDS), "" },
     { "rapid-commit", D6O_RAPID_COMMIT, DHCP6_OPTION_SPACE, OPT_EMPTY_TYPE,
       false, NO_RECORD_DEF, "" },
     { "user-class", D6O_USER_CLASS, DHCP6_OPTION_SPACE, OPT_BINARY_TYPE,
index 89435966444da3ee25e156525037e8618f161c53..608b1e7488f2479c8ff67c2336003731de0e798f 100644 (file)
@@ -2134,6 +2134,35 @@ TEST_F(LibDhcpTest, stdOptionDefs4) {
                                     rdnss_buf.end(),
                                     typeid(OptionCustom));
 
+    // Initialize test buffer for Vendor Class option.
+    const char status_code_data[] = {
+        0x02, 0x65, 0x72, 0x72, 0x6f, 0x72
+    };
+    std::vector<uint8_t> status_code_buf(status_code_data,
+                                         status_code_data + sizeof(status_code_data));
+
+    LibDhcpTest::testStdOptionDefs4(DHO_STATUS_CODE, status_code_buf.begin(),
+                                    status_code_buf.end(),
+                                    typeid(OptionCustom));
+
+    LibDhcpTest::testStdOptionDefs4(DHO_BASE_TIME, begin, begin + 4,
+                                    typeid(OptionInt<uint32_t>));
+
+    LibDhcpTest::testStdOptionDefs4(DHO_START_TIME_OF_STATE, begin, begin + 4,
+                                    typeid(OptionInt<uint32_t>));
+
+    LibDhcpTest::testStdOptionDefs4(DHO_QUERY_START_TIME, begin, begin + 4,
+                                    typeid(OptionInt<uint32_t>));
+
+    LibDhcpTest::testStdOptionDefs4(DHO_QUERY_END_TIME, begin, begin + 4,
+                                    typeid(OptionInt<uint32_t>));
+
+    LibDhcpTest::testStdOptionDefs4(DHO_DHCP_STATE, begin, begin + 1,
+                                    typeid(OptionInt<uint8_t>));
+
+    LibDhcpTest::testStdOptionDefs4(DHO_DATA_SOURCE, begin, begin + 1,
+                                    typeid(OptionInt<uint8_t>));
+
     LibDhcpTest::testStdOptionDefs4(DHO_V4_PORTPARAMS, begin, begin + 4,
                                     typeid(OptionCustom));
 
@@ -2206,14 +2235,14 @@ TEST_F(LibDhcpTest, stdOptionDefs6) {
         0x00, 0x01, 0x02
     };
     std::vector<uint8_t> vclass_buf(vclass_data,
-                                    vclass_data + sizeof(vclass_data));;
+                                    vclass_data + sizeof(vclass_data));
 
     // Initialize test buffer for Bootfile Param option.
     const char bparam_data[] = {
         0x00, 0x01, 0x02
     };
     std::vector<uint8_t> bparam_buf(bparam_data,
-                                    bparam_data + sizeof(bparam_data));;
+                                    bparam_data + sizeof(bparam_data));
 
     // The actual test starts here for all supported option codes.
     LibDhcpTest::testStdOptionDefs6(D6O_CLIENTID, begin, end,