File: /usr/src/linux/include/linux/in6.h

1     /*
2      *	Types and definitions for AF_INET6 
3      *	Linux INET6 implementation 
4      *
5      *	Authors:
6      *	Pedro Roque		<roque@di.fc.ul.pt>	
7      *
8      *	Sources:
9      *	IPv6 Program Interfaces for BSD Systems
10      *      <draft-ietf-ipngwg-bsd-api-05.txt>
11      *
12      *	Advanced Sockets API for IPv6
13      *	<draft-stevens-advanced-api-00.txt>
14      *
15      *	This program is free software; you can redistribute it and/or
16      *      modify it under the terms of the GNU General Public License
17      *      as published by the Free Software Foundation; either version
18      *      2 of the License, or (at your option) any later version.
19      */
20     
21     #ifndef _LINUX_IN6_H
22     #define _LINUX_IN6_H
23     
24     #include <linux/types.h>
25     
26     /*
27      *	IPv6 address structure
28      */
29     
30     struct in6_addr
31     {
32     	union 
33     	{
34     		__u8		u6_addr8[16];
35     		__u16		u6_addr16[8];
36     		__u32		u6_addr32[4];
37     	} in6_u;
38     #define s6_addr			in6_u.u6_addr8
39     #define s6_addr16		in6_u.u6_addr16
40     #define s6_addr32		in6_u.u6_addr32
41     };
42     
43     struct sockaddr_in6 {
44     	unsigned short int	sin6_family;    /* AF_INET6 */
45     	__u16			sin6_port;      /* Transport layer port # */
46     	__u32			sin6_flowinfo;  /* IPv6 flow information */
47     	struct in6_addr		sin6_addr;      /* IPv6 address */
48     	__u32			sin6_scope_id;  /* scope id (new in RFC2553) */
49     };
50     
51     struct ipv6_mreq {
52     	/* IPv6 multicast address of group */
53     	struct in6_addr ipv6mr_multiaddr;
54     
55     	/* local IPv6 address of interface */
56     	int		ipv6mr_ifindex;
57     };
58     
59     struct in6_flowlabel_req
60     {
61     	struct in6_addr	flr_dst;
62     	__u32	flr_label;
63     	__u8	flr_action;
64     	__u8	flr_share;
65     	__u16	flr_flags;
66     	__u16 	flr_expires;
67     	__u16	flr_linger;
68     	__u32	__flr_pad;
69     	/* Options in format of IPV6_PKTOPTIONS */
70     };
71     
72     #define IPV6_FL_A_GET	0
73     #define IPV6_FL_A_PUT	1
74     #define IPV6_FL_A_RENEW	2
75     
76     #define IPV6_FL_F_CREATE	1
77     #define IPV6_FL_F_EXCL		2
78     
79     #define IPV6_FL_S_NONE		0
80     #define IPV6_FL_S_EXCL		1
81     #define IPV6_FL_S_PROCESS	2
82     #define IPV6_FL_S_USER		3
83     #define IPV6_FL_S_ANY		255
84     
85     
86     /*
87      *	Bitmask constant declarations to help applications select out the 
88      *	flow label and priority fields.
89      *
90      *	Note that this are in host byte order while the flowinfo field of
91      *	sockaddr_in6 is in network byte order.
92      */
93     
94     #define IPV6_FLOWINFO_FLOWLABEL		0x000fffff
95     #define IPV6_FLOWINFO_PRIORITY		0x0ff00000
96     
97     /* These defintions are obsolete */
98     #define IPV6_PRIORITY_UNCHARACTERIZED	0x0000
99     #define IPV6_PRIORITY_FILLER		0x0100
100     #define IPV6_PRIORITY_UNATTENDED	0x0200
101     #define IPV6_PRIORITY_RESERVED1		0x0300
102     #define IPV6_PRIORITY_BULK		0x0400
103     #define IPV6_PRIORITY_RESERVED2		0x0500
104     #define IPV6_PRIORITY_INTERACTIVE	0x0600
105     #define IPV6_PRIORITY_CONTROL		0x0700
106     #define IPV6_PRIORITY_8			0x0800
107     #define IPV6_PRIORITY_9			0x0900
108     #define IPV6_PRIORITY_10		0x0a00
109     #define IPV6_PRIORITY_11		0x0b00
110     #define IPV6_PRIORITY_12		0x0c00
111     #define IPV6_PRIORITY_13		0x0d00
112     #define IPV6_PRIORITY_14		0x0e00
113     #define IPV6_PRIORITY_15		0x0f00
114     
115     /*
116      *	IPV6 extension headers
117      */
118     #define IPPROTO_HOPOPTS		0	/* IPv6 hop-by-hop options	*/
119     #define IPPROTO_ROUTING		43	/* IPv6 routing header		*/
120     #define IPPROTO_FRAGMENT	44	/* IPv6 fragmentation header	*/
121     #define IPPROTO_ICMPV6		58	/* ICMPv6			*/
122     #define IPPROTO_NONE		59	/* IPv6 no next header		*/
123     #define IPPROTO_DSTOPTS		60	/* IPv6 destination options	*/
124     
125     /*
126      *	IPv6 TLV options.
127      */
128     #define IPV6_TLV_PAD0		0
129     #define IPV6_TLV_PADN		1
130     #define IPV6_TLV_ROUTERALERT	5
131     #define IPV6_TLV_JUMBO		194
132     
133     /*
134      *	IPV6 socket options
135      */
136     
137     #define IPV6_ADDRFORM		1
138     #define IPV6_PKTINFO		2
139     #define IPV6_HOPOPTS		3
140     #define IPV6_DSTOPTS		4
141     #define IPV6_RTHDR		5
142     #define IPV6_PKTOPTIONS		6
143     #define IPV6_CHECKSUM		7
144     #define IPV6_HOPLIMIT		8
145     #define IPV6_NEXTHOP		9
146     #define IPV6_AUTHHDR		10
147     #define IPV6_FLOWINFO		11
148     
149     #define IPV6_UNICAST_HOPS	16
150     #define IPV6_MULTICAST_IF	17
151     #define IPV6_MULTICAST_HOPS	18
152     #define IPV6_MULTICAST_LOOP	19
153     #define IPV6_ADD_MEMBERSHIP	20
154     #define IPV6_DROP_MEMBERSHIP	21
155     #define IPV6_ROUTER_ALERT	22
156     #define IPV6_MTU_DISCOVER	23
157     #define IPV6_MTU		24
158     #define IPV6_RECVERR		25
159     
160     /* IPV6_MTU_DISCOVER values */
161     #define IPV6_PMTUDISC_DONT		0
162     #define IPV6_PMTUDISC_WANT		1
163     #define IPV6_PMTUDISC_DO		2
164     
165     /* Flowlabel */
166     #define IPV6_FLOWLABEL_MGR	32
167     #define IPV6_FLOWINFO_SEND	33
168     
169     
170     #endif
171