From b90d4580f004e8c424908ce89b461425a5818c1b Mon Sep 17 00:00:00 2001 From: Chirag Shah Date: Fri, 9 Aug 2019 16:12:55 -0700 Subject: [PATCH 1/2] bgpd: fix evpn ecommunity auto rts Evpn extended communities like auto rts (import/export) should check if its present in list before adding it, to avoid duplicate addition. L3vni_add callback from zebra to bgp may see updates to vnis. The auto import/export rt derivation may call multiple times. Testing Done: Before: TORC11# show bgp l2vpn evpn vni 4001 VNI: 4001 (known to the kernel) Type: L3 Tenant VRF: vrf1 RD: 45.0.2.2:3 ... Import Route Target: 5546:4001 5546:4001 Export Route Target: 5546:4001 5546:4001 After: VNI: 4001 (known to the kernel) Type: L3 Tenant VRF: vrf1 RD: 45.0.2.2:3 ... Import Route Target: 5546:4001 Export Route Target: 5546:4001 Signed-off-by: Chirag Shah --- bgpd/bgp_evpn.c | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/bgpd/bgp_evpn.c b/bgpd/bgp_evpn.c index 3bc3d74de6..1f8ea48389 100644 --- a/bgpd/bgp_evpn.c +++ b/bgpd/bgp_evpn.c @@ -505,7 +505,9 @@ static void unmap_vni_from_rt(struct bgp *bgp, struct bgpevpn *vpn, static void form_auto_rt(struct bgp *bgp, vni_t vni, struct list *rtl) { struct ecommunity_val eval; - struct ecommunity *ecomadd; + struct ecommunity *ecomadd, *ecom; + bool ecom_found = false; + struct listnode *node; if (bgp->advertise_autort_rfc8365) vni |= EVPN_AUTORT_VXLAN; @@ -513,7 +515,12 @@ static void form_auto_rt(struct bgp *bgp, vni_t vni, struct list *rtl) ecomadd = ecommunity_new(); ecommunity_add_val(ecomadd, &eval); - listnode_add_sort(rtl, ecomadd); + for (ALL_LIST_ELEMENTS_RO(rtl, node, ecom)) + if (ecommunity_cmp(ecomadd, ecom)) + ecom_found = true; + + if (!ecom_found) + listnode_add_sort(rtl, ecomadd); } /* From df070e6f5e1bc3c1856921c35c9e7094e263a152 Mon Sep 17 00:00:00 2001 From: Chirag Shah Date: Mon, 19 Aug 2019 18:24:28 -0700 Subject: [PATCH 2/2] bgpd: evpn convey svi_ip to zebra post vni add Problem: With advertise_svi_ip knob enabled per vni. Post vni flap, svi MAC-IP route are not originated. Fix: When a vni is flapped, upon re-add send advetise_svi_ip knob to zebra. Workaround: re-configure advertise-svi-ip under l2vpn/evpn. Ticket:CM-26001 Reviewed By:CCR-9118 Testing Done: With advertise-svi-ip enabled under l2vpn/evpn in bgp default instance. Validated vni del/create post ifdown vxlan device followed by ifup vxlan device. Signed-off-by: Chirag Shah --- bgpd/bgp_evpn.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/bgpd/bgp_evpn.c b/bgpd/bgp_evpn.c index 1f8ea48389..4949519a9b 100644 --- a/bgpd/bgp_evpn.c +++ b/bgpd/bgp_evpn.c @@ -5808,6 +5808,9 @@ int bgp_evpn_local_vni_add(struct bgp *bgp, vni_t vni, It needs to be conveyed again to zebra */ bgp_zebra_advertise_gw_macip(bgp, vpn->advertise_gw_macip, vpn->vni); + /* advertise svi mac-ip knob to zebra */ + bgp_zebra_advertise_svi_macip(bgp, vpn->advertise_svi_macip, vpn->vni); + return 0; }