diff --git a/bgpd/bgp_mplsvpn.c b/bgpd/bgp_mplsvpn.c index 13427651f112..814c5cfda5b3 100644 --- a/bgpd/bgp_mplsvpn.c +++ b/bgpd/bgp_mplsvpn.c @@ -1338,10 +1338,7 @@ void bgp_mplsvpn_path_nh_label_unlink(struct bgp_path_info *pi) { struct bgp_label_per_nexthop_cache *blnc; - if (!pi || !pi->net || !bgp_dest_table(pi->net)) - return; - - if (bgp_dest_table(pi->net)->safi != SAFI_UNICAST) + if (!CHECK_FLAG(pi->mplsvpn_usage, BGP_MPLSVPN_LABEL_NH)) return; blnc = pi->mplsvpn.blnc.label_nexthop_cache; @@ -1352,6 +1349,7 @@ void bgp_mplsvpn_path_nh_label_unlink(struct bgp_path_info *pi) LIST_REMOVE(pi, mplsvpn.blnc.label_nh_thread); pi->mplsvpn.blnc.label_nexthop_cache->path_count--; pi->mplsvpn.blnc.label_nexthop_cache = NULL; + UNSET_FLAG(pi->mplsvpn_usage, BGP_MPLSVPN_LABEL_NH); if (LIST_EMPTY(&(blnc->paths))) bgp_label_per_nexthop_free(blnc); @@ -1473,6 +1471,7 @@ static mpls_label_t _vpn_leak_from_vrf_get_per_nexthop_label( mplsvpn.blnc.label_nh_thread); pi->mplsvpn.blnc.label_nexthop_cache = blnc; pi->mplsvpn.blnc.label_nexthop_cache->path_count++; + SET_FLAG(pi->mplsvpn_usage, BGP_MPLSVPN_LABEL_NH); blnc->last_update = monotime(NULL); } @@ -4093,10 +4092,7 @@ void bgp_mplsvpn_path_nh_label_bind_unlink(struct bgp_path_info *pi) { struct bgp_mplsvpn_nh_label_bind_cache *bmnc; - if (!pi || !pi->net || !bgp_dest_table(pi->net)) - return; - - if (bgp_dest_table(pi->net)->safi != SAFI_MPLS_VPN) + if (!CHECK_FLAG(pi->mplsvpn_usage, BGP_MPLSVPN_NH_LABEL_BIND)) return; bmnc = pi->mplsvpn.bmnc.nh_label_bind_cache; @@ -4107,6 +4103,7 @@ void bgp_mplsvpn_path_nh_label_bind_unlink(struct bgp_path_info *pi) LIST_REMOVE(pi, mplsvpn.bmnc.nh_label_bind_thread); pi->mplsvpn.bmnc.nh_label_bind_cache->path_count--; pi->mplsvpn.bmnc.nh_label_bind_cache = NULL; + SET_FLAG(pi->mplsvpn_usage, BGP_MPLSVPN_NH_LABEL_BIND); if (LIST_EMPTY(&(bmnc->paths))) bgp_mplsvpn_nh_label_bind_free(bmnc); @@ -4143,6 +4140,7 @@ void bgp_mplsvpn_nh_label_bind_register_local_label(struct bgp *bgp, mplsvpn.bmnc.nh_label_bind_thread); pi->mplsvpn.bmnc.nh_label_bind_cache = bmnc; pi->mplsvpn.bmnc.nh_label_bind_cache->path_count++; + SET_FLAG(pi->mplsvpn_usage, BGP_MPLSVPN_NH_LABEL_BIND); bmnc->last_update = monotime(NULL); } diff --git a/bgpd/bgp_route.h b/bgpd/bgp_route.h index 8959b58007f9..b8e06934f56b 100644 --- a/bgpd/bgp_route.h +++ b/bgpd/bgp_route.h @@ -336,6 +336,9 @@ struct bgp_path_info { uint32_t addpath_rx_id; struct bgp_addpath_info_data tx_addpath; +#define BGP_MPLSVPN_LABEL_NH (1<<1) +#define BGP_MPLSVPN_NH_LABEL_BIND (1<<2) + uint8_t mplsvpn_usage; union { struct bgp_mplsvpn_label_nh blnc; struct bgp_mplsvpn_nh_label_bind bmnc;