summaryrefslogtreecommitdiff
path: root/bgpd
diff options
context:
space:
mode:
authorDonatas Abraitis <donatas@opensourcerouting.org>2024-06-25 13:46:49 +0300
committerGitHub <noreply@github.com>2024-06-25 13:46:49 +0300
commitd1b69e0a97cbb85f0ec2f145cd6c925ba154ea8b (patch)
tree840a87308d8ff5a9e9f95035e0c2659787b2b6cf /bgpd
parent2187f5496780baeeeab232d9e94eb3ddfeb724e1 (diff)
parent294caa514078456441763daa6e9c47855b880c8a (diff)
Merge pull request #16276 from FRRouting/mergify/bp/stable/9.1/pr-16242
bgpd: Set last reset reason to admin shutdown if it was manually (backport #16242)
Diffstat (limited to 'bgpd')
-rw-r--r--bgpd/bgp_vty.c5
-rw-r--r--bgpd/bgpd.c14
2 files changed, 15 insertions, 4 deletions
diff --git a/bgpd/bgp_vty.c b/bgpd/bgp_vty.c
index ddef332d60..31d1704113 100644
--- a/bgpd/bgp_vty.c
+++ b/bgpd/bgp_vty.c
@@ -11246,10 +11246,9 @@ static void bgp_show_peer_reset(struct vty * vty, struct peer *peer,
BGP_NOTIFY_CEASE_HARD_RESET)
: "");
} else {
- vty_out(vty, " %s (%s)\n",
+ vty_out(vty, " %s (%s)\n",
peer_down_str[(int)peer->last_reset],
- peer->soft_version ? peer->soft_version
- : "n/a");
+ peer->soft_version ? peer->soft_version : "n/a");
}
}
}
diff --git a/bgpd/bgpd.c b/bgpd/bgpd.c
index edb20aca58..492092bac4 100644
--- a/bgpd/bgpd.c
+++ b/bgpd/bgpd.c
@@ -4725,6 +4725,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;
@@ -4779,8 +4781,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. */
@@ -4852,6 +4856,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);
@@ -4887,6 +4895,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);