diff options
| author | Donatas Abraitis <donatas@opensourcerouting.org> | 2024-06-19 14:09:00 +0300 | 
|---|---|---|
| committer | Donatas Abraitis <donatas@opensourcerouting.org> | 2024-06-19 14:09:00 +0300 | 
| commit | c25c7e929d550c2faca3af74a29593b8c0b75db3 (patch) | |
| tree | 2785b943de3807fc4182fd89c68bfb8f8b96dc34 /bgpd/bgpd.c | |
| parent | 64112ed9e65eacd9a706d59fd1345ae64ee6c4a4 (diff) | |
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>
Diffstat (limited to 'bgpd/bgpd.c')
| -rw-r--r-- | bgpd/bgpd.c | 14 | 
1 files changed, 13 insertions, 1 deletions
diff --git a/bgpd/bgpd.c b/bgpd/bgpd.c index 869d2b4552..0ad9716633 100644 --- a/bgpd/bgpd.c +++ b/bgpd/bgpd.c @@ -4829,6 +4829,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; @@ -4883,8 +4885,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. */ @@ -4956,6 +4960,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); @@ -4991,6 +4999,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);  | 
