xref: /utopia/UTPA2-700.0.x/projects/tools/lint/mips-linux-gnu_include/linux/ipv6.h (revision 53ee8cc121a030b8d368113ac3e966b4705770ef)
1*53ee8cc1Swenshuai.xi #ifndef _IPV6_H
2*53ee8cc1Swenshuai.xi #define _IPV6_H
3*53ee8cc1Swenshuai.xi 
4*53ee8cc1Swenshuai.xi #include <linux/in6.h>
5*53ee8cc1Swenshuai.xi #include <asm/byteorder.h>
6*53ee8cc1Swenshuai.xi 
7*53ee8cc1Swenshuai.xi /* The latest drafts declared increase in minimal mtu up to 1280. */
8*53ee8cc1Swenshuai.xi 
9*53ee8cc1Swenshuai.xi #define IPV6_MIN_MTU	1280
10*53ee8cc1Swenshuai.xi 
11*53ee8cc1Swenshuai.xi /*
12*53ee8cc1Swenshuai.xi  *	Advanced API
13*53ee8cc1Swenshuai.xi  *	source interface/address selection, source routing, etc...
14*53ee8cc1Swenshuai.xi  *	*under construction*
15*53ee8cc1Swenshuai.xi  */
16*53ee8cc1Swenshuai.xi 
17*53ee8cc1Swenshuai.xi 
18*53ee8cc1Swenshuai.xi struct in6_pktinfo {
19*53ee8cc1Swenshuai.xi 	struct in6_addr	ipi6_addr;
20*53ee8cc1Swenshuai.xi 	int		ipi6_ifindex;
21*53ee8cc1Swenshuai.xi };
22*53ee8cc1Swenshuai.xi 
23*53ee8cc1Swenshuai.xi 
24*53ee8cc1Swenshuai.xi struct in6_ifreq {
25*53ee8cc1Swenshuai.xi 	struct in6_addr	ifr6_addr;
26*53ee8cc1Swenshuai.xi 	__u32		ifr6_prefixlen;
27*53ee8cc1Swenshuai.xi 	int		ifr6_ifindex;
28*53ee8cc1Swenshuai.xi };
29*53ee8cc1Swenshuai.xi 
30*53ee8cc1Swenshuai.xi #define IPV6_SRCRT_STRICT	0x01	/* Deprecated; will be removed */
31*53ee8cc1Swenshuai.xi #define IPV6_SRCRT_TYPE_0	0	/* Deprecated; will be removed */
32*53ee8cc1Swenshuai.xi #define IPV6_SRCRT_TYPE_2	2	/* IPv6 type 2 Routing Header	*/
33*53ee8cc1Swenshuai.xi 
34*53ee8cc1Swenshuai.xi /*
35*53ee8cc1Swenshuai.xi  *	routing header
36*53ee8cc1Swenshuai.xi  */
37*53ee8cc1Swenshuai.xi struct ipv6_rt_hdr {
38*53ee8cc1Swenshuai.xi 	__u8		nexthdr;
39*53ee8cc1Swenshuai.xi 	__u8		hdrlen;
40*53ee8cc1Swenshuai.xi 	__u8		type;
41*53ee8cc1Swenshuai.xi 	__u8		segments_left;
42*53ee8cc1Swenshuai.xi 
43*53ee8cc1Swenshuai.xi 	/*
44*53ee8cc1Swenshuai.xi 	 *	type specific data
45*53ee8cc1Swenshuai.xi 	 *	variable length field
46*53ee8cc1Swenshuai.xi 	 */
47*53ee8cc1Swenshuai.xi };
48*53ee8cc1Swenshuai.xi 
49*53ee8cc1Swenshuai.xi 
50*53ee8cc1Swenshuai.xi struct ipv6_opt_hdr {
51*53ee8cc1Swenshuai.xi 	__u8 		nexthdr;
52*53ee8cc1Swenshuai.xi 	__u8 		hdrlen;
53*53ee8cc1Swenshuai.xi 	/*
54*53ee8cc1Swenshuai.xi 	 * TLV encoded option data follows.
55*53ee8cc1Swenshuai.xi 	 */
56*53ee8cc1Swenshuai.xi } __attribute__ ((packed));	/* required for some archs */
57*53ee8cc1Swenshuai.xi 
58*53ee8cc1Swenshuai.xi #define ipv6_destopt_hdr ipv6_opt_hdr
59*53ee8cc1Swenshuai.xi #define ipv6_hopopt_hdr  ipv6_opt_hdr
60*53ee8cc1Swenshuai.xi 
61*53ee8cc1Swenshuai.xi 
62*53ee8cc1Swenshuai.xi /*
63*53ee8cc1Swenshuai.xi  *	routing header type 0 (used in cmsghdr struct)
64*53ee8cc1Swenshuai.xi  */
65*53ee8cc1Swenshuai.xi 
66*53ee8cc1Swenshuai.xi struct rt0_hdr {
67*53ee8cc1Swenshuai.xi 	struct ipv6_rt_hdr	rt_hdr;
68*53ee8cc1Swenshuai.xi 	__u32			reserved;
69*53ee8cc1Swenshuai.xi 	struct in6_addr		addr[0];
70*53ee8cc1Swenshuai.xi 
71*53ee8cc1Swenshuai.xi #define rt0_type		rt_hdr.type
72*53ee8cc1Swenshuai.xi };
73*53ee8cc1Swenshuai.xi 
74*53ee8cc1Swenshuai.xi /*
75*53ee8cc1Swenshuai.xi  *	routing header type 2
76*53ee8cc1Swenshuai.xi  */
77*53ee8cc1Swenshuai.xi 
78*53ee8cc1Swenshuai.xi struct rt2_hdr {
79*53ee8cc1Swenshuai.xi 	struct ipv6_rt_hdr	rt_hdr;
80*53ee8cc1Swenshuai.xi 	__u32			reserved;
81*53ee8cc1Swenshuai.xi 	struct in6_addr		addr;
82*53ee8cc1Swenshuai.xi 
83*53ee8cc1Swenshuai.xi #define rt2_type		rt_hdr.type
84*53ee8cc1Swenshuai.xi };
85*53ee8cc1Swenshuai.xi 
86*53ee8cc1Swenshuai.xi /*
87*53ee8cc1Swenshuai.xi  *	home address option in destination options header
88*53ee8cc1Swenshuai.xi  */
89*53ee8cc1Swenshuai.xi 
90*53ee8cc1Swenshuai.xi struct ipv6_destopt_hao {
91*53ee8cc1Swenshuai.xi 	__u8			type;
92*53ee8cc1Swenshuai.xi 	__u8			length;
93*53ee8cc1Swenshuai.xi 	struct in6_addr		addr;
94*53ee8cc1Swenshuai.xi } __attribute__ ((__packed__));
95*53ee8cc1Swenshuai.xi 
96*53ee8cc1Swenshuai.xi /*
97*53ee8cc1Swenshuai.xi  *	IPv6 fixed header
98*53ee8cc1Swenshuai.xi  *
99*53ee8cc1Swenshuai.xi  *	BEWARE, it is incorrect. The first 4 bits of flow_lbl
100*53ee8cc1Swenshuai.xi  *	are glued to priority now, forming "class".
101*53ee8cc1Swenshuai.xi  */
102*53ee8cc1Swenshuai.xi 
103*53ee8cc1Swenshuai.xi struct ipv6hdr {
104*53ee8cc1Swenshuai.xi #if defined(__LITTLE_ENDIAN_BITFIELD)
105*53ee8cc1Swenshuai.xi 	__u8			priority:4,
106*53ee8cc1Swenshuai.xi 				version:4;
107*53ee8cc1Swenshuai.xi #elif defined(__BIG_ENDIAN_BITFIELD)
108*53ee8cc1Swenshuai.xi 	__u8			version:4,
109*53ee8cc1Swenshuai.xi 				priority:4;
110*53ee8cc1Swenshuai.xi #else
111*53ee8cc1Swenshuai.xi #error	"Please fix <asm/byteorder.h>"
112*53ee8cc1Swenshuai.xi #endif
113*53ee8cc1Swenshuai.xi 	__u8			flow_lbl[3];
114*53ee8cc1Swenshuai.xi 
115*53ee8cc1Swenshuai.xi 	__be16			payload_len;
116*53ee8cc1Swenshuai.xi 	__u8			nexthdr;
117*53ee8cc1Swenshuai.xi 	__u8			hop_limit;
118*53ee8cc1Swenshuai.xi 
119*53ee8cc1Swenshuai.xi 	struct	in6_addr	saddr;
120*53ee8cc1Swenshuai.xi 	struct	in6_addr	daddr;
121*53ee8cc1Swenshuai.xi };
122*53ee8cc1Swenshuai.xi 
123*53ee8cc1Swenshuai.xi /*
124*53ee8cc1Swenshuai.xi  * This structure contains configuration options per IPv6 link.
125*53ee8cc1Swenshuai.xi  */
126*53ee8cc1Swenshuai.xi struct ipv6_devconf {
127*53ee8cc1Swenshuai.xi 	__s32		forwarding;
128*53ee8cc1Swenshuai.xi 	__s32		hop_limit;
129*53ee8cc1Swenshuai.xi 	__s32		mtu6;
130*53ee8cc1Swenshuai.xi 	__s32		accept_ra;
131*53ee8cc1Swenshuai.xi 	__s32		accept_redirects;
132*53ee8cc1Swenshuai.xi 	__s32		autoconf;
133*53ee8cc1Swenshuai.xi 	__s32		dad_transmits;
134*53ee8cc1Swenshuai.xi 	__s32		rtr_solicits;
135*53ee8cc1Swenshuai.xi 	__s32		rtr_solicit_interval;
136*53ee8cc1Swenshuai.xi 	__s32		rtr_solicit_delay;
137*53ee8cc1Swenshuai.xi 	__s32		force_mld_version;
138*53ee8cc1Swenshuai.xi #ifdef CONFIG_IPV6_PRIVACY
139*53ee8cc1Swenshuai.xi 	__s32		use_tempaddr;
140*53ee8cc1Swenshuai.xi 	__s32		temp_valid_lft;
141*53ee8cc1Swenshuai.xi 	__s32		temp_prefered_lft;
142*53ee8cc1Swenshuai.xi 	__s32		regen_max_retry;
143*53ee8cc1Swenshuai.xi 	__s32		max_desync_factor;
144*53ee8cc1Swenshuai.xi #endif
145*53ee8cc1Swenshuai.xi 	__s32		max_addresses;
146*53ee8cc1Swenshuai.xi 	__s32		accept_ra_defrtr;
147*53ee8cc1Swenshuai.xi 	__s32		accept_ra_pinfo;
148*53ee8cc1Swenshuai.xi #ifdef CONFIG_IPV6_ROUTER_PREF
149*53ee8cc1Swenshuai.xi 	__s32		accept_ra_rtr_pref;
150*53ee8cc1Swenshuai.xi 	__s32		rtr_probe_interval;
151*53ee8cc1Swenshuai.xi #ifdef CONFIG_IPV6_ROUTE_INFO
152*53ee8cc1Swenshuai.xi 	__s32		accept_ra_rt_info_max_plen;
153*53ee8cc1Swenshuai.xi #endif
154*53ee8cc1Swenshuai.xi #endif
155*53ee8cc1Swenshuai.xi 	__s32		proxy_ndp;
156*53ee8cc1Swenshuai.xi 	__s32		accept_source_route;
157*53ee8cc1Swenshuai.xi #ifdef CONFIG_IPV6_OPTIMISTIC_DAD
158*53ee8cc1Swenshuai.xi 	__s32		optimistic_dad;
159*53ee8cc1Swenshuai.xi #endif
160*53ee8cc1Swenshuai.xi #ifdef CONFIG_IPV6_MROUTE
161*53ee8cc1Swenshuai.xi 	__s32		mc_forwarding;
162*53ee8cc1Swenshuai.xi #endif
163*53ee8cc1Swenshuai.xi 	void		*sysctl;
164*53ee8cc1Swenshuai.xi };
165*53ee8cc1Swenshuai.xi 
166*53ee8cc1Swenshuai.xi /* index values for the variables in ipv6_devconf */
167*53ee8cc1Swenshuai.xi enum {
168*53ee8cc1Swenshuai.xi 	DEVCONF_FORWARDING = 0,
169*53ee8cc1Swenshuai.xi 	DEVCONF_HOPLIMIT,
170*53ee8cc1Swenshuai.xi 	DEVCONF_MTU6,
171*53ee8cc1Swenshuai.xi 	DEVCONF_ACCEPT_RA,
172*53ee8cc1Swenshuai.xi 	DEVCONF_ACCEPT_REDIRECTS,
173*53ee8cc1Swenshuai.xi 	DEVCONF_AUTOCONF,
174*53ee8cc1Swenshuai.xi 	DEVCONF_DAD_TRANSMITS,
175*53ee8cc1Swenshuai.xi 	DEVCONF_RTR_SOLICITS,
176*53ee8cc1Swenshuai.xi 	DEVCONF_RTR_SOLICIT_INTERVAL,
177*53ee8cc1Swenshuai.xi 	DEVCONF_RTR_SOLICIT_DELAY,
178*53ee8cc1Swenshuai.xi 	DEVCONF_USE_TEMPADDR,
179*53ee8cc1Swenshuai.xi 	DEVCONF_TEMP_VALID_LFT,
180*53ee8cc1Swenshuai.xi 	DEVCONF_TEMP_PREFERED_LFT,
181*53ee8cc1Swenshuai.xi 	DEVCONF_REGEN_MAX_RETRY,
182*53ee8cc1Swenshuai.xi 	DEVCONF_MAX_DESYNC_FACTOR,
183*53ee8cc1Swenshuai.xi 	DEVCONF_MAX_ADDRESSES,
184*53ee8cc1Swenshuai.xi 	DEVCONF_FORCE_MLD_VERSION,
185*53ee8cc1Swenshuai.xi 	DEVCONF_ACCEPT_RA_DEFRTR,
186*53ee8cc1Swenshuai.xi 	DEVCONF_ACCEPT_RA_PINFO,
187*53ee8cc1Swenshuai.xi 	DEVCONF_ACCEPT_RA_RTR_PREF,
188*53ee8cc1Swenshuai.xi 	DEVCONF_RTR_PROBE_INTERVAL,
189*53ee8cc1Swenshuai.xi 	DEVCONF_ACCEPT_RA_RT_INFO_MAX_PLEN,
190*53ee8cc1Swenshuai.xi 	DEVCONF_PROXY_NDP,
191*53ee8cc1Swenshuai.xi 	DEVCONF_OPTIMISTIC_DAD,
192*53ee8cc1Swenshuai.xi 	DEVCONF_ACCEPT_SOURCE_ROUTE,
193*53ee8cc1Swenshuai.xi 	DEVCONF_MC_FORWARDING,
194*53ee8cc1Swenshuai.xi 	DEVCONF_MAX
195*53ee8cc1Swenshuai.xi };
196*53ee8cc1Swenshuai.xi 
197*53ee8cc1Swenshuai.xi 
198*53ee8cc1Swenshuai.xi #endif /* _IPV6_H */
199