1224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#ifndef _UAPI_IPV6_H
2224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define _UAPI_IPV6_H
3224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
4224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#include <linux/types.h>
5224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#include <linux/in6.h>
6224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#include <asm/byteorder.h>
7224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
8224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng/* The latest drafts declared increase in minimal mtu up to 1280. */
9224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
10224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define IPV6_MIN_MTU	1280
11224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
12224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng/*
13224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng *	Advanced API
14224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng *	source interface/address selection, source routing, etc...
15224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng *	*under construction*
16224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng */
17224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
18224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
19224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Chengstruct in6_pktinfo {
20224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	struct in6_addr	ipi6_addr;
21224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	int		ipi6_ifindex;
22224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng};
23224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
24224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Chengstruct ip6_mtuinfo {
25224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	struct sockaddr_in6	ip6m_addr;
26224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	__u32			ip6m_mtu;
27224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng};
28224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
29224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Chengstruct in6_ifreq {
30224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	struct in6_addr	ifr6_addr;
31224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	__u32		ifr6_prefixlen;
32224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	int		ifr6_ifindex;
33224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng};
34224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
35224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define IPV6_SRCRT_STRICT	0x01	/* Deprecated; will be removed */
36224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define IPV6_SRCRT_TYPE_0	0	/* Deprecated; will be removed */
37224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define IPV6_SRCRT_TYPE_2	2	/* IPv6 type 2 Routing Header	*/
38224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
39224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng/*
40224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng *	routing header
41224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng */
42224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Chengstruct ipv6_rt_hdr {
43224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	__u8		nexthdr;
44224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	__u8		hdrlen;
45224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	__u8		type;
46224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	__u8		segments_left;
47224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
48224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	/*
49224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	 *	type specific data
50224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	 *	variable length field
51224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	 */
52224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng};
53224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
54224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
55224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Chengstruct ipv6_opt_hdr {
56224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	__u8 		nexthdr;
57224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	__u8 		hdrlen;
58224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	/*
59224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	 * TLV encoded option data follows.
60224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	 */
61224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng} __attribute__((packed));	/* required for some archs */
62224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
63224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define ipv6_destopt_hdr ipv6_opt_hdr
64224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define ipv6_hopopt_hdr  ipv6_opt_hdr
65224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
66224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng/* Router Alert option values (RFC2711) */
67224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define IPV6_OPT_ROUTERALERT_MLD	0x0000	/* MLD(RFC2710) */
68224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
69224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng/*
70224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng *	routing header type 0 (used in cmsghdr struct)
71224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng */
72224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
73224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Chengstruct rt0_hdr {
74224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	struct ipv6_rt_hdr	rt_hdr;
75224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	__u32			reserved;
76224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	struct in6_addr		addr[0];
77224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
78224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define rt0_type		rt_hdr.type
79224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng};
80224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
81224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng/*
82224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng *	routing header type 2
83224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng */
84224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
85224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Chengstruct rt2_hdr {
86224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	struct ipv6_rt_hdr	rt_hdr;
87224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	__u32			reserved;
88224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	struct in6_addr		addr;
89224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
90224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define rt2_type		rt_hdr.type
91224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng};
92224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
93224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng/*
94224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng *	home address option in destination options header
95224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng */
96224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
97224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Chengstruct ipv6_destopt_hao {
98224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	__u8			type;
99224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	__u8			length;
100224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	struct in6_addr		addr;
101224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng} __attribute__((packed));
102224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
103224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng/*
104224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng *	IPv6 fixed header
105224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng *
106224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng *	BEWARE, it is incorrect. The first 4 bits of flow_lbl
107224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng *	are glued to priority now, forming "class".
108224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng */
109224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
110224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Chengstruct ipv6hdr {
111224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#if defined(__LITTLE_ENDIAN_BITFIELD)
112224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	__u8			priority:4,
113224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng				version:4;
114224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#elif defined(__BIG_ENDIAN_BITFIELD)
115224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	__u8			version:4,
116224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng				priority:4;
117224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#else
118224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#error	"Please fix <asm/byteorder.h>"
119224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#endif
120224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	__u8			flow_lbl[3];
121224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
122224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	__be16			payload_len;
123224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	__u8			nexthdr;
124224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	__u8			hop_limit;
125224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
126224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	struct	in6_addr	saddr;
127224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	struct	in6_addr	daddr;
128224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng};
129224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
130224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
131224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng/* index values for the variables in ipv6_devconf */
132224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Chengenum {
133224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	DEVCONF_FORWARDING = 0,
134224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	DEVCONF_HOPLIMIT,
135224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	DEVCONF_MTU6,
136224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	DEVCONF_ACCEPT_RA,
137224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	DEVCONF_ACCEPT_REDIRECTS,
138224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	DEVCONF_AUTOCONF,
139224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	DEVCONF_DAD_TRANSMITS,
140224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	DEVCONF_RTR_SOLICITS,
141224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	DEVCONF_RTR_SOLICIT_INTERVAL,
142224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	DEVCONF_RTR_SOLICIT_DELAY,
143224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	DEVCONF_USE_TEMPADDR,
144224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	DEVCONF_TEMP_VALID_LFT,
145224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	DEVCONF_TEMP_PREFERED_LFT,
146224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	DEVCONF_REGEN_MAX_RETRY,
147224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	DEVCONF_MAX_DESYNC_FACTOR,
148224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	DEVCONF_MAX_ADDRESSES,
149224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	DEVCONF_FORCE_MLD_VERSION,
150224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	DEVCONF_ACCEPT_RA_DEFRTR,
151224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	DEVCONF_ACCEPT_RA_PINFO,
152224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	DEVCONF_ACCEPT_RA_RTR_PREF,
153224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	DEVCONF_RTR_PROBE_INTERVAL,
154224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	DEVCONF_ACCEPT_RA_RT_INFO_MAX_PLEN,
155224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	DEVCONF_PROXY_NDP,
156224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	DEVCONF_OPTIMISTIC_DAD,
157224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	DEVCONF_ACCEPT_SOURCE_ROUTE,
158224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	DEVCONF_MC_FORWARDING,
159224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	DEVCONF_DISABLE_IPV6,
160224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	DEVCONF_ACCEPT_DAD,
161224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	DEVCONF_FORCE_TLLAO,
162224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	DEVCONF_NDISC_NOTIFY,
163e084501669a4e4931c9d648351ecd7d595b81b79Christopher Ferris	DEVCONF_MLDV1_UNSOLICITED_REPORT_INTERVAL,
164e084501669a4e4931c9d648351ecd7d595b81b79Christopher Ferris	DEVCONF_MLDV2_UNSOLICITED_REPORT_INTERVAL,
165e084501669a4e4931c9d648351ecd7d595b81b79Christopher Ferris	DEVCONF_SUPPRESS_FRAG_NDISC,
1667c0b639731767acd9b3788628d81174c641fa6b9Christopher Ferris	DEVCONF_ACCEPT_RA_FROM_LOCAL,
167224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	DEVCONF_MAX
168224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng};
169224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
170224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
171224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#endif /* _UAPI_IPV6_H */
172