On Thu, May 10, 2018 at 7:28 PM, John Lo (loj) <l...@cisco.com> wrote:
> Hi Jon, > Hi John, > This is not the right behavior. > I had that suspicion... :-) I think it is caused by reuse of a static ARP entry in the IP4 neighbor > pool with static bit still set. The code merely set the dynamic bit in the > flags but left the static bit untouched (similarly for the static path) in > arp.c function vnet_arp_set_ip4_over_ethernet_internal (): > > > > e->time_last_updated = vlib_time_now (vm); > > if (is_static) > > e->flags |= ETHERNET_ARP_IP4_ENTRY_FLAG_STATIC; > > else > > e->flags |= ETHERNET_ARP_IP4_ENTRY_FLAG_DYNAMIC; > Ah, right. So it should always be one or the other, and never both. Right? I spotted another error in the function vnet_arp_flush_ip4_over_ > ethernet_internal() > > > > if (e->flags & ETHERNET_ARP_IP4_ENTRY_FLAG_STATIC) > > { > > e->flags &= ETHERNET_ARP_IP4_ENTRY_FLAG_DYNAMIC; > > } > > else if (e->flags & ETHERNET_ARP_IP4_ENTRY_FLAG_DYNAMIC) > > { > > arp_entry_free (eai, e); > > } > > > > I believe the “if static” path should be: > > e->flags &= ~ETHERNET_ARP_IP4_ENTRY_FLAG_DYNAMIC; > > > > Would you like to submit a patch to fix them? > Sure! I will make a first-effort and submit a patch! jdl