From 80e0ad24f9e458d10f71326d73ce67b1f2b5d3ed Mon Sep 17 00:00:00 2001 From: Donald Sharp Date: Tue, 19 May 2015 17:40:38 -0700 Subject: [PATCH] BGP doesn't count a route with an unreachable nexthop in PfxRcd Signed-off-by: Daniel Walton --- bgpd/bgp_route.c | 12 ++++++------ bgpd/bgp_route.h | 4 ++++ 2 files changed, 10 insertions(+), 6 deletions(-) diff --git a/bgpd/bgp_route.c b/bgpd/bgp_route.c index 7a911c1812..ce15125ede 100644 --- a/bgpd/bgp_route.c +++ b/bgpd/bgp_route.c @@ -248,7 +248,7 @@ bgp_pcount_adjust (struct bgp_node *rn, struct bgp_info *ri) || ri->peer == ri->peer->bgp->peer_self) return; - if (BGP_INFO_HOLDDOWN (ri) + if (!BGP_INFO_COUNTABLE (ri) && CHECK_FLAG (ri->flags, BGP_INFO_COUNTED)) { @@ -265,7 +265,7 @@ bgp_pcount_adjust (struct bgp_node *rn, struct bgp_info *ri) zlog_warn ("%s: Please report to Quagga bugzilla", __func__); } } - else if (!BGP_INFO_HOLDDOWN (ri) + else if (BGP_INFO_COUNTABLE (ri) && !CHECK_FLAG (ri->flags, BGP_INFO_COUNTED)) { SET_FLAG (ri->flags, BGP_INFO_COUNTED); @@ -282,8 +282,8 @@ bgp_info_set_flag (struct bgp_node *rn, struct bgp_info *ri, u_int32_t flag) { SET_FLAG (ri->flags, flag); - /* early bath if we know it's not a flag that changes useability state */ - if (!CHECK_FLAG (flag, BGP_INFO_VALID|BGP_INFO_UNUSEABLE)) + /* early bath if we know it's not a flag that changes countability state */ + if (!CHECK_FLAG (flag, BGP_INFO_VALID|BGP_INFO_HISTORY|BGP_INFO_REMOVED)) return; bgp_pcount_adjust (rn, ri); @@ -294,8 +294,8 @@ bgp_info_unset_flag (struct bgp_node *rn, struct bgp_info *ri, u_int32_t flag) { UNSET_FLAG (ri->flags, flag); - /* early bath if we know it's not a flag that changes useability state */ - if (!CHECK_FLAG (flag, BGP_INFO_VALID|BGP_INFO_UNUSEABLE)) + /* early bath if we know it's not a flag that changes countability state */ + if (!CHECK_FLAG (flag, BGP_INFO_VALID|BGP_INFO_HISTORY|BGP_INFO_REMOVED)) return; bgp_pcount_adjust (rn, ri); diff --git a/bgpd/bgp_route.h b/bgpd/bgp_route.h index b8d2ed7c73..23337961ec 100644 --- a/bgpd/bgp_route.h +++ b/bgpd/bgp_route.h @@ -136,6 +136,10 @@ struct bgp_static u_char tag[3]; }; +#define BGP_INFO_COUNTABLE(BI) \ + (! CHECK_FLAG ((BI)->flags, BGP_INFO_HISTORY) \ + && ! CHECK_FLAG ((BI)->flags, BGP_INFO_REMOVED)) + /* Flags which indicate a route is unuseable in some form */ #define BGP_INFO_UNUSEABLE \ (BGP_INFO_HISTORY|BGP_INFO_DAMPED|BGP_INFO_REMOVED) -- 2.39.5