l2: skip arp term for locally originated packets

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
This commit is contained in:
Stanislav Zaikin
2022-05-10 20:50:36 +02:00
committed by John Lo
parent c37ce79076
commit 7dc351f689
3 changed files with 6 additions and 0 deletions

View 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);

View 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);

View 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;