Browse Source

odhcp6c: align further with RFC8415

Align acceptable options in the ORO list further with RFC8415; where
appropriate add send option support for the newly added options.

Signed-off-by: Hans Dedecker <dedeckeh@gmail.com>
Hans Dedecker 5 years ago
parent
commit
d2e247d8d8
2 changed files with 96 additions and 0 deletions
  1. 48 0
      src/odhcp6c.c
  2. 48 0
      src/odhcp6c.h

+ 48 - 0
src/odhcp6c.c

@@ -95,15 +95,31 @@ static struct odhcp6c_opt opts[] = {
 	{ .code = DHCPV6_OPT_IA_PREFIX, .flags = OPT_INTERNAL, .str = NULL },
 	{ .code = DHCPV6_OPT_SNTP_SERVERS, .flags = OPT_IP6 | OPT_ARRAY | OPT_ORO, .str = "sntpservers" },
 	{ .code = DHCPV6_OPT_INFO_REFRESH, .flags = OPT_INTERNAL | OPT_NO_PASSTHRU | OPT_ORO | OPT_ORO_STATELESS, .str = NULL },
+	{ .code = DHCPV6_OPT_REMOTE_ID, .flags = OPT_INTERNAL | OPT_NO_PASSTHRU, .str = NULL },
+	{ .code = DHCPV6_OPT_SUBSCRIBER_ID, .flags = OPT_INTERNAL | OPT_NO_PASSTHRU, .str = NULL },
 	{ .code = DHCPV6_OPT_FQDN, .flags = OPT_INTERNAL | OPT_NO_PASSTHRU | OPT_ORO, .str = NULL },
+	{ .code = DHCPV6_OPT_ERO, .flags = OPT_INTERNAL | OPT_NO_PASSTHRU, .str = NULL },
+	{ .code = DHCPV6_OPT_LQ_QUERY, .flags = OPT_INTERNAL | OPT_NO_PASSTHRU, .str = NULL },
+	{ .code = DHCPV6_OPT_CLIENT_DATA, .flags = OPT_INTERNAL | OPT_NO_PASSTHRU, .str = NULL },
+	{ .code = DHCPV6_OPT_CLT_TIME, .flags = OPT_INTERNAL | OPT_NO_PASSTHRU, .str = NULL },
+	{ .code = DHCPV6_OPT_LQ_RELAY_DATA, .flags = OPT_INTERNAL | OPT_NO_PASSTHRU, .str = NULL },
+	{ .code = DHCPV6_OPT_LQ_CLIENT_LINK, .flags = OPT_INTERNAL | OPT_NO_PASSTHRU, .str = NULL },
+	{ .code = DHCPV6_OPT_RELAY_ID, .flags = OPT_INTERNAL | OPT_NO_PASSTHRU, .str = NULL },
 	{ .code = DHCPV6_OPT_NTP_SERVER, .flags = OPT_U8 | OPT_ORO, .str = "ntpserver" },
+	{ .code = DHCPV6_OPT_CLIENT_ARCH_TYPE, .flags = OPT_INTERNAL | OPT_NO_PASSTHRU, .str = NULL },
 	{ .code = DHCPV6_OPT_AFTR_NAME, .flags = OPT_INTERNAL | OPT_NO_PASSTHRU | OPT_ORO, .str = NULL },
+	{ .code = DHCPV6_OPT_RSOO, .flags = OPT_INTERNAL | OPT_NO_PASSTHRU, .str = NULL },
 	{ .code = DHCPV6_OPT_PD_EXCLUDE, .flags = OPT_INTERNAL | OPT_ORO | OPT_ORO_STATEFUL, .str = NULL },
+	{ .code = DHCPV6_OPT_VSS, .flags = OPT_U8, .str = "vss" },
+	{ .code = DHCPV6_OPT_LINK_LAYER_ADDRESS, .flags = OPT_INTERNAL | OPT_NO_PASSTHRU, .str = NULL },
+	{ .code = DHCPV6_OPT_LINK_ADDRESS, .flags = OPT_INTERNAL | OPT_NO_PASSTHRU, .str = NULL },
+	{ .code = DHCPV6_OPT_RADIUS, .flags = OPT_INTERNAL | OPT_NO_PASSTHRU, .str = NULL },
 	{ .code = DHCPV6_OPT_SOL_MAX_RT, .flags = OPT_INTERNAL | OPT_NO_PASSTHRU | OPT_ORO | OPT_ORO_SOLICIT, .str = NULL },
 	{ .code = DHCPV6_OPT_INF_MAX_RT, .flags = OPT_INTERNAL | OPT_NO_PASSTHRU | OPT_ORO | OPT_ORO_STATELESS, .str = NULL },
 #ifdef EXT_CER_ID
 	{ .code = DHCPV6_OPT_CER_ID, .flags = OPT_INTERNAL | OPT_NO_PASSTHRU, .str = NULL },
 #endif
+	{ .code = DHCPV6_OPT_DHCPV4_MSG, .flags = OPT_INTERNAL | OPT_NO_PASSTHRU, .str = NULL },
 	{ .code = DHCPV6_OPT_S46_RULE, .flags = OPT_INTERNAL | OPT_NO_PASSTHRU, .str = NULL },
 	{ .code = DHCPV6_OPT_S46_BR, .flags = OPT_INTERNAL | OPT_NO_PASSTHRU, .str = NULL },
 	{ .code = DHCPV6_OPT_S46_DMR, .flags = OPT_INTERNAL | OPT_NO_PASSTHRU, .str = NULL },
@@ -112,6 +128,38 @@ static struct odhcp6c_opt opts[] = {
 	{ .code = DHCPV6_OPT_S46_CONT_MAPE, .flags = OPT_INTERNAL | OPT_NO_PASSTHRU | OPT_ORO, .str = NULL },
 	{ .code = DHCPV6_OPT_S46_CONT_MAPT, .flags = OPT_INTERNAL | OPT_NO_PASSTHRU | OPT_ORO, .str = NULL },
 	{ .code = DHCPV6_OPT_S46_CONT_LW, .flags = OPT_INTERNAL | OPT_NO_PASSTHRU | OPT_ORO, .str = NULL },
+	{ .code = DHCPV6_OPT_LQ_BASE_TIME, .flags = OPT_INTERNAL | OPT_NO_PASSTHRU, .str = NULL },
+	{ .code = DHCPV6_OPT_LQ_START_TIME, .flags = OPT_INTERNAL | OPT_NO_PASSTHRU, .str = NULL },
+	{ .code = DHCPV6_OPT_LQ_END_TIME, .flags = OPT_INTERNAL | OPT_NO_PASSTHRU, .str = NULL },
+	{ .code = DHCPV6_OPT_ANI_ATT, .flags = OPT_INTERNAL | OPT_NO_PASSTHRU, .str = NULL },
+	{ .code = DHCPV6_OPT_ANI_NETWORK_NAME, .flags = OPT_INTERNAL | OPT_NO_PASSTHRU, .str = NULL },
+	{ .code = DHCPV6_OPT_ANI_AP_NAME, .flags = OPT_INTERNAL | OPT_NO_PASSTHRU, .str = NULL },
+	{ .code = DHCPV6_OPT_ANI_AP_BSSID, .flags = OPT_INTERNAL | OPT_NO_PASSTHRU, .str = NULL },
+	{ .code = DHCPV6_OPT_ANI_OPERATOR_ID, .flags = OPT_INTERNAL | OPT_NO_PASSTHRU, .str = NULL },
+	{ .code = DHCPV6_OPT_ANI_OPERATOR_REALM, .flags = OPT_INTERNAL | OPT_NO_PASSTHRU, .str = NULL },
+	{ .code = DHCPV6_OPT_MUD_URL_V6, .flags = OPT_STR | OPT_NO_PASSTHRU, .str = "mud_url_v6" },
+	{ .code = DHCPV6_OPT_F_BINDING_STATUS, .flags = OPT_INTERNAL | OPT_NO_PASSTHRU, .str = NULL },
+	{ .code = DHCPV6_OPT_F_CONNECT_FLAGS, .flags = OPT_INTERNAL | OPT_NO_PASSTHRU, .str = NULL },
+	{ .code = DHCPV6_OPT_F_DNS_REMOVAL_INFO, .flags = OPT_INTERNAL | OPT_NO_PASSTHRU, .str = NULL },
+	{ .code = DHCPV6_OPT_F_DNS_HOST_NAME, .flags = OPT_INTERNAL | OPT_NO_PASSTHRU, .str = NULL },
+	{ .code = DHCPV6_OPT_F_DNS_ZONE_NAME, .flags = OPT_INTERNAL | OPT_NO_PASSTHRU, .str = NULL },
+	{ .code = DHCPV6_OPT_F_DNS_FLAGS, .flags = OPT_INTERNAL | OPT_NO_PASSTHRU, .str = NULL },
+	{ .code = DHCPV6_OPT_F_EXPIRATION_TIME, .flags = OPT_INTERNAL | OPT_NO_PASSTHRU, .str = NULL },
+	{ .code = DHCPV6_OPT_F_MAX_UNACKED_BNDUPD, .flags = OPT_INTERNAL | OPT_NO_PASSTHRU, .str = NULL },
+	{ .code = DHCPV6_OPT_F_MCLT, .flags = OPT_INTERNAL | OPT_NO_PASSTHRU, .str = NULL },
+	{ .code = DHCPV6_OPT_F_PARTNER_LIFETIME, .flags = OPT_INTERNAL | OPT_NO_PASSTHRU, .str = NULL },
+	{ .code = DHCPV6_OPT_F_PARTNER_LIFETIME_SENT, .flags = OPT_INTERNAL | OPT_NO_PASSTHRU, .str = NULL },
+	{ .code = DHCPV6_OPT_F_PARTNER_DOWN_TIME, .flags = OPT_INTERNAL | OPT_NO_PASSTHRU, .str = NULL },
+	{ .code = DHCPV6_OPT_F_PARTNER_RAW_CLT_TIME, .flags = OPT_INTERNAL | OPT_NO_PASSTHRU, .str = NULL },
+	{ .code = DHCPV6_OPT_F_PROTOCOL_VERSION, .flags = OPT_INTERNAL | OPT_NO_PASSTHRU, .str = NULL },
+	{ .code = DHCPV6_OPT_F_KEEPALIVE_TIME, .flags = OPT_INTERNAL | OPT_NO_PASSTHRU, .str = NULL },
+	{ .code = DHCPV6_OPT_F_RECONFIGURE_DATA, .flags = OPT_INTERNAL | OPT_NO_PASSTHRU, .str = NULL },
+	{ .code = DHCPV6_OPT_F_RELATIONSHIP_NAME, .flags = OPT_INTERNAL | OPT_NO_PASSTHRU, .str = NULL },
+	{ .code = DHCPV6_OPT_F_SERVER_FLAGS, .flags = OPT_INTERNAL | OPT_NO_PASSTHRU, .str = NULL },
+	{ .code = DHCPV6_OPT_F_SERVER_STATE, .flags = OPT_INTERNAL | OPT_NO_PASSTHRU, .str = NULL },
+	{ .code = DHCPV6_OPT_F_START_TIME_OF_STATE, .flags = OPT_INTERNAL | OPT_NO_PASSTHRU, .str = NULL },
+	{ .code = DHCPV6_OPT_F_STATE_EXPIRATION_TIME, .flags = OPT_INTERNAL | OPT_NO_PASSTHRU, .str = NULL },
+	{ .code = DHCPV6_OPT_RELAY_PORT, .flags = OPT_INTERNAL | OPT_NO_PASSTHRU, .str = NULL },
 	{ .code = 0, .flags = 0, .str = NULL },
 };
 

+ 48 - 0
src/odhcp6c.h

@@ -62,16 +62,32 @@ enum dhcvp6_opt {
 	DHCPV6_OPT_IA_PREFIX = 26,
 	DHCPV6_OPT_SNTP_SERVERS = 31,
 	DHCPV6_OPT_INFO_REFRESH = 32,
+	DHCPV6_OPT_REMOTE_ID = 37,
+	DHCPV6_OPT_SUBSCRIBER_ID = 38,
 	DHCPV6_OPT_FQDN = 39,
+	DHCPV6_OPT_ERO = 43,
+	DHCPV6_OPT_LQ_QUERY = 44,
+	DHCPV6_OPT_CLIENT_DATA = 45,
+	DHCPV6_OPT_CLT_TIME = 46,
+	DHCPV6_OPT_LQ_RELAY_DATA = 47,
+	DHCPV6_OPT_LQ_CLIENT_LINK = 48,
+	DHCPV6_OPT_RELAY_ID = 53,
 	DHCPV6_OPT_NTP_SERVER = 56,
+	DHCPV6_OPT_CLIENT_ARCH_TYPE = 61,
 	DHCPV6_OPT_AFTR_NAME = 64,
+	DHCPV6_OPT_RSOO = 66,
 	DHCPV6_OPT_PD_EXCLUDE = 67,
+	DHCPV6_OPT_VSS = 68,
+	DHCPV6_OPT_LINK_LAYER_ADDRESS = 79,
+	DHCPV6_OPT_LINK_ADDRESS = 80,
+	DHCPV6_OPT_RADIUS = 81,
 	DHCPV6_OPT_SOL_MAX_RT = 82,
 	DHCPV6_OPT_INF_MAX_RT = 83,
 #ifdef EXT_CER_ID
 	/* draft-donley-dhc-cer-id-option-03 */
 	DHCPV6_OPT_CER_ID = EXT_CER_ID,
 #endif
+	DHCPV6_OPT_DHCPV4_MSG = 87,
 	/* draft-ietf-softwire-map-dhcp-08 */
 	DHCPV6_OPT_S46_RULE = 89,
 	DHCPV6_OPT_S46_BR = 90,
@@ -81,6 +97,38 @@ enum dhcvp6_opt {
 	DHCPV6_OPT_S46_CONT_MAPE = 94,
 	DHCPV6_OPT_S46_CONT_MAPT = 95,
 	DHCPV6_OPT_S46_CONT_LW = 96,
+	DHCPV6_OPT_LQ_BASE_TIME = 100,
+	DHCPV6_OPT_LQ_START_TIME = 101,
+	DHCPV6_OPT_LQ_END_TIME = 102,
+	DHCPV6_OPT_ANI_ATT = 105,
+	DHCPV6_OPT_ANI_NETWORK_NAME = 106,
+	DHCPV6_OPT_ANI_AP_NAME = 107,
+	DHCPV6_OPT_ANI_AP_BSSID = 108,
+	DHCPV6_OPT_ANI_OPERATOR_ID = 109,
+	DHCPV6_OPT_ANI_OPERATOR_REALM = 110,
+	DHCPV6_OPT_MUD_URL_V6 = 112,
+	DHCPV6_OPT_F_BINDING_STATUS = 114,
+	DHCPV6_OPT_F_CONNECT_FLAGS = 115,
+	DHCPV6_OPT_F_DNS_REMOVAL_INFO = 116,
+	DHCPV6_OPT_F_DNS_HOST_NAME = 117,
+	DHCPV6_OPT_F_DNS_ZONE_NAME = 118,
+	DHCPV6_OPT_F_DNS_FLAGS = 119,
+	DHCPV6_OPT_F_EXPIRATION_TIME = 120,
+	DHCPV6_OPT_F_MAX_UNACKED_BNDUPD = 121,
+	DHCPV6_OPT_F_MCLT = 122,
+	DHCPV6_OPT_F_PARTNER_LIFETIME = 123,
+	DHCPV6_OPT_F_PARTNER_LIFETIME_SENT = 124,
+	DHCPV6_OPT_F_PARTNER_DOWN_TIME = 125,
+	DHCPV6_OPT_F_PARTNER_RAW_CLT_TIME = 126,
+	DHCPV6_OPT_F_PROTOCOL_VERSION = 127,
+	DHCPV6_OPT_F_KEEPALIVE_TIME = 128,
+	DHCPV6_OPT_F_RECONFIGURE_DATA = 129,
+	DHCPV6_OPT_F_RELATIONSHIP_NAME = 130,
+	DHCPV6_OPT_F_SERVER_FLAGS = 131,
+	DHCPV6_OPT_F_SERVER_STATE = 132,
+	DHCPV6_OPT_F_START_TIME_OF_STATE = 133,
+	DHCPV6_OPT_F_STATE_EXPIRATION_TIME  = 134,
+	DHCPV6_OPT_RELAY_PORT = 135,
 };
 
 enum dhcpv6_opt_npt {