xref: /aosp_15_r20/external/iproute2/include/uapi/linux/icmpv6.h (revision de1e4e894b0c224df933550f0afdecc354b238c4)
1*de1e4e89SAndroid Build Coastguard Worker /* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */
2*de1e4e89SAndroid Build Coastguard Worker #ifndef _LINUX_ICMPV6_H
3*de1e4e89SAndroid Build Coastguard Worker #define _LINUX_ICMPV6_H
4*de1e4e89SAndroid Build Coastguard Worker 
5*de1e4e89SAndroid Build Coastguard Worker #include <linux/types.h>
6*de1e4e89SAndroid Build Coastguard Worker #include <asm/byteorder.h>
7*de1e4e89SAndroid Build Coastguard Worker 
8*de1e4e89SAndroid Build Coastguard Worker struct icmp6hdr {
9*de1e4e89SAndroid Build Coastguard Worker 
10*de1e4e89SAndroid Build Coastguard Worker 	__u8		icmp6_type;
11*de1e4e89SAndroid Build Coastguard Worker 	__u8		icmp6_code;
12*de1e4e89SAndroid Build Coastguard Worker 	__sum16		icmp6_cksum;
13*de1e4e89SAndroid Build Coastguard Worker 
14*de1e4e89SAndroid Build Coastguard Worker 
15*de1e4e89SAndroid Build Coastguard Worker 	union {
16*de1e4e89SAndroid Build Coastguard Worker 		__be32			un_data32[1];
17*de1e4e89SAndroid Build Coastguard Worker 		__be16			un_data16[2];
18*de1e4e89SAndroid Build Coastguard Worker 		__u8			un_data8[4];
19*de1e4e89SAndroid Build Coastguard Worker 
20*de1e4e89SAndroid Build Coastguard Worker 		struct icmpv6_echo {
21*de1e4e89SAndroid Build Coastguard Worker 			__be16		identifier;
22*de1e4e89SAndroid Build Coastguard Worker 			__be16		sequence;
23*de1e4e89SAndroid Build Coastguard Worker 		} u_echo;
24*de1e4e89SAndroid Build Coastguard Worker 
25*de1e4e89SAndroid Build Coastguard Worker                 struct icmpv6_nd_advt {
26*de1e4e89SAndroid Build Coastguard Worker #if defined(__LITTLE_ENDIAN_BITFIELD)
27*de1e4e89SAndroid Build Coastguard Worker                         __u32		reserved:5,
28*de1e4e89SAndroid Build Coastguard Worker                         		override:1,
29*de1e4e89SAndroid Build Coastguard Worker                         		solicited:1,
30*de1e4e89SAndroid Build Coastguard Worker                         		router:1,
31*de1e4e89SAndroid Build Coastguard Worker 					reserved2:24;
32*de1e4e89SAndroid Build Coastguard Worker #elif defined(__BIG_ENDIAN_BITFIELD)
33*de1e4e89SAndroid Build Coastguard Worker                         __u32		router:1,
34*de1e4e89SAndroid Build Coastguard Worker 					solicited:1,
35*de1e4e89SAndroid Build Coastguard Worker                         		override:1,
36*de1e4e89SAndroid Build Coastguard Worker                         		reserved:29;
37*de1e4e89SAndroid Build Coastguard Worker #else
38*de1e4e89SAndroid Build Coastguard Worker #error	"Please fix <asm/byteorder.h>"
39*de1e4e89SAndroid Build Coastguard Worker #endif
40*de1e4e89SAndroid Build Coastguard Worker                 } u_nd_advt;
41*de1e4e89SAndroid Build Coastguard Worker 
42*de1e4e89SAndroid Build Coastguard Worker                 struct icmpv6_nd_ra {
43*de1e4e89SAndroid Build Coastguard Worker 			__u8		hop_limit;
44*de1e4e89SAndroid Build Coastguard Worker #if defined(__LITTLE_ENDIAN_BITFIELD)
45*de1e4e89SAndroid Build Coastguard Worker 			__u8		reserved:3,
46*de1e4e89SAndroid Build Coastguard Worker 					router_pref:2,
47*de1e4e89SAndroid Build Coastguard Worker 					home_agent:1,
48*de1e4e89SAndroid Build Coastguard Worker 					other:1,
49*de1e4e89SAndroid Build Coastguard Worker 					managed:1;
50*de1e4e89SAndroid Build Coastguard Worker 
51*de1e4e89SAndroid Build Coastguard Worker #elif defined(__BIG_ENDIAN_BITFIELD)
52*de1e4e89SAndroid Build Coastguard Worker 			__u8		managed:1,
53*de1e4e89SAndroid Build Coastguard Worker 					other:1,
54*de1e4e89SAndroid Build Coastguard Worker 					home_agent:1,
55*de1e4e89SAndroid Build Coastguard Worker 					router_pref:2,
56*de1e4e89SAndroid Build Coastguard Worker 					reserved:3;
57*de1e4e89SAndroid Build Coastguard Worker #else
58*de1e4e89SAndroid Build Coastguard Worker #error	"Please fix <asm/byteorder.h>"
59*de1e4e89SAndroid Build Coastguard Worker #endif
60*de1e4e89SAndroid Build Coastguard Worker 			__be16		rt_lifetime;
61*de1e4e89SAndroid Build Coastguard Worker                 } u_nd_ra;
62*de1e4e89SAndroid Build Coastguard Worker 
63*de1e4e89SAndroid Build Coastguard Worker 	} icmp6_dataun;
64*de1e4e89SAndroid Build Coastguard Worker 
65*de1e4e89SAndroid Build Coastguard Worker #define icmp6_identifier	icmp6_dataun.u_echo.identifier
66*de1e4e89SAndroid Build Coastguard Worker #define icmp6_sequence		icmp6_dataun.u_echo.sequence
67*de1e4e89SAndroid Build Coastguard Worker #define icmp6_pointer		icmp6_dataun.un_data32[0]
68*de1e4e89SAndroid Build Coastguard Worker #define icmp6_mtu		icmp6_dataun.un_data32[0]
69*de1e4e89SAndroid Build Coastguard Worker #define icmp6_unused		icmp6_dataun.un_data32[0]
70*de1e4e89SAndroid Build Coastguard Worker #define icmp6_maxdelay		icmp6_dataun.un_data16[0]
71*de1e4e89SAndroid Build Coastguard Worker #define icmp6_router		icmp6_dataun.u_nd_advt.router
72*de1e4e89SAndroid Build Coastguard Worker #define icmp6_solicited		icmp6_dataun.u_nd_advt.solicited
73*de1e4e89SAndroid Build Coastguard Worker #define icmp6_override		icmp6_dataun.u_nd_advt.override
74*de1e4e89SAndroid Build Coastguard Worker #define icmp6_ndiscreserved	icmp6_dataun.u_nd_advt.reserved
75*de1e4e89SAndroid Build Coastguard Worker #define icmp6_hop_limit		icmp6_dataun.u_nd_ra.hop_limit
76*de1e4e89SAndroid Build Coastguard Worker #define icmp6_addrconf_managed	icmp6_dataun.u_nd_ra.managed
77*de1e4e89SAndroid Build Coastguard Worker #define icmp6_addrconf_other	icmp6_dataun.u_nd_ra.other
78*de1e4e89SAndroid Build Coastguard Worker #define icmp6_rt_lifetime	icmp6_dataun.u_nd_ra.rt_lifetime
79*de1e4e89SAndroid Build Coastguard Worker #define icmp6_router_pref	icmp6_dataun.u_nd_ra.router_pref
80*de1e4e89SAndroid Build Coastguard Worker };
81*de1e4e89SAndroid Build Coastguard Worker 
82*de1e4e89SAndroid Build Coastguard Worker 
83*de1e4e89SAndroid Build Coastguard Worker #define ICMPV6_ROUTER_PREF_LOW		0x3
84*de1e4e89SAndroid Build Coastguard Worker #define ICMPV6_ROUTER_PREF_MEDIUM	0x0
85*de1e4e89SAndroid Build Coastguard Worker #define ICMPV6_ROUTER_PREF_HIGH		0x1
86*de1e4e89SAndroid Build Coastguard Worker #define ICMPV6_ROUTER_PREF_INVALID	0x2
87*de1e4e89SAndroid Build Coastguard Worker 
88*de1e4e89SAndroid Build Coastguard Worker #define ICMPV6_DEST_UNREACH		1
89*de1e4e89SAndroid Build Coastguard Worker #define ICMPV6_PKT_TOOBIG		2
90*de1e4e89SAndroid Build Coastguard Worker #define ICMPV6_TIME_EXCEED		3
91*de1e4e89SAndroid Build Coastguard Worker #define ICMPV6_PARAMPROB		4
92*de1e4e89SAndroid Build Coastguard Worker 
93*de1e4e89SAndroid Build Coastguard Worker #define ICMPV6_INFOMSG_MASK		0x80
94*de1e4e89SAndroid Build Coastguard Worker 
95*de1e4e89SAndroid Build Coastguard Worker #define ICMPV6_ECHO_REQUEST		128
96*de1e4e89SAndroid Build Coastguard Worker #define ICMPV6_ECHO_REPLY		129
97*de1e4e89SAndroid Build Coastguard Worker #define ICMPV6_MGM_QUERY		130
98*de1e4e89SAndroid Build Coastguard Worker #define ICMPV6_MGM_REPORT       	131
99*de1e4e89SAndroid Build Coastguard Worker #define ICMPV6_MGM_REDUCTION    	132
100*de1e4e89SAndroid Build Coastguard Worker 
101*de1e4e89SAndroid Build Coastguard Worker #define ICMPV6_NI_QUERY			139
102*de1e4e89SAndroid Build Coastguard Worker #define ICMPV6_NI_REPLY			140
103*de1e4e89SAndroid Build Coastguard Worker 
104*de1e4e89SAndroid Build Coastguard Worker #define ICMPV6_MLD2_REPORT		143
105*de1e4e89SAndroid Build Coastguard Worker 
106*de1e4e89SAndroid Build Coastguard Worker #define ICMPV6_DHAAD_REQUEST		144
107*de1e4e89SAndroid Build Coastguard Worker #define ICMPV6_DHAAD_REPLY		145
108*de1e4e89SAndroid Build Coastguard Worker #define ICMPV6_MOBILE_PREFIX_SOL	146
109*de1e4e89SAndroid Build Coastguard Worker #define ICMPV6_MOBILE_PREFIX_ADV	147
110*de1e4e89SAndroid Build Coastguard Worker 
111*de1e4e89SAndroid Build Coastguard Worker /*
112*de1e4e89SAndroid Build Coastguard Worker  *	Codes for Destination Unreachable
113*de1e4e89SAndroid Build Coastguard Worker  */
114*de1e4e89SAndroid Build Coastguard Worker #define ICMPV6_NOROUTE			0
115*de1e4e89SAndroid Build Coastguard Worker #define ICMPV6_ADM_PROHIBITED		1
116*de1e4e89SAndroid Build Coastguard Worker #define ICMPV6_NOT_NEIGHBOUR		2
117*de1e4e89SAndroid Build Coastguard Worker #define ICMPV6_ADDR_UNREACH		3
118*de1e4e89SAndroid Build Coastguard Worker #define ICMPV6_PORT_UNREACH		4
119*de1e4e89SAndroid Build Coastguard Worker #define ICMPV6_POLICY_FAIL		5
120*de1e4e89SAndroid Build Coastguard Worker #define ICMPV6_REJECT_ROUTE		6
121*de1e4e89SAndroid Build Coastguard Worker 
122*de1e4e89SAndroid Build Coastguard Worker /*
123*de1e4e89SAndroid Build Coastguard Worker  *	Codes for Time Exceeded
124*de1e4e89SAndroid Build Coastguard Worker  */
125*de1e4e89SAndroid Build Coastguard Worker #define ICMPV6_EXC_HOPLIMIT		0
126*de1e4e89SAndroid Build Coastguard Worker #define ICMPV6_EXC_FRAGTIME		1
127*de1e4e89SAndroid Build Coastguard Worker 
128*de1e4e89SAndroid Build Coastguard Worker /*
129*de1e4e89SAndroid Build Coastguard Worker  *	Codes for Parameter Problem
130*de1e4e89SAndroid Build Coastguard Worker  */
131*de1e4e89SAndroid Build Coastguard Worker #define ICMPV6_HDR_FIELD		0
132*de1e4e89SAndroid Build Coastguard Worker #define ICMPV6_UNK_NEXTHDR		1
133*de1e4e89SAndroid Build Coastguard Worker #define ICMPV6_UNK_OPTION		2
134*de1e4e89SAndroid Build Coastguard Worker 
135*de1e4e89SAndroid Build Coastguard Worker /*
136*de1e4e89SAndroid Build Coastguard Worker  *	constants for (set|get)sockopt
137*de1e4e89SAndroid Build Coastguard Worker  */
138*de1e4e89SAndroid Build Coastguard Worker 
139*de1e4e89SAndroid Build Coastguard Worker #define ICMPV6_FILTER			1
140*de1e4e89SAndroid Build Coastguard Worker 
141*de1e4e89SAndroid Build Coastguard Worker /*
142*de1e4e89SAndroid Build Coastguard Worker  *	ICMPV6 filter
143*de1e4e89SAndroid Build Coastguard Worker  */
144*de1e4e89SAndroid Build Coastguard Worker 
145*de1e4e89SAndroid Build Coastguard Worker #define ICMPV6_FILTER_BLOCK		1
146*de1e4e89SAndroid Build Coastguard Worker #define ICMPV6_FILTER_PASS		2
147*de1e4e89SAndroid Build Coastguard Worker #define ICMPV6_FILTER_BLOCKOTHERS	3
148*de1e4e89SAndroid Build Coastguard Worker #define ICMPV6_FILTER_PASSONLY		4
149*de1e4e89SAndroid Build Coastguard Worker 
150*de1e4e89SAndroid Build Coastguard Worker struct icmp6_filter {
151*de1e4e89SAndroid Build Coastguard Worker 	__u32		data[8];
152*de1e4e89SAndroid Build Coastguard Worker };
153*de1e4e89SAndroid Build Coastguard Worker 
154*de1e4e89SAndroid Build Coastguard Worker /*
155*de1e4e89SAndroid Build Coastguard Worker  *	Definitions for MLDv2
156*de1e4e89SAndroid Build Coastguard Worker  */
157*de1e4e89SAndroid Build Coastguard Worker #define MLD2_MODE_IS_INCLUDE	1
158*de1e4e89SAndroid Build Coastguard Worker #define MLD2_MODE_IS_EXCLUDE	2
159*de1e4e89SAndroid Build Coastguard Worker #define MLD2_CHANGE_TO_INCLUDE	3
160*de1e4e89SAndroid Build Coastguard Worker #define MLD2_CHANGE_TO_EXCLUDE	4
161*de1e4e89SAndroid Build Coastguard Worker #define MLD2_ALLOW_NEW_SOURCES	5
162*de1e4e89SAndroid Build Coastguard Worker #define MLD2_BLOCK_OLD_SOURCES	6
163*de1e4e89SAndroid Build Coastguard Worker 
164*de1e4e89SAndroid Build Coastguard Worker #define MLD2_ALL_MCR_INIT { { { 0xff,0x02,0,0,0,0,0,0,0,0,0,0,0,0,0,0x16 } } }
165*de1e4e89SAndroid Build Coastguard Worker 
166*de1e4e89SAndroid Build Coastguard Worker 
167*de1e4e89SAndroid Build Coastguard Worker #endif /* _LINUX_ICMPV6_H */
168