summaryrefslogtreecommitdiff
path: root/zebra/zebra_vxlan.c
diff options
context:
space:
mode:
Diffstat (limited to 'zebra/zebra_vxlan.c')
-rw-r--r--zebra/zebra_vxlan.c9
1 files changed, 7 insertions, 2 deletions
diff --git a/zebra/zebra_vxlan.c b/zebra/zebra_vxlan.c
index 61498973e9..d8ed58edef 100644
--- a/zebra/zebra_vxlan.c
+++ b/zebra/zebra_vxlan.c
@@ -4594,6 +4594,11 @@ int zebra_vxlan_if_down(struct interface *ifp)
assert(zevpn->vxlan_if == ifp);
+ /* remove from l3-vni list */
+ zl3vni = zl3vni_from_vrf(zevpn->vrf_id);
+ if (zl3vni)
+ listnode_delete(zl3vni->l2vnis, zevpn);
+
/* Delete this VNI from BGP. */
zebra_evpn_send_del_to_client(zevpn);
@@ -4668,7 +4673,7 @@ int zebra_vxlan_if_up(struct interface *ifp)
zevpn->vrf_id = vlan_if->vrf_id;
zl3vni = zl3vni_from_vrf(vlan_if->vrf_id);
if (zl3vni)
- listnode_add_sort(zl3vni->l2vnis, zevpn);
+ listnode_add_sort_nodup(zl3vni->l2vnis, zevpn);
}
/* If part of a bridge, inform BGP about this VNI. */
@@ -5007,7 +5012,7 @@ int zebra_vxlan_if_add(struct interface *ifp)
zevpn->vrf_id = vlan_if->vrf_id;
zl3vni = zl3vni_from_vrf(vlan_if->vrf_id);
if (zl3vni)
- listnode_add_sort(zl3vni->l2vnis, zevpn);
+ listnode_add_sort_nodup(zl3vni->l2vnis, zevpn);
}
if (IS_ZEBRA_DEBUG_VXLAN) {