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