From: Piotrek Zadroga Date: Thu, 23 Mar 2023 11:08:55 +0000 (+0100) Subject: [#2536] Initial definition of DNR options X-Git-Tag: Kea-2.3.8~189 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=03fdf92d17f1cefa786f7bf925eff31b4fc92c8e;p=thirdparty%2Fkea.git [#2536] Initial definition of DNR options --- diff --git a/src/lib/dhcp/dhcp4.h b/src/lib/dhcp/dhcp4.h index 5c163d0ba6..1a320667a8 100644 --- a/src/lib/dhcp/dhcp4.h +++ b/src/lib/dhcp/dhcp4.h @@ -214,7 +214,9 @@ enum DHCPOptionType { DHO_V4_PORTPARAMS = 159, /* RFC7618 */ // 160 used to be assigned in RFC7710, but was removed in RFC8910 // The Captive Portal option now uses code 114. - // 160-209 are removed/unassigned +// DHO_MUD_URL_V4 = 161, /* RFC8520 */ + DHO_V4_DNR = 162, /* RFC-ietf-add-dnr-13 */ + // 163-209 are removed/unassigned // DHO_PATH_PREFIX = 210, /* RFC5071 */ // DHO_REBOOT_TIME = 211, /* RFC5071 */ DHO_6RD = 212, /* RFC5969 */ diff --git a/src/lib/dhcp/dhcp6.h b/src/lib/dhcp/dhcp6.h index 061a1ddf09..fe22236cf3 100644 --- a/src/lib/dhcp/dhcp6.h +++ b/src/lib/dhcp/dhcp6.h @@ -155,7 +155,8 @@ enum DHCPv6OptionType { D6O_RELAY_SOURCE_PORT = 135, /* RFC8357 */ D60_V6_SZTP_REDIRECT = 136, /* RFC8572 */ // Option codes 137-142 are unassigned. - D6O_IPV6_ADDRESS_ANDSF = 143 /* RFC6153 */ + D6O_IPV6_ADDRESS_ANDSF = 143, /* RFC6153 */ + D6O_V6_DNR = 144 /* RFC-ietf-add-dnr-13 */ }; /* diff --git a/src/lib/dhcp/std_option_defs.h b/src/lib/dhcp/std_option_defs.h index f2057d710b..abe28a7f98 100644 --- a/src/lib/dhcp/std_option_defs.h +++ b/src/lib/dhcp/std_option_defs.h @@ -107,6 +107,13 @@ 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, @@ -366,6 +373,8 @@ 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_RECORD_TYPE, + true, RECORD_DEF(V4_DNR_RECORDS), "" }, { "option-6rd", DHO_6RD, DHCP4_OPTION_SPACE, OPT_RECORD_TYPE, true, RECORD_DEF(OPT_6RD_RECORDS), "" }, { "v4-access-domain", DHO_V4_ACCESS_DOMAIN, DHCP4_OPTION_SPACE, @@ -487,6 +496,13 @@ RECORD_DECL(SIGNATURE_RECORDS, OPT_UINT8_TYPE, OPT_UINT8_TYPE, // Three 1 byte fileds to describe a network interface: type, major and minor 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); + /// Standard DHCPv6 option definitions. /// /// @warning in this array, the initializers are provided for all @@ -649,7 +665,9 @@ const OptionDefParams STANDARD_V6_OPTION_DEFINITIONS[] = { { "s46-cont-mapt", D6O_S46_CONT_MAPT, DHCP6_OPTION_SPACE, OPT_EMPTY_TYPE, false, NO_RECORD_DEF, MAPT_V6_OPTION_SPACE }, { "s46-cont-lw", D6O_S46_CONT_LW, DHCP6_OPTION_SPACE, OPT_EMPTY_TYPE, - false, NO_RECORD_DEF, LW_V6_OPTION_SPACE } + false, NO_RECORD_DEF, LW_V6_OPTION_SPACE }, + { "v6-dnr", D6O_V6_DNR, DHCP6_OPTION_SPACE, OPT_RECORD_TYPE, + false, RECORD_DEF(V6_DNR_RECORDS), "" } // @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