xref: /plan9/sys/src/cmd/ip/icmp.h (revision 94aa1c4c0955b2b4e990c9f4679be8e9f67a469b)
1 /* ICMP for IP v4 and v6 */
2 enum
3 {
4 	/* Packet Types, icmp v4 (rfc 792) */
5 	EchoReply	= 0,
6 	Unreachable	= 3,
7 	SrcQuench	= 4,
8 	Redirect	= 5,
9 	EchoRequest	= 8,
10 	TimeExceed	= 11,
11 	InParmProblem	= 12,
12 	Timestamp	= 13,
13 	TimestampReply	= 14,
14 	InfoRequest	= 15,
15 	InfoReply	= 16,
16 	AddrMaskRequest = 17,
17 	AddrMaskReply   = 18,
18 	Traceroute	= 30,
19 	IPv6WhereAreYou	= 33,
20 	IPv6IAmHere	= 34,
21 
22 	/* packet types, icmp v6 (rfc 2463) */
23 
24         /* error messages */
25 	UnreachableV6	= 1,
26 	PacketTooBigV6	= 2,
27 	TimeExceedV6	= 3,
28 	ParamProblemV6	= 4,
29 
30         /* informational messages (rfc 2461 also) */
31 	EchoRequestV6	= 128,
32 	EchoReplyV6	= 129,
33 	RouterSolicit	= 133,
34 	RouterAdvert	= 134,
35 	NbrSolicit	= 135,
36 	NbrAdvert	= 136,
37 	RedirectV6	= 137,
38 
39 	Maxtype6	= 137,
40 
41 	ICMP_HDRSIZE	= 8,
42 };
43 
44 typedef struct Ip4hdr Ip4hdr;
45 struct Ip4hdr
46 {
47 	uchar	vihl;		/* Version and header length */
48 	uchar	tos;		/* Type of service */
49 	uchar	length[2];	/* packet length */
50 	uchar	id[2];		/* Identification */
51 	uchar	frag[2];	/* Fragment information */
52 	uchar	ttl;		/* Time to live */
53 	uchar	proto;		/* Protocol */
54 	uchar	ipcksum[2];	/* Header checksum */
55 	uchar	src[4];		/* Ipv4 source */
56 	uchar	dst[4];		/* Ipv4 destination */
57 
58 	uchar	data[];
59 };
60 
61 // #define IP4HDRSZ offsetof(Ip4hdr, data[0])
62 
63 /* the icmp payload has the same format in v4 and v6 */
64 typedef struct Icmphdr Icmphdr;
65 struct Icmphdr {
66 	uchar	type;
67 	uchar	code;
68 	uchar	cksum[2];
69 	uchar	icmpid[2];
70 	uchar	seq[2];
71 	uchar	data[];
72 };
73 
74 // #define ICMPHDRSZ offsetof(Icmphdr, data[0])
75