Chameleon

Chameleon Svn Source Tree

Root/tags/2.0/i386/include/netinet6/in6.h

Source at commit 1808 created 12 years 4 months ago.
By blackosx, Revise layout of package installer 'Welcome' file so it looks cleaner. Change the copyright notice to begin from 2009 as seen in the Chameleon 2.0 r431 installer. Should this date be set earlier?
1/*
2 * Copyright (c) 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
29/*$FreeBSD: src/sys/netinet6/in6.h,v 1.7.2.4 2001/07/04 09:45:23 ume Exp $*/
30/*$KAME: in6.h,v 1.89 2001/05/27 13:28:35 itojun Exp $*/
31
32/*
33 * Copyright (C) 1995, 1996, 1997, and 1998 WIDE Project.
34 * All rights reserved.
35 *
36 * Redistribution and use in source and binary forms, with or without
37 * modification, are permitted provided that the following conditions
38 * are met:
39 * 1. Redistributions of source code must retain the above copyright
40 * notice, this list of conditions and the following disclaimer.
41 * 2. Redistributions in binary form must reproduce the above copyright
42 * notice, this list of conditions and the following disclaimer in the
43 * documentation and/or other materials provided with the distribution.
44 * 3. Neither the name of the project nor the names of its contributors
45 * may be used to endorse or promote products derived from this software
46 * without specific prior written permission.
47 *
48 * THIS SOFTWARE IS PROVIDED BY THE PROJECT AND CONTRIBUTORS ``AS IS'' AND
49 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
50 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
51 * ARE DISCLAIMED. IN NO EVENT SHALL THE PROJECT OR CONTRIBUTORS BE LIABLE
52 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
53 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
54 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
55 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
56 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
57 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
58 * SUCH DAMAGE.
59 */
60
61/*
62 * Copyright (c) 1982, 1986, 1990, 1993
63 *The Regents of the University of California. All rights reserved.
64 *
65 * Redistribution and use in source and binary forms, with or without
66 * modification, are permitted provided that the following conditions
67 * are met:
68 * 1. Redistributions of source code must retain the above copyright
69 * notice, this list of conditions and the following disclaimer.
70 * 2. Redistributions in binary form must reproduce the above copyright
71 * notice, this list of conditions and the following disclaimer in the
72 * documentation and/or other materials provided with the distribution.
73 * 3. All advertising materials mentioning features or use of this software
74 * must display the following acknowledgement:
75 *This product includes software developed by the University of
76 *California, Berkeley and its contributors.
77 * 4. Neither the name of the University nor the names of its contributors
78 * may be used to endorse or promote products derived from this software
79 * without specific prior written permission.
80 *
81 * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
82 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
83 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
84 * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
85 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
86 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
87 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
88 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
89 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
90 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
91 * SUCH DAMAGE.
92 *
93 *@(#)in.h8.3 (Berkeley) 1/3/94
94 */
95
96#ifndef __KAME_NETINET_IN_H_INCLUDED_
97#error "do not include netinet6/in6.h directly, include netinet/in.h. see RFC2553"
98#endif
99
100#ifndef _NETINET6_IN6_H_
101#define _NETINET6_IN6_H_
102#include <sys/appleapiopts.h>
103#include <sys/_types.h>
104
105
106#ifndef _SA_FAMILY_T
107#define _SA_FAMILY_T
108typedef __uint8_tsa_family_t;
109#endif
110
111/*
112 * Identification of the network protocol stack
113 * for *BSD-current/release: http://www.kame.net/dev/cvsweb.cgi/kame/COVERAGE
114 * has the table of implementation/integration differences.
115 */
116#define __KAME__
117#define __KAME_VERSION"20010528/apple-darwin"
118
119#if !defined(_POSIX_C_SOURCE) || defined(_DARWIN_C_SOURCE)
120/*
121 * Local port number conventions:
122 *
123 * Ports < IPPORT_RESERVED are reserved for privileged processes (e.g. root),
124 * unless a kernel is compiled with IPNOPRIVPORTS defined.
125 *
126 * When a user does a bind(2) or connect(2) with a port number of zero,
127 * a non-conflicting local port address is chosen.
128 *
129 * The default range is IPPORT_ANONMIN to IPPORT_ANONMAX, although
130 * that is settable by sysctl(3); net.inet.ip.anonportmin and
131 * net.inet.ip.anonportmax respectively.
132 *
133 * A user may set the IPPROTO_IP option IP_PORTRANGE to change this
134 * default assignment range.
135 *
136 * The value IP_PORTRANGE_DEFAULT causes the default behavior.
137 *
138 * The value IP_PORTRANGE_HIGH is the same as IP_PORTRANGE_DEFAULT,
139 * and exists only for FreeBSD compatibility purposes.
140 *
141 * The value IP_PORTRANGE_LOW changes the range to the "low" are
142 * that is (by convention) restricted to privileged processes.
143 * This convention is based on "vouchsafe" principles only.
144 * It is only secure if you trust the remote host to restrict these ports.
145 * The range is IPPORT_RESERVEDMIN to IPPORT_RESERVEDMAX.
146 */
147
148#defineIPV6PORT_RESERVED1024
149#defineIPV6PORT_ANONMIN49152
150#defineIPV6PORT_ANONMAX65535
151#defineIPV6PORT_RESERVEDMIN600
152#defineIPV6PORT_RESERVEDMAX(IPV6PORT_RESERVED-1)
153#endif /* (_POSIX_C_SOURCE && !_DARWIN_C_SOURCE) */
154
155/*
156 * IPv6 address
157 */
158struct in6_addr {
159union {
160__uint8_t __u6_addr8[16];
161__uint16_t __u6_addr16[8];
162__uint32_t __u6_addr32[4];
163} __u6_addr;/* 128-bit IP6 address */
164};
165
166#define s6_addr __u6_addr.__u6_addr8
167
168#define INET6_ADDRSTRLEN46
169
170/*
171 * Socket address for IPv6
172 */
173#if !defined(_POSIX_C_SOURCE) || defined(_DARWIN_C_SOURCE)
174#define SIN6_LEN
175#endif /* (_POSIX_C_SOURCE && !_DARWIN_C_SOURCE) */
176struct sockaddr_in6 {
177__uint8_tsin6_len;/* length of this struct(sa_family_t)*/
178sa_family_tsin6_family;/* AF_INET6 (sa_family_t) */
179in_port_tsin6_port;/* Transport layer port # (in_port_t)*/
180__uint32_tsin6_flowinfo;/* IP6 flow information */
181struct in6_addrsin6_addr;/* IP6 address */
182__uint32_tsin6_scope_id;/* scope zone index */
183};
184
185
186
187
188/*
189 * Definition of some useful macros to handle IP6 addresses
190 */
191#define IN6ADDR_ANY_INIT \
192{{{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, \
193 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }}}
194#define IN6ADDR_LOOPBACK_INIT \
195{{{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, \
196 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01 }}}
197#if !defined(_POSIX_C_SOURCE) || defined(_DARWIN_C_SOURCE)
198#define IN6ADDR_NODELOCAL_ALLNODES_INIT \
199{{{ 0xff, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, \
200 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01 }}}
201#define IN6ADDR_LINKLOCAL_ALLNODES_INIT \
202{{{ 0xff, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, \
203 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01 }}}
204#define IN6ADDR_LINKLOCAL_ALLROUTERS_INIT \
205{{{ 0xff, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, \
206 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02 }}}
207#endif /* (_POSIX_C_SOURCE && !_DARWIN_C_SOURCE) */
208
209extern const struct in6_addr in6addr_any;
210extern const struct in6_addr in6addr_loopback;
211#if !defined(_POSIX_C_SOURCE) || defined(_DARWIN_C_SOURCE)
212extern const struct in6_addr in6addr_nodelocal_allnodes;
213extern const struct in6_addr in6addr_linklocal_allnodes;
214extern const struct in6_addr in6addr_linklocal_allrouters;
215#endif /* (_POSIX_C_SOURCE && !_DARWIN_C_SOURCE) */
216
217/*
218 * Equality
219 * NOTE: Some of kernel programming environment (for example, openbsd/sparc)
220 * does not supply memcmp(). For userland memcmp() is preferred as it is
221 * in ANSI standard.
222 */
223#if !defined(_POSIX_C_SOURCE) || defined(_DARWIN_C_SOURCE)
224#define IN6_ARE_ADDR_EQUAL(a, b)\
225 (memcmp(&(a)->s6_addr[0], &(b)->s6_addr[0], sizeof(struct in6_addr)) == 0)
226#endif /* (_POSIX_C_SOURCE && !_DARWIN_C_SOURCE) */
227
228
229/*
230 * Unspecified
231 */
232#define IN6_IS_ADDR_UNSPECIFIED(a)\
233((*(const __uint32_t *)(const void *)(&(a)->s6_addr[0]) == 0) && \
234 (*(const __uint32_t *)(const void *)(&(a)->s6_addr[4]) == 0) && \
235 (*(const __uint32_t *)(const void *)(&(a)->s6_addr[8]) == 0) && \
236 (*(const __uint32_t *)(const void *)(&(a)->s6_addr[12]) == 0))
237
238/*
239 * Loopback
240 */
241#define IN6_IS_ADDR_LOOPBACK(a)\
242((*(const __uint32_t *)(const void *)(&(a)->s6_addr[0]) == 0) && \
243 (*(const __uint32_t *)(const void *)(&(a)->s6_addr[4]) == 0) && \
244 (*(const __uint32_t *)(const void *)(&(a)->s6_addr[8]) == 0) && \
245 (*(const __uint32_t *)(const void *)(&(a)->s6_addr[12]) == ntohl(1)))
246
247/*
248 * IPv4 compatible
249 */
250#define IN6_IS_ADDR_V4COMPAT(a)\
251((*(const __uint32_t *)(const void *)(&(a)->s6_addr[0]) == 0) && \
252 (*(const __uint32_t *)(const void *)(&(a)->s6_addr[4]) == 0) && \
253 (*(const __uint32_t *)(const void *)(&(a)->s6_addr[8]) == 0) && \
254 (*(const __uint32_t *)(const void *)(&(a)->s6_addr[12]) != 0) && \
255 (*(const __uint32_t *)(const void *)(&(a)->s6_addr[12]) != ntohl(1)))
256
257/*
258 * Mapped
259 */
260#define IN6_IS_ADDR_V4MAPPED(a) \
261((*(const __uint32_t *)(const void *)(&(a)->s6_addr[0]) == 0) && \
262 (*(const __uint32_t *)(const void *)(&(a)->s6_addr[4]) == 0) && \
263 (*(const __uint32_t *)(const void *)(&(a)->s6_addr[8]) == ntohl(0x0000ffff)))
264
265/*
266 * KAME Scope Values
267 */
268
269#define __IPV6_ADDR_SCOPE_NODELOCAL0x01
270#define __IPV6_ADDR_SCOPE_LINKLOCAL0x02
271#define __IPV6_ADDR_SCOPE_SITELOCAL0x05
272#define __IPV6_ADDR_SCOPE_ORGLOCAL0x08/* just used in this file */
273#define __IPV6_ADDR_SCOPE_GLOBAL0x0e
274
275/*
276 * Unicast Scope
277 * Note that we must check topmost 10 bits only, not 16 bits (see RFC2373).
278 */
279#define IN6_IS_ADDR_LINKLOCAL(a)\
280(((a)->s6_addr[0] == 0xfe) && (((a)->s6_addr[1] & 0xc0) == 0x80))
281#define IN6_IS_ADDR_SITELOCAL(a)\
282(((a)->s6_addr[0] == 0xfe) && (((a)->s6_addr[1] & 0xc0) == 0xc0))
283
284/*
285 * Multicast
286 */
287#define IN6_IS_ADDR_MULTICAST(a)((a)->s6_addr[0] == 0xff)
288
289#define __IPV6_ADDR_MC_SCOPE(a)((a)->s6_addr[1] & 0x0f)
290
291/*
292 * Multicast Scope
293 */
294#define IN6_IS_ADDR_MC_NODELOCAL(a)\
295(IN6_IS_ADDR_MULTICAST(a) &&\
296 (__IPV6_ADDR_MC_SCOPE(a) == __IPV6_ADDR_SCOPE_NODELOCAL))
297#define IN6_IS_ADDR_MC_LINKLOCAL(a)\
298(IN6_IS_ADDR_MULTICAST(a) &&\
299 (__IPV6_ADDR_MC_SCOPE(a) == __IPV6_ADDR_SCOPE_LINKLOCAL))
300#define IN6_IS_ADDR_MC_SITELOCAL(a)\
301(IN6_IS_ADDR_MULTICAST(a) && \
302 (__IPV6_ADDR_MC_SCOPE(a) == __IPV6_ADDR_SCOPE_SITELOCAL))
303#define IN6_IS_ADDR_MC_ORGLOCAL(a)\
304(IN6_IS_ADDR_MULTICAST(a) &&\
305 (__IPV6_ADDR_MC_SCOPE(a) == __IPV6_ADDR_SCOPE_ORGLOCAL))
306#define IN6_IS_ADDR_MC_GLOBAL(a)\
307(IN6_IS_ADDR_MULTICAST(a) &&\
308 (__IPV6_ADDR_MC_SCOPE(a) == __IPV6_ADDR_SCOPE_GLOBAL))
309
310
311/*
312 * IP6 route structure
313 */
314#if !defined(_POSIX_C_SOURCE) || defined(_DARWIN_C_SOURCE)
315#endif /* (_POSIX_C_SOURCE && !_DARWIN_C_SOURCE) */
316
317/*
318 * Options for use with [gs]etsockopt at the IPV6 level.
319 * First word of comment is data type; bool is stored in int.
320 */
321/* no hdrincl */
322#if !defined(_POSIX_C_SOURCE) || defined(_DARWIN_C_SOURCE)
323#if 0 /* the followings are relic in IPv4 and hence are disabled */
324#define IPV6_OPTIONS1 /* buf/ip6_opts; set/get IP6 options */
325#define IPV6_RECVOPTS5 /* bool; receive all IP6 opts w/dgram */
326#define IPV6_RECVRETOPTS6 /* bool; receive IP6 opts for response */
327#define IPV6_RECVDSTADDR7 /* bool; receive IP6 dst addr w/dgram */
328#define IPV6_RETOPTS8 /* ip6_opts; set/get IP6 options */
329#endif /* 0 */
330#define IPV6_SOCKOPT_RESERVED13 /* reserved for future use */
331#endif /* (_POSIX_C_SOURCE && !_DARWIN_C_SOURCE) */
332#define IPV6_UNICAST_HOPS4 /* int; IP6 hops */
333#define IPV6_MULTICAST_IF9 /* __uint8_t; set/get IP6 multicast i/f */
334#define IPV6_MULTICAST_HOPS10 /* __uint8_t; set/get IP6 multicast hops */
335#define IPV6_MULTICAST_LOOP11 /* __uint8_t; set/get IP6 mcast loopback */
336#define IPV6_JOIN_GROUP12 /* ip6_mreq; join a group membership */
337#define IPV6_LEAVE_GROUP13 /* ip6_mreq; leave a group membership */
338
339#if !defined(_POSIX_C_SOURCE) || defined(_DARWIN_C_SOURCE)
340#define IPV6_PORTRANGE14 /* int; range to choose for unspec port */
341#define ICMP6_FILTER18 /* icmp6_filter; icmp6 filter */
342/* RFC2292 options */
343#define IPV6_PKTINFO19 /* bool; send/recv if, src/dst addr */
344#define IPV6_HOPLIMIT20 /* bool; hop limit */
345#define IPV6_NEXTHOP21 /* bool; next hop addr */
346#define IPV6_HOPOPTS22 /* bool; hop-by-hop option */
347#define IPV6_DSTOPTS23 /* bool; destination option */
348#define IPV6_RTHDR24 /* bool; routing header */
349#define IPV6_PKTOPTIONS25 /* buf/cmsghdr; set/get IPv6 options */
350
351#define IPV6_CHECKSUM26 /* int; checksum offset for raw socket */
352#endif /* (_POSIX_C_SOURCE && !_DARWIN_C_SOURCE) */
353#define IPV6_V6ONLY27 /* bool; only bind INET6 at wildcard bind */
354#if !defined(_POSIX_C_SOURCE) || defined(_DARWIN_C_SOURCE)
355#define IPV6_BINDV6ONLYIPV6_V6ONLY
356
357
358#if 1 /*IPSEC*/
359#define IPV6_IPSEC_POLICY28 /* struct; get/set security policy */
360#endif /* 1 */
361#define IPV6_FAITH29 /* bool; accept FAITH'ed connections */
362
363#if 1 /*IPV6FIREWALL*/
364#define IPV6_FW_ADD30 /* add a firewall rule to chain */
365#define IPV6_FW_DEL31 /* delete a firewall rule from chain */
366#define IPV6_FW_FLUSH32 /* flush firewall rule chain */
367#define IPV6_FW_ZERO33 /* clear single/all firewall counter(s) */
368#define IPV6_FW_GET34 /* get entire firewall rule chain */
369#endif /* 1 */
370
371#define IPV6_RECVTCLASS 35 /* bool; recv traffic class values */
372#define IPV6_TCLASS 36 /* int; send traffic class value */
373
374/* to define items, should talk with KAME guys first, for *BSD compatibility */
375
376#define IPV6_RTHDR_LOOSE 0 /* this hop need not be a neighbor. XXX old spec */
377#define IPV6_RTHDR_STRICT 1 /* this hop must be a neighbor. XXX old spec */
378#define IPV6_RTHDR_TYPE_0 0 /* IPv6 routing header type 0 */
379
380/*
381 * Defaults and limits for options
382 */
383#define IPV6_DEFAULT_MULTICAST_HOPS 1/* normally limit m'casts to 1 hop */
384#define IPV6_DEFAULT_MULTICAST_LOOP 1/* normally hear sends if a member */
385
386/*
387 * Argument structure for IPV6_JOIN_GROUP and IPV6_LEAVE_GROUP.
388 */
389struct ipv6_mreq {
390struct in6_addripv6mr_multiaddr;
391unsigned intipv6mr_interface;
392};
393
394/*
395 * IPV6_PKTINFO: Packet information(RFC2292 sec 5)
396 */
397struct in6_pktinfo {
398struct in6_addripi6_addr;/* src/dst IPv6 address */
399unsigned intipi6_ifindex;/* send/recv interface index */
400};
401
402/*
403 * Argument for IPV6_PORTRANGE:
404 * - which range to search when port is unspecified at bind() or connect()
405 */
406#defineIPV6_PORTRANGE_DEFAULT0/* default range */
407#defineIPV6_PORTRANGE_HIGH1/* "high" - request firewall bypass */
408#defineIPV6_PORTRANGE_LOW2/* "low" - vouchsafe security */
409
410/*
411 * Definitions for inet6 sysctl operations.
412 *
413 * Third level is protocol number.
414 * Fourth level is desired variable within that protocol.
415 */
416#define IPV6PROTO_MAXID(IPPROTO_PIM + 1)/* don't list to IPV6PROTO_MAX */
417
418/*
419 * Names for IP sysctl objects
420 */
421#define IPV6CTL_FORWARDING1/* act as router */
422#define IPV6CTL_SENDREDIRECTS2/* may send redirects when forwarding*/
423#define IPV6CTL_DEFHLIM3/* default Hop-Limit */
424#ifdef notyet
425#define IPV6CTL_DEFMTU4/* default MTU */
426#endif
427#define IPV6CTL_FORWSRCRT5/* forward source-routed dgrams */
428#define IPV6CTL_STATS6/* stats */
429#define IPV6CTL_MRTSTATS7/* multicast forwarding stats */
430#define IPV6CTL_MRTPROTO8/* multicast routing protocol */
431#define IPV6CTL_MAXFRAGPACKETS9/* max packets reassembly queue */
432#define IPV6CTL_SOURCECHECK10/* verify source route and intf */
433#define IPV6CTL_SOURCECHECK_LOGINT 11/* minimume logging interval */
434#define IPV6CTL_ACCEPT_RTADV12
435#define IPV6CTL_KEEPFAITH13
436#define IPV6CTL_LOG_INTERVAL14
437#define IPV6CTL_HDRNESTLIMIT15
438#define IPV6CTL_DAD_COUNT16
439#define IPV6CTL_AUTO_FLOWLABEL17
440#define IPV6CTL_DEFMCASTHLIM18
441#define IPV6CTL_GIF_HLIM19/* default HLIM for gif encap packet */
442#define IPV6CTL_KAME_VERSION20
443#define IPV6CTL_USE_DEPRECATED21/* use deprecated addr (RFC2462 5.5.4) */
444#define IPV6CTL_RR_PRUNE22/* walk timer for router renumbering */
445#if 0/*obsolete*/
446#define IPV6CTL_MAPPED_ADDR23
447#endif
448#define IPV6CTL_V6ONLY24
449#define IPV6CTL_RTEXPIRE25/* cloned route expiration time */
450#define IPV6CTL_RTMINEXPIRE26/* min value for expiration time */
451#define IPV6CTL_RTMAXCACHE27/* trigger level for dynamic expire */
452
453#define IPV6CTL_USETEMPADDR32/* use temporary addresses (RFC3041) */
454#define IPV6CTL_TEMPPLTIME33/* preferred lifetime for tmpaddrs */
455#define IPV6CTL_TEMPVLTIME34/* valid lifetime for tmpaddrs */
456#define IPV6CTL_AUTO_LINKLOCAL35/* automatic link-local addr assign */
457#define IPV6CTL_RIP6STATS36/* raw_ip6 stats */
458
459#define IPV6CTL_MAXFRAGS 41 /* max fragments */
460
461#define IPV6CTL_NEIGHBORGCTHRESH 46
462#define IPV6CTL_MAXIFPREFIXES47
463#define IPV6CTL_MAXIFDEFROUTERS 48
464#define IPV6CTL_MAXDYNROUTES49
465
466/* New entries should be added here from current IPV6CTL_MAXID value. */
467/* to define items, should talk with KAME guys first, for *BSD compatibility */
468#define IPV6CTL_MAXID50
469
470
471__BEGIN_DECLS
472struct cmsghdr;
473
474extern int inet6_option_space(int);
475extern int inet6_option_init(void *, struct cmsghdr **, int);
476extern int inet6_option_append(struct cmsghdr *, const __uint8_t *,
477int, int);
478extern __uint8_t *inet6_option_alloc(struct cmsghdr *, int, int, int);
479extern int inet6_option_next(const struct cmsghdr *, __uint8_t **);
480extern int inet6_option_find(const struct cmsghdr *, __uint8_t **, int);
481
482extern size_t inet6_rthdr_space(int, int);
483extern struct cmsghdr *inet6_rthdr_init(void *, int);
484extern int inet6_rthdr_add(struct cmsghdr *, const struct in6_addr *,
485unsigned int);
486extern int inet6_rthdr_lasthop(struct cmsghdr *, unsigned int);
487#if 0 /* not implemented yet */
488extern int inet6_rthdr_reverse(const struct cmsghdr *, struct cmsghdr *);
489#endif
490extern int inet6_rthdr_segments(const struct cmsghdr *);
491extern struct in6_addr *inet6_rthdr_getaddr(struct cmsghdr *, int);
492extern int inet6_rthdr_getflags(const struct cmsghdr *, int);
493
494extern int inet6_opt_init(void *, size_t);
495extern int inet6_opt_append(void *, size_t, int, __uint8_t,
496 size_t, __uint8_t, void **);
497extern int inet6_opt_finish(void *, size_t, int);
498extern int inet6_opt_set_val(void *, size_t, void *, int);
499
500extern int inet6_opt_next(void *, size_t, int, __uint8_t *,
501 size_t *, void **);
502extern int inet6_opt_find(void *, size_t, int, __uint8_t,
503 size_t *, void **);
504extern int inet6_opt_get_val(void *, size_t, void *, int);
505extern size_t inet6_rth_space(int, int);
506extern void *inet6_rth_init(void *, int, int, int);
507extern int inet6_rth_add(void *, const struct in6_addr *);
508extern int inet6_rth_reverse(const void *, void *);
509extern int inet6_rth_segments(const void *);
510extern struct in6_addr *inet6_rth_getaddr(const void *, int);
511__END_DECLS
512#endif /* (_POSIX_C_SOURCE && !_DARWIN_C_SOURCE) */
513#endif /* !_NETINET6_IN6_H_ */
514

Archive Download this file

Revision: 1808