bgpd: Set last reset reason to admin shutdown if it was manually

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 c25c7e929d)
This commit is contained in:
Donatas Abraitis 2024-06-19 14:09:00 +03:00 committed by Mergify
parent de0f0bd307
commit e56a5271ee

View File

@ -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);