1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374 |
- /* ICMP for IP v4 and v6 */
- enum
- {
- /* Packet Types, icmp v4 (rfc 792) */
- EchoReply = 0,
- Unreachable = 3,
- SrcQuench = 4,
- Redirect = 5,
- EchoRequest = 8,
- TimeExceed = 11,
- InParmProblem = 12,
- Timestamp = 13,
- TimestampReply = 14,
- InfoRequest = 15,
- InfoReply = 16,
- AddrMaskRequest = 17,
- AddrMaskReply = 18,
- Traceroute = 30,
- IPv6WhereAreYou = 33,
- IPv6IAmHere = 34,
- /* packet types, icmp v6 (rfc 2463) */
- /* error messages */
- UnreachableV6 = 1,
- PacketTooBigV6 = 2,
- TimeExceedV6 = 3,
- ParamProblemV6 = 4,
- /* informational messages (rfc 2461 also) */
- EchoRequestV6 = 128,
- EchoReplyV6 = 129,
- RouterSolicit = 133,
- RouterAdvert = 134,
- NbrSolicit = 135,
- NbrAdvert = 136,
- RedirectV6 = 137,
- Maxtype6 = 137,
- ICMP_HDRSIZE = 8,
- };
- typedef struct Ip4hdr Ip4hdr;
- struct Ip4hdr
- {
- uchar vihl; /* Version and header length */
- uchar tos; /* Type of service */
- uchar length[2]; /* packet length */
- uchar id[2]; /* Identification */
- uchar frag[2]; /* Fragment information */
- uchar ttl; /* Time to live */
- uchar proto; /* Protocol */
- uchar ipcksum[2]; /* Header checksum */
- uchar src[4]; /* Ipv4 source */
- uchar dst[4]; /* Ipv4 destination */
- uchar data[];
- };
- // #define IP4HDRSZ offsetof(Ip4hdr, data[0])
- /* the icmp payload has the same format in v4 and v6 */
- typedef struct Icmphdr Icmphdr;
- struct Icmphdr {
- uchar type;
- uchar code;
- uchar cksum[2];
- uchar icmpid[2];
- uchar seq[2];
- uchar data[];
- };
- // #define ICMPHDRSZ offsetof(Icmphdr, data[0])
|