ip: show fib index in ip4 reassembly trace 22/37122/2
authorDamjan Marion <dmarion@me.com>
Wed, 14 Sep 2022 14:00:09 +0000 (16:00 +0200)
committerOle Tr�an <otroan@employees.org>
Wed, 14 Sep 2022 15:13:21 +0000 (15:13 +0000)
Type: improvement
Change-Id: I371237803e2c3cb0e1b42b94f422867465e2bff6
Signed-off-by: Damjan Marion <dmarion@me.com>
src/vnet/ip/reass/ip4_full_reass.c

index 3183560..5b69234 100644 (file)
@@ -73,21 +73,19 @@ typedef enum
 
 typedef struct
 {
-  union
+  struct
   {
-    struct
-    {
-      u32 xx_id;
-      ip4_address_t src;
-      ip4_address_t dst;
-      u16 frag_id;
-      u8 proto;
-      u8 unused;
-    };
-    u64 as_u64[2];
+    u16 frag_id;
+    u8 proto;
+    u8 unused;
+    u32 fib_index;
+    ip4_address_t src;
+    ip4_address_t dst;
   };
 } ip4_full_reass_key_t;
 
+STATIC_ASSERT_SIZEOF (ip4_full_reass_key_t, 16);
+
 typedef union
 {
   struct
@@ -417,9 +415,8 @@ ip4_full_reass_free (ip4_full_reass_main_t * rm,
                     ip4_full_reass_per_thread_t * rt,
                     ip4_full_reass_t * reass)
 {
-  clib_bihash_kv_16_8_t kv;
-  kv.key[0] = reass->key.as_u64[0];
-  kv.key[1] = reass->key.as_u64[1];
+  clib_bihash_kv_16_8_t kv = {};
+  clib_memcpy_fast (&kv, &reass->key, sizeof (kv.key));
   clib_bihash_add_del_16_8 (&rm->hash, &kv, 0);
   return ip4_full_reass_free_ctx (rt, reass);
 }
@@ -621,8 +618,7 @@ again:
       ++rt->reass_n;
     }
 
-  reass->key.as_u64[0] = kv->kv.key[0];
-  reass->key.as_u64[1] = kv->kv.key[1];
+  clib_memcpy_fast (&reass->key, &kv->kv.key, sizeof (reass->key));
   kv->v.reass_index = (reass - rt->pool);
   kv->v.memory_owner_thread_index = vm->thread_index;
   reass->last_heard = now;
@@ -1250,16 +1246,18 @@ ip4_full_reass_inline (vlib_main_t *vm, vlib_node_runtime_t *node,
              error0 = IP4_ERROR_REASS_MALFORMED_PACKET;
              goto packet_enqueue;
            }
-         ip4_full_reass_kv_t kv;
-         u8 do_handoff = 0;
 
-         kv.k.as_u64[0] =
-           (u64) vec_elt (ip4_main.fib_index_by_sw_if_index,
-                          vnet_buffer (b0)->sw_if_index[VLIB_RX]) |
-           (u64) ip0->src_address.as_u32 << 32;
-         kv.k.as_u64[1] =
-           (u64) ip0->dst_address.
-           as_u32 | (u64) ip0->fragment_id << 32 | (u64) ip0->protocol << 48;
+         u32 fib_index = vec_elt (ip4_main.fib_index_by_sw_if_index,
+                                  vnet_buffer (b0)->sw_if_index[VLIB_RX]);
+
+         ip4_full_reass_kv_t kv = { .k.fib_index = fib_index,
+                                    .k.src.as_u32 = ip0->src_address.as_u32,
+                                    .k.dst.as_u32 = ip0->dst_address.as_u32,
+                                    .k.frag_id = ip0->fragment_id,
+                                    .k.proto = ip0->protocol
+
+         };
+         u8 do_handoff = 0;
 
          ip4_full_reass_t *reass = ip4_full_reass_find_or_create (
            vm, node, rm, rt, &kv, &do_handoff, &n_left_to_next, &to_next);
@@ -1768,9 +1766,8 @@ format_ip4_full_reass_key (u8 * s, va_list * args)
 {
   ip4_full_reass_key_t *key = va_arg (*args, ip4_full_reass_key_t *);
   s =
-    format (s,
-           "xx_id: %u, src: %U, dst: %U, frag_id: %u, proto: %u",
-           key->xx_id, format_ip4_address, &key->src, format_ip4_address,
+    format (s, "fib_index: %u, src: %U, dst: %U, frag_id: %u, proto: %u",
+           key->fib_index, format_ip4_address, &key->src, format_ip4_address,
            &key->dst, clib_net_to_host_u16 (key->frag_id), key->proto);
   return s;
 }