mirror of
https://git.proxmox.com/git/mirror_frr
synced 2025-07-27 10:04:18 +00:00
bgpd: fix route selection with AIGP
The nexthop metric should be added to AIGP when calculating the
bestpath in bgp_path_info_cmp().
Signed-off-by: Enke Chen <enchen@paloaltonetworks.com>
(cherry picked from commit 081422e8e7
)
This commit is contained in:
parent
42e33e677c
commit
0527820a18
@ -480,16 +480,6 @@ static bool bgp_attr_aigp_get_tlv_metric(uint8_t *pnt, int length,
|
||||
return false;
|
||||
}
|
||||
|
||||
static uint64_t bgp_aigp_metric_total(struct bgp_path_info *bpi)
|
||||
{
|
||||
uint64_t aigp = bgp_attr_get_aigp_metric(bpi->attr);
|
||||
|
||||
if (bpi->nexthop)
|
||||
return aigp + bpi->nexthop->metric;
|
||||
else
|
||||
return aigp;
|
||||
}
|
||||
|
||||
static void stream_put_bgp_aigp_tlv_metric(struct stream *s,
|
||||
struct bgp_path_info *bpi)
|
||||
{
|
||||
|
@ -598,6 +598,16 @@ static inline void bgp_attr_set_aigp_metric(struct attr *attr, uint64_t aigp)
|
||||
SET_FLAG(attr->flag, ATTR_FLAG_BIT(BGP_ATTR_AIGP));
|
||||
}
|
||||
|
||||
static inline uint64_t bgp_aigp_metric_total(struct bgp_path_info *bpi)
|
||||
{
|
||||
uint64_t aigp = bgp_attr_get_aigp_metric(bpi->attr);
|
||||
|
||||
if (bpi->nexthop)
|
||||
return aigp + bpi->nexthop->metric;
|
||||
else
|
||||
return aigp;
|
||||
}
|
||||
|
||||
static inline struct cluster_list *bgp_attr_get_cluster(const struct attr *attr)
|
||||
{
|
||||
return attr->cluster1;
|
||||
|
@ -1068,8 +1068,8 @@ int bgp_path_info_cmp(struct bgp *bgp, struct bgp_path_info *new,
|
||||
if (CHECK_FLAG(newattr->flag, ATTR_FLAG_BIT(BGP_ATTR_AIGP)) &&
|
||||
CHECK_FLAG(existattr->flag, ATTR_FLAG_BIT(BGP_ATTR_AIGP)) &&
|
||||
CHECK_FLAG(bgp->flags, BGP_FLAG_COMPARE_AIGP)) {
|
||||
uint64_t new_aigp = bgp_attr_get_aigp_metric(newattr);
|
||||
uint64_t exist_aigp = bgp_attr_get_aigp_metric(existattr);
|
||||
uint64_t new_aigp = bgp_aigp_metric_total(new);
|
||||
uint64_t exist_aigp = bgp_aigp_metric_total(exist);
|
||||
|
||||
if (new_aigp < exist_aigp) {
|
||||
*reason = bgp_path_selection_aigp;
|
||||
|
Loading…
Reference in New Issue
Block a user