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