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