From: Razvan Becheriu Date: Mon, 22 Aug 2022 15:13:55 +0000 (+0300) Subject: [#2527] added options 151-157 from RFC6926 X-Git-Tag: Kea-2.3.0~14 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=5126e37b6c2a355d9cd607cd20316e5dfbfd98fb;p=thirdparty%2Fkea.git [#2527] added options 151-157 from RFC6926 --- diff --git a/src/lib/dhcp/dhcp4.h b/src/lib/dhcp/dhcp4.h index 8be31dd67e..042f1e3fda 100644 --- a/src/lib/dhcp/dhcp4.h +++ b/src/lib/dhcp/dhcp4.h @@ -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 diff --git a/src/lib/dhcp/iface_mgr.cc b/src/lib/dhcp/iface_mgr.cc index abb0f27d6f..ebb5bf0a9b 100644 --- a/src/lib/dhcp/iface_mgr.cc +++ b/src/lib/dhcp/iface_mgr.cc @@ -1999,7 +1999,7 @@ IfaceMgr::configureDHCPPacketQueue(uint16_t family, data::ConstElementPtr queue_ } } - return(enable_queue); + return (enable_queue); } void diff --git a/src/lib/dhcp/packet_queue.h b/src/lib/dhcp/packet_queue.h index e3b968bbc8..04affc087b 100644 --- a/src/lib/dhcp/packet_queue.h +++ b/src/lib/dhcp/packet_queue.h @@ -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 diff --git a/src/lib/dhcp/packet_queue_ring.h b/src/lib/dhcp/packet_queue_ring.h index 8fce6ed85b..cd8949de7c 100644 --- a/src/lib/dhcp/packet_queue_ring.h +++ b/src/lib/dhcp/packet_queue_ring.h @@ -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 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::getInfo(); info->set("capacity", data::Element::create(static_cast(getCapacity()))); info->set("size", data::Element::create(static_cast(getSize()))); - return(info); + return (info); } private: diff --git a/src/lib/dhcp/pkt4.h b/src/lib/dhcp/pkt4.h index 59d1bc1d32..398f05d135 100644 --- a/src/lib/dhcp/pkt4.h +++ b/src/lib/dhcp/pkt4.h @@ -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) diff --git a/src/lib/dhcp/std_option_defs.h b/src/lib/dhcp/std_option_defs.h index bc0cd6a81b..a5f527e1a1 100644 --- a/src/lib/dhcp/std_option_defs.h +++ b/src/lib/dhcp/std_option_defs.h @@ -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, diff --git a/src/lib/dhcp/tests/libdhcp++_unittest.cc b/src/lib/dhcp/tests/libdhcp++_unittest.cc index 8943596644..608b1e7488 100644 --- a/src/lib/dhcp/tests/libdhcp++_unittest.cc +++ b/src/lib/dhcp/tests/libdhcp++_unittest.cc @@ -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 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)); + + LibDhcpTest::testStdOptionDefs4(DHO_START_TIME_OF_STATE, begin, begin + 4, + typeid(OptionInt)); + + LibDhcpTest::testStdOptionDefs4(DHO_QUERY_START_TIME, begin, begin + 4, + typeid(OptionInt)); + + LibDhcpTest::testStdOptionDefs4(DHO_QUERY_END_TIME, begin, begin + 4, + typeid(OptionInt)); + + LibDhcpTest::testStdOptionDefs4(DHO_DHCP_STATE, begin, begin + 1, + typeid(OptionInt)); + + LibDhcpTest::testStdOptionDefs4(DHO_DATA_SOURCE, begin, begin + 1, + typeid(OptionInt)); + LibDhcpTest::testStdOptionDefs4(DHO_V4_PORTPARAMS, begin, begin + 4, typeid(OptionCustom)); @@ -2206,14 +2235,14 @@ TEST_F(LibDhcpTest, stdOptionDefs6) { 0x00, 0x01, 0x02 }; std::vector 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 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,