]> git.puffer.fish Git - matthieu/frr.git/commitdiff
bgpd: Set last reset reason to admin shutdown if it was manually
authorDonatas Abraitis <donatas@opensourcerouting.org>
Wed, 19 Jun 2024 11:09:00 +0000 (14:09 +0300)
committerMergify <37929162+mergify[bot]@users.noreply.github.com>
Mon, 24 Jun 2024 19:41:46 +0000 (19:41 +0000)
Before this patch, we always printed the last reason "Waiting for OPEN", but
if it's a manual shutdown, then we technically are not waiting for OPEN.

Signed-off-by: Donatas Abraitis <donatas@opensourcerouting.org>
(cherry picked from commit c25c7e929d550c2faca3af74a29593b8c0b75db3)

bgpd/bgpd.c

index d6d874be219dddcb478bc803f3ac13c7e2076dd8..e7ff73e6e2caf309fc116877541c6899e0d6b70f 100644 (file)
@@ -4758,6 +4758,8 @@ void bgp_shutdown_enable(struct bgp *bgp, const char *msg)
 
        /* iterate through peers of BGP instance */
        for (ALL_LIST_ELEMENTS_RO(bgp->peer, node, peer)) {
+               peer->last_reset = PEER_DOWN_USER_SHUTDOWN;
+
                /* continue, if peer is already in administrative shutdown. */
                if (CHECK_FLAG(peer->flags, PEER_FLAG_SHUTDOWN))
                        continue;
@@ -4812,8 +4814,10 @@ void bgp_shutdown_disable(struct bgp *bgp)
        /* clear the BGP instances shutdown flag */
        UNSET_FLAG(bgp->flags, BGP_FLAG_SHUTDOWN);
 
-       for (ALL_LIST_ELEMENTS_RO(bgp->peer, node, peer))
+       for (ALL_LIST_ELEMENTS_RO(bgp->peer, node, peer)) {
                bgp_timer_set(peer->connection);
+               peer->last_reset = PEER_DOWN_WAITING_OPEN;
+       }
 }
 
 /* Change specified peer flag. */
@@ -4885,6 +4889,10 @@ static int peer_flag_modify(struct peer *peer, uint64_t flag, int set)
                                bgp_zebra_terminate_radv(peer->bgp, peer);
                }
 
+               if (flag == PEER_FLAG_SHUTDOWN)
+                       peer->last_reset = set ? PEER_DOWN_USER_SHUTDOWN
+                                              : PEER_DOWN_WAITING_OPEN;
+
                /* Execute flag action on peer. */
                if (action.type == peer_change_reset)
                        peer_flag_modify_action(peer, flag);
@@ -4920,6 +4928,10 @@ static int peer_flag_modify(struct peer *peer, uint64_t flag, int set)
                        set ? bgp_zebra_initiate_radv(member->bgp, member)
                            : bgp_zebra_terminate_radv(member->bgp, member);
 
+               if (flag == PEER_FLAG_SHUTDOWN)
+                       member->last_reset = set ? PEER_DOWN_USER_SHUTDOWN
+                                                : PEER_DOWN_WAITING_OPEN;
+
                /* Execute flag action on peer-group member. */
                if (action.type == peer_change_reset)
                        peer_flag_modify_action(member, flag);