ip: add tracing for ipv6 frag headers 73/22573/2
authorKlement Sekera <ksekera@cisco.com>
Mon, 7 Oct 2019 12:20:39 +0000 (12:20 +0000)
committerAndrew Yourtchenko <ayourtch@gmail.com>
Mon, 7 Oct 2019 16:58:02 +0000 (16:58 +0000)
Type: feature

Change-Id: I0e049b28d8c21b67ea4545e865eda4e88f10e485
Signed-off-by: Klement Sekera <ksekera@cisco.com>
src/vnet/ip/ip6_input.c

index 0450064..6fab582 100644 (file)
@@ -247,6 +247,25 @@ VLIB_REGISTER_NODE (ip6_input_node) = {
 };
 /* *INDENT-ON* */
 
+static u8 *
+format_ipv6_fragmentation (u8 * s, va_list * args)
+{
+  ip6_frag_hdr_t *h = va_arg (*args, ip6_frag_hdr_t *);
+  u32 max_header_bytes = va_arg (*args, u32);
+  u32 header_bytes;
+
+  header_bytes = sizeof (h[0]);
+  if (max_header_bytes != 0 && header_bytes > max_header_bytes)
+    return format (s, "ipv6 frag header truncated");
+
+  s =
+    format (s,
+           "fragmentation header: next_hdr: %u, rsv: %u, frag_offset_and_more: %u, id: %u",
+           h->next_hdr, h->rsv, h->fragment_offset_and_more,
+           clib_net_to_host_u32 (h->identification));
+  return s;
+}
+
 static clib_error_t *
 ip6_init (vlib_main_t * vm)
 {
@@ -266,6 +285,11 @@ ip6_init (vlib_main_t * vm)
   /* Default hop limit for packets we generate. */
   ip6_main.host_config.ttl = 64;
 
+
+  uword *u = hash_get (ip_main.protocol_info_by_name, "IPV6_FRAGMENTATION");
+  ip_protocol_info_t *info = vec_elt_at_index (ip_main.protocol_infos, *u);
+  ASSERT (NULL == info->format_header);
+  info->format_header = format_ipv6_fragmentation;
   return /* no error */ 0;
 }