l2: skip arp term for locally originated packets 17/36117/4
authorStanislav Zaikin <zstaseg@gmail.com>
Tue, 10 May 2022 18:50:36 +0000 (20:50 +0200)
committerJohn Lo <lojultra2020@outlook.com>
Tue, 30 Aug 2022 18:37:20 +0000 (18:37 +0000)
Mark arp packet as locally originated when probing/replying and don't apply any
arp-term logic against it.

Type: fix
Signed-off-by: Stanislav Zaikin <zstaseg@gmail.com>
Change-Id: I305ff5cac8cac456decf92f21b961aa4ce286079

src/vnet/arp/arp_packet.h
src/vnet/ip-neighbor/ip4_neighbor.h
src/vnet/l2/l2_arp_term.c

index a860c25..66ab384 100644 (file)
@@ -68,6 +68,8 @@ arp_mk_reply (vnet_main_t * vnm,
   clib_mem_unaligned (&arp0->ip4_over_ethernet[0].ip4.data_u32, u32) =
     if_addr0->data_u32;
 
+  p0->flags |= VNET_BUFFER_F_LOCALLY_ORIGINATED;
+
   /* Hardware must be ethernet-like. */
   ASSERT (vec_len (hw_if0->hw_address) == 6);
 
index 8ace8d1..7941ebd 100644 (file)
@@ -61,6 +61,7 @@ ip4_neighbor_probe (vlib_main_t *vm, vnet_main_t *vnm,
   h0->ip4_over_ethernet[1].ip4 = *dst;
 
   vnet_buffer (b0)->sw_if_index[VLIB_TX] = adj0->rewrite_header.sw_if_index;
+  b0->flags |= VNET_BUFFER_F_LOCALLY_ORIGINATED;
 
   vlib_buffer_advance (b0, -adj0->rewrite_header.data_bytes);
 
index d073432..594ee8e 100644 (file)
@@ -290,6 +290,9 @@ arp_term_l2bd (vlib_main_t * vm,
          ethertype0 = clib_net_to_host_u16 (*(u16 *) (l3h0 - 2));
          arp0 = (ethernet_arp_header_t *) l3h0;
 
+         if (p0->flags & VNET_BUFFER_F_LOCALLY_ORIGINATED)
+           goto next_l2_feature;
+
          if (ethertype0 != ETHERNET_TYPE_ARP)
            goto check_ip6_nd;