diff --git a/gtests/net/packetdrill/icmp.h b/gtests/net/packetdrill/icmp.h index a35c8b53910eee34fd3557d6006675e4be89640c..86ac623db377cc857aeaa19ce70f031a2369e1d4 100644 --- a/gtests/net/packetdrill/icmp.h +++ b/gtests/net/packetdrill/icmp.h @@ -94,4 +94,8 @@ struct icmpv4 { #define ICMP_PREC_CUTOFF 15 #define NR_ICMP_UNREACH 15 +/* Codes for ICMP_TIME_EXCEEDED */ +#define ICMP_TTL_EX 0 +#define ICMP_REAS_TIME_EX 1 + #endif /* __ICMP_HEADERS_H__ */ diff --git a/gtests/net/packetdrill/icmp_packet.c b/gtests/net/packetdrill/icmp_packet.c index 36c0b9fc76ac6de1306b981fe9c8f17f2a3b794a..12890f4df4cc464950c4391e85c5ff722fcd1ce1 100644 --- a/gtests/net/packetdrill/icmp_packet.c +++ b/gtests/net/packetdrill/icmp_packet.c @@ -62,6 +62,13 @@ struct icmp_code_info icmpv4_unreachable_codes[] = { { 0, NULL }, }; +/* Values for the 'code' byte of an IPv4 ICMP_TIME_EXCEEDED header (RFC 1700). */ +struct icmp_code_info icmpv4_time_exceeded_codes[] = { + { ICMP_TTL_EX, "ttl_exceeded_in_transit" }, + { ICMP_REAS_TIME_EX, "frag_reass_exceeded" }, + { 0, NULL }, +}; + /* Information about the supported types of ICMPv4 header (RFC 1700). */ struct icmp_type_info icmpv4_types[] = { { ICMP_ECHOREPLY, "echo_reply" }, @@ -69,7 +76,7 @@ struct icmp_type_info icmpv4_types[] = { { ICMP_SOURCE_QUENCH, "source_quench" }, { ICMP_REDIRECT, "redirect" }, { ICMP_ECHO, "echo_request" }, - { ICMP_TIME_EXCEEDED, "time_exceeded" }, + { ICMP_TIME_EXCEEDED, "time_exceeded", icmpv4_time_exceeded_codes }, { ICMP_PARAMETERPROB, "parameter_problem" }, { ICMP_TIMESTAMP, "timestamp_request" }, { ICMP_TIMESTAMPREPLY, "timestamp_reply" },