1 #ifndef _IPV6_H
2 #define _IPV6_H
3 
4 #include <asm/byteorder.h>
5 
6 /* The latest drafts declared increase in minimal mtu up to 1280. */
7 
8 #define IPV6_MIN_MTU	1280
9 
10 /*
11  *	Advanced API
12  *	source interface/address selection, source routing, etc...
13  *	*under construction*
14  */
15 
16 
17 #define IPV6_SRCRT_STRICT	0x01	/* Deprecated; will be removed */
18 #define IPV6_SRCRT_TYPE_0	0	/* Deprecated; will be removed */
19 #define IPV6_SRCRT_TYPE_2	2	/* IPv6 type 2 Routing Header	*/
20 
21 /*
22  *	routing header
23  */
24 struct ipv6_rt_hdr {
25 	__u8		nexthdr;
26 	__u8		hdrlen;
27 	__u8		type;
28 	__u8		segments_left;
29 
30 	/*
31 	 *	type specific data
32 	 *	variable length field
33 	 */
34 };
35 
36 
37 struct ipv6_opt_hdr {
38 	__u8 		nexthdr;
39 	__u8 		hdrlen;
40 	/*
41 	 * TLV encoded option data follows.
42 	 */
43 } __attribute__((packed));	/* required for some archs */
44 
45 #define ipv6_destopt_hdr ipv6_opt_hdr
46 #define ipv6_hopopt_hdr  ipv6_opt_hdr
47 
48 
49 /*
50  *	routing header type 0 (used in cmsghdr struct)
51  */
52 
53 struct rt0_hdr {
54 	struct ipv6_rt_hdr	rt_hdr;
55 	__u32			reserved;
56 	struct in6_addr		addr[0];
57 
58 #define rt0_type		rt_hdr.type
59 };
60 
61 /*
62  *	routing header type 2
63  */
64 
65 struct rt2_hdr {
66 	struct ipv6_rt_hdr	rt_hdr;
67 	__u32			reserved;
68 	struct in6_addr		addr;
69 
70 #define rt2_type		rt_hdr.type
71 };
72 
73 /*
74  *	home address option in destination options header
75  */
76 
77 struct ipv6_destopt_hao {
78 	__u8			type;
79 	__u8			length;
80 	struct in6_addr		addr;
81 } __attribute__((packed));
82 
83 /*
84  *	IPv6 fixed header
85  *
86  *	BEWARE, it is incorrect. The first 4 bits of flow_lbl
87  *	are glued to priority now, forming "class".
88  */
89 
90 struct ipv6hdr {
91 #if defined(__LITTLE_ENDIAN_BITFIELD)
92 	__u8			priority:4,
93 				version:4;
94 #elif defined(__BIG_ENDIAN_BITFIELD)
95 	__u8			version:4,
96 				priority:4;
97 #else
98 #error	"Please fix <asm/byteorder.h>"
99 #endif
100 	__u8			flow_lbl[3];
101 
102 	__be16			payload_len;
103 	__u8			nexthdr;
104 	__u8			hop_limit;
105 
106 	struct	in6_addr	saddr;
107 	struct	in6_addr	daddr;
108 };
109 
110 
111 /* index values for the variables in ipv6_devconf */
112 enum {
113 	DEVCONF_FORWARDING = 0,
114 	DEVCONF_HOPLIMIT,
115 	DEVCONF_MTU6,
116 	DEVCONF_ACCEPT_RA,
117 	DEVCONF_ACCEPT_REDIRECTS,
118 	DEVCONF_AUTOCONF,
119 	DEVCONF_DAD_TRANSMITS,
120 	DEVCONF_RTR_SOLICITS,
121 	DEVCONF_RTR_SOLICIT_INTERVAL,
122 	DEVCONF_RTR_SOLICIT_DELAY,
123 	DEVCONF_USE_TEMPADDR,
124 	DEVCONF_TEMP_VALID_LFT,
125 	DEVCONF_TEMP_PREFERED_LFT,
126 	DEVCONF_REGEN_MAX_RETRY,
127 	DEVCONF_MAX_DESYNC_FACTOR,
128 	DEVCONF_MAX_ADDRESSES,
129 	DEVCONF_FORCE_MLD_VERSION,
130 	DEVCONF_ACCEPT_RA_DEFRTR,
131 	DEVCONF_ACCEPT_RA_PINFO,
132 	DEVCONF_ACCEPT_RA_RTR_PREF,
133 	DEVCONF_RTR_PROBE_INTERVAL,
134 	DEVCONF_ACCEPT_RA_RT_INFO_MAX_PLEN,
135 	DEVCONF_PROXY_NDP,
136 	DEVCONF_OPTIMISTIC_DAD,
137 	DEVCONF_ACCEPT_SOURCE_ROUTE,
138 	DEVCONF_MC_FORWARDING,
139 	DEVCONF_DISABLE_IPV6,
140 	DEVCONF_ACCEPT_DAD,
141 	DEVCONF_FORCE_TLLAO,
142 	DEVCONF_MAX
143 };
144 
145 
146 #endif /* _IPV6_H */
147