]> git.puffer.fish Git - matthieu/frr.git/commitdiff
BGP doesn't count a route with an unreachable nexthop in PfxRcd
authorDonald Sharp <sharpd@cumulusnetworks.com>
Wed, 20 May 2015 00:40:38 +0000 (17:40 -0700)
committerDonald Sharp <sharpd@cumulusnetworks.com>
Wed, 20 May 2015 00:40:38 +0000 (17:40 -0700)
Signed-off-by: Daniel Walton <dwalton@cumulusnetworks.com>
bgpd/bgp_route.c
bgpd/bgp_route.h

index 7a911c1812a6186aaff377f115b94cf5a405dd1b..ce15125edef9110ed879c6e96b8fd66d0bcced36 100644 (file)
@@ -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);
index b8d2ed7c73b3291ef7e2a63057e6e890ded7630c..23337961ecbaee528b9d02811d55d9da1e925dbe 100644 (file)
@@ -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)