xref: /OK3568_Linux_fs/kernel/include/uapi/linux/ipv6.h (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593Smuzhiyun /* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */
2*4882a593Smuzhiyun #ifndef _UAPI_IPV6_H
3*4882a593Smuzhiyun #define _UAPI_IPV6_H
4*4882a593Smuzhiyun 
5*4882a593Smuzhiyun #include <linux/libc-compat.h>
6*4882a593Smuzhiyun #include <linux/types.h>
7*4882a593Smuzhiyun #include <linux/in6.h>
8*4882a593Smuzhiyun #include <asm/byteorder.h>
9*4882a593Smuzhiyun 
10*4882a593Smuzhiyun /* The latest drafts declared increase in minimal mtu up to 1280. */
11*4882a593Smuzhiyun 
12*4882a593Smuzhiyun #define IPV6_MIN_MTU	1280
13*4882a593Smuzhiyun 
14*4882a593Smuzhiyun /*
15*4882a593Smuzhiyun  *	Advanced API
16*4882a593Smuzhiyun  *	source interface/address selection, source routing, etc...
17*4882a593Smuzhiyun  *	*under construction*
18*4882a593Smuzhiyun  */
19*4882a593Smuzhiyun 
20*4882a593Smuzhiyun #if __UAPI_DEF_IN6_PKTINFO
21*4882a593Smuzhiyun struct in6_pktinfo {
22*4882a593Smuzhiyun 	struct in6_addr	ipi6_addr;
23*4882a593Smuzhiyun 	int		ipi6_ifindex;
24*4882a593Smuzhiyun };
25*4882a593Smuzhiyun #endif
26*4882a593Smuzhiyun 
27*4882a593Smuzhiyun #if __UAPI_DEF_IP6_MTUINFO
28*4882a593Smuzhiyun struct ip6_mtuinfo {
29*4882a593Smuzhiyun 	struct sockaddr_in6	ip6m_addr;
30*4882a593Smuzhiyun 	__u32			ip6m_mtu;
31*4882a593Smuzhiyun };
32*4882a593Smuzhiyun #endif
33*4882a593Smuzhiyun 
34*4882a593Smuzhiyun struct in6_ifreq {
35*4882a593Smuzhiyun 	struct in6_addr	ifr6_addr;
36*4882a593Smuzhiyun 	__u32		ifr6_prefixlen;
37*4882a593Smuzhiyun 	int		ifr6_ifindex;
38*4882a593Smuzhiyun };
39*4882a593Smuzhiyun 
40*4882a593Smuzhiyun #define IPV6_SRCRT_STRICT	0x01	/* Deprecated; will be removed */
41*4882a593Smuzhiyun #define IPV6_SRCRT_TYPE_0	0	/* Deprecated; will be removed */
42*4882a593Smuzhiyun #define IPV6_SRCRT_TYPE_2	2	/* IPv6 type 2 Routing Header	*/
43*4882a593Smuzhiyun #define IPV6_SRCRT_TYPE_3	3	/* RPL Segment Routing with IPv6 */
44*4882a593Smuzhiyun #define IPV6_SRCRT_TYPE_4	4	/* Segment Routing with IPv6 */
45*4882a593Smuzhiyun 
46*4882a593Smuzhiyun /*
47*4882a593Smuzhiyun  *	routing header
48*4882a593Smuzhiyun  */
49*4882a593Smuzhiyun struct ipv6_rt_hdr {
50*4882a593Smuzhiyun 	__u8		nexthdr;
51*4882a593Smuzhiyun 	__u8		hdrlen;
52*4882a593Smuzhiyun 	__u8		type;
53*4882a593Smuzhiyun 	__u8		segments_left;
54*4882a593Smuzhiyun 
55*4882a593Smuzhiyun 	/*
56*4882a593Smuzhiyun 	 *	type specific data
57*4882a593Smuzhiyun 	 *	variable length field
58*4882a593Smuzhiyun 	 */
59*4882a593Smuzhiyun };
60*4882a593Smuzhiyun 
61*4882a593Smuzhiyun 
62*4882a593Smuzhiyun struct ipv6_opt_hdr {
63*4882a593Smuzhiyun 	__u8 		nexthdr;
64*4882a593Smuzhiyun 	__u8 		hdrlen;
65*4882a593Smuzhiyun 	/*
66*4882a593Smuzhiyun 	 * TLV encoded option data follows.
67*4882a593Smuzhiyun 	 */
68*4882a593Smuzhiyun } __attribute__((packed));	/* required for some archs */
69*4882a593Smuzhiyun 
70*4882a593Smuzhiyun #define ipv6_destopt_hdr ipv6_opt_hdr
71*4882a593Smuzhiyun #define ipv6_hopopt_hdr  ipv6_opt_hdr
72*4882a593Smuzhiyun 
73*4882a593Smuzhiyun /* Router Alert option values (RFC2711) */
74*4882a593Smuzhiyun #define IPV6_OPT_ROUTERALERT_MLD	0x0000	/* MLD(RFC2710) */
75*4882a593Smuzhiyun 
76*4882a593Smuzhiyun /*
77*4882a593Smuzhiyun  *	routing header type 0 (used in cmsghdr struct)
78*4882a593Smuzhiyun  */
79*4882a593Smuzhiyun 
80*4882a593Smuzhiyun struct rt0_hdr {
81*4882a593Smuzhiyun 	struct ipv6_rt_hdr	rt_hdr;
82*4882a593Smuzhiyun 	__u32			reserved;
83*4882a593Smuzhiyun 	struct in6_addr		addr[0];
84*4882a593Smuzhiyun 
85*4882a593Smuzhiyun #define rt0_type		rt_hdr.type
86*4882a593Smuzhiyun };
87*4882a593Smuzhiyun 
88*4882a593Smuzhiyun /*
89*4882a593Smuzhiyun  *	routing header type 2
90*4882a593Smuzhiyun  */
91*4882a593Smuzhiyun 
92*4882a593Smuzhiyun struct rt2_hdr {
93*4882a593Smuzhiyun 	struct ipv6_rt_hdr	rt_hdr;
94*4882a593Smuzhiyun 	__u32			reserved;
95*4882a593Smuzhiyun 	struct in6_addr		addr;
96*4882a593Smuzhiyun 
97*4882a593Smuzhiyun #define rt2_type		rt_hdr.type
98*4882a593Smuzhiyun };
99*4882a593Smuzhiyun 
100*4882a593Smuzhiyun /*
101*4882a593Smuzhiyun  *	home address option in destination options header
102*4882a593Smuzhiyun  */
103*4882a593Smuzhiyun 
104*4882a593Smuzhiyun struct ipv6_destopt_hao {
105*4882a593Smuzhiyun 	__u8			type;
106*4882a593Smuzhiyun 	__u8			length;
107*4882a593Smuzhiyun 	struct in6_addr		addr;
108*4882a593Smuzhiyun } __attribute__((packed));
109*4882a593Smuzhiyun 
110*4882a593Smuzhiyun /*
111*4882a593Smuzhiyun  *	IPv6 fixed header
112*4882a593Smuzhiyun  *
113*4882a593Smuzhiyun  *	BEWARE, it is incorrect. The first 4 bits of flow_lbl
114*4882a593Smuzhiyun  *	are glued to priority now, forming "class".
115*4882a593Smuzhiyun  */
116*4882a593Smuzhiyun 
117*4882a593Smuzhiyun struct ipv6hdr {
118*4882a593Smuzhiyun #if defined(__LITTLE_ENDIAN_BITFIELD)
119*4882a593Smuzhiyun 	__u8			priority:4,
120*4882a593Smuzhiyun 				version:4;
121*4882a593Smuzhiyun #elif defined(__BIG_ENDIAN_BITFIELD)
122*4882a593Smuzhiyun 	__u8			version:4,
123*4882a593Smuzhiyun 				priority:4;
124*4882a593Smuzhiyun #else
125*4882a593Smuzhiyun #error	"Please fix <asm/byteorder.h>"
126*4882a593Smuzhiyun #endif
127*4882a593Smuzhiyun 	__u8			flow_lbl[3];
128*4882a593Smuzhiyun 
129*4882a593Smuzhiyun 	__be16			payload_len;
130*4882a593Smuzhiyun 	__u8			nexthdr;
131*4882a593Smuzhiyun 	__u8			hop_limit;
132*4882a593Smuzhiyun 
133*4882a593Smuzhiyun #ifndef __GENKSYMS__
134*4882a593Smuzhiyun 	__struct_group(/* no tag */, addrs, /* no attrs */,
135*4882a593Smuzhiyun #endif
136*4882a593Smuzhiyun 		struct	in6_addr	saddr;
137*4882a593Smuzhiyun 		struct	in6_addr	daddr;
138*4882a593Smuzhiyun #ifndef __GENKSYMS__
139*4882a593Smuzhiyun 	);
140*4882a593Smuzhiyun #endif
141*4882a593Smuzhiyun };
142*4882a593Smuzhiyun 
143*4882a593Smuzhiyun 
144*4882a593Smuzhiyun /* index values for the variables in ipv6_devconf */
145*4882a593Smuzhiyun enum {
146*4882a593Smuzhiyun 	DEVCONF_FORWARDING = 0,
147*4882a593Smuzhiyun 	DEVCONF_HOPLIMIT,
148*4882a593Smuzhiyun 	DEVCONF_MTU6,
149*4882a593Smuzhiyun 	DEVCONF_ACCEPT_RA,
150*4882a593Smuzhiyun 	DEVCONF_ACCEPT_REDIRECTS,
151*4882a593Smuzhiyun 	DEVCONF_AUTOCONF,
152*4882a593Smuzhiyun 	DEVCONF_DAD_TRANSMITS,
153*4882a593Smuzhiyun 	DEVCONF_RTR_SOLICITS,
154*4882a593Smuzhiyun 	DEVCONF_RTR_SOLICIT_INTERVAL,
155*4882a593Smuzhiyun 	DEVCONF_RTR_SOLICIT_DELAY,
156*4882a593Smuzhiyun 	DEVCONF_USE_TEMPADDR,
157*4882a593Smuzhiyun 	DEVCONF_TEMP_VALID_LFT,
158*4882a593Smuzhiyun 	DEVCONF_TEMP_PREFERED_LFT,
159*4882a593Smuzhiyun 	DEVCONF_REGEN_MAX_RETRY,
160*4882a593Smuzhiyun 	DEVCONF_MAX_DESYNC_FACTOR,
161*4882a593Smuzhiyun 	DEVCONF_MAX_ADDRESSES,
162*4882a593Smuzhiyun 	DEVCONF_FORCE_MLD_VERSION,
163*4882a593Smuzhiyun 	DEVCONF_ACCEPT_RA_DEFRTR,
164*4882a593Smuzhiyun 	DEVCONF_ACCEPT_RA_PINFO,
165*4882a593Smuzhiyun 	DEVCONF_ACCEPT_RA_RTR_PREF,
166*4882a593Smuzhiyun 	DEVCONF_RTR_PROBE_INTERVAL,
167*4882a593Smuzhiyun 	DEVCONF_ACCEPT_RA_RT_INFO_MAX_PLEN,
168*4882a593Smuzhiyun 	DEVCONF_PROXY_NDP,
169*4882a593Smuzhiyun 	DEVCONF_OPTIMISTIC_DAD,
170*4882a593Smuzhiyun 	DEVCONF_ACCEPT_SOURCE_ROUTE,
171*4882a593Smuzhiyun 	DEVCONF_MC_FORWARDING,
172*4882a593Smuzhiyun 	DEVCONF_DISABLE_IPV6,
173*4882a593Smuzhiyun 	DEVCONF_ACCEPT_DAD,
174*4882a593Smuzhiyun 	DEVCONF_FORCE_TLLAO,
175*4882a593Smuzhiyun 	DEVCONF_NDISC_NOTIFY,
176*4882a593Smuzhiyun 	DEVCONF_MLDV1_UNSOLICITED_REPORT_INTERVAL,
177*4882a593Smuzhiyun 	DEVCONF_MLDV2_UNSOLICITED_REPORT_INTERVAL,
178*4882a593Smuzhiyun 	DEVCONF_SUPPRESS_FRAG_NDISC,
179*4882a593Smuzhiyun 	DEVCONF_ACCEPT_RA_FROM_LOCAL,
180*4882a593Smuzhiyun 	DEVCONF_USE_OPTIMISTIC,
181*4882a593Smuzhiyun 	DEVCONF_ACCEPT_RA_MTU,
182*4882a593Smuzhiyun 	DEVCONF_STABLE_SECRET,
183*4882a593Smuzhiyun 	DEVCONF_USE_OIF_ADDRS_ONLY,
184*4882a593Smuzhiyun 	DEVCONF_ACCEPT_RA_MIN_HOP_LIMIT,
185*4882a593Smuzhiyun 	DEVCONF_IGNORE_ROUTES_WITH_LINKDOWN,
186*4882a593Smuzhiyun 	DEVCONF_DROP_UNICAST_IN_L2_MULTICAST,
187*4882a593Smuzhiyun 	DEVCONF_DROP_UNSOLICITED_NA,
188*4882a593Smuzhiyun 	DEVCONF_KEEP_ADDR_ON_DOWN,
189*4882a593Smuzhiyun 	DEVCONF_RTR_SOLICIT_MAX_INTERVAL,
190*4882a593Smuzhiyun 	DEVCONF_SEG6_ENABLED,
191*4882a593Smuzhiyun 	DEVCONF_SEG6_REQUIRE_HMAC,
192*4882a593Smuzhiyun 	DEVCONF_ENHANCED_DAD,
193*4882a593Smuzhiyun 	DEVCONF_ADDR_GEN_MODE,
194*4882a593Smuzhiyun 	DEVCONF_DISABLE_POLICY,
195*4882a593Smuzhiyun 	DEVCONF_ACCEPT_RA_RT_INFO_MIN_PLEN,
196*4882a593Smuzhiyun 	DEVCONF_NDISC_TCLASS,
197*4882a593Smuzhiyun 	DEVCONF_RPL_SEG_ENABLED,
198*4882a593Smuzhiyun 	DEVCONF_MAX
199*4882a593Smuzhiyun };
200*4882a593Smuzhiyun 
201*4882a593Smuzhiyun 
202*4882a593Smuzhiyun #endif /* _UAPI_IPV6_H */
203