]> git.puffer.fish Git - mirror/frr.git/commitdiff
bgpd: Update failed reason to distinguish some NHT scenarios 5789/head
authorDonald Sharp <sharpd@cumulusnetworks.com>
Tue, 11 Feb 2020 00:25:52 +0000 (19:25 -0500)
committerDonald Sharp <sharpd@cumulusnetworks.com>
Tue, 11 Feb 2020 00:46:48 +0000 (19:46 -0500)
Current failed reasons for bgp when you have a peer that
is not online yet is `Waiting for NHT`, even if NHT has
succeeded.  Add some code to differentiate this.

eva# show bgp ipv4 uni summ failed
BGP router identifier 192.168.201.135, local AS number 3923 vrf-id 0
BGP table version 0
RIB entries 0, using 0 bytes of memory
Peers 2, using 43 KiB of memory
Neighbor        EstdCnt DropCnt ResetTime Reason
192.168.44.1          0       0    never  Waiting for NHT
192.168.201.139       0       0    never  Waiting for Open to Succeed
Total number of neighbors 2
eva#

eva# show bgp nexthop
Current BGP nexthop cache:
 192.168.44.1 invalid, peer 192.168.44.1
  Must be Connected
  Last update: Mon Feb 10 19:05:19 2020

 192.168.201.139 valid [IGP metric 0], #paths 0, peer 192.168.201.139

So 192.168.201.139 is a peer for a connected route that has not been
created on .139, while 44.1 nexthop tracking has not succeeded yet.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
bgpd/bgp_fsm.c
bgpd/bgp_nht.c
bgpd/bgpd.h

index ac8fe5e914774cafb40c497c323e14ae8fa7d1af..157013ed557defc97a573d12627cf39b5a8113e5 100644 (file)
@@ -576,7 +576,9 @@ const char *const peer_down_str[] = {"",
                               "Waiting for NHT",
                               "Waiting for Peer IPv6 LLA",
                               "Waiting for VRF to be initialized",
-                              "No AFI/SAFI activated for peer"};
+                              "No AFI/SAFI activated for peer",
+                              "AS Set config change",
+                              "Waiting for peer OPEN"};
 
 static int bgp_graceful_restart_timer_expire(struct thread *thread)
 {
index a50fc7d69726c61ecd9d31c5ba27c448238bc31a..e9496e47a9d60f80d923392e2bb7d3eecf64be99 100644 (file)
@@ -788,13 +788,22 @@ static void evaluate_paths(struct bgp_nexthop_cache *bnc)
                bgp_process(bgp_path, rn, afi, safi);
        }
 
-       if (peer && !CHECK_FLAG(bnc->flags, BGP_NEXTHOP_PEER_NOTIFIED)) {
-               if (BGP_DEBUG(nht, NHT))
-                       zlog_debug("%s: Updating peer (%s(%s)) status with NHT",
-                                  __FUNCTION__, peer->host,
-                                  peer->bgp->name_pretty);
-               bgp_fsm_event_update(peer, bgp_isvalid_nexthop(bnc));
-               SET_FLAG(bnc->flags, BGP_NEXTHOP_PEER_NOTIFIED);
+       if (peer) {
+               int valid_nexthops = bgp_isvalid_nexthop(bnc);
+
+               if (valid_nexthops)
+                       peer->last_reset = PEER_DOWN_WAITING_OPEN;
+               else
+                       peer->last_reset = PEER_DOWN_WAITING_NHT;
+
+               if (!CHECK_FLAG(bnc->flags, BGP_NEXTHOP_PEER_NOTIFIED)) {
+                       if (BGP_DEBUG(nht, NHT))
+                               zlog_debug("%s: Updating peer (%s(%s)) status with NHT",
+                                          __FUNCTION__, peer->host,
+                                          peer->bgp->name_pretty);
+                       bgp_fsm_event_update(peer, valid_nexthops);
+                       SET_FLAG(bnc->flags, BGP_NEXTHOP_PEER_NOTIFIED);
+               }
        }
 
        RESET_FLAG(bnc->change_flags);
index 7d3bd22a68e973ba93e7b59daaf200db3cada1ec..87ba39a04210955b676dbd20fa21766fca9f09d3 100644 (file)
@@ -1321,10 +1321,10 @@ struct peer {
 #define PEER_DOWN_REMOTE_AS_CHANGE       2 /* neighbor remote-as command */
 #define PEER_DOWN_LOCAL_AS_CHANGE        3 /* neighbor local-as command */
 #define PEER_DOWN_CLID_CHANGE            4 /* bgp cluster-id command */
-#define PEER_DOWN_CONFED_ID_CHANGE       5 /* bgp confederation identifier command */
+#define PEER_DOWN_CONFED_ID_CHANGE       5 /* bgp confederation id command */
 #define PEER_DOWN_CONFED_PEER_CHANGE     6 /* bgp confederation peer command */
-#define PEER_DOWN_RR_CLIENT_CHANGE       7 /* neighbor route-reflector-client command */
-#define PEER_DOWN_RS_CLIENT_CHANGE       8 /* neighbor route-server-client command */
+#define PEER_DOWN_RR_CLIENT_CHANGE       7 /* neighbor rr-client command */
+#define PEER_DOWN_RS_CLIENT_CHANGE       8 /* neighbor rs-client command */
 #define PEER_DOWN_UPDATE_SOURCE_CHANGE   9 /* neighbor update-source command */
 #define PEER_DOWN_AF_ACTIVATE           10 /* neighbor activate command */
 #define PEER_DOWN_USER_SHUTDOWN         11 /* neighbor shutdown command */
@@ -1348,6 +1348,12 @@ struct peer {
 #define PEER_DOWN_VRF_UNINIT            29 /* Associated VRF is not init yet */
 #define PEER_DOWN_NOAFI_ACTIVATED       30 /* No AFI/SAFI activated for peer */
 #define PEER_DOWN_AS_SETS_REJECT        31 /* Reject routes with AS_SET */
+#define PEER_DOWN_WAITING_OPEN          32 /* Waiting for open to succeed */
+       /*
+        * Remember to update peer_down_str in bgp_fsm.c when you add
+        * a new value to the last_reset reason
+        */
+
        size_t last_reset_cause_size;
        uint8_t last_reset_cause[BGP_MAX_PACKET_SIZE];