diff options
| author | Donatas Abraitis <donatas@opensourcerouting.org> | 2024-06-20 10:51:06 +0300 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2024-06-20 10:51:06 +0300 |
| commit | 34a6e223fb2a1ad479aa36d997850924baa137a9 (patch) | |
| tree | 13e5940c00b7f88d210130e807063d4776df9f1f | |
| parent | 550a3a819cf9afba29663a3caae903952dd742e4 (diff) | |
| parent | 171d2583d0373b456335477dea6688d2e9e95db7 (diff) | |
Merge pull request #16059 from kacpekwasny/kkwasny/CLIC-139-4
bgpd: fixed failing to remove VRF if there is a stale l3vni
| -rw-r--r-- | bgpd/bgp_evpn.c | 11 | ||||
| -rw-r--r-- | bgpd/bgp_evpn.h | 1 | ||||
| -rw-r--r-- | bgpd/bgpd.c | 3 |
3 files changed, 15 insertions, 0 deletions
diff --git a/bgpd/bgp_evpn.c b/bgpd/bgp_evpn.c index 5ce5b19b18..5d6a5a59f5 100644 --- a/bgpd/bgp_evpn.c +++ b/bgpd/bgp_evpn.c @@ -6984,6 +6984,17 @@ int bgp_evpn_local_l3vni_del(vni_t l3vni, vrf_id_t vrf_id) } /* + * When bgp instance goes down also clean up what might have been left over + * from evpn. + */ +void bgp_evpn_instance_down(struct bgp *bgp) +{ + /* If we have a stale local vni, delete it */ + if (bgp->l3vni) + bgp_evpn_local_l3vni_del(bgp->l3vni, bgp->vrf_id); +} + +/* * Handle del of a local VNI. */ int bgp_evpn_local_vni_del(struct bgp *bgp, vni_t vni) diff --git a/bgpd/bgp_evpn.h b/bgpd/bgp_evpn.h index 223f18a177..dc82bcfba9 100644 --- a/bgpd/bgp_evpn.h +++ b/bgpd/bgp_evpn.h @@ -153,6 +153,7 @@ extern int bgp_evpn_local_l3vni_add(vni_t vni, vrf_id_t vrf_id, struct in_addr originator_ip, int filter, ifindex_t svi_ifindex, bool is_anycast_mac); extern int bgp_evpn_local_l3vni_del(vni_t vni, vrf_id_t vrf_id); +extern void bgp_evpn_instance_down(struct bgp *bgp); extern int bgp_evpn_local_vni_del(struct bgp *bgp, vni_t vni); extern int bgp_evpn_local_vni_add(struct bgp *bgp, vni_t vni, struct in_addr originator_ip, diff --git a/bgpd/bgpd.c b/bgpd/bgpd.c index 869d2b4552..2ec6a66bef 100644 --- a/bgpd/bgpd.c +++ b/bgpd/bgpd.c @@ -3875,6 +3875,9 @@ void bgp_instance_down(struct bgp *bgp) struct listnode *node; struct listnode *next; + /* Cleanup evpn instance state */ + bgp_evpn_instance_down(bgp); + /* Stop timers. */ if (bgp->t_rmap_def_originate_eval) EVENT_OFF(bgp->t_rmap_def_originate_eval); |
