/* these structures are word aligned */ #pragma pack(push) #pragma pack(2) struct vlan_tag { u_int16_t v_tpid; u_int16_t v_tci; }; struct dhcpv6_msg { /* [RFC3315] ch 6 */ u_int8_t msg_type; /* Message type */ u_int8_t xid[3]; /* transaction-id */ char options[]; /* options */ }; struct dhcpv6_relay_msg { /* [RFC3315] ch 7 */ u_int8_t msg_type; /* Message type */ u_int8_t hop_count; /* hop count */ struct in6_addr link_addr; /* link address */ struct in6_addr peer_addr; /* peer address */ char options[]; /* options */ }; struct dhcpv6_option { /* [RFC3315] generic option */ u_int16_t code; /* option-code */ u_int16_t len; /* option-len */ char data[]; /* any */ }; #pragma pack(pop) static struct dhcpv6_option *nextopt(const struct dhcpv6_option *opt) { return (struct dhcpv6_option *)((char *)opt + sizeof(struct dhcpv6_option) + ntohs(opt->len)); } /* all the following are ref http://www.iana.org/assignments/dhcpv6-parameters/dhcpv6-parameters.xml */ /* message types */ /* 0 Reserved */ #define DHCPV6_SOLICIT 1 /* [RFC3315] */ #define DHCPV6_ADVERTISE 2 /* [RFC3315] */ #define DHCPV6_REQUEST 3 /* [RFC3315] */ #define DHCPV6_CONFIRM 4 /* [RFC3315] */ #define DHCPV6_RENEW 5 /* [RFC3315] */ #define DHCPV6_REBIND 6 /* [RFC3315] */ #define DHCPV6_REPLY 7 /* [RFC3315] */ #define DHCPV6_RELEASE 8 /* [RFC3315] */ #define DHCPV6_DECLINE 9 /* [RFC3315] */ #define DHCPV6_RECONFIGURE 10 /* [RFC3315] */ #define DHCPV6_INFORMATION_REQ 11 /* [RFC3315] */ #define DHCPV6_RELAY_FORW 12 /* [RFC3315] */ #define DHCPV6_RELAY_REPL 13 /* [RFC3315] */ #define DHCPV6_LEASEQUERY 14 /* [RFC5007] */ #define DHCPV6_LEASEQUERY_REPLY 15 /* [RFC5007] */ #define DHCPV6_LEASEQUERY_DONE 16 /* [RFC5460] */ #define DHCPV6_LEASEQUERY_DATA 17 /* [RFC5460] */ /* 18-255 Unassigned */ /* option codes */ /* 0 Reserved */ #define OPTION_CLIENTID 1 /* [RFC3315] */ #define OPTION_SERVERID 2 /* [RFC3315] */ #define OPTION_IA_NA 3 /* [RFC3315] */ #define OPTION_IA_TA 4 /* [RFC3315] */ #define OPTION_IAADDR 5 /* [RFC3315] */ #define OPTION_ORO 6 /* [RFC3315] */ #define OPTION_PREFERENCE 7 /* [RFC3315] */ #define OPTION_ELAPSED_TIME 8 /* [RFC3315] */ #define OPTION_RELAY_MSG 9 /* [RFC3315] */ /* 10 Unassigned */ #define OPTION_AUTH 11 /* [RFC3315] */ #define OPTION_UNICAST 12 /* [RFC3315] */ #define OPTION_STATUS_CODE 13 /* [RFC3315] */ #define OPTION_RAPID_COMMIT 14 /* [RFC3315] */ #define OPTION_USER_CLASS 15 /* [RFC3315] */ #define OPTION_VENDOR_CLASS 16 /* [RFC3315] */ #define OPTION_VENDOR_OPTS 17 /* [RFC3315] */ #define OPTION_INTERFACE_ID 18 /* [RFC3315] */ #define OPTION_RECONF_MSG 19 /* [RFC3315] */ #define OPTION_RECONF_ACCEPT 20 /* [RFC3315] */ /* 21 SIP Servers Domain Name List [RFC3319] */ /* 22 SIP Servers IPv6 Address List [RFC3319] */ /* 23 DNS Recursive Name Server Option [RFC3646] */ /* 24 Domain Search List option [RFC3646] */ #define OPTION_IA_PD 25 /* [RFC3633] */ #define OPTION_IAPREFIX 26 /* [RFC3633] */ #define OPTION_NIS_SERVERS 27 /* [RFC3898] */ #define OPTION_NISP_SERVERS 28 /* [RFC3898] */ #define OPTION_NIS_DOMAIN_NAME 29 /* [RFC3898] */ #define OPTION_NISP_DOMAIN_NAME 30 /* [RFC3898] */ #define OPTION_SNTP_SERVERS 31 /* [RFC4075] */ #define OPTION_INFORMATION_REFRESH_TIME 32 /* [RFC4242] */ #define OPTION_BCMCS_SERVER_D 33 /* [RFC4280] */ #define OPTION_BCMCS_SERVER_A 34 /* [RFC4280] */ /* 35 Unassigned */ #define OPTION_GEOCONF_CIVIC 36 /* [RFC4776] */ #define OPTION_REMOTE_ID 37 /* [RFC4649] */ #define OPTION_SUBSCRIBER_ID 38 /* [RFC4580] */ #define OPTION_CLIENT_FQDN 39 /* [RFC4704] */ #define OPTION_PANA_AGENT 40 /* [RFC5192] */ #define OPTION_NEW_POSIX_TIMEZONE 41 /* [RFC4833] */ #define OPTION_NEW_TZDB_TIMEZONE 42 /* [RFC4833] */ #define OPTION_ERO 43 /* [RFC4994] */ #define OPTION_LQ_QUERY 44 /* [RFC5007] */ #define OPTION_CLIENT_DATA 45 /* [RFC5007] */ #define OPTION_CLT_TIME 46 /* [RFC5007] */ #define OPTION_LQ_RELAY_DATA 47 /* [RFC5007] */ #define OPTION_LQ_CLIENT_LINK 48 /* [RFC5007] */ #define OPTION_MIP6_HNINF 49 /* [RFC-ietf-mip6-hiopt-17] */ #define OPTION_MIP6_RELAY 50 /* [RFC-ietf-mip6-hiopt-17] */ #define OPTION_V6_LOST 51 /* [RFC5223] */ #define OPTION_CAPWAP_AC_V6 52 /* [RFC5417] */ #define OPTION_RELAY_ID 53 /* [RFC5460] */ #define OPTION_IPv6_Address_MoS 54 /* [RFC5678] */ #define OPTION_IPv6_FQDN_MoS 55 /* [RFC5678] */ #define OPTION_NTP_SERVER 56 /* [RFC5908] */ #define OPTION_V6_ACCESS_DOMAIN 57 /* [RFC5986] */ #define OPTION_SIP_UA_CS_LIST 58 /* [RFC6011] */ #define OPT_BOOTFILE_URL 59 /* [RFC5970] */ #define OPT_BOOTFILE_PARAM 60 /* [RFC5970] */ #define OPTION_CLIENT_ARCH_TYPE 61 /* [RFC5970] */ #define OPTION_NII 62 /* [RFC5970] */ #define OPTION_GEOLOCATION 63 /* [RFC6225] */ #define OPTION_AFTR_NAME 64 /* [RFC6334] */ #define OPTION_ERP_LOCAL_DOMAIN_NAME 65 /* [RFC-ietf-hokey-ldn-discovery-10] */ #define OPTION_RSOO 66 /* [RFC-ietf-dhc-dhcpv6-relay-supplied-options-09] */ /* 67-255 Unassigned */ /* Status Codes */ #define Success 0 /* [RFC3315] */ #define UnspecFail 1 /* [RFC3315] */ #define NoAddrsAvail 2 /* [RFC3315] */ #define NoBinding 3 /* [RFC3315] */ #define NotOnLink 4 /* [RFC3315] */ #define UseMulticast 5 /* [RFC3315] */ #define NoPrefixAvail 6 /* [RFC3633] */ #define UnknownQueryType 7 /* [RFC5007] */ #define MalformedQuery 8 /* [RFC5007] */ #define NotConfigured 9 /* [RFC5007] */ #define NotAllowed 10 /* [RFC5007] */ #define QueryTerminated 11 /* [RFC5460] */ /* 12-255 Unassigned */ /* DUID types */ #define DUID_LLT 1 /* [RFC3315] */ #define DUID_EN 2 /* [RFC3315] */ #define DUID_LL 3 /* [RFC3315] */ #define DUID_UUID 4 /* [RFC6355] */