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