summaryrefslogtreecommitdiff
path: root/bgpd/bgp_attr.h
diff options
context:
space:
mode:
authorEnke Chen <enchen@paloaltonetworks.com>2025-01-09 12:02:02 -0800
committerEnke Chen <enchen@paloaltonetworks.com>2025-01-09 12:02:02 -0800
commitb89e66a3bcd5644278f34ec5899b071066e102a1 (patch)
treec1dd9d539fadce0f599c623ebd455d9cfade4a59 /bgpd/bgp_attr.h
parent3d7dbcf6c6fa18fc8b38debd8be4841a1ca867c5 (diff)
bgpd: use igpmetric in bgp_aigp_metric_total()
Use igpmetric from bgp_path_info in bgp_igp_metric_total() to be consistent with all other cases, e.g., as in bgp_path_info_cmp(). Signed-off-by: Enke Chen <enchen@paloaltonetworks.com>
Diffstat (limited to 'bgpd/bgp_attr.h')
-rw-r--r--bgpd/bgp_attr.h7
1 files changed, 4 insertions, 3 deletions
diff --git a/bgpd/bgp_attr.h b/bgpd/bgp_attr.h
index c5532f4005..d9fc833112 100644
--- a/bgpd/bgp_attr.h
+++ b/bgpd/bgp_attr.h
@@ -604,10 +604,11 @@ 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
+ /* Don't increment if it's locally sourced */
+ if (bpi->peer == bpi->peer->bgp->peer_self)
return aigp;
+
+ return bpi->extra ? (aigp + bpi->extra->igpmetric) : aigp;
}
static inline void bgp_attr_set_med(struct attr *attr, uint32_t med)