xref: /minix3/external/bsd/dhcp/dist/includes/dhcp6.h (revision 83ee113ee0d94f3844d44065af2311604e9a30ad)
1*83ee113eSDavid van Moolenbroek /*	$NetBSD: dhcp6.h,v 1.1.1.2 2014/07/12 11:57:53 spz Exp $	*/
2*83ee113eSDavid van Moolenbroek /* dhcp6.h
3*83ee113eSDavid van Moolenbroek 
4*83ee113eSDavid van Moolenbroek    DHCPv6 Protocol structures... */
5*83ee113eSDavid van Moolenbroek 
6*83ee113eSDavid van Moolenbroek /*
7*83ee113eSDavid van Moolenbroek  * Copyright (c) 2013 by Internet Systems Consortium, Inc. ("ISC")
8*83ee113eSDavid van Moolenbroek  * Copyright (c) 2006-2009 by Internet Systems Consortium, Inc. ("ISC")
9*83ee113eSDavid van Moolenbroek  *
10*83ee113eSDavid van Moolenbroek  * Permission to use, copy, modify, and distribute this software for any
11*83ee113eSDavid van Moolenbroek  * purpose with or without fee is hereby granted, provided that the above
12*83ee113eSDavid van Moolenbroek  * copyright notice and this permission notice appear in all copies.
13*83ee113eSDavid van Moolenbroek  *
14*83ee113eSDavid van Moolenbroek  * THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES
15*83ee113eSDavid van Moolenbroek  * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
16*83ee113eSDavid van Moolenbroek  * MERCHANTABILITY AND FITNESS.  IN NO EVENT SHALL ISC BE LIABLE FOR
17*83ee113eSDavid van Moolenbroek  * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
18*83ee113eSDavid van Moolenbroek  * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
19*83ee113eSDavid van Moolenbroek  * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT
20*83ee113eSDavid van Moolenbroek  * OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
21*83ee113eSDavid van Moolenbroek  *
22*83ee113eSDavid van Moolenbroek  *   Internet Systems Consortium, Inc.
23*83ee113eSDavid van Moolenbroek  *   950 Charter Street
24*83ee113eSDavid van Moolenbroek  *   Redwood City, CA 94063
25*83ee113eSDavid van Moolenbroek  *   <info@isc.org>
26*83ee113eSDavid van Moolenbroek  *   https://www.isc.org/
27*83ee113eSDavid van Moolenbroek  */
28*83ee113eSDavid van Moolenbroek 
29*83ee113eSDavid van Moolenbroek 
30*83ee113eSDavid van Moolenbroek /* DHCPv6 Option codes: */
31*83ee113eSDavid van Moolenbroek 
32*83ee113eSDavid van Moolenbroek #define D6O_CLIENTID				1 /* RFC3315 */
33*83ee113eSDavid van Moolenbroek #define D6O_SERVERID				2
34*83ee113eSDavid van Moolenbroek #define D6O_IA_NA				3
35*83ee113eSDavid van Moolenbroek #define D6O_IA_TA				4
36*83ee113eSDavid van Moolenbroek #define D6O_IAADDR				5
37*83ee113eSDavid van Moolenbroek #define D6O_ORO					6
38*83ee113eSDavid van Moolenbroek #define D6O_PREFERENCE				7
39*83ee113eSDavid van Moolenbroek #define D6O_ELAPSED_TIME			8
40*83ee113eSDavid van Moolenbroek #define D6O_RELAY_MSG				9
41*83ee113eSDavid van Moolenbroek /* Option code 10 unassigned. */
42*83ee113eSDavid van Moolenbroek #define D6O_AUTH				11
43*83ee113eSDavid van Moolenbroek #define D6O_UNICAST				12
44*83ee113eSDavid van Moolenbroek #define D6O_STATUS_CODE				13
45*83ee113eSDavid van Moolenbroek #define D6O_RAPID_COMMIT			14
46*83ee113eSDavid van Moolenbroek #define D6O_USER_CLASS				15
47*83ee113eSDavid van Moolenbroek #define D6O_VENDOR_CLASS			16
48*83ee113eSDavid van Moolenbroek #define D6O_VENDOR_OPTS				17
49*83ee113eSDavid van Moolenbroek #define D6O_INTERFACE_ID			18
50*83ee113eSDavid van Moolenbroek #define D6O_RECONF_MSG				19
51*83ee113eSDavid van Moolenbroek #define D6O_RECONF_ACCEPT			20
52*83ee113eSDavid van Moolenbroek #define D6O_SIP_SERVERS_DNS			21 /* RFC3319 */
53*83ee113eSDavid van Moolenbroek #define D6O_SIP_SERVERS_ADDR			22 /* RFC3319 */
54*83ee113eSDavid van Moolenbroek #define D6O_NAME_SERVERS			23 /* RFC3646 */
55*83ee113eSDavid van Moolenbroek #define D6O_DOMAIN_SEARCH			24 /* RFC3646 */
56*83ee113eSDavid van Moolenbroek #define D6O_IA_PD				25 /* RFC3633 */
57*83ee113eSDavid van Moolenbroek #define D6O_IAPREFIX				26 /* RFC3633 */
58*83ee113eSDavid van Moolenbroek #define D6O_NIS_SERVERS				27 /* RFC3898 */
59*83ee113eSDavid van Moolenbroek #define D6O_NISP_SERVERS			28 /* RFC3898 */
60*83ee113eSDavid van Moolenbroek #define D6O_NIS_DOMAIN_NAME			29 /* RFC3898 */
61*83ee113eSDavid van Moolenbroek #define D6O_NISP_DOMAIN_NAME			30 /* RFC3898 */
62*83ee113eSDavid van Moolenbroek #define D6O_SNTP_SERVERS			31 /* RFC4075 */
63*83ee113eSDavid van Moolenbroek #define D6O_INFORMATION_REFRESH_TIME		32 /* RFC4242 */
64*83ee113eSDavid van Moolenbroek #define D6O_BCMCS_SERVER_D			33 /* RFC4280 */
65*83ee113eSDavid van Moolenbroek #define D6O_BCMCS_SERVER_A			34 /* RFC4280 */
66*83ee113eSDavid van Moolenbroek /* 35 is unassigned */
67*83ee113eSDavid van Moolenbroek #define D6O_GEOCONF_CIVIC			36 /* RFC4776 */
68*83ee113eSDavid van Moolenbroek #define D6O_REMOTE_ID				37 /* RFC4649 */
69*83ee113eSDavid van Moolenbroek #define D6O_SUBSCRIBER_ID			38 /* RFC4580 */
70*83ee113eSDavid van Moolenbroek #define D6O_CLIENT_FQDN				39 /* RFC4704 */
71*83ee113eSDavid van Moolenbroek #define D6O_PANA_AGENT				40 /* paa-option */
72*83ee113eSDavid van Moolenbroek #define D6O_NEW_POSIX_TIMEZONE			41 /* RFC4833 */
73*83ee113eSDavid van Moolenbroek #define D6O_NEW_TZDB_TIMEZONE			42 /* RFC4833 */
74*83ee113eSDavid van Moolenbroek #define D6O_ERO					43 /* RFC4994 */
75*83ee113eSDavid van Moolenbroek #define D6O_LQ_QUERY				44 /* RFC5007 */
76*83ee113eSDavid van Moolenbroek #define D6O_CLIENT_DATA				45 /* RFC5007 */
77*83ee113eSDavid van Moolenbroek #define D6O_CLT_TIME				46 /* RFC5007 */
78*83ee113eSDavid van Moolenbroek #define D6O_LQ_RELAY_DATA			47 /* RFC5007 */
79*83ee113eSDavid van Moolenbroek #define D6O_LQ_CLIENT_LINK			48 /* RFC5007 */
80*83ee113eSDavid van Moolenbroek 
81*83ee113eSDavid van Moolenbroek /*
82*83ee113eSDavid van Moolenbroek  * Status Codes, from RFC 3315 section 24.4, and RFC 3633, 5007.
83*83ee113eSDavid van Moolenbroek  */
84*83ee113eSDavid van Moolenbroek #define STATUS_Success		 0
85*83ee113eSDavid van Moolenbroek #define STATUS_UnspecFail	 1
86*83ee113eSDavid van Moolenbroek #define STATUS_NoAddrsAvail	 2
87*83ee113eSDavid van Moolenbroek #define STATUS_NoBinding	 3
88*83ee113eSDavid van Moolenbroek #define STATUS_NotOnLink	 4
89*83ee113eSDavid van Moolenbroek #define STATUS_UseMulticast	 5
90*83ee113eSDavid van Moolenbroek #define STATUS_NoPrefixAvail	 6
91*83ee113eSDavid van Moolenbroek #define STATUS_UnknownQueryType	 7
92*83ee113eSDavid van Moolenbroek #define STATUS_MalformedQuery	 8
93*83ee113eSDavid van Moolenbroek #define STATUS_NotConfigured	 9
94*83ee113eSDavid van Moolenbroek #define STATUS_NotAllowed	10
95*83ee113eSDavid van Moolenbroek 
96*83ee113eSDavid van Moolenbroek /*
97*83ee113eSDavid van Moolenbroek  * DHCPv6 message types, defined in section 5.3 of RFC 3315
98*83ee113eSDavid van Moolenbroek  */
99*83ee113eSDavid van Moolenbroek #define DHCPV6_SOLICIT		    1
100*83ee113eSDavid van Moolenbroek #define DHCPV6_ADVERTISE	    2
101*83ee113eSDavid van Moolenbroek #define DHCPV6_REQUEST		    3
102*83ee113eSDavid van Moolenbroek #define DHCPV6_CONFIRM		    4
103*83ee113eSDavid van Moolenbroek #define DHCPV6_RENEW		    5
104*83ee113eSDavid van Moolenbroek #define DHCPV6_REBIND		    6
105*83ee113eSDavid van Moolenbroek #define DHCPV6_REPLY		    7
106*83ee113eSDavid van Moolenbroek #define DHCPV6_RELEASE		    8
107*83ee113eSDavid van Moolenbroek #define DHCPV6_DECLINE		    9
108*83ee113eSDavid van Moolenbroek #define DHCPV6_RECONFIGURE	   10
109*83ee113eSDavid van Moolenbroek #define DHCPV6_INFORMATION_REQUEST 11
110*83ee113eSDavid van Moolenbroek #define DHCPV6_RELAY_FORW	   12
111*83ee113eSDavid van Moolenbroek #define DHCPV6_RELAY_REPL	   13
112*83ee113eSDavid van Moolenbroek #define DHCPV6_LEASEQUERY	   14
113*83ee113eSDavid van Moolenbroek #define DHCPV6_LEASEQUERY_REPLY    15
114*83ee113eSDavid van Moolenbroek 
115*83ee113eSDavid van Moolenbroek extern const char *dhcpv6_type_names[];
116*83ee113eSDavid van Moolenbroek extern const int dhcpv6_type_name_max;
117*83ee113eSDavid van Moolenbroek 
118*83ee113eSDavid van Moolenbroek /* DUID type definitions (RFC3315 section 9).
119*83ee113eSDavid van Moolenbroek  */
120*83ee113eSDavid van Moolenbroek #define DUID_LLT	1
121*83ee113eSDavid van Moolenbroek #define DUID_EN		2
122*83ee113eSDavid van Moolenbroek #define DUID_LL		3
123*83ee113eSDavid van Moolenbroek 
124*83ee113eSDavid van Moolenbroek /* Offsets into IA_*'s where Option spaces commence.  */
125*83ee113eSDavid van Moolenbroek #define IA_NA_OFFSET 12 /* IAID, T1, T2, all 4 octets each */
126*83ee113eSDavid van Moolenbroek #define IA_TA_OFFSET  4 /* IAID only, 4 octets */
127*83ee113eSDavid van Moolenbroek #define IA_PD_OFFSET 12 /* IAID, T1, T2, all 4 octets each */
128*83ee113eSDavid van Moolenbroek 
129*83ee113eSDavid van Moolenbroek /* Offset into IAADDR's where Option spaces commence. */
130*83ee113eSDavid van Moolenbroek #define IAADDR_OFFSET 24
131*83ee113eSDavid van Moolenbroek 
132*83ee113eSDavid van Moolenbroek /* Offset into IAPREFIX's where Option spaces commence. */
133*83ee113eSDavid van Moolenbroek #define IAPREFIX_OFFSET 25
134*83ee113eSDavid van Moolenbroek 
135*83ee113eSDavid van Moolenbroek /* Offset into LQ_QUERY's where Option spaces commence. */
136*83ee113eSDavid van Moolenbroek #define LQ_QUERY_OFFSET 17
137*83ee113eSDavid van Moolenbroek 
138*83ee113eSDavid van Moolenbroek /*
139*83ee113eSDavid van Moolenbroek  * DHCPv6 well-known multicast addressess, from section 5.1 of RFC 3315
140*83ee113eSDavid van Moolenbroek  */
141*83ee113eSDavid van Moolenbroek #define All_DHCP_Relay_Agents_and_Servers "FF02::1:2"
142*83ee113eSDavid van Moolenbroek #define All_DHCP_Servers "FF05::1:3"
143*83ee113eSDavid van Moolenbroek 
144*83ee113eSDavid van Moolenbroek /*
145*83ee113eSDavid van Moolenbroek  * DHCPv6 Retransmission Constants (RFC3315 section 5.5, RFC 5007)
146*83ee113eSDavid van Moolenbroek  */
147*83ee113eSDavid van Moolenbroek 
148*83ee113eSDavid van Moolenbroek #define SOL_MAX_DELAY     1
149*83ee113eSDavid van Moolenbroek #define SOL_TIMEOUT       1
150*83ee113eSDavid van Moolenbroek #define SOL_MAX_RT      120
151*83ee113eSDavid van Moolenbroek #define REQ_TIMEOUT       1
152*83ee113eSDavid van Moolenbroek #define REQ_MAX_RT       30
153*83ee113eSDavid van Moolenbroek #define REQ_MAX_RC       10
154*83ee113eSDavid van Moolenbroek #define CNF_MAX_DELAY     1
155*83ee113eSDavid van Moolenbroek #define CNF_TIMEOUT       1
156*83ee113eSDavid van Moolenbroek #define CNF_MAX_RT        4
157*83ee113eSDavid van Moolenbroek #define CNF_MAX_RD       10
158*83ee113eSDavid van Moolenbroek #define REN_TIMEOUT      10
159*83ee113eSDavid van Moolenbroek #define REN_MAX_RT      600
160*83ee113eSDavid van Moolenbroek #define REB_TIMEOUT      10
161*83ee113eSDavid van Moolenbroek #define REB_MAX_RT      600
162*83ee113eSDavid van Moolenbroek #define INF_MAX_DELAY     1
163*83ee113eSDavid van Moolenbroek #define INF_TIMEOUT       1
164*83ee113eSDavid van Moolenbroek #define INF_MAX_RT      120
165*83ee113eSDavid van Moolenbroek #define REL_TIMEOUT       1
166*83ee113eSDavid van Moolenbroek #define REL_MAX_RC        5
167*83ee113eSDavid van Moolenbroek #define DEC_TIMEOUT       1
168*83ee113eSDavid van Moolenbroek #define DEC_MAX_RC        5
169*83ee113eSDavid van Moolenbroek #define REC_TIMEOUT       2
170*83ee113eSDavid van Moolenbroek #define REC_MAX_RC        8
171*83ee113eSDavid van Moolenbroek #define HOP_COUNT_LIMIT  32
172*83ee113eSDavid van Moolenbroek #define LQ6_TIMEOUT       1
173*83ee113eSDavid van Moolenbroek #define LQ6_MAX_RT       10
174*83ee113eSDavid van Moolenbroek #define LQ6_MAX_RC        5
175*83ee113eSDavid van Moolenbroek 
176*83ee113eSDavid van Moolenbroek /*
177*83ee113eSDavid van Moolenbroek  * Normal packet format, defined in section 6 of RFC 3315
178*83ee113eSDavid van Moolenbroek  */
179*83ee113eSDavid van Moolenbroek struct dhcpv6_packet {
180*83ee113eSDavid van Moolenbroek 	unsigned char msg_type;
181*83ee113eSDavid van Moolenbroek 	unsigned char transaction_id[3];
182*83ee113eSDavid van Moolenbroek 	unsigned char options[FLEXIBLE_ARRAY_MEMBER];
183*83ee113eSDavid van Moolenbroek };
184*83ee113eSDavid van Moolenbroek 
185*83ee113eSDavid van Moolenbroek /* Offset into DHCPV6 Reply packets where Options spaces commence. */
186*83ee113eSDavid van Moolenbroek #define REPLY_OPTIONS_INDEX 4
187*83ee113eSDavid van Moolenbroek 
188*83ee113eSDavid van Moolenbroek /*
189*83ee113eSDavid van Moolenbroek  * Relay packet format, defined in section 7 of RFC 3315
190*83ee113eSDavid van Moolenbroek  */
191*83ee113eSDavid van Moolenbroek struct dhcpv6_relay_packet {
192*83ee113eSDavid van Moolenbroek 	unsigned char msg_type;
193*83ee113eSDavid van Moolenbroek 	unsigned char hop_count;
194*83ee113eSDavid van Moolenbroek 	unsigned char link_address[16];
195*83ee113eSDavid van Moolenbroek 	unsigned char peer_address[16];
196*83ee113eSDavid van Moolenbroek 	unsigned char options[FLEXIBLE_ARRAY_MEMBER];
197*83ee113eSDavid van Moolenbroek };
198*83ee113eSDavid van Moolenbroek #define MAX_V6RELAY_HOPS 32
199*83ee113eSDavid van Moolenbroek 
200*83ee113eSDavid van Moolenbroek /* Leasequery query-types (RFC 5007) */
201*83ee113eSDavid van Moolenbroek 
202*83ee113eSDavid van Moolenbroek #define LQ6QT_BY_ADDRESS	1
203*83ee113eSDavid van Moolenbroek #define LQ6QT_BY_CLIENTID	2
204*83ee113eSDavid van Moolenbroek 
205*83ee113eSDavid van Moolenbroek /*
206*83ee113eSDavid van Moolenbroek  * DUID time starts 2000-01-01.
207*83ee113eSDavid van Moolenbroek  * This constant is the number of seconds since 1970-01-01,
208*83ee113eSDavid van Moolenbroek  * when the Unix epoch began.
209*83ee113eSDavid van Moolenbroek  */
210*83ee113eSDavid van Moolenbroek #define DUID_TIME_EPOCH 946684800
211*83ee113eSDavid van Moolenbroek 
212*83ee113eSDavid van Moolenbroek /* Information-Request Time option (RFC 4242) */
213*83ee113eSDavid van Moolenbroek 
214*83ee113eSDavid van Moolenbroek #define IRT_DEFAULT	86400
215*83ee113eSDavid van Moolenbroek #define IRT_MINIMUM	600
216*83ee113eSDavid van Moolenbroek 
217