xref: /csrg-svn/sys/deprecated/bbnnet/icmp.h (revision 25202)
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