xref: /aosp_15_r20/external/musl/include/netinet/ip_icmp.h (revision c9945492fdd68bbe62686c5b452b4dc1be3f8453)
1*c9945492SAndroid Build Coastguard Worker #ifndef _NETINET_IP_ICMP_H
2*c9945492SAndroid Build Coastguard Worker #define _NETINET_IP_ICMP_H
3*c9945492SAndroid Build Coastguard Worker 
4*c9945492SAndroid Build Coastguard Worker #include <stdint.h>
5*c9945492SAndroid Build Coastguard Worker #include <netinet/in.h>
6*c9945492SAndroid Build Coastguard Worker #include <netinet/ip.h>
7*c9945492SAndroid Build Coastguard Worker 
8*c9945492SAndroid Build Coastguard Worker #ifdef __cplusplus
9*c9945492SAndroid Build Coastguard Worker extern "C" {
10*c9945492SAndroid Build Coastguard Worker #endif
11*c9945492SAndroid Build Coastguard Worker 
12*c9945492SAndroid Build Coastguard Worker struct icmphdr {
13*c9945492SAndroid Build Coastguard Worker 	uint8_t type;
14*c9945492SAndroid Build Coastguard Worker 	uint8_t code;
15*c9945492SAndroid Build Coastguard Worker 	uint16_t checksum;
16*c9945492SAndroid Build Coastguard Worker 	union {
17*c9945492SAndroid Build Coastguard Worker 		struct {
18*c9945492SAndroid Build Coastguard Worker 			uint16_t id;
19*c9945492SAndroid Build Coastguard Worker 			uint16_t sequence;
20*c9945492SAndroid Build Coastguard Worker 		} echo;
21*c9945492SAndroid Build Coastguard Worker 		uint32_t gateway;
22*c9945492SAndroid Build Coastguard Worker 		struct {
23*c9945492SAndroid Build Coastguard Worker 			uint16_t __unused;
24*c9945492SAndroid Build Coastguard Worker 			uint16_t mtu;
25*c9945492SAndroid Build Coastguard Worker 		} frag;
26*c9945492SAndroid Build Coastguard Worker 		uint8_t reserved[4];
27*c9945492SAndroid Build Coastguard Worker 	} un;
28*c9945492SAndroid Build Coastguard Worker };
29*c9945492SAndroid Build Coastguard Worker 
30*c9945492SAndroid Build Coastguard Worker #define ICMP_ECHOREPLY		0
31*c9945492SAndroid Build Coastguard Worker #define ICMP_DEST_UNREACH	3
32*c9945492SAndroid Build Coastguard Worker #define ICMP_SOURCE_QUENCH	4
33*c9945492SAndroid Build Coastguard Worker #define ICMP_REDIRECT		5
34*c9945492SAndroid Build Coastguard Worker #define ICMP_ECHO		8
35*c9945492SAndroid Build Coastguard Worker #define ICMP_TIME_EXCEEDED	11
36*c9945492SAndroid Build Coastguard Worker #define ICMP_PARAMETERPROB	12
37*c9945492SAndroid Build Coastguard Worker #define ICMP_TIMESTAMP		13
38*c9945492SAndroid Build Coastguard Worker #define ICMP_TIMESTAMPREPLY	14
39*c9945492SAndroid Build Coastguard Worker #define ICMP_INFO_REQUEST	15
40*c9945492SAndroid Build Coastguard Worker #define ICMP_INFO_REPLY		16
41*c9945492SAndroid Build Coastguard Worker #define ICMP_ADDRESS		17
42*c9945492SAndroid Build Coastguard Worker #define ICMP_ADDRESSREPLY	18
43*c9945492SAndroid Build Coastguard Worker #define NR_ICMP_TYPES		18
44*c9945492SAndroid Build Coastguard Worker 
45*c9945492SAndroid Build Coastguard Worker 
46*c9945492SAndroid Build Coastguard Worker #define ICMP_NET_UNREACH	0
47*c9945492SAndroid Build Coastguard Worker #define ICMP_HOST_UNREACH	1
48*c9945492SAndroid Build Coastguard Worker #define ICMP_PROT_UNREACH	2
49*c9945492SAndroid Build Coastguard Worker #define ICMP_PORT_UNREACH	3
50*c9945492SAndroid Build Coastguard Worker #define ICMP_FRAG_NEEDED	4
51*c9945492SAndroid Build Coastguard Worker #define ICMP_SR_FAILED		5
52*c9945492SAndroid Build Coastguard Worker #define ICMP_NET_UNKNOWN	6
53*c9945492SAndroid Build Coastguard Worker #define ICMP_HOST_UNKNOWN	7
54*c9945492SAndroid Build Coastguard Worker #define ICMP_HOST_ISOLATED	8
55*c9945492SAndroid Build Coastguard Worker #define ICMP_NET_ANO		9
56*c9945492SAndroid Build Coastguard Worker #define ICMP_HOST_ANO		10
57*c9945492SAndroid Build Coastguard Worker #define ICMP_NET_UNR_TOS	11
58*c9945492SAndroid Build Coastguard Worker #define ICMP_HOST_UNR_TOS	12
59*c9945492SAndroid Build Coastguard Worker #define ICMP_PKT_FILTERED	13
60*c9945492SAndroid Build Coastguard Worker #define ICMP_PREC_VIOLATION	14
61*c9945492SAndroid Build Coastguard Worker #define ICMP_PREC_CUTOFF	15
62*c9945492SAndroid Build Coastguard Worker #define NR_ICMP_UNREACH		15
63*c9945492SAndroid Build Coastguard Worker 
64*c9945492SAndroid Build Coastguard Worker #define ICMP_REDIR_NET		0
65*c9945492SAndroid Build Coastguard Worker #define ICMP_REDIR_HOST		1
66*c9945492SAndroid Build Coastguard Worker #define ICMP_REDIR_NETTOS	2
67*c9945492SAndroid Build Coastguard Worker #define ICMP_REDIR_HOSTTOS	3
68*c9945492SAndroid Build Coastguard Worker 
69*c9945492SAndroid Build Coastguard Worker #define ICMP_EXC_TTL		0
70*c9945492SAndroid Build Coastguard Worker #define ICMP_EXC_FRAGTIME	1
71*c9945492SAndroid Build Coastguard Worker 
72*c9945492SAndroid Build Coastguard Worker 
73*c9945492SAndroid Build Coastguard Worker struct icmp_ra_addr {
74*c9945492SAndroid Build Coastguard Worker 	uint32_t ira_addr;
75*c9945492SAndroid Build Coastguard Worker 	uint32_t ira_preference;
76*c9945492SAndroid Build Coastguard Worker };
77*c9945492SAndroid Build Coastguard Worker 
78*c9945492SAndroid Build Coastguard Worker struct icmp {
79*c9945492SAndroid Build Coastguard Worker 	uint8_t  icmp_type;
80*c9945492SAndroid Build Coastguard Worker 	uint8_t  icmp_code;
81*c9945492SAndroid Build Coastguard Worker 	uint16_t icmp_cksum;
82*c9945492SAndroid Build Coastguard Worker 	union {
83*c9945492SAndroid Build Coastguard Worker 		uint8_t ih_pptr;
84*c9945492SAndroid Build Coastguard Worker 		struct in_addr ih_gwaddr;
85*c9945492SAndroid Build Coastguard Worker 		struct ih_idseq {
86*c9945492SAndroid Build Coastguard Worker 			uint16_t icd_id;
87*c9945492SAndroid Build Coastguard Worker 			uint16_t icd_seq;
88*c9945492SAndroid Build Coastguard Worker 		} ih_idseq;
89*c9945492SAndroid Build Coastguard Worker 		uint32_t ih_void;
90*c9945492SAndroid Build Coastguard Worker 
91*c9945492SAndroid Build Coastguard Worker 		struct ih_pmtu {
92*c9945492SAndroid Build Coastguard Worker 			uint16_t ipm_void;
93*c9945492SAndroid Build Coastguard Worker 			uint16_t ipm_nextmtu;
94*c9945492SAndroid Build Coastguard Worker 		} ih_pmtu;
95*c9945492SAndroid Build Coastguard Worker 
96*c9945492SAndroid Build Coastguard Worker 		struct ih_rtradv {
97*c9945492SAndroid Build Coastguard Worker 			uint8_t irt_num_addrs;
98*c9945492SAndroid Build Coastguard Worker 			uint8_t irt_wpa;
99*c9945492SAndroid Build Coastguard Worker 			uint16_t irt_lifetime;
100*c9945492SAndroid Build Coastguard Worker 		} ih_rtradv;
101*c9945492SAndroid Build Coastguard Worker 	} icmp_hun;
102*c9945492SAndroid Build Coastguard Worker 	union {
103*c9945492SAndroid Build Coastguard Worker 		struct {
104*c9945492SAndroid Build Coastguard Worker 			uint32_t its_otime;
105*c9945492SAndroid Build Coastguard Worker 			uint32_t its_rtime;
106*c9945492SAndroid Build Coastguard Worker 			uint32_t its_ttime;
107*c9945492SAndroid Build Coastguard Worker 		} id_ts;
108*c9945492SAndroid Build Coastguard Worker 		struct {
109*c9945492SAndroid Build Coastguard Worker 			struct ip idi_ip;
110*c9945492SAndroid Build Coastguard Worker 		} id_ip;
111*c9945492SAndroid Build Coastguard Worker 		struct icmp_ra_addr id_radv;
112*c9945492SAndroid Build Coastguard Worker 		uint32_t   id_mask;
113*c9945492SAndroid Build Coastguard Worker 		uint8_t    id_data[1];
114*c9945492SAndroid Build Coastguard Worker 	} icmp_dun;
115*c9945492SAndroid Build Coastguard Worker };
116*c9945492SAndroid Build Coastguard Worker 
117*c9945492SAndroid Build Coastguard Worker #define	icmp_pptr	icmp_hun.ih_pptr
118*c9945492SAndroid Build Coastguard Worker #define	icmp_gwaddr	icmp_hun.ih_gwaddr
119*c9945492SAndroid Build Coastguard Worker #define	icmp_id		icmp_hun.ih_idseq.icd_id
120*c9945492SAndroid Build Coastguard Worker #define	icmp_seq	icmp_hun.ih_idseq.icd_seq
121*c9945492SAndroid Build Coastguard Worker #define	icmp_void	icmp_hun.ih_void
122*c9945492SAndroid Build Coastguard Worker #define	icmp_pmvoid	icmp_hun.ih_pmtu.ipm_void
123*c9945492SAndroid Build Coastguard Worker #define	icmp_nextmtu	icmp_hun.ih_pmtu.ipm_nextmtu
124*c9945492SAndroid Build Coastguard Worker #define	icmp_num_addrs	icmp_hun.ih_rtradv.irt_num_addrs
125*c9945492SAndroid Build Coastguard Worker #define	icmp_wpa	icmp_hun.ih_rtradv.irt_wpa
126*c9945492SAndroid Build Coastguard Worker #define	icmp_lifetime	icmp_hun.ih_rtradv.irt_lifetime
127*c9945492SAndroid Build Coastguard Worker #define	icmp_otime	icmp_dun.id_ts.its_otime
128*c9945492SAndroid Build Coastguard Worker #define	icmp_rtime	icmp_dun.id_ts.its_rtime
129*c9945492SAndroid Build Coastguard Worker #define	icmp_ttime	icmp_dun.id_ts.its_ttime
130*c9945492SAndroid Build Coastguard Worker #define	icmp_ip		icmp_dun.id_ip.idi_ip
131*c9945492SAndroid Build Coastguard Worker #define	icmp_radv	icmp_dun.id_radv
132*c9945492SAndroid Build Coastguard Worker #define	icmp_mask	icmp_dun.id_mask
133*c9945492SAndroid Build Coastguard Worker #define	icmp_data	icmp_dun.id_data
134*c9945492SAndroid Build Coastguard Worker 
135*c9945492SAndroid Build Coastguard Worker #define	ICMP_MINLEN	8
136*c9945492SAndroid Build Coastguard Worker #define	ICMP_TSLEN	(8 + 3 * sizeof (n_time))
137*c9945492SAndroid Build Coastguard Worker #define	ICMP_MASKLEN	12
138*c9945492SAndroid Build Coastguard Worker #define	ICMP_ADVLENMIN	(8 + sizeof (struct ip) + 8)
139*c9945492SAndroid Build Coastguard Worker #define	ICMP_ADVLEN(p)	(8 + ((p)->icmp_ip.ip_hl << 2) + 8)
140*c9945492SAndroid Build Coastguard Worker 
141*c9945492SAndroid Build Coastguard Worker #define	ICMP_UNREACH		3
142*c9945492SAndroid Build Coastguard Worker #define	ICMP_SOURCEQUENCH	4
143*c9945492SAndroid Build Coastguard Worker #define	ICMP_ROUTERADVERT	9
144*c9945492SAndroid Build Coastguard Worker #define	ICMP_ROUTERSOLICIT	10
145*c9945492SAndroid Build Coastguard Worker #define	ICMP_TIMXCEED		11
146*c9945492SAndroid Build Coastguard Worker #define	ICMP_PARAMPROB		12
147*c9945492SAndroid Build Coastguard Worker #define	ICMP_TSTAMP		13
148*c9945492SAndroid Build Coastguard Worker #define	ICMP_TSTAMPREPLY	14
149*c9945492SAndroid Build Coastguard Worker #define	ICMP_IREQ		15
150*c9945492SAndroid Build Coastguard Worker #define	ICMP_IREQREPLY		16
151*c9945492SAndroid Build Coastguard Worker #define	ICMP_MASKREQ		17
152*c9945492SAndroid Build Coastguard Worker #define	ICMP_MASKREPLY		18
153*c9945492SAndroid Build Coastguard Worker #define	ICMP_MAXTYPE		18
154*c9945492SAndroid Build Coastguard Worker 
155*c9945492SAndroid Build Coastguard Worker #define	ICMP_UNREACH_NET	        0
156*c9945492SAndroid Build Coastguard Worker #define	ICMP_UNREACH_HOST	        1
157*c9945492SAndroid Build Coastguard Worker #define	ICMP_UNREACH_PROTOCOL	        2
158*c9945492SAndroid Build Coastguard Worker #define	ICMP_UNREACH_PORT	        3
159*c9945492SAndroid Build Coastguard Worker #define	ICMP_UNREACH_NEEDFRAG	        4
160*c9945492SAndroid Build Coastguard Worker #define	ICMP_UNREACH_SRCFAIL	        5
161*c9945492SAndroid Build Coastguard Worker #define	ICMP_UNREACH_NET_UNKNOWN        6
162*c9945492SAndroid Build Coastguard Worker #define	ICMP_UNREACH_HOST_UNKNOWN       7
163*c9945492SAndroid Build Coastguard Worker #define	ICMP_UNREACH_ISOLATED	        8
164*c9945492SAndroid Build Coastguard Worker #define	ICMP_UNREACH_NET_PROHIB	        9
165*c9945492SAndroid Build Coastguard Worker #define	ICMP_UNREACH_HOST_PROHIB        10
166*c9945492SAndroid Build Coastguard Worker #define	ICMP_UNREACH_TOSNET	        11
167*c9945492SAndroid Build Coastguard Worker #define	ICMP_UNREACH_TOSHOST	        12
168*c9945492SAndroid Build Coastguard Worker #define	ICMP_UNREACH_FILTER_PROHIB      13
169*c9945492SAndroid Build Coastguard Worker #define	ICMP_UNREACH_HOST_PRECEDENCE    14
170*c9945492SAndroid Build Coastguard Worker #define	ICMP_UNREACH_PRECEDENCE_CUTOFF  15
171*c9945492SAndroid Build Coastguard Worker 
172*c9945492SAndroid Build Coastguard Worker #define	ICMP_REDIRECT_NET	0
173*c9945492SAndroid Build Coastguard Worker #define	ICMP_REDIRECT_HOST	1
174*c9945492SAndroid Build Coastguard Worker #define	ICMP_REDIRECT_TOSNET	2
175*c9945492SAndroid Build Coastguard Worker #define	ICMP_REDIRECT_TOSHOST	3
176*c9945492SAndroid Build Coastguard Worker 
177*c9945492SAndroid Build Coastguard Worker #define	ICMP_TIMXCEED_INTRANS	0
178*c9945492SAndroid Build Coastguard Worker #define	ICMP_TIMXCEED_REASS	1
179*c9945492SAndroid Build Coastguard Worker 
180*c9945492SAndroid Build Coastguard Worker #define	ICMP_PARAMPROB_OPTABSENT 1
181*c9945492SAndroid Build Coastguard Worker 
182*c9945492SAndroid Build Coastguard Worker #define	ICMP_INFOTYPE(type) \
183*c9945492SAndroid Build Coastguard Worker 	((type) == ICMP_ECHOREPLY || (type) == ICMP_ECHO || \
184*c9945492SAndroid Build Coastguard Worker 	(type) == ICMP_ROUTERADVERT || (type) == ICMP_ROUTERSOLICIT || \
185*c9945492SAndroid Build Coastguard Worker 	(type) == ICMP_TSTAMP || (type) == ICMP_TSTAMPREPLY || \
186*c9945492SAndroid Build Coastguard Worker 	(type) == ICMP_IREQ || (type) == ICMP_IREQREPLY || \
187*c9945492SAndroid Build Coastguard Worker 	(type) == ICMP_MASKREQ || (type) == ICMP_MASKREPLY)
188*c9945492SAndroid Build Coastguard Worker 
189*c9945492SAndroid Build Coastguard Worker #ifdef __cplusplus
190*c9945492SAndroid Build Coastguard Worker }
191*c9945492SAndroid Build Coastguard Worker #endif
192*c9945492SAndroid Build Coastguard Worker 
193*c9945492SAndroid Build Coastguard Worker #endif
194