From 7b349d178a2a6757eb01bc3cb79004e529e60792 Mon Sep 17 00:00:00 2001 From: vivek Date: Sun, 25 Apr 2021 22:37:48 -0700 Subject: [PATCH] zebra: Clean remote FDB entries upon VNI removal When the VLAN-VNI mapping is configured via a map and not using individual VXLAN interfaces, upon removal of a VNI ensure that the remote FDB entries are uninstalled correctly. Signed-off-by: Vivek Venkatraman Ticket: #2613048 Reviewed By: Testing Done: 1. Manual verification - logs in the ticket 2. Precommit (user job #171) and evpn-min (user job #170) --- zebra/zebra_vxlan_if.c | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/zebra/zebra_vxlan_if.c b/zebra/zebra_vxlan_if.c index 24e4a8c9a484..e2f3033d1e20 100644 --- a/zebra/zebra_vxlan_if.c +++ b/zebra/zebra_vxlan_if.c @@ -154,11 +154,11 @@ static int zebra_vxlan_if_del_vni(struct interface *ifp, struct zebra_vxlan_vni zebra_evpn_send_del_to_client(zevpn); /* Free up all neighbors and MAC, if any. */ - zebra_evpn_neigh_del_all(zevpn, 0, 0, DEL_ALL_NEIGH); - zebra_evpn_mac_del_all(zevpn, 0, 0, DEL_ALL_MAC); + zebra_evpn_neigh_del_all(zevpn, 1, 0, DEL_ALL_NEIGH); + zebra_evpn_mac_del_all(zevpn, 1, 0, DEL_ALL_MAC); /* Free up all remote VTEPs, if any. */ - zebra_evpn_vtep_del_all(zevpn, 0); + zebra_evpn_vtep_del_all(zevpn, 1); /* Delete the hash entry. */ if (zebra_evpn_vxlan_del(zevpn)) { @@ -732,8 +732,14 @@ int zebra_vxlan_if_vni_table_add_update(struct interface *ifp, struct hash *vni_ /* release kernel deleted vnis */ if (old_vni_table) { - if (hashcount(old_vni_table)) + if (hashcount(old_vni_table)) { + /* UGLY HACK: Put back the old table so that delete of + * MACs goes through and then flip back. + */ + vni_info->vni_table = old_vni_table; hash_iterate(old_vni_table, zebra_vxlan_if_vni_clean, zif); + vni_info->vni_table = vni_table; + } zebra_vxlan_vni_table_destroy(old_vni_table); }