1*25202Skarels #define RCSICMPHDR "$Header: icmp.h,v 1.6 85/07/31 09:29:40 walsh Exp $" 2*25202Skarels 3*25202Skarels 4*25202Skarels struct icmp { /* icmp header */ 5*25202Skarels u_char ic_type; /* icmp message type */ 6*25202Skarels u_char ic_code; /* icmp message sub-type */ 7*25202Skarels u_short ic_sum; /* checksum */ 8*25202Skarels union { 9*25202Skarels u_char I_off; /* parameter error offset */ 10*25202Skarels struct in_addr I_gaddr; /* redirect gateway addr */ 11*25202Skarels struct { 12*25202Skarels u_short I_id; /* echo/timestamp id */ 13*25202Skarels u_short I_seq; /* echo/timestamp sequence */ 14*25202Skarels } I_iseq; 15*25202Skarels long I_misc; /* the whole field */ 16*25202Skarels } I_un1; 17*25202Skarels #define ic_off I_un1.I_off 18*25202Skarels #define ic_gaddr I_un1.I_gaddr 19*25202Skarels #define ic_id I_un1.I_iseq.I_id 20*25202Skarels #define ic_seq I_un1.I_iseq.I_seq 21*25202Skarels #define ic_misc I_un1.I_misc 22*25202Skarels union { 23*25202Skarels struct ip I_iphdr; /* ip/{proto} hdr of original 24*25202Skarels * IP datagram. Has >= 25*25202Skarels * ICMP_ERRLEN bytes of 26*25202Skarels * protocol header 27*25202Skarels */ 28*25202Skarels struct { 29*25202Skarels long I_torg; /* originate timestamp */ 30*25202Skarels long I_trcv; /* receive timestamp */ 31*25202Skarels long I_txmt; /* transmit timestamp */ 32*25202Skarels } I_time; 33*25202Skarels char I_data[1]; /* echo data */ 34*25202Skarels } I_un2; 35*25202Skarels }; 36*25202Skarels #define ic_iphdr I_un2.I_iphdr 37*25202Skarels #define ic_torg I_un2.I_time.I_torg 38*25202Skarels #define ic_trcv I_un2.I_time.I_trcv 39*25202Skarels #define ic_txmt I_un2.I_time.I_txmt 40*25202Skarels #define ic_data I_un2.I_data 41*25202Skarels 42*25202Skarels /* icmp message types */ 43*25202Skarels #define ICMP_ECHOR 0 /* echo reply */ 44*25202Skarels #define ICMP_UNRCH 3 /* destination unreachable */ 45*25202Skarels #define ICMP_UNRCH_NET 0 /* net unreachable */ 46*25202Skarels #define ICMP_UNRCH_HOST 1 /* host unreachable */ 47*25202Skarels #define ICMP_UNRCH_PR 2 /* protocol unrch */ 48*25202Skarels #define ICMP_UNRCH_PORT 3 /* port unreachable */ 49*25202Skarels #define ICMP_UNRCH_FRAG 4 /* DF on fragment */ 50*25202Skarels #define ICMP_UNRCH_SRC 5 /* bad source route */ 51*25202Skarels #define ICMP_UNRCH_NUM 6 52*25202Skarels #define ICMP_SRCQ 4 /* source quench */ 53*25202Skarels #define ICMP_REDIR 5 /* redirect */ 54*25202Skarels #define ICMP_REDIR_NET 0 /* network */ 55*25202Skarels #define ICMP_REDIR_HOST 1 /* host */ 56*25202Skarels #define ICMP_REDIR_TNET 2 /* TOS & network */ 57*25202Skarels #define ICMP_REDIR_THOST 3 /* TOS & host */ 58*25202Skarels #define ICMP_ECHO 8 /* echo */ 59*25202Skarels #define ICMP_TIMEX 11 /* time exceeded */ 60*25202Skarels #define ICMP_TIMEX_XMT 0 /* in transit */ 61*25202Skarels #define ICMP_TIMEX_REASS 1 /* reassembly */ 62*25202Skarels #define ICMP_PARM 12 /* parameter problem */ 63*25202Skarels #define ICMP_TIMES 13 /* timestamp */ 64*25202Skarels #define ICMP_TIMESR 14 /* timestamp reply */ 65*25202Skarels #define ICMP_INFO 15 /* information request */ 66*25202Skarels #define ICMP_INFOR 16 /* information reply */ 67*25202Skarels 68*25202Skarels #define ICMPSIZE 8 /* size of min. echo packet */ 69*25202Skarels #define PINGTIME 8 /* ping interval (in sec/2) */ 70*25202Skarels #define MAXPING 5 /* no. of pings before decide gway is down */ 71*25202Skarels 72*25202Skarels #define RT_REINSTATE 2 /* number of ping intervals a gateway stays down. 73*25202Skarels * See ip_gdown() and check_ping(). 74*25202Skarels */ 75*25202Skarels 76*25202Skarels #define ICMP_ERRLEN 8 /* 64 bits == 8 bytes */ 77*25202Skarels 78*25202Skarels #define MY_ECHO_ID 0xffff 79*25202Skarels 80*25202Skarels /* 81*25202Skarels * icmp statistics 82*25202Skarels */ 83*25202Skarels 84*25202Skarels struct icmp_stat { 85*25202Skarels struct in_stat ic_in; 86*25202Skarels #define ic_total ic_in.in_total 87*25202Skarels #define ic_badsum ic_in.in_badsum 88*25202Skarels #define ic_tooshort ic_in.in_tooshort 89*25202Skarels #define ic_drops ic_in.in_drops 90*25202Skarels int ic_broadcast; /* #icmp pkts rcv that were broadcast (ign) */ 91*25202Skarels int ic_quenches; /* #icmp source quenches received */ 92*25202Skarels int ic_redirects; /* #icmp redirects received */ 93*25202Skarels int ic_echoes; /* #icmp echo requests respond to */ 94*25202Skarels int ic_svpings; /* #pings saved by -1 hack */ 95*25202Skarels int ic_pings; /* #pings actually sent */ 96*25202Skarels int ic_timex; /* #icmp time exceeded messages received */ 97*25202Skarels int ic_parm; /* #icmp parameter problem received */ 98*25202Skarels }; 99*25202Skarels 100*25202Skarels #ifdef KERNEL 101*25202Skarels extern struct icmp_stat icmpstat; 102*25202Skarels #endif 103