Root/
Source at commit 1083 created 13 years 1 month ago. By meklort, add GetDriveInfo | |
---|---|
1 | /*␊ |
2 | * Copyright (c) 2000,2008 Apple Inc. All rights reserved.␊ |
3 | *␊ |
4 | * @APPLE_OSREFERENCE_LICENSE_HEADER_START@␊ |
5 | * ␊ |
6 | * This file contains Original Code and/or Modifications of Original Code␊ |
7 | * as defined in and that are subject to the Apple Public Source License␊ |
8 | * Version 2.0 (the 'License'). You may not use this file except in␊ |
9 | * compliance with the License. The rights granted to you under the License␊ |
10 | * may not be used to create, or enable the creation or redistribution of,␊ |
11 | * unlawful or unlicensed copies of an Apple operating system, or to␊ |
12 | * circumvent, violate, or enable the circumvention or violation of, any␊ |
13 | * terms of an Apple operating system software license agreement.␊ |
14 | * ␊ |
15 | * Please obtain a copy of the License at␊ |
16 | * http://www.opensource.apple.com/apsl/ and read it before using this file.␊ |
17 | * ␊ |
18 | * The Original Code and all software distributed under the License are␊ |
19 | * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER␊ |
20 | * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,␊ |
21 | * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,␊ |
22 | * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT.␊ |
23 | * Please see the License for the specific language governing rights and␊ |
24 | * limitations under the License.␊ |
25 | * ␊ |
26 | * @APPLE_OSREFERENCE_LICENSE_HEADER_END@␊ |
27 | */␊ |
28 | /*␉$KAME: icmp6.h,v 1.46 2001/04/27 15:09:48 itojun Exp $␉*/␊ |
29 | ␊ |
30 | /*␊ |
31 | * Copyright (C) 1995, 1996, 1997, and 1998 WIDE Project.␊ |
32 | * All rights reserved.␊ |
33 | *␊ |
34 | * Redistribution and use in source and binary forms, with or without␊ |
35 | * modification, are permitted provided that the following conditions␊ |
36 | * are met:␊ |
37 | * 1. Redistributions of source code must retain the above copyright␊ |
38 | * notice, this list of conditions and the following disclaimer.␊ |
39 | * 2. Redistributions in binary form must reproduce the above copyright␊ |
40 | * notice, this list of conditions and the following disclaimer in the␊ |
41 | * documentation and/or other materials provided with the distribution.␊ |
42 | * 3. Neither the name of the project nor the names of its contributors␊ |
43 | * may be used to endorse or promote products derived from this software␊ |
44 | * without specific prior written permission.␊ |
45 | *␊ |
46 | * THIS SOFTWARE IS PROVIDED BY THE PROJECT AND CONTRIBUTORS ``AS IS'' AND␊ |
47 | * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE␊ |
48 | * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE␊ |
49 | * ARE DISCLAIMED. IN NO EVENT SHALL THE PROJECT OR CONTRIBUTORS BE LIABLE␊ |
50 | * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL␊ |
51 | * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS␊ |
52 | * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)␊ |
53 | * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT␊ |
54 | * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY␊ |
55 | * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF␊ |
56 | * SUCH DAMAGE.␊ |
57 | */␊ |
58 | ␊ |
59 | /*␊ |
60 | * Copyright (c) 1982, 1986, 1993␊ |
61 | *␉The Regents of the University of California. All rights reserved.␊ |
62 | *␊ |
63 | * Redistribution and use in source and binary forms, with or without␊ |
64 | * modification, are permitted provided that the following conditions␊ |
65 | * are met:␊ |
66 | * 1. Redistributions of source code must retain the above copyright␊ |
67 | * notice, this list of conditions and the following disclaimer.␊ |
68 | * 2. Redistributions in binary form must reproduce the above copyright␊ |
69 | * notice, this list of conditions and the following disclaimer in the␊ |
70 | * documentation and/or other materials provided with the distribution.␊ |
71 | * 3. All advertising materials mentioning features or use of this software␊ |
72 | * must display the following acknowledgement:␊ |
73 | *␉This product includes software developed by the University of␊ |
74 | *␉California, Berkeley and its contributors.␊ |
75 | * 4. Neither the name of the University nor the names of its contributors␊ |
76 | * may be used to endorse or promote products derived from this software␊ |
77 | * without specific prior written permission.␊ |
78 | *␊ |
79 | * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND␊ |
80 | * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE␊ |
81 | * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE␊ |
82 | * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE␊ |
83 | * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL␊ |
84 | * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS␊ |
85 | * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)␊ |
86 | * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT␊ |
87 | * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY␊ |
88 | * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF␊ |
89 | * SUCH DAMAGE.␊ |
90 | *␊ |
91 | *␉@(#)ip_icmp.h␉8.1 (Berkeley) 6/10/93␊ |
92 | */␊ |
93 | ␊ |
94 | #ifndef _NETINET_ICMP6_H_␊ |
95 | #define _NETINET_ICMP6_H_␊ |
96 | #include <sys/appleapiopts.h>␊ |
97 | ␊ |
98 | #define ICMPV6_PLD_MAXLEN␉1232␉/* IPV6_MMTU - sizeof(struct ip6_hdr)␊ |
99 | ␉␉␉␉␉ - sizeof(struct icmp6_hdr) */␊ |
100 | ␊ |
101 | struct icmp6_hdr {␊ |
102 | ␉u_int8_t␉icmp6_type;␉/* type field */␊ |
103 | ␉u_int8_t␉icmp6_code;␉/* code field */␊ |
104 | ␉u_int16_t␉icmp6_cksum;␉/* checksum field */␊ |
105 | ␉union {␊ |
106 | ␉␉u_int32_t␉icmp6_un_data32[1]; /* type-specific field */␊ |
107 | ␉␉u_int16_t␉icmp6_un_data16[2]; /* type-specific field */␊ |
108 | ␉␉u_int8_t␉icmp6_un_data8[4]; /* type-specific field */␊ |
109 | ␉} icmp6_dataun;␊ |
110 | };␊ |
111 | ␊ |
112 | #define icmp6_data32␉icmp6_dataun.icmp6_un_data32␊ |
113 | #define icmp6_data16␉icmp6_dataun.icmp6_un_data16␊ |
114 | #define icmp6_data8␉icmp6_dataun.icmp6_un_data8␊ |
115 | #define icmp6_pptr␉icmp6_data32[0]␉␉/* parameter prob */␊ |
116 | #define icmp6_mtu␉icmp6_data32[0]␉␉/* packet too big */␊ |
117 | #define icmp6_id␉icmp6_data16[0]␉␉/* echo request/reply */␊ |
118 | #define icmp6_seq␉icmp6_data16[1]␉␉/* echo request/reply */␊ |
119 | #define icmp6_maxdelay␉icmp6_data16[0]␉␉/* mcast group membership */␊ |
120 | ␊ |
121 | #define ICMP6_DST_UNREACH␉␉1␉/* dest unreachable, codes: */␊ |
122 | #define ICMP6_PACKET_TOO_BIG␉␉2␉/* packet too big */␊ |
123 | #define ICMP6_TIME_EXCEEDED␉␉3␉/* time exceeded, code: */␊ |
124 | #define ICMP6_PARAM_PROB␉␉4␉/* ip6 header bad */␊ |
125 | ␊ |
126 | #define ICMP6_ECHO_REQUEST␉␉128␉/* echo service */␊ |
127 | #define ICMP6_ECHO_REPLY␉␉129␉/* echo reply */␊ |
128 | #define ICMP6_MEMBERSHIP_QUERY␉␉130␉/* group membership query */␊ |
129 | #define MLD6_LISTENER_QUERY␉␉130 ␉/* multicast listener query */␊ |
130 | #define ICMP6_MEMBERSHIP_REPORT␉␉131␉/* group membership report */␊ |
131 | #define MLD6_LISTENER_REPORT␉␉131␉/* multicast listener report */␊ |
132 | #define ICMP6_MEMBERSHIP_REDUCTION␉132␉/* group membership termination */␊ |
133 | #define MLD6_LISTENER_DONE␉␉132␉/* multicast listener done */␊ |
134 | ␊ |
135 | #define␉MLD_LISTENER_QUERY␉␉MLD6_LISTENER_QUERY␊ |
136 | #define␉MLD_LISTENER_REPORT␉␉MLD6_LISTENER_REPORT␊ |
137 | #define␉MLD_LISTENER_DONE␉␉MLD6_LISTENER_DONE␊ |
138 | ␊ |
139 | #define ND_ROUTER_SOLICIT␉␉133␉/* router solicitation */␊ |
140 | #define ND_ROUTER_ADVERT␉␉134␉/* router advertisment */␊ |
141 | #define ND_NEIGHBOR_SOLICIT␉␉135␉/* neighbor solicitation */␊ |
142 | #define ND_NEIGHBOR_ADVERT␉␉136␉/* neighbor advertisment */␊ |
143 | #define ND_REDIRECT␉␉␉137␉/* redirect */␊ |
144 | ␊ |
145 | #define ICMP6_ROUTER_RENUMBERING␉138␉/* router renumbering */␊ |
146 | ␊ |
147 | #define ICMP6_WRUREQUEST␉␉139␉/* who are you request */␊ |
148 | #define ICMP6_WRUREPLY␉␉␉140␉/* who are you reply */␊ |
149 | #define ICMP6_FQDN_QUERY␉␉139␉/* FQDN query */␊ |
150 | #define ICMP6_FQDN_REPLY␉␉140␉/* FQDN reply */␊ |
151 | #define ICMP6_NI_QUERY␉␉␉139␉/* node information request */␊ |
152 | #define ICMP6_NI_REPLY␉␉␉140␉/* node information reply */␊ |
153 | ␊ |
154 | /* The definitions below are experimental. TBA */␊ |
155 | #define MLD6_MTRACE_RESP␉␉200␉/* mtrace response(to sender) */␊ |
156 | #define MLD6_MTRACE␉␉␉201␉/* mtrace messages */␊ |
157 | ␊ |
158 | #define␉MLD_MTRACE_RESP␉␉␉MLD6_MTRACE_RESP␊ |
159 | #define␉MLD_MTRACE␉␉␉MLD6_MTRACE␊ |
160 | ␊ |
161 | #define ICMP6_HADISCOV_REQUEST␉␉202␉/* XXX To be defined */␊ |
162 | #define ICMP6_HADISCOV_REPLY␉␉203␉/* XXX To be defined */␊ |
163 | ␊ |
164 | #define ICMP6_MAXTYPE␉␉␉203␊ |
165 | ␊ |
166 | #define ICMP6_DST_UNREACH_NOROUTE␉0␉/* no route to destination */␊ |
167 | #define ICMP6_DST_UNREACH_ADMIN␉ ␉1␉/* administratively prohibited */␊ |
168 | #define ICMP6_DST_UNREACH_NOTNEIGHBOR␉2␉/* not a neighbor(obsolete) */␊ |
169 | #define ICMP6_DST_UNREACH_BEYONDSCOPE␉2␉/* beyond scope of source address */␊ |
170 | #define ICMP6_DST_UNREACH_ADDR␉␉3␉/* address unreachable */␊ |
171 | #define ICMP6_DST_UNREACH_NOPORT␉4␉/* port unreachable */␊ |
172 | ␊ |
173 | #define ICMP6_TIME_EXCEED_TRANSIT ␉0␉/* ttl==0 in transit */␊ |
174 | #define ICMP6_TIME_EXCEED_REASSEMBLY␉1␉/* ttl==0 in reass */␊ |
175 | ␊ |
176 | #define ICMP6_PARAMPROB_HEADER ␉ ␉0␉/* erroneous header field */␊ |
177 | #define ICMP6_PARAMPROB_NEXTHEADER␉1␉/* unrecognized next header */␊ |
178 | #define ICMP6_PARAMPROB_OPTION␉␉2␉/* unrecognized option */␊ |
179 | ␊ |
180 | #define ICMP6_INFOMSG_MASK␉␉0x80␉/* all informational messages */␊ |
181 | ␊ |
182 | #define ICMP6_NI_SUBJ_IPV6␉0␉/* Query Subject is an IPv6 address */␊ |
183 | #define ICMP6_NI_SUBJ_FQDN␉1␉/* Query Subject is a Domain name */␊ |
184 | #define ICMP6_NI_SUBJ_IPV4␉2␉/* Query Subject is an IPv4 address */␊ |
185 | ␊ |
186 | #define ICMP6_NI_SUCCESS␉0␉/* node information successful reply */␊ |
187 | #define ICMP6_NI_REFUSED␉1␉/* node information request is refused */␊ |
188 | #define ICMP6_NI_UNKNOWN␉2␉/* unknown Qtype */␊ |
189 | ␊ |
190 | #define ICMP6_ROUTER_RENUMBERING_COMMAND 0␉/* rr command */␊ |
191 | #define ICMP6_ROUTER_RENUMBERING_RESULT 1␉/* rr result */␊ |
192 | #define ICMP6_ROUTER_RENUMBERING_SEQNUM_RESET 255␉/* rr seq num reset */␊ |
193 | ␊ |
194 | /* Used in kernel only */␊ |
195 | #define ND_REDIRECT_ONLINK␉0␉/* redirect to an on-link node */␊ |
196 | #define ND_REDIRECT_ROUTER␉1␉/* redirect to a better router */␊ |
197 | ␊ |
198 | /*␊ |
199 | * Multicast Listener Discovery␊ |
200 | */␊ |
201 | struct mld6_hdr {␊ |
202 | ␉struct icmp6_hdr␉mld6_hdr;␊ |
203 | ␉struct in6_addr␉␉mld6_addr; /* multicast address */␊ |
204 | };␊ |
205 | ␊ |
206 | #define mld6_type␉mld6_hdr.icmp6_type␊ |
207 | #define mld6_code␉mld6_hdr.icmp6_code␊ |
208 | #define mld6_cksum␉mld6_hdr.icmp6_cksum␊ |
209 | #define mld6_maxdelay␉mld6_hdr.icmp6_data16[0]␊ |
210 | #define mld6_reserved␉mld6_hdr.icmp6_data16[1]␊ |
211 | ␊ |
212 | /*␊ |
213 | * Neighbor Discovery␊ |
214 | */␊ |
215 | ␊ |
216 | struct nd_router_solicit {␉/* router solicitation */␊ |
217 | ␉struct icmp6_hdr ␉nd_rs_hdr;␊ |
218 | ␉/* could be followed by options */␊ |
219 | };␊ |
220 | ␊ |
221 | #define nd_rs_type␉nd_rs_hdr.icmp6_type␊ |
222 | #define nd_rs_code␉nd_rs_hdr.icmp6_code␊ |
223 | #define nd_rs_cksum␉nd_rs_hdr.icmp6_cksum␊ |
224 | #define nd_rs_reserved␉nd_rs_hdr.icmp6_data32[0]␊ |
225 | ␊ |
226 | struct nd_router_advert {␉/* router advertisement */␊ |
227 | ␉struct icmp6_hdr␉nd_ra_hdr;␊ |
228 | ␉u_int32_t␉␉nd_ra_reachable;␉/* reachable time */␊ |
229 | ␉u_int32_t␉␉nd_ra_retransmit;␉/* retransmit timer */␊ |
230 | ␉/* could be followed by options */␊ |
231 | };␊ |
232 | ␊ |
233 | #define nd_ra_type␉␉nd_ra_hdr.icmp6_type␊ |
234 | #define nd_ra_code␉␉nd_ra_hdr.icmp6_code␊ |
235 | #define nd_ra_cksum␉␉nd_ra_hdr.icmp6_cksum␊ |
236 | #define nd_ra_curhoplimit␉nd_ra_hdr.icmp6_data8[0]␊ |
237 | #define nd_ra_flags_reserved␉nd_ra_hdr.icmp6_data8[1]␊ |
238 | #define ND_RA_FLAG_MANAGED␉0x80␊ |
239 | #define ND_RA_FLAG_OTHER␉0x40␊ |
240 | #define ND_RA_FLAG_HA␉␉0x20␊ |
241 | ␊ |
242 | /*␊ |
243 | * Router preference values based on draft-draves-ipngwg-router-selection-01.␊ |
244 | * These are non-standard definitions.␊ |
245 | */␊ |
246 | #define ND_RA_FLAG_RTPREF_MASK␉0x18 /* 00011000 */␊ |
247 | ␊ |
248 | #define ND_RA_FLAG_RTPREF_HIGH␉0x08 /* 00001000 */␊ |
249 | #define ND_RA_FLAG_RTPREF_MEDIUM␉0x00 /* 00000000 */␊ |
250 | #define ND_RA_FLAG_RTPREF_LOW␉0x18 /* 00011000 */␊ |
251 | #define ND_RA_FLAG_RTPREF_RSV␉0x10 /* 00010000 */␊ |
252 | ␊ |
253 | #define nd_ra_router_lifetime␉nd_ra_hdr.icmp6_data16[1]␊ |
254 | ␊ |
255 | struct nd_neighbor_solicit {␉/* neighbor solicitation */␊ |
256 | ␉struct icmp6_hdr␉nd_ns_hdr;␊ |
257 | ␉struct in6_addr␉␉nd_ns_target;␉/*target address */␊ |
258 | ␉/* could be followed by options */␊ |
259 | };␊ |
260 | ␊ |
261 | #define nd_ns_type␉␉nd_ns_hdr.icmp6_type␊ |
262 | #define nd_ns_code␉␉nd_ns_hdr.icmp6_code␊ |
263 | #define nd_ns_cksum␉␉nd_ns_hdr.icmp6_cksum␊ |
264 | #define nd_ns_reserved␉␉nd_ns_hdr.icmp6_data32[0]␊ |
265 | ␊ |
266 | struct nd_neighbor_advert {␉/* neighbor advertisement */␊ |
267 | ␉struct icmp6_hdr␉nd_na_hdr;␊ |
268 | ␉struct in6_addr␉␉nd_na_target;␉/* target address */␊ |
269 | ␉/* could be followed by options */␊ |
270 | };␊ |
271 | ␊ |
272 | #define nd_na_type␉␉nd_na_hdr.icmp6_type␊ |
273 | #define nd_na_code␉␉nd_na_hdr.icmp6_code␊ |
274 | #define nd_na_cksum␉␉nd_na_hdr.icmp6_cksum␊ |
275 | #define nd_na_flags_reserved␉nd_na_hdr.icmp6_data32[0]␊ |
276 | #if BYTE_ORDER == BIG_ENDIAN␊ |
277 | #define ND_NA_FLAG_ROUTER␉␉0x80000000␊ |
278 | #define ND_NA_FLAG_SOLICITED␉␉0x40000000␊ |
279 | #define ND_NA_FLAG_OVERRIDE␉␉0x20000000␊ |
280 | #else␊ |
281 | #if BYTE_ORDER == LITTLE_ENDIAN␊ |
282 | #define ND_NA_FLAG_ROUTER␉␉0x80␊ |
283 | #define ND_NA_FLAG_SOLICITED␉␉0x40␊ |
284 | #define ND_NA_FLAG_OVERRIDE␉␉0x20␊ |
285 | #endif␊ |
286 | #endif␊ |
287 | ␊ |
288 | struct nd_redirect {␉␉/* redirect */␊ |
289 | ␉struct icmp6_hdr␉nd_rd_hdr;␊ |
290 | ␉struct in6_addr␉␉nd_rd_target;␉/* target address */␊ |
291 | ␉struct in6_addr␉␉nd_rd_dst;␉/* destination address */␊ |
292 | ␉/* could be followed by options */␊ |
293 | };␊ |
294 | ␊ |
295 | #define nd_rd_type␉␉nd_rd_hdr.icmp6_type␊ |
296 | #define nd_rd_code␉␉nd_rd_hdr.icmp6_code␊ |
297 | #define nd_rd_cksum␉␉nd_rd_hdr.icmp6_cksum␊ |
298 | #define nd_rd_reserved␉␉nd_rd_hdr.icmp6_data32[0]␊ |
299 | ␊ |
300 | struct nd_opt_hdr {␉␉/* Neighbor discovery option header */␊ |
301 | ␉u_int8_t␉nd_opt_type;␊ |
302 | ␉u_int8_t␉nd_opt_len;␊ |
303 | ␉/* followed by option specific data*/␊ |
304 | };␊ |
305 | ␊ |
306 | #define ND_OPT_SOURCE_LINKADDR␉␉1␊ |
307 | #define ND_OPT_TARGET_LINKADDR␉␉2␊ |
308 | #define ND_OPT_PREFIX_INFORMATION␉3␊ |
309 | #define ND_OPT_REDIRECTED_HEADER␉4␊ |
310 | #define ND_OPT_MTU␉␉␉5␊ |
311 | ␊ |
312 | #define ND_OPT_ROUTE_INFO␉␉200␉/* draft-ietf-ipngwg-router-preference, not officially assigned yet */␊ |
313 | ␊ |
314 | struct nd_opt_prefix_info {␉/* prefix information */␊ |
315 | ␉u_int8_t␉nd_opt_pi_type;␊ |
316 | ␉u_int8_t␉nd_opt_pi_len;␊ |
317 | ␉u_int8_t␉nd_opt_pi_prefix_len;␊ |
318 | ␉u_int8_t␉nd_opt_pi_flags_reserved;␊ |
319 | ␉u_int32_t␉nd_opt_pi_valid_time;␊ |
320 | ␉u_int32_t␉nd_opt_pi_preferred_time;␊ |
321 | ␉u_int32_t␉nd_opt_pi_reserved2;␊ |
322 | ␉struct in6_addr␉nd_opt_pi_prefix;␊ |
323 | };␊ |
324 | ␊ |
325 | #define ND_OPT_PI_FLAG_ONLINK␉␉0x80␊ |
326 | #define ND_OPT_PI_FLAG_AUTO␉␉0x40␊ |
327 | ␊ |
328 | struct nd_opt_rd_hdr {␉␉/* redirected header */␊ |
329 | ␉u_int8_t␉nd_opt_rh_type;␊ |
330 | ␉u_int8_t␉nd_opt_rh_len;␊ |
331 | ␉u_int16_t␉nd_opt_rh_reserved1;␊ |
332 | ␉u_int32_t␉nd_opt_rh_reserved2;␊ |
333 | ␉/* followed by IP header and data */␊ |
334 | };␊ |
335 | ␊ |
336 | struct nd_opt_mtu {␉␉/* MTU option */␊ |
337 | ␉u_int8_t␉nd_opt_mtu_type;␊ |
338 | ␉u_int8_t␉nd_opt_mtu_len;␊ |
339 | ␉u_int16_t␉nd_opt_mtu_reserved;␊ |
340 | ␉u_int32_t␉nd_opt_mtu_mtu;␊ |
341 | };␊ |
342 | ␊ |
343 | struct nd_opt_route_info {␉/* route info */␊ |
344 | ␉u_int8_t␉nd_opt_rti_type;␊ |
345 | ␉u_int8_t␉nd_opt_rti_len;␊ |
346 | ␉u_int8_t␉nd_opt_rti_prefixlen;␊ |
347 | ␉u_int8_t␉nd_opt_rti_flags;␊ |
348 | ␉u_int32_t␉nd_opt_rti_lifetime;␊ |
349 | ␉/* followed by prefix */␊ |
350 | };␊ |
351 | ␊ |
352 | /*␊ |
353 | * icmp6 namelookup␊ |
354 | */␊ |
355 | ␊ |
356 | struct icmp6_namelookup {␊ |
357 | ␉struct icmp6_hdr ␉icmp6_nl_hdr;␊ |
358 | ␉u_int8_t␉icmp6_nl_nonce[8];␊ |
359 | ␉int32_t␉␉icmp6_nl_ttl;␊ |
360 | #if 0␊ |
361 | ␉u_int8_t␉icmp6_nl_len;␊ |
362 | ␉u_int8_t␉icmp6_nl_name[3];␊ |
363 | #endif␊ |
364 | ␉/* could be followed by options */␊ |
365 | };␊ |
366 | ␊ |
367 | /*␊ |
368 | * icmp6 node information␊ |
369 | */␊ |
370 | struct icmp6_nodeinfo {␊ |
371 | ␉struct icmp6_hdr icmp6_ni_hdr;␊ |
372 | ␉u_int8_t icmp6_ni_nonce[8];␊ |
373 | ␉/* could be followed by reply data */␊ |
374 | };␊ |
375 | ␊ |
376 | #define ni_type␉␉icmp6_ni_hdr.icmp6_type␊ |
377 | #define ni_code␉␉icmp6_ni_hdr.icmp6_code␊ |
378 | #define ni_cksum␉icmp6_ni_hdr.icmp6_cksum␊ |
379 | #define ni_qtype␉icmp6_ni_hdr.icmp6_data16[0]␊ |
380 | #define ni_flags␉icmp6_ni_hdr.icmp6_data16[1]␊ |
381 | ␊ |
382 | #define NI_QTYPE_NOOP␉␉0 /* NOOP */␊ |
383 | #define NI_QTYPE_SUPTYPES␉1 /* Supported Qtypes */␊ |
384 | #define NI_QTYPE_FQDN␉␉2 /* FQDN (draft 04) */␊ |
385 | #define NI_QTYPE_DNSNAME␉2 /* DNS Name */␊ |
386 | #define NI_QTYPE_NODEADDR␉3 /* Node Addresses */␊ |
387 | #define NI_QTYPE_IPV4ADDR␉4 /* IPv4 Addresses */␊ |
388 | ␊ |
389 | #if BYTE_ORDER == BIG_ENDIAN␊ |
390 | #define NI_SUPTYPE_FLAG_COMPRESS␉0x1␊ |
391 | #define NI_FQDN_FLAG_VALIDTTL␉␉0x1␊ |
392 | #elif BYTE_ORDER == LITTLE_ENDIAN␊ |
393 | #define NI_SUPTYPE_FLAG_COMPRESS␉0x0100␊ |
394 | #define NI_FQDN_FLAG_VALIDTTL␉␉0x0100␊ |
395 | #endif␊ |
396 | ␊ |
397 | #ifdef NAME_LOOKUPS_04␊ |
398 | #if BYTE_ORDER == BIG_ENDIAN␊ |
399 | #define NI_NODEADDR_FLAG_LINKLOCAL␉0x1␊ |
400 | #define NI_NODEADDR_FLAG_SITELOCAL␉0x2␊ |
401 | #define NI_NODEADDR_FLAG_GLOBAL␉␉0x4␊ |
402 | #define NI_NODEADDR_FLAG_ALL␉␉0x8␊ |
403 | #define NI_NODEADDR_FLAG_TRUNCATE␉0x10␊ |
404 | #define NI_NODEADDR_FLAG_ANYCAST␉0x20 /* just experimental. not in spec */␊ |
405 | #elif BYTE_ORDER == LITTLE_ENDIAN␊ |
406 | #define NI_NODEADDR_FLAG_LINKLOCAL␉0x0100␊ |
407 | #define NI_NODEADDR_FLAG_SITELOCAL␉0x0200␊ |
408 | #define NI_NODEADDR_FLAG_GLOBAL␉␉0x0400␊ |
409 | #define NI_NODEADDR_FLAG_ALL␉␉0x0800␊ |
410 | #define NI_NODEADDR_FLAG_TRUNCATE␉0x1000␊ |
411 | #define NI_NODEADDR_FLAG_ANYCAST␉0x2000 /* just experimental. not in spec */␊ |
412 | #endif␊ |
413 | #else /* draft-ietf-ipngwg-icmp-name-lookups-05 (and later?) */␊ |
414 | #if BYTE_ORDER == BIG_ENDIAN␊ |
415 | #define NI_NODEADDR_FLAG_TRUNCATE␉0x1␊ |
416 | #define NI_NODEADDR_FLAG_ALL␉␉0x2␊ |
417 | #define NI_NODEADDR_FLAG_COMPAT␉␉0x4␊ |
418 | #define NI_NODEADDR_FLAG_LINKLOCAL␉0x8␊ |
419 | #define NI_NODEADDR_FLAG_SITELOCAL␉0x10␊ |
420 | #define NI_NODEADDR_FLAG_GLOBAL␉␉0x20␊ |
421 | #define NI_NODEADDR_FLAG_ANYCAST␉0x40 /* just experimental. not in spec */␊ |
422 | #elif BYTE_ORDER == LITTLE_ENDIAN␊ |
423 | #define NI_NODEADDR_FLAG_TRUNCATE␉0x0100␊ |
424 | #define NI_NODEADDR_FLAG_ALL␉␉0x0200␊ |
425 | #define NI_NODEADDR_FLAG_COMPAT␉␉0x0400␊ |
426 | #define NI_NODEADDR_FLAG_LINKLOCAL␉0x0800␊ |
427 | #define NI_NODEADDR_FLAG_SITELOCAL␉0x1000␊ |
428 | #define NI_NODEADDR_FLAG_GLOBAL␉␉0x2000␊ |
429 | #define NI_NODEADDR_FLAG_ANYCAST␉0x4000 /* just experimental. not in spec */␊ |
430 | #endif␊ |
431 | #endif␊ |
432 | ␊ |
433 | struct ni_reply_fqdn {␊ |
434 | ␉u_int32_t ni_fqdn_ttl;␉/* TTL */␊ |
435 | ␉u_int8_t ni_fqdn_namelen; /* length in octets of the FQDN */␊ |
436 | ␉u_int8_t ni_fqdn_name[3]; /* XXX: alignment */␊ |
437 | };␊ |
438 | ␊ |
439 | /*␊ |
440 | * Router Renumbering. as router-renum-08.txt␊ |
441 | */␊ |
442 | struct icmp6_router_renum {␉/* router renumbering header */␊ |
443 | ␉struct icmp6_hdr␉rr_hdr;␊ |
444 | ␉u_int8_t␉rr_segnum;␊ |
445 | ␉u_int8_t␉rr_flags;␊ |
446 | ␉u_int16_t␉rr_maxdelay;␊ |
447 | ␉u_int32_t␉rr_reserved;␊ |
448 | };␊ |
449 | ␊ |
450 | #define ICMP6_RR_FLAGS_TEST␉␉0x80␊ |
451 | #define ICMP6_RR_FLAGS_REQRESULT␉0x40␊ |
452 | #define ICMP6_RR_FLAGS_FORCEAPPLY␉0x20␊ |
453 | #define ICMP6_RR_FLAGS_SPECSITE␉␉0x10␊ |
454 | #define ICMP6_RR_FLAGS_PREVDONE␉␉0x08␊ |
455 | ␊ |
456 | #define rr_type␉␉rr_hdr.icmp6_type␊ |
457 | #define rr_code␉␉rr_hdr.icmp6_code␊ |
458 | #define rr_cksum␉rr_hdr.icmp6_cksum␊ |
459 | #define rr_seqnum ␉rr_hdr.icmp6_data32[0]␊ |
460 | ␊ |
461 | struct rr_pco_match {␉␉/* match prefix part */␊ |
462 | ␉u_int8_t␉rpm_code;␊ |
463 | ␉u_int8_t␉rpm_len;␊ |
464 | ␉u_int8_t␉rpm_ordinal;␊ |
465 | ␉u_int8_t␉rpm_matchlen;␊ |
466 | ␉u_int8_t␉rpm_minlen;␊ |
467 | ␉u_int8_t␉rpm_maxlen;␊ |
468 | ␉u_int16_t␉rpm_reserved;␊ |
469 | ␉struct␉in6_addr␉rpm_prefix;␊ |
470 | };␊ |
471 | ␊ |
472 | #define RPM_PCO_ADD␉␉1␊ |
473 | #define RPM_PCO_CHANGE␉␉2␊ |
474 | #define RPM_PCO_SETGLOBAL␉3␊ |
475 | #define RPM_PCO_MAX␉␉4␊ |
476 | ␊ |
477 | struct rr_pco_use {␉␉/* use prefix part */␊ |
478 | ␉u_int8_t␉rpu_uselen;␊ |
479 | ␉u_int8_t␉rpu_keeplen;␊ |
480 | ␉u_int8_t␉rpu_ramask;␊ |
481 | ␉u_int8_t␉rpu_raflags;␊ |
482 | ␉u_int32_t␉rpu_vltime;␊ |
483 | ␉u_int32_t␉rpu_pltime;␊ |
484 | ␉u_int32_t␉rpu_flags;␊ |
485 | ␉struct␉in6_addr rpu_prefix;␊ |
486 | };␊ |
487 | #define ICMP6_RR_PCOUSE_RAFLAGS_ONLINK␉0x80␊ |
488 | #define ICMP6_RR_PCOUSE_RAFLAGS_AUTO␉0x40␊ |
489 | ␊ |
490 | #if BYTE_ORDER == BIG_ENDIAN␊ |
491 | #define ICMP6_RR_PCOUSE_FLAGS_DECRVLTIME 0x80000000␊ |
492 | #define ICMP6_RR_PCOUSE_FLAGS_DECRPLTIME 0x40000000␊ |
493 | #elif BYTE_ORDER == LITTLE_ENDIAN␊ |
494 | #define ICMP6_RR_PCOUSE_FLAGS_DECRVLTIME 0x80␊ |
495 | #define ICMP6_RR_PCOUSE_FLAGS_DECRPLTIME 0x40␊ |
496 | #endif␊ |
497 | ␊ |
498 | struct rr_result {␉␉/* router renumbering result message */␊ |
499 | ␉u_int16_t␉rrr_flags;␊ |
500 | ␉u_int8_t␉rrr_ordinal;␊ |
501 | ␉u_int8_t␉rrr_matchedlen;␊ |
502 | ␉u_int32_t␉rrr_ifid;␊ |
503 | ␉struct␉in6_addr rrr_prefix;␊ |
504 | };␊ |
505 | #if BYTE_ORDER == BIG_ENDIAN␊ |
506 | #define ICMP6_RR_RESULT_FLAGS_OOB␉␉0x0002␊ |
507 | #define ICMP6_RR_RESULT_FLAGS_FORBIDDEN␉␉0x0001␊ |
508 | #elif BYTE_ORDER == LITTLE_ENDIAN␊ |
509 | #define ICMP6_RR_RESULT_FLAGS_OOB␉␉0x0200␊ |
510 | #define ICMP6_RR_RESULT_FLAGS_FORBIDDEN␉␉0x0100␊ |
511 | #endif␊ |
512 | ␊ |
513 | /*␊ |
514 | * icmp6 filter structures.␊ |
515 | */␊ |
516 | ␊ |
517 | struct icmp6_filter {␊ |
518 | ␉u_int32_t icmp6_filt[8];␊ |
519 | };␊ |
520 | ␊ |
521 | #define␉ICMP6_FILTER_SETPASSALL(filterp) \␊ |
522 | ␉memset(filterp, 0xff, sizeof(struct icmp6_filter))␊ |
523 | #define␉ICMP6_FILTER_SETBLOCKALL(filterp) \␊ |
524 | ␉memset(filterp, 0x00, sizeof(struct icmp6_filter))␊ |
525 | ␊ |
526 | #define␉ICMP6_FILTER_SETPASS(type, filterp) \␊ |
527 | ␉(((filterp)->icmp6_filt[(type) >> 5]) |= (1 << ((type) & 31)))␊ |
528 | #define␉ICMP6_FILTER_SETBLOCK(type, filterp) \␊ |
529 | ␉(((filterp)->icmp6_filt[(type) >> 5]) &= ~(1 << ((type) & 31)))␊ |
530 | #define␉ICMP6_FILTER_WILLPASS(type, filterp) \␊ |
531 | ␉((((filterp)->icmp6_filt[(type) >> 5]) & (1 << ((type) & 31))) != 0)␊ |
532 | #define␉ICMP6_FILTER_WILLBLOCK(type, filterp) \␊ |
533 | ␉((((filterp)->icmp6_filt[(type) >> 5]) & (1 << ((type) & 31))) == 0)␊ |
534 | ␊ |
535 | /*␊ |
536 | * Variables related to this implementation␊ |
537 | * of the internet control message protocol version 6.␊ |
538 | */␊ |
539 | struct icmp6errstat {␊ |
540 | ␉u_quad_t icp6errs_dst_unreach_noroute;␊ |
541 | ␉u_quad_t icp6errs_dst_unreach_admin;␊ |
542 | ␉u_quad_t icp6errs_dst_unreach_beyondscope;␊ |
543 | ␉u_quad_t icp6errs_dst_unreach_addr;␊ |
544 | ␉u_quad_t icp6errs_dst_unreach_noport;␊ |
545 | ␉u_quad_t icp6errs_packet_too_big;␊ |
546 | ␉u_quad_t icp6errs_time_exceed_transit;␊ |
547 | ␉u_quad_t icp6errs_time_exceed_reassembly;␊ |
548 | ␉u_quad_t icp6errs_paramprob_header;␊ |
549 | ␉u_quad_t icp6errs_paramprob_nextheader;␊ |
550 | ␉u_quad_t icp6errs_paramprob_option;␊ |
551 | ␉u_quad_t icp6errs_redirect; /* we regard redirect as an error here */␊ |
552 | ␉u_quad_t icp6errs_unknown;␊ |
553 | };␊ |
554 | ␊ |
555 | struct icmp6stat {␊ |
556 | /* statistics related to icmp6 packets generated */␊ |
557 | ␉u_quad_t icp6s_error;␉␉/* # of calls to icmp6_error */␊ |
558 | ␉u_quad_t icp6s_canterror;␉/* no error 'cuz old was icmp */␊ |
559 | ␉u_quad_t icp6s_toofreq;␉␉/* no error 'cuz rate limitation */␊ |
560 | ␉u_quad_t icp6s_outhist[256];␊ |
561 | /* statistics related to input message processed */␊ |
562 | ␉u_quad_t icp6s_badcode;␉␉/* icmp6_code out of range */␊ |
563 | ␉u_quad_t icp6s_tooshort;␉/* packet < sizeof(struct icmp6_hdr) */␊ |
564 | ␉u_quad_t icp6s_checksum;␉/* bad checksum */␊ |
565 | ␉u_quad_t icp6s_badlen;␉␉/* calculated bound mismatch */␊ |
566 | ␉u_quad_t icp6s_reflect;␉␉/* number of responses */␊ |
567 | ␉u_quad_t icp6s_inhist[256];␉␊ |
568 | ␉u_quad_t icp6s_nd_toomanyopt;␉/* too many ND options */␊ |
569 | ␉struct icmp6errstat icp6s_outerrhist;␊ |
570 | #define icp6s_odst_unreach_noroute \␊ |
571 | ␉icp6s_outerrhist.icp6errs_dst_unreach_noroute␊ |
572 | #define icp6s_odst_unreach_admin icp6s_outerrhist.icp6errs_dst_unreach_admin␊ |
573 | #define icp6s_odst_unreach_beyondscope \␊ |
574 | ␉icp6s_outerrhist.icp6errs_dst_unreach_beyondscope␊ |
575 | #define icp6s_odst_unreach_addr icp6s_outerrhist.icp6errs_dst_unreach_addr␊ |
576 | #define icp6s_odst_unreach_noport icp6s_outerrhist.icp6errs_dst_unreach_noport␊ |
577 | #define icp6s_opacket_too_big icp6s_outerrhist.icp6errs_packet_too_big␊ |
578 | #define icp6s_otime_exceed_transit \␊ |
579 | ␉icp6s_outerrhist.icp6errs_time_exceed_transit␊ |
580 | #define icp6s_otime_exceed_reassembly \␊ |
581 | ␉icp6s_outerrhist.icp6errs_time_exceed_reassembly␊ |
582 | #define icp6s_oparamprob_header icp6s_outerrhist.icp6errs_paramprob_header␊ |
583 | #define icp6s_oparamprob_nextheader \␊ |
584 | ␉icp6s_outerrhist.icp6errs_paramprob_nextheader␊ |
585 | #define icp6s_oparamprob_option icp6s_outerrhist.icp6errs_paramprob_option␊ |
586 | #define icp6s_oredirect icp6s_outerrhist.icp6errs_redirect␊ |
587 | #define icp6s_ounknown icp6s_outerrhist.icp6errs_unknown␊ |
588 | ␉u_quad_t icp6s_pmtuchg;␉␉/* path MTU changes */␊ |
589 | ␉u_quad_t icp6s_nd_badopt;␉/* bad ND options */␊ |
590 | ␉u_quad_t icp6s_badns;␉␉/* bad neighbor solicitation */␊ |
591 | ␉u_quad_t icp6s_badna;␉␉/* bad neighbor advertisement */␊ |
592 | ␉u_quad_t icp6s_badrs;␉␉/* bad router advertisement */␊ |
593 | ␉u_quad_t icp6s_badra;␉␉/* bad router advertisement */␊ |
594 | ␉u_quad_t icp6s_badredirect;␉/* bad redirect message */␊ |
595 | };␊ |
596 | ␊ |
597 | /*␊ |
598 | * Names for ICMP sysctl objects␊ |
599 | */␊ |
600 | #define ICMPV6CTL_STATS␉␉1␊ |
601 | #define ICMPV6CTL_REDIRACCEPT␉2␉/* accept/process redirects */␊ |
602 | #define ICMPV6CTL_REDIRTIMEOUT␉3␉/* redirect cache time */␊ |
603 | #define ICMPV6CTL_ND6_PRUNE␉6␊ |
604 | #define ICMPV6CTL_ND6_DELAY␉8␊ |
605 | #define ICMPV6CTL_ND6_UMAXTRIES␉9␊ |
606 | #define ICMPV6CTL_ND6_MMAXTRIES␉␉10␊ |
607 | #define ICMPV6CTL_ND6_USELOOPBACK␉11␊ |
608 | /*#define ICMPV6CTL_ND6_PROXYALL␉12␉obsoleted, do not reuse here */␊ |
609 | #define ICMPV6CTL_NODEINFO␉13␊ |
610 | #define ICMPV6CTL_ERRPPSLIMIT␉14␉/* ICMPv6 error pps limitation */␊ |
611 | #define ICMPV6CTL_ND6_MAXNUDHINT␉15␊ |
612 | #define ICMPV6CTL_MTUDISC_HIWAT␉16␊ |
613 | #define ICMPV6CTL_MTUDISC_LOWAT␉17␊ |
614 | #define ICMPV6CTL_ND6_DEBUG␉18␊ |
615 | #define ICMPV6CTL_ND6_DRLIST␉19␊ |
616 | #define ICMPV6CTL_ND6_PRLIST␉20␊ |
617 | #define ICMPV6CTL_MAXID␉␉21␊ |
618 | ␊ |
619 | ␊ |
620 | #endif /* !_NETINET_ICMP6_H_ */␊ |
621 |