mirror of
https://git.proxmox.com/git/mirror_frr
synced 2025-08-08 05:00:23 +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
|
* nexthops with labels
|
||||||
*/
|
*/
|
||||||
|
|
||||||
int bnc_is_valid_nexthop = 0;
|
bool bnc_is_valid_nexthop = false;
|
||||||
|
bool path_valid = false;
|
||||||
|
|
||||||
if (safi == SAFI_UNICAST &&
|
if (safi == SAFI_UNICAST &&
|
||||||
path->sub_type == BGP_ROUTE_IMPORTED &&
|
path->sub_type == BGP_ROUTE_IMPORTED &&
|
||||||
@ -744,7 +745,7 @@ static void evaluate_paths(struct bgp_nexthop_cache *bnc)
|
|||||||
path->extra->num_labels) {
|
path->extra->num_labels) {
|
||||||
|
|
||||||
bnc_is_valid_nexthop =
|
bnc_is_valid_nexthop =
|
||||||
bgp_isvalid_labeled_nexthop(bnc) ? 1 : 0;
|
bgp_isvalid_labeled_nexthop(bnc) ? true : false;
|
||||||
} else {
|
} else {
|
||||||
if (bgp_update_martian_nexthop(
|
if (bgp_update_martian_nexthop(
|
||||||
bnc->bgp, afi, safi, path->type,
|
bnc->bgp, afi, safi, path->type,
|
||||||
@ -755,7 +756,7 @@ static void evaluate_paths(struct bgp_nexthop_cache *bnc)
|
|||||||
__func__, rn, bgp_path->name);
|
__func__, rn, bgp_path->name);
|
||||||
} else
|
} else
|
||||||
bnc_is_valid_nexthop =
|
bnc_is_valid_nexthop =
|
||||||
bgp_isvalid_nexthop(bnc) ? 1 : 0;
|
bgp_isvalid_nexthop(bnc) ? true : false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (BGP_DEBUG(nht, NHT)) {
|
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,
|
afi, safi, rn, bgp_path->name_pretty,
|
||||||
path->flags);
|
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
|
/* Copy the metric to the path. Will be used for bestpath
|
||||||
* computation */
|
* computation */
|
||||||
@ -801,13 +788,33 @@ static void evaluate_paths(struct bgp_nexthop_cache *bnc)
|
|||||||
|| CHECK_FLAG(bnc->change_flags, BGP_NEXTHOP_CHANGED))
|
|| CHECK_FLAG(bnc->change_flags, BGP_NEXTHOP_CHANGED))
|
||||||
SET_FLAG(path->flags, BGP_PATH_IGP_CHANGED);
|
SET_FLAG(path->flags, BGP_PATH_IGP_CHANGED);
|
||||||
|
|
||||||
if (safi == SAFI_EVPN && bgp_evpn_is_prefix_nht_supported(p)) {
|
path_valid = !!CHECK_FLAG(path->flags, BGP_PATH_VALID);
|
||||||
if (CHECK_FLAG(path->flags, BGP_PATH_VALID))
|
if (path_valid != bnc_is_valid_nexthop) {
|
||||||
bgp_evpn_import_route(bgp_path, afi, safi, p,
|
if (path_valid) {
|
||||||
path);
|
/* No longer valid, clear flag; also for EVPN
|
||||||
else
|
* routes, unimport from VRFs if needed.
|
||||||
bgp_evpn_unimport_route(bgp_path, afi, safi, p,
|
*/
|
||||||
path);
|
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);
|
bgp_process(bgp_path, rn, afi, safi);
|
||||||
|
Loading…
Reference in New Issue
Block a user