OpenCores
URL https://opencores.org/ocsvn/or1k/or1k/trunk

Subversion Repositories or1k

[/] [or1k/] [trunk/] [ecos-2.0/] [packages/] [net/] [tcpip/] [v2_0/] [include/] [netinet6/] [in6.h] - Blame information for rev 1765

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 1254 phoenix
//==========================================================================
2
//
3
//      include/netinet6_in6.h
4
//
5
//      
6
//
7
//==========================================================================
8
//####BSDCOPYRIGHTBEGIN####
9
//
10
// -------------------------------------------
11
//
12
// Portions of this software may have been derived from OpenBSD or other sources,
13
// and are covered by the appropriate copyright disclaimers included herein.
14
//
15
// -------------------------------------------
16
//
17
//####BSDCOPYRIGHTEND####
18
//==========================================================================
19
//#####DESCRIPTIONBEGIN####
20
//
21
// Author(s):    gthomas
22
// Contributors: gthomas
23
// Date:         2000-01-10
24
// Purpose:      
25
// Description:  
26
//              
27
//
28
//####DESCRIPTIONEND####
29
//
30
//==========================================================================
31
 
32
 
33
/* $OpenBSD: in6.h,v 1.9 1999/12/10 08:53:17 angelos Exp $ */
34
/*
35
 * Copyright (C) 1995, 1996, 1997, and 1998 WIDE Project.
36
 * All rights reserved.
37
 *
38
 * Redistribution and use in source and binary forms, with or without
39
 * modification, are permitted provided that the following conditions
40
 * are met:
41
 * 1. Redistributions of source code must retain the above copyright
42
 *    notice, this list of conditions and the following disclaimer.
43
 * 2. Redistributions in binary form must reproduce the above copyright
44
 *    notice, this list of conditions and the following disclaimer in the
45
 *    documentation and/or other materials provided with the distribution.
46
 * 3. Neither the name of the project nor the names of its contributors
47
 *    may be used to endorse or promote products derived from this software
48
 *    without specific prior written permission.
49
 *
50
 * THIS SOFTWARE IS PROVIDED BY THE PROJECT AND CONTRIBUTORS ``AS IS'' AND
51
 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
52
 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
53
 * ARE DISCLAIMED.  IN NO EVENT SHALL THE PROJECT OR CONTRIBUTORS BE LIABLE
54
 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
55
 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
56
 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
57
 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
58
 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
59
 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
60
 * SUCH DAMAGE.
61
 */
62
 
63
/*
64
 * Copyright (c) 1982, 1986, 1990, 1993
65
 *      The Regents of the University of California.  All rights reserved.
66
 *
67
 * Redistribution and use in source and binary forms, with or without
68
 * modification, are permitted provided that the following conditions
69
 * are met:
70
 * 1. Redistributions of source code must retain the above copyright
71
 *    notice, this list of conditions and the following disclaimer.
72
 * 2. Redistributions in binary form must reproduce the above copyright
73
 *    notice, this list of conditions and the following disclaimer in the
74
 *    documentation and/or other materials provided with the distribution.
75
 * 3. All advertising materials mentioning features or use of this software
76
 *    must display the following acknowledgement:
77
 *      This product includes software developed by the University of
78
 *      California, Berkeley and its contributors.
79
 * 4. Neither the name of the University nor the names of its contributors
80
 *    may be used to endorse or promote products derived from this software
81
 *    without specific prior written permission.
82
 *
83
 * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
84
 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
85
 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
86
 * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
87
 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
88
 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
89
 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
90
 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
91
 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
92
 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
93
 * SUCH DAMAGE.
94
 *
95
 *      @(#)in.h        8.3 (Berkeley) 1/3/94
96
 */
97
 
98
#ifndef _NETINET6_IN6_H_
99
#define _NETINET6_IN6_H_
100
 
101
#if !defined(_XOPEN_SOURCE)
102
#include <sys/queue.h>
103
#endif
104
 
105
/*
106
 * Identification of the network protocol stack
107
 */
108
#define __KAME__
109
#define __KAME_VERSION          "19991208/OpenBSD-current"
110
 
111
/*
112
 * Local port number conventions:
113
 *
114
 * Ports < IPPORT_RESERVED are reserved for privileged processes (e.g. root),
115
 * unless a kernel is compiled with IPNOPRIVPORTS defined.
116
 *
117
 * When a user does a bind(2) or connect(2) with a port number of zero,
118
 * a non-conflicting local port address is chosen.
119
 *
120
 * The default range is IPPORT_ANONMIX to IPPORT_ANONMAX, although
121
 * that is settable by sysctl(3); net.inet.ip.anonportmin and
122
 * net.inet.ip.anonportmax respectively.
123
 *
124
 * A user may set the IPPROTO_IP option IP_PORTRANGE to change this
125
 * default assignment range.
126
 *
127
 * The value IP_PORTRANGE_DEFAULT causes the default behavior.
128
 *
129
 * The value IP_PORTRANGE_HIGH is the same as IP_PORTRANGE_DEFAULT,
130
 * and exists only for FreeBSD compatibility purposes.
131
 *
132
 * The value IP_PORTRANGE_LOW changes the range to the "low" are
133
 * that is (by convention) restricted to privileged processes.
134
 * This convention is based on "vouchsafe" principles only.
135
 * It is only secure if you trust the remote host to restrict these ports.
136
 * The range is IPPORT_RESERVEDMIN to IPPORT_RESERVEDMAX.
137
 */
138
 
139
#define IPV6PORT_RESERVED       1024
140
#define IPV6PORT_ANONMIN        49152
141
#define IPV6PORT_ANONMAX        65535
142
#define IPV6PORT_RESERVEDMIN    600
143
#define IPV6PORT_RESERVEDMAX    (IPV6PORT_RESERVED-1)
144
 
145
/*
146
 * IPv6 address
147
 */
148
struct in6_addr {
149
        union {
150
                u_int8_t   __u6_addr8[16];
151
                u_int16_t  __u6_addr16[8];
152
                u_int32_t  __u6_addr32[4];
153
        } __u6_addr;                    /* 128-bit IP6 address */
154
};
155
 
156
#define s6_addr   __u6_addr.__u6_addr8
157
#ifdef _KERNEL  /*XXX nonstandard*/
158
#define s6_addr8  __u6_addr.__u6_addr8
159
#define s6_addr16 __u6_addr.__u6_addr16
160
#define s6_addr32 __u6_addr.__u6_addr32
161
#endif
162
 
163
#define INET6_ADDRSTRLEN        46
164
 
165
/*
166
 * Socket address for IPv6
167
 */
168
#if !defined(_XOPEN_SOURCE)
169
#define SIN6_LEN
170
#endif
171
struct sockaddr_in6 {
172
        u_char          sin6_len;       /* length of this struct(sa_family_t)*/
173
        u_char          sin6_family;    /* AF_INET6 (sa_family_t) */
174
        u_int16_t       sin6_port;      /* Transport layer port # (in_port_t)*/
175
        u_int32_t       sin6_flowinfo;  /* IP6 flow information */
176
        struct in6_addr sin6_addr;      /* IP6 address */
177
        u_int32_t       sin6_scope_id;  /* intface scope id */
178
};
179
 
180
/*
181
 * Local definition for masks
182
 */
183
#ifdef _KERNEL  /*XXX nonstandard*/
184
#define IN6MASK0        {{{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }}}
185
#define IN6MASK32       {{{ 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, \
186
                            0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }}}
187
#define IN6MASK64       {{{ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, \
188
                            0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }}}
189
#define IN6MASK96       {{{ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, \
190
                            0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00 }}}
191
#define IN6MASK128      {{{ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, \
192
                            0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff }}}
193
#endif
194
 
195
#ifdef _KERNEL
196
extern const struct in6_addr in6mask0;
197
extern const struct in6_addr in6mask32;
198
extern const struct in6_addr in6mask64;
199
extern const struct in6_addr in6mask96;
200
extern const struct in6_addr in6mask128;
201
#endif /* _KERNEL */
202
 
203
/*
204
 * Macros started with IPV6_ADDR is KAME local
205
 */
206
#ifdef _KERNEL  /*XXX nonstandard*/
207
#if BYTE_ORDER == BIG_ENDIAN
208
#define IPV6_ADDR_INT32_ONE     1
209
#define IPV6_ADDR_INT32_TWO     2
210
#define IPV6_ADDR_INT32_MNL     0xff010000
211
#define IPV6_ADDR_INT32_MLL     0xff020000
212
#define IPV6_ADDR_INT32_SMP     0x0000ffff
213
#define IPV6_ADDR_INT16_ULL     0xfe80
214
#define IPV6_ADDR_INT16_USL     0xfec0
215
#define IPV6_ADDR_INT16_MLL     0xff02
216
#elif BYTE_ORDER == LITTLE_ENDIAN
217
#define IPV6_ADDR_INT32_ONE     0x01000000
218
#define IPV6_ADDR_INT32_TWO     0x02000000
219
#define IPV6_ADDR_INT32_MNL     0x000001ff
220
#define IPV6_ADDR_INT32_MLL     0x000002ff
221
#define IPV6_ADDR_INT32_SMP     0xffff0000
222
#define IPV6_ADDR_INT16_ULL     0x80fe
223
#define IPV6_ADDR_INT16_USL     0xc0fe
224
#define IPV6_ADDR_INT16_MLL     0x02ff
225
#endif
226
#endif
227
 
228
/*
229
 * Definition of some useful macros to handle IP6 addresses
230
 */
231
#define IN6ADDR_ANY_INIT \
232
        {{{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, \
233
            0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }}}
234
#define IN6ADDR_LOOPBACK_INIT \
235
        {{{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, \
236
            0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01 }}}
237
#define IN6ADDR_NODELOCAL_ALLNODES_INIT \
238
        {{{ 0xff, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, \
239
            0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01 }}}
240
#define IN6ADDR_LINKLOCAL_ALLNODES_INIT \
241
        {{{ 0xff, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, \
242
            0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01 }}}
243
#define IN6ADDR_LINKLOCAL_ALLROUTERS_INIT \
244
        {{{ 0xff, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, \
245
            0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02 }}}
246
 
247
extern const struct in6_addr in6addr_any;
248
extern const struct in6_addr in6addr_loopback;
249
extern const struct in6_addr in6addr_nodelocal_allnodes;
250
extern const struct in6_addr in6addr_linklocal_allnodes;
251
extern const struct in6_addr in6addr_linklocal_allrouters;
252
 
253
/*
254
 * Equality
255
 * NOTE: Some of kernel programming environment (for example, openbsd/sparc)
256
 * does not supply memcmp().  For userland memcmp() is preferred as it is
257
 * in ANSI standard.
258
 */
259
#ifdef _KERNEL
260
#define IN6_ARE_ADDR_EQUAL(a, b)                        \
261
        (bcmp((a), (b), sizeof(struct in6_addr)) == 0)
262
#else
263
#define IN6_ARE_ADDR_EQUAL(a, b)                        \
264
        (memcmp((a), (b), sizeof(struct in6_addr)) == 0)
265
#endif
266
 
267
/*
268
 * Unspecified
269
 */
270
#define IN6_IS_ADDR_UNSPECIFIED(a)      \
271
        ((*(u_int32_t *)(&(a)->s6_addr[0]) == 0) &&       \
272
         (*(u_int32_t *)(&(a)->s6_addr[4]) == 0) &&      \
273
         (*(u_int32_t *)(&(a)->s6_addr[8]) == 0) &&      \
274
         (*(u_int32_t *)(&(a)->s6_addr[12]) == 0))
275
 
276
/*
277
 * Loopback
278
 */
279
#define IN6_IS_ADDR_LOOPBACK(a)         \
280
        ((*(u_int32_t *)(&(a)->s6_addr[0]) == 0) &&       \
281
         (*(u_int32_t *)(&(a)->s6_addr[4]) == 0) &&      \
282
         (*(u_int32_t *)(&(a)->s6_addr[8]) == 0) &&      \
283
         (*(u_int32_t *)(&(a)->s6_addr[12]) == ntohl(1)))
284
 
285
/*
286
 * IPv4 compatible
287
 */
288
#define IN6_IS_ADDR_V4COMPAT(a)         \
289
        ((*(u_int32_t *)(&(a)->s6_addr[0]) == 0) &&       \
290
         (*(u_int32_t *)(&(a)->s6_addr[4]) == 0) &&      \
291
         (*(u_int32_t *)(&(a)->s6_addr[8]) == 0) &&      \
292
         (*(u_int32_t *)(&(a)->s6_addr[12]) != 0) &&     \
293
         (*(u_int32_t *)(&(a)->s6_addr[12]) != ntohl(1)))
294
 
295
/*
296
 * Mapped
297
 */
298
#define IN6_IS_ADDR_V4MAPPED(a)               \
299
        ((*(u_int32_t *)(&(a)->s6_addr[0]) == 0) &&       \
300
         (*(u_int32_t *)(&(a)->s6_addr[4]) == 0) &&      \
301
         (*(u_int32_t *)(&(a)->s6_addr[8]) == ntohl(0x0000ffff)))
302
 
303
/*
304
 * KAME Scope Values
305
 */
306
 
307
#ifdef _KERNEL  /*XXX nonstandard*/
308
#define IPV6_ADDR_SCOPE_NODELOCAL       0x01
309
#define IPV6_ADDR_SCOPE_LINKLOCAL       0x02
310
#define IPV6_ADDR_SCOPE_SITELOCAL       0x05
311
#define IPV6_ADDR_SCOPE_ORGLOCAL        0x08    /* just used in this file */
312
#define IPV6_ADDR_SCOPE_GLOBAL          0x0e
313
#else
314
#define __IPV6_ADDR_SCOPE_NODELOCAL     0x01
315
#define __IPV6_ADDR_SCOPE_LINKLOCAL     0x02
316
#define __IPV6_ADDR_SCOPE_SITELOCAL     0x05
317
#define __IPV6_ADDR_SCOPE_ORGLOCAL      0x08    /* just used in this file */
318
#define __IPV6_ADDR_SCOPE_GLOBAL        0x0e
319
#endif
320
 
321
/*
322
 * Unicast Scope
323
 * Note that we must check topmost 10 bits only, not 16 bits (see RFC2373).
324
 */
325
#define IN6_IS_ADDR_LINKLOCAL(a)        \
326
        (((a)->s6_addr[0] == 0xfe) && (((a)->s6_addr[1] & 0xc0) == 0x80))
327
#define IN6_IS_ADDR_SITELOCAL(a)        \
328
        (((a)->s6_addr[0] == 0xfe) && (((a)->s6_addr[1] & 0xc0) == 0xc0))
329
 
330
/*
331
 * Multicast
332
 */
333
#define IN6_IS_ADDR_MULTICAST(a)        ((a)->s6_addr[0] == 0xff)
334
 
335
#ifdef _KERNEL  /*XXX nonstandard*/
336
#define IPV6_ADDR_MC_SCOPE(a)           ((a)->s6_addr[1] & 0x0f)
337
#else
338
#define __IPV6_ADDR_MC_SCOPE(a)         ((a)->s6_addr[1] & 0x0f)
339
#endif
340
 
341
/*
342
 * Multicast Scope
343
 */
344
#ifdef _KERNEL  /*refers nonstandard items */
345
#define IN6_IS_ADDR_MC_NODELOCAL(a)     \
346
        (IN6_IS_ADDR_MULTICAST(a) &&    \
347
         (IPV6_ADDR_MC_SCOPE(a) == IPV6_ADDR_SCOPE_NODELOCAL))
348
#define IN6_IS_ADDR_MC_LINKLOCAL(a)     \
349
        (IN6_IS_ADDR_MULTICAST(a) &&    \
350
         (IPV6_ADDR_MC_SCOPE(a) == IPV6_ADDR_SCOPE_LINKLOCAL))
351
#define IN6_IS_ADDR_MC_SITELOCAL(a)     \
352
        (IN6_IS_ADDR_MULTICAST(a) &&    \
353
         (IPV6_ADDR_MC_SCOPE(a) == IPV6_ADDR_SCOPE_SITELOCAL))
354
#define IN6_IS_ADDR_MC_ORGLOCAL(a)      \
355
        (IN6_IS_ADDR_MULTICAST(a) &&    \
356
         (IPV6_ADDR_MC_SCOPE(a) == IPV6_ADDR_SCOPE_ORGLOCAL))
357
#define IN6_IS_ADDR_MC_GLOBAL(a)        \
358
        (IN6_IS_ADDR_MULTICAST(a) &&    \
359
         (IPV6_ADDR_MC_SCOPE(a) == IPV6_ADDR_SCOPE_GLOBAL))
360
#else
361
#define IN6_IS_ADDR_MC_NODELOCAL(a)     \
362
        (IN6_IS_ADDR_MULTICAST(a) &&    \
363
         (__IPV6_ADDR_MC_SCOPE(a) == __IPV6_ADDR_SCOPE_NODELOCAL))
364
#define IN6_IS_ADDR_MC_LINKLOCAL(a)     \
365
        (IN6_IS_ADDR_MULTICAST(a) &&    \
366
         (__IPV6_ADDR_MC_SCOPE(a) == __IPV6_ADDR_SCOPE_LINKLOCAL))
367
#define IN6_IS_ADDR_MC_SITELOCAL(a)     \
368
        (IN6_IS_ADDR_MULTICAST(a) &&    \
369
         (__IPV6_ADDR_MC_SCOPE(a) == __IPV6_ADDR_SCOPE_SITELOCAL))
370
#define IN6_IS_ADDR_MC_ORGLOCAL(a)      \
371
        (IN6_IS_ADDR_MULTICAST(a) &&    \
372
         (__IPV6_ADDR_MC_SCOPE(a) == __IPV6_ADDR_SCOPE_ORGLOCAL))
373
#define IN6_IS_ADDR_MC_GLOBAL(a)        \
374
        (IN6_IS_ADDR_MULTICAST(a) &&    \
375
         (__IPV6_ADDR_MC_SCOPE(a) == __IPV6_ADDR_SCOPE_GLOBAL))
376
#endif
377
 
378
/*
379
 * Wildcard Socket
380
 */
381
#if 0   /*pre-RFC2553*/
382
#define IN6_IS_ADDR_ANY(a)      IN6_IS_ADDR_UNSPECIFIED(a)
383
#endif
384
 
385
/*
386
 * KAME Scope
387
 */
388
#ifdef _KERNEL  /*nonstandard*/
389
#define IN6_IS_SCOPE_LINKLOCAL(a)       \
390
        ((IN6_IS_ADDR_LINKLOCAL(a)) ||  \
391
         (IN6_IS_ADDR_MC_LINKLOCAL(a)))
392
#endif
393
 
394
/*
395
 * IP6 route structure
396
 */
397
#if !defined(_XOPEN_SOURCE)
398
struct route_in6 {
399
        struct  rtentry *ro_rt;
400
        struct  sockaddr_in6 ro_dst;
401
};
402
#endif
403
 
404
/*
405
 * Options for use with [gs]etsockopt at the IPV6 level.
406
 * First word of comment is data type; bool is stored in int.
407
 */
408
#define IPV6_OPTIONS            1  /* buf/ip6_opts; set/get IP6 options */
409
/* no hdrincl */
410
#define IPV6_SOCKOPT_RESERVED1  3  /* reserved for future use */
411
#define IPV6_UNICAST_HOPS       4  /* int; IP6 hops */
412
#define IPV6_RECVOPTS           5  /* bool; receive all IP6 opts w/dgram */
413
#define IPV6_RECVRETOPTS        6  /* bool; receive IP6 opts for response */
414
#define IPV6_RECVDSTADDR        7  /* bool; receive IP6 dst addr w/dgram */
415
#define IPV6_RETOPTS            8  /* ip6_opts; set/get IP6 options */
416
#define IPV6_MULTICAST_IF       9  /* u_char; set/get IP6 multicast i/f  */
417
#define IPV6_MULTICAST_HOPS     10 /* u_char; set/get IP6 multicast hops */
418
#define IPV6_MULTICAST_LOOP     11 /* u_char; set/get IP6 multicast loopback */
419
#define IPV6_JOIN_GROUP         12 /* ip6_mreq; join a group membership */
420
#define IPV6_LEAVE_GROUP        13 /* ip6_mreq; leave a group membership */
421
#define IPV6_PORTRANGE          14 /* int; range to choose for unspec port */
422
#define ICMP6_FILTER            18 /* icmp6_filter; icmp6 filter */
423
#define IPV6_PKTINFO            19 /* bool; send/rcv if, src/dst addr */
424
#define IPV6_HOPLIMIT           20 /* bool; hop limit */
425
#define IPV6_NEXTHOP            21 /* bool; next hop addr */
426
#define IPV6_HOPOPTS            22 /* bool; hop-by-hop option */
427
#define IPV6_DSTOPTS            23 /* bool; destination option */
428
#define IPV6_RTHDR              24 /* bool; routing header */
429
#define IPV6_PKTOPTIONS         25 /* buf/cmsghdr; set/get IPv6 options */
430
#define IPV6_CHECKSUM           26 /* int; checksum offset for raw socket */
431
#define IPV6_BINDV6ONLY         27 /* bool; only bind INET6 at null bind */
432
 
433
#if 1 /*IPSEC*/
434
#define IPV6_IPSEC_POLICY       28 /* struct; get/set security policy */
435
#endif
436
#define IPV6_FAITH              29 /* bool; accept FAITH'ed connections */
437
 
438
#if 1 /*IPV6FIREWALL*/
439
#define IPV6_FW_ADD             30 /* add a firewall rule to chain */
440
#define IPV6_FW_DEL             31 /* delete a firewall rule from chain */
441
#define IPV6_FW_FLUSH           32 /* flush firewall rule chain */
442
#define IPV6_FW_ZERO            33 /* clear single/all firewall counter(s) */
443
#define IPV6_FW_GET             34 /* get entire firewall rule chain */
444
#endif
445
 
446
#define IPV6_RTHDR_LOOSE     0 /* this hop need not be a neighbor. XXX old spec */
447
#define IPV6_RTHDR_STRICT    1 /* this hop must be a neighbor. XXX old spec */
448
#define IPV6_RTHDR_TYPE_0    0 /* IPv6 routing header type 0 */
449
 
450
/*
451
 * Defaults and limits for options
452
 */
453
#define IPV6_DEFAULT_MULTICAST_HOPS 1   /* normally limit m'casts to 1 hop  */
454
#define IPV6_DEFAULT_MULTICAST_LOOP 1   /* normally hear sends if a member  */
455
 
456
/*
457
 * Argument structure for IPV6_JOIN_GROUP and IPV6_LEAVE_GROUP.
458
 */
459
struct ipv6_mreq {
460
        struct in6_addr ipv6mr_multiaddr;
461
        u_int           ipv6mr_interface;
462
};
463
 
464
/*
465
 * IPV6_PKTINFO: Packet information(RFC2292 sec 5)
466
 */
467
struct in6_pktinfo {
468
        struct in6_addr ipi6_addr;      /* src/dst IPv6 address */
469
        u_int ipi6_ifindex;             /* send/recv interface index */
470
};
471
 
472
/*
473
 * Argument for IPV6_PORTRANGE:
474
 * - which range to search when port is unspecified at bind() or connect()
475
 */
476
#define IPV6_PORTRANGE_DEFAULT  0        /* default range */
477
#define IPV6_PORTRANGE_HIGH     1       /* "high" - request firewall bypass */
478
#define IPV6_PORTRANGE_LOW      2       /* "low" - vouchsafe security */
479
 
480
#if !defined(_XOPEN_SOURCE)
481
/*
482
 * Definitions for inet6 sysctl operations.
483
 *
484
 * Third level is protocol number.
485
 * Fourth level is desired variable within that protocol.
486
 */
487
#define IPV6PROTO_MAXID (IPPROTO_PIM + 1)       /* don't list to IPV6PROTO_MAX */
488
 
489
#define CTL_IPV6PROTO_NAMES { \
490
        { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, \
491
        { 0, 0 }, \
492
        { "tcp6", CTLTYPE_NODE }, \
493
        { 0, 0 }, \
494
        { 0, 0 }, \
495
        { 0, 0 }, \
496
        { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, \
497
        { 0, 0 }, \
498
        { 0, 0 }, \
499
        { "udp6", CTLTYPE_NODE }, \
500
        { 0, 0 }, \
501
        { 0, 0 }, \
502
        { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, \
503
        { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, \
504
        { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, \
505
        { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, \
506
        { 0, 0 }, \
507
        { "ip6", CTLTYPE_NODE }, \
508
        { 0, 0 }, \
509
        { 0, 0 }, \
510
        { 0, 0 }, \
511
        { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, \
512
        { 0, 0 }, \
513
        { "ipsec6", CTLTYPE_NODE }, \
514
        { 0, 0 }, \
515
        { 0, 0 }, \
516
        { 0, 0 }, \
517
        { 0, 0 }, \
518
        { 0, 0 }, \
519
        { 0, 0 }, \
520
        { "icmp6", CTLTYPE_NODE }, \
521
        { 0, 0 }, \
522
        { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, \
523
        { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, \
524
        { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, \
525
        { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, \
526
        { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, \
527
        { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, \
528
        { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, \
529
        { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, \
530
        { 0, 0 }, \
531
        { 0, 0 }, \
532
        { 0, 0 }, \
533
        { "pim6", CTLTYPE_NODE }, \
534
}
535
 
536
/*
537
 * Names for IP sysctl objects
538
 */
539
#define IPV6CTL_FORWARDING      1       /* act as router */
540
#define IPV6CTL_SENDREDIRECTS   2       /* may send redirects when forwarding*/
541
#define IPV6CTL_DEFHLIM         3       /* default Hop-Limit */
542
#ifdef notyet
543
#define IPV6CTL_DEFMTU          4       /* default MTU */
544
#endif
545
#define IPV6CTL_FORWSRCRT       5       /* forward source-routed dgrams */
546
#define IPV6CTL_STATS           6       /* stats */
547
#define IPV6CTL_MRTSTATS        7       /* multicast forwarding stats */
548
#define IPV6CTL_MRTPROTO        8       /* multicast routing protocol */
549
#define IPV6CTL_MAXFRAGPACKETS  9       /* max packets reassembly queue */
550
#define IPV6CTL_SOURCECHECK     10      /* verify source route and intf */
551
#define IPV6CTL_SOURCECHECK_LOGINT 11   /* minimume logging interval */
552
#define IPV6CTL_ACCEPT_RTADV    12
553
#define IPV6CTL_KEEPFAITH       13
554
#define IPV6CTL_LOG_INTERVAL    14
555
#define IPV6CTL_HDRNESTLIMIT    15
556
#define IPV6CTL_DAD_COUNT       16
557
#define IPV6CTL_AUTO_FLOWLABEL  17
558
#define IPV6CTL_DEFMCASTHLIM    18
559
#define IPV6CTL_GIF_HLIM        19      /* default HLIM for gif encap packet */
560
#define IPV6CTL_KAME_VERSION    20
561
#define IPV6CTL_USE_DEPRECATED  21      /* use deprecated addr (RFC2462 5.5.4) */
562
#define IPV6CTL_RR_PRUNE        22      /* walk timer for router renumbering */
563
#ifdef MAPPED_ADDR_ENABLED
564
#define IPV6CTL_MAPPED_ADDR     23
565
#endif /* MAPPED_ADDR_ENABLED */
566
/* New entries should be added here from current IPV6CTL_MAXID value. */
567
#define IPV6CTL_MAXID           24
568
 
569
#ifdef MAPPED_ADDR_ENABLED
570
#define IPV6CTL_NAMES_MAPPED_ADDR       "mapped_addr"
571
#define IPV6CTL_TYPE_MAPPED_ADDR        CTLTYPE_INT
572
#define IPV6CTL_VARS_MAPPED_ADDR        &ip6_mapped_addr_on
573
#else  /* MAPPED_ADDR_ENABLED */
574
#define IPV6CTL_NAMES_MAPPED_ADDR       0
575
#define IPV6CTL_TYPE_MAPPED_ADDR        0
576
#define IPV6CTL_VARS_MAPPED_ADDR        0
577
#endif /* MAPPED_ADDR_ENABLED */
578
 
579
#define IPV6CTL_NAMES { \
580
        { 0, 0 }, \
581
        { "forwarding", CTLTYPE_INT }, \
582
        { "redirect", CTLTYPE_INT }, \
583
        { "hlim", CTLTYPE_INT }, \
584
        { "mtu", CTLTYPE_INT }, \
585
        { "forwsrcrt", CTLTYPE_INT }, \
586
        { 0, 0 }, \
587
        { 0, 0 }, \
588
        { "mrtproto", CTLTYPE_INT }, \
589
        { "maxfragpackets", CTLTYPE_INT }, \
590
        { "sourcecheck", CTLTYPE_INT }, \
591
        { "sourcecheck_logint", CTLTYPE_INT }, \
592
        { "accept_rtadv", CTLTYPE_INT }, \
593
        { "keepfaith", CTLTYPE_INT }, \
594
        { "log_interval", CTLTYPE_INT }, \
595
        { "hdrnestlimit", CTLTYPE_INT }, \
596
        { "dad_count", CTLTYPE_INT }, \
597
        { "auto_flowlabel", CTLTYPE_INT }, \
598
        { "defmcasthlim", CTLTYPE_INT }, \
599
        { "gifhlim", CTLTYPE_INT }, \
600
        { "kame_version", CTLTYPE_STRING }, \
601
        { "use_deprecated", CTLTYPE_INT }, \
602
        { "rr_prune", CTLTYPE_INT }, \
603
        { IPV6CTL_NAMES_MAPPED_ADDR, IPV6CTL_TYPE_MAPPED_ADDR }, \
604
}
605
 
606
#define IPV6CTL_VARS { \
607
        0, \
608
        &ip6_forwarding, \
609
        &ip6_sendredirects, \
610
        &ip6_defhlim, \
611
        0, \
612
        &ip6_forward_srcrt, \
613
        0, \
614
        0, \
615
        0, \
616
        &ip6_maxfragpackets, \
617
        &ip6_sourcecheck, \
618
        &ip6_sourcecheck_interval, \
619
        &ip6_accept_rtadv, \
620
        &ip6_keepfaith, \
621
        &ip6_log_interval, \
622
        &ip6_hdrnestlimit, \
623
        &ip6_dad_count, \
624
        &ip6_auto_flowlabel, \
625
        &ip6_defmcasthlim, \
626
        &ip6_gif_hlim, \
627
        0, \
628
        &ip6_use_deprecated, \
629
        &ip6_rr_prune, \
630
        IPV6CTL_VARS_MAPPED_ADDR, \
631
}
632
#endif /* !_XOPEN_SOURCE */
633
 
634
#ifdef _KERNEL
635
struct cmsghdr;
636
struct mbuf;
637
struct ifnet;
638
 
639
int     in6_canforward __P((struct in6_addr *, struct in6_addr *));
640
int     in6_cksum __P((struct mbuf *, u_int8_t, u_int32_t, u_int32_t));
641
int     in6_localaddr __P((struct in6_addr *));
642
int     in6_addrscope __P((struct in6_addr *));
643
struct  in6_ifaddr *in6_ifawithscope __P((struct ifnet *, struct in6_addr *));
644
struct  in6_ifaddr *in6_ifawithifp __P((struct ifnet *, struct in6_addr *));
645
extern void in6_if_up __P((struct ifnet *));
646
#ifdef MAPPED_ADDR_ENABLED
647
struct sockaddr;
648
 
649
void    in6_sin6_2_sin __P((struct sockaddr_in *sin,
650
                            struct sockaddr_in6 *sin6));
651
void    in6_sin_2_v4mapsin6 __P((struct sockaddr_in *sin,
652
                                 struct sockaddr_in6 *sin6));
653
void    in6_sin6_2_sin_in_sock __P((struct sockaddr *nam));
654
void    in6_sin_2_v4mapsin6_in_sock __P((struct sockaddr **nam));
655
#endif /* MAPPED_ADDR_ENABLED */
656
 
657
#define satosin6(sa)    ((struct sockaddr_in6 *)(sa))
658
#define sin6tosa(sin6)  ((struct sockaddr *)(sin6))
659
#define ifatoia6(ifa)   ((struct in6_ifaddr *)(ifa))
660
#endif /* _KERNEL */
661
 
662
__BEGIN_DECLS
663
struct cmsghdr;
664
 
665
extern int inet6_option_space(int);
666
extern int inet6_option_init(void *, struct cmsghdr **, int);
667
extern int inet6_option_append(struct cmsghdr *, const u_int8_t *, int, int);
668
extern u_int8_t *inet6_option_alloc(struct cmsghdr *, int, int, int);
669
extern int inet6_option_next(const struct cmsghdr *, u_int8_t **);
670
extern int inet6_option_find(const struct cmsghdr *, u_int8_t **, int);
671
 
672
extern size_t inet6_rthdr_space __P((int, int));
673
extern struct cmsghdr *inet6_rthdr_init __P((void *, int));
674
extern int inet6_rthdr_add __P((struct cmsghdr *, const struct in6_addr *,
675
                unsigned int));
676
extern int inet6_rthdr_lasthop __P((struct cmsghdr *, unsigned int));
677
#if 0 /* not implemented yet */
678
extern int inet6_rthdr_reverse __P((const struct cmsghdr *, struct cmsghdr *));
679
#endif
680
extern int inet6_rthdr_segments __P((const struct cmsghdr *));
681
extern struct in6_addr *inet6_rthdr_getaddr __P((struct cmsghdr *, int));
682
extern int inet6_rthdr_getflags __P((const struct cmsghdr *, int));
683
__END_DECLS
684
 
685
#endif /* !_NETINET6_IN6_H_ */

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.