mirror of
https://git.proxmox.com/git/mirror_frr
synced 2025-08-06 09:00:55 +00:00
bgpd: Check NHT change for triggering EVPN import or unimport
Ensure that only if there is a change to the path's validity based on the NHT update, EVPN import or unimport is invoked. Signed-off-by: Vivek Venkatraman <vivek@cumulusnetworks.com>
This commit is contained in:
parent
9e15d76adf
commit
34ea39b65a
@ -736,7 +736,8 @@ static void evaluate_paths(struct bgp_nexthop_cache *bnc)
|
||||
* nexthops with labels
|
||||
*/
|
||||
|
||||
int bnc_is_valid_nexthop = 0;
|
||||
bool bnc_is_valid_nexthop = false;
|
||||
bool path_valid = false;
|
||||
|
||||
if (safi == SAFI_UNICAST &&
|
||||
path->sub_type == BGP_ROUTE_IMPORTED &&
|
||||
@ -744,7 +745,7 @@ static void evaluate_paths(struct bgp_nexthop_cache *bnc)
|
||||
path->extra->num_labels) {
|
||||
|
||||
bnc_is_valid_nexthop =
|
||||
bgp_isvalid_labeled_nexthop(bnc) ? 1 : 0;
|
||||
bgp_isvalid_labeled_nexthop(bnc) ? true : false;
|
||||
} else {
|
||||
if (bgp_update_martian_nexthop(
|
||||
bnc->bgp, afi, safi, path->type,
|
||||
@ -755,7 +756,7 @@ static void evaluate_paths(struct bgp_nexthop_cache *bnc)
|
||||
__func__, rn, bgp_path->name);
|
||||
} else
|
||||
bnc_is_valid_nexthop =
|
||||
bgp_isvalid_nexthop(bnc) ? 1 : 0;
|
||||
bgp_isvalid_nexthop(bnc) ? true : false;
|
||||
}
|
||||
|
||||
if (BGP_DEBUG(nht, NHT)) {
|
||||
@ -774,20 +775,6 @@ static void evaluate_paths(struct bgp_nexthop_cache *bnc)
|
||||
afi, safi, rn, bgp_path->name_pretty,
|
||||
path->flags);
|
||||
}
|
||||
if ((CHECK_FLAG(path->flags, BGP_PATH_VALID) ? 1 : 0)
|
||||
!= bnc_is_valid_nexthop) {
|
||||
if (CHECK_FLAG(path->flags, BGP_PATH_VALID)) {
|
||||
bgp_aggregate_decrement(bgp_path, p, path, afi,
|
||||
safi);
|
||||
bgp_path_info_unset_flag(rn, path,
|
||||
BGP_PATH_VALID);
|
||||
} else {
|
||||
bgp_path_info_set_flag(rn, path,
|
||||
BGP_PATH_VALID);
|
||||
bgp_aggregate_increment(bgp_path, p, path, afi,
|
||||
safi);
|
||||
}
|
||||
}
|
||||
|
||||
/* Copy the metric to the path. Will be used for bestpath
|
||||
* computation */
|
||||
@ -801,13 +788,33 @@ static void evaluate_paths(struct bgp_nexthop_cache *bnc)
|
||||
|| CHECK_FLAG(bnc->change_flags, BGP_NEXTHOP_CHANGED))
|
||||
SET_FLAG(path->flags, BGP_PATH_IGP_CHANGED);
|
||||
|
||||
if (safi == SAFI_EVPN && bgp_evpn_is_prefix_nht_supported(p)) {
|
||||
if (CHECK_FLAG(path->flags, BGP_PATH_VALID))
|
||||
bgp_evpn_import_route(bgp_path, afi, safi, p,
|
||||
path);
|
||||
else
|
||||
bgp_evpn_unimport_route(bgp_path, afi, safi, p,
|
||||
path);
|
||||
path_valid = !!CHECK_FLAG(path->flags, BGP_PATH_VALID);
|
||||
if (path_valid != bnc_is_valid_nexthop) {
|
||||
if (path_valid) {
|
||||
/* No longer valid, clear flag; also for EVPN
|
||||
* routes, unimport from VRFs if needed.
|
||||
*/
|
||||
bgp_aggregate_decrement(bgp_path, p, path, afi,
|
||||
safi);
|
||||
bgp_path_info_unset_flag(rn, path,
|
||||
BGP_PATH_VALID);
|
||||
if (safi == SAFI_EVPN &&
|
||||
bgp_evpn_is_prefix_nht_supported(&rn->p))
|
||||
bgp_evpn_unimport_route(bgp_path,
|
||||
afi, safi, &rn->p, path);
|
||||
} else {
|
||||
/* Path becomes valid, set flag; also for EVPN
|
||||
* routes, import from VRFs if needed.
|
||||
*/
|
||||
bgp_path_info_set_flag(rn, path,
|
||||
BGP_PATH_VALID);
|
||||
bgp_aggregate_increment(bgp_path, p, path, afi,
|
||||
safi);
|
||||
if (safi == SAFI_EVPN &&
|
||||
bgp_evpn_is_prefix_nht_supported(&rn->p))
|
||||
bgp_evpn_import_route(bgp_path,
|
||||
afi, safi, &rn->p, path);
|
||||
}
|
||||
}
|
||||
|
||||
bgp_process(bgp_path, rn, afi, safi);
|
||||
|
Loading…
Reference in New Issue
Block a user