/* 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])
/* 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])