From 8cb8f12863f626586c163b450935419c0b3c34f0 Mon Sep 17 00:00:00 2001
From: Michael Tuexen <tuexen@fh-muenster.de>
Date: Tue, 6 Sep 2016 16:00:42 +0200
Subject: [PATCH] Support codes for TIME EXCEEDED ICMP messages.

Sponsored by:	Netflix
---
 gtests/net/packetdrill/icmp.h        | 4 ++++
 gtests/net/packetdrill/icmp_packet.c | 9 ++++++++-
 2 files changed, 12 insertions(+), 1 deletion(-)

diff --git a/gtests/net/packetdrill/icmp.h b/gtests/net/packetdrill/icmp.h
index a35c8b53..86ac623d 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 36c0b9fc..12890f4d 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" },
-- 
GitLab