diff --git a/doc/sphinx/arm/dhcp6-srv.rst b/doc/sphinx/arm/dhcp6-srv.rst index bf1739649a..f86fe26c10 100644 --- a/doc/sphinx/arm/dhcp6-srv.rst +++ b/doc/sphinx/arm/dhcp6-srv.rst @@ -1858,6 +1858,8 @@ types are given in :ref:`dhcp-types`. | | | uint16, fqdn, | | | | | binary) | | +--------------------------+-----------------+-----------------+-----------------+ + | addr-reg-enable | 148 | empty | false | + +--------------------------+-----------------+-----------------+-----------------+ Options marked with (1) have option definitions, but the logic behind them is not implemented. That means that, technically, Kea knows how to diff --git a/src/lib/dhcp/dhcp6.h b/src/lib/dhcp/dhcp6.h index cc7574a40f..1afbfbfc5d 100644 --- a/src/lib/dhcp/dhcp6.h +++ b/src/lib/dhcp/dhcp6.h @@ -154,9 +154,19 @@ enum DHCPv6OptionType { // D6O_F_STATE_EXPIRATION_TIME = 134, /* RFC8156 */ D6O_RELAY_SOURCE_PORT = 135, /* RFC8357 */ D6O_V6_SZTP_REDIRECT = 136, /* RFC8572 */ - // Option codes 137-142 are unassigned. +// D6O_S46_BIND_IPV6_PREFIX = 137, /* RFC8539 */ +// D6O_IA_LL = 138, /* RFC8947 */ +// D6O_LLADDR = 139, /* RFC8947 */ +// D6O_SLAP_QUAD = 140, /* RFC8958 */ +// D6O_V6_DOTS_RI = 141, /* RFC8973 */ +// D6O_V6_DOTS_ADDRESS = 142, /* RFC8973 */ D6O_IPV6_ADDRESS_ANDSF = 143, /* RFC6153 */ - D6O_V6_DNR = 144 /* RFC9463 */ + D6O_V6_DNR = 144, /* RFC9463 */ +// D6O_REGISTERED_DOMAIN = 145, /* RFC9527 */ +// D6O_FORWARD_DIST_MANAGER = 146, /* RFC9527 */ +// D6O_REVERSE_DIST_MANAGER = 147, /* RFC9527 */ + D6O_ADDR_REG_ENABLE = 148 /* RFC3683 */ +// 149 and 150 temporary assigned. }; /* @@ -236,6 +246,8 @@ enum DHCPv6MessageType { DHCPV6_DISCONNECT = 33, DHCPV6_STATE = 34, DHCPV6_CONTACT = 35, + DHCPV6_ADD_REG_INFORM = 36, + DHCPV6_ADD_REG_REPLY = 37, DHCPV6_TYPES_EOF }; diff --git a/src/lib/dhcp/std_option_defs.h b/src/lib/dhcp/std_option_defs.h index ad125a2a1c..887459e9de 100644 --- a/src/lib/dhcp/std_option_defs.h +++ b/src/lib/dhcp/std_option_defs.h @@ -661,7 +661,9 @@ const OptionDefParams STANDARD_V6_OPTION_DEFINITIONS[] = { { "s46-cont-lw", D6O_S46_CONT_LW, DHCP6_OPTION_SPACE, OPT_EMPTY_TYPE, false, NO_RECORD_DEF, LW_V6_OPTION_SPACE }, { "v6-dnr", D6O_V6_DNR, DHCP6_OPTION_SPACE, OPT_INTERNAL_TYPE, - false, NO_RECORD_DEF, "" } + false, NO_RECORD_DEF, "" }, + { "addr-reg-enable", D6O_ADDR_REG_ENABLE, DHCP6_OPTION_SPACE, + OPT_EMPTY_TYPE, false, NO_RECORD_DEF, "" } // @todo There is still a bunch of options for which we have to provide // definitions but we don't do it because they are not really diff --git a/src/lib/dhcp/tests/libdhcp++_unittest.cc b/src/lib/dhcp/tests/libdhcp++_unittest.cc index 43dbd7c4a8..c4a9f8f057 100644 --- a/src/lib/dhcp/tests/libdhcp++_unittest.cc +++ b/src/lib/dhcp/tests/libdhcp++_unittest.cc @@ -3324,6 +3324,9 @@ TEST_F(LibDhcpTest, stdOptionDefs6) { LibDhcpTest::testStdOptionDefs6(D6O_IPV6_ADDRESS_ANDSF, begin, end, typeid(Option6AddrLst)); + LibDhcpTest::testStdOptionDefs6(D6O_ADDR_REG_ENABLE, begin, end, + typeid(Option)); + // RFC7598 options LibDhcpTest::testOptionDefs6(MAPE_V6_OPTION_SPACE, D6O_S46_RULE, begin, end, typeid(OptionCustom), V4V6_RULE_OPTION_SPACE);