diff options
| -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);  | 
