blob: ebfa93a505bd857542771694f9d70f008490b4b9 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
|
/* 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));
}
#define NEXTOPT(x) \
x = ((struct dhcpv6_option *)x)->len ? \
(struct dhcpv6_option *)((char *)x + (ntohs(((struct dhcpv6_option *)x)->len) + sizeof(struct dhcpv6_option))) : \
NULL
/* 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] */
|