ip: allow overriding fib index in reass 24/38824/3
authorFlorin Coras <fcoras@cisco.com>
Fri, 12 May 2023 23:58:44 +0000 (16:58 -0700)
committerDave Wallace <dwallacelf@gmail.com>
Mon, 15 May 2023 17:11:43 +0000 (17:11 +0000)
Type: improvement

Signed-off-by: Florin Coras <fcoras@cisco.com>
Change-Id: Ic28da52b9c8286f71e472ef6c3afc23d464f85b0

src/vnet/ip/reass/ip4_full_reass.c
src/vnet/ip/reass/ip6_full_reass.c

index 5e5969e..c65f349 100644 (file)
@@ -1222,8 +1222,10 @@ ip4_full_reass_inline (vlib_main_t *vm, vlib_node_runtime_t *node,
          goto packet_enqueue;
        }
 
-      u32 fib_index = vec_elt (ip4_main.fib_index_by_sw_if_index,
-                              vnet_buffer (b0)->sw_if_index[VLIB_RX]);
+      u32 fib_index = (vnet_buffer (b0)->sw_if_index[VLIB_TX] == (u32) ~0) ?
+                             vec_elt (ip4_main.fib_index_by_sw_if_index,
+                                vnet_buffer (b0)->sw_if_index[VLIB_RX]) :
+                             vnet_buffer (b0)->sw_if_index[VLIB_TX];
 
       ip4_full_reass_kv_t kv = { .k.fib_index = fib_index,
                                 .k.src.as_u32 = ip0->src_address.as_u32,
index 582dbf6..f14083d 100644 (file)
@@ -1279,15 +1279,17 @@ ip6_full_reassembly_inline (vlib_main_t *vm, vlib_node_runtime_t *node,
            }
          else
            {
+             u32 fib_index =
+               (vnet_buffer (b0)->sw_if_index[VLIB_TX] == (u32) ~0) ?
+                       vec_elt (ip6_main.fib_index_by_sw_if_index,
+                          vnet_buffer (b0)->sw_if_index[VLIB_RX]) :
+                       vnet_buffer (b0)->sw_if_index[VLIB_TX];
              kv.k.as_u64[0] = ip0->src_address.as_u64[0];
              kv.k.as_u64[1] = ip0->src_address.as_u64[1];
              kv.k.as_u64[2] = ip0->dst_address.as_u64[0];
              kv.k.as_u64[3] = ip0->dst_address.as_u64[1];
              kv.k.as_u64[4] =
-               ((u64) vec_elt (ip6_main.fib_index_by_sw_if_index,
-                               vnet_buffer (b0)->sw_if_index[VLIB_RX]))
-                 << 32 |
-               (u64) frag_hdr->identification;
+               ((u64) fib_index) << 32 | (u64) frag_hdr->identification;
              /* RFC 8200: The Next Header values in the Fragment headers of
               * different fragments of the same original packet may differ.
               * Only the value from the Offset zero fragment packet is used