diff options
| author | Donatas Abraitis <donatas@opensourcerouting.org> | 2024-06-25 13:46:49 +0300 | 
|---|---|---|
| committer | GitHub <noreply@github.com> | 2024-06-25 13:46:49 +0300 | 
| commit | d1b69e0a97cbb85f0ec2f145cd6c925ba154ea8b (patch) | |
| tree | 840a87308d8ff5a9e9f95035e0c2659787b2b6cf /bgpd | |
| parent | 2187f5496780baeeeab232d9e94eb3ddfeb724e1 (diff) | |
| parent | 294caa514078456441763daa6e9c47855b880c8a (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.c | 5 | ||||
| -rw-r--r-- | bgpd/bgpd.c | 14 | 
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);  | 
