mirror of
https://git.proxmox.com/git/mirror_frr
synced 2025-07-25 07:06:50 +00:00
Merge pull request #16470 from opensourcerouting/fix/keep_last_reset_reasons
bgpd: Keep the last reset reason before we reset the peer
This commit is contained in:
commit
4e7f4d0d36
@ -602,6 +602,7 @@ const char *const peer_down_str[] = {
|
||||
"Socket Error",
|
||||
"Admin. shutdown (RTT)",
|
||||
"Suppress Fib Turned On or Off",
|
||||
"Password config change",
|
||||
};
|
||||
|
||||
static void bgp_graceful_restart_timer_off(struct peer_connection *connection,
|
||||
@ -2739,14 +2740,15 @@ static void bgp_gr_update_mode_of_all_peers(struct bgp *bgp,
|
||||
peer, peer->peer_gr_new_status_flag,
|
||||
peer->flags);
|
||||
|
||||
peer->last_reset = PEER_DOWN_CAPABILITY_CHANGE;
|
||||
|
||||
/* Reset session to match with behavior for other peer
|
||||
* configs that require the session to be re-setup.
|
||||
*/
|
||||
if (BGP_IS_VALID_STATE_FOR_NOTIF(peer->connection->status)) {
|
||||
peer->last_reset = PEER_DOWN_CAPABILITY_CHANGE;
|
||||
if (BGP_IS_VALID_STATE_FOR_NOTIF(peer->connection->status))
|
||||
bgp_notify_send(peer->connection, BGP_NOTIFY_CEASE,
|
||||
BGP_NOTIFY_CEASE_CONFIG_CHANGE);
|
||||
} else
|
||||
else
|
||||
bgp_session_reset(peer);
|
||||
}
|
||||
}
|
||||
@ -2967,14 +2969,15 @@ unsigned int bgp_peer_gr_action(struct peer *peer, enum peer_mode old_state,
|
||||
bgp_peer_move_to_gr_mode(peer, new_state);
|
||||
|
||||
if (session_reset) {
|
||||
peer->last_reset = PEER_DOWN_CAPABILITY_CHANGE;
|
||||
|
||||
/* Reset session to match with behavior for other peer
|
||||
* configs that require the session to be re-setup.
|
||||
*/
|
||||
if (BGP_IS_VALID_STATE_FOR_NOTIF(peer->connection->status)) {
|
||||
peer->last_reset = PEER_DOWN_CAPABILITY_CHANGE;
|
||||
if (BGP_IS_VALID_STATE_FOR_NOTIF(peer->connection->status))
|
||||
bgp_notify_send(peer->connection, BGP_NOTIFY_CEASE,
|
||||
BGP_NOTIFY_CEASE_CONFIG_CHANGE);
|
||||
} else
|
||||
else
|
||||
bgp_session_reset(peer);
|
||||
}
|
||||
|
||||
|
@ -2928,11 +2928,10 @@ DEFUN(bgp_reject_as_sets, bgp_reject_as_sets_cmd,
|
||||
* with aspath containing AS_SET or AS_CONFED_SET.
|
||||
*/
|
||||
for (ALL_LIST_ELEMENTS(bgp->peer, node, nnode, peer)) {
|
||||
if (BGP_IS_VALID_STATE_FOR_NOTIF(peer->connection->status)) {
|
||||
peer->last_reset = PEER_DOWN_AS_SETS_REJECT;
|
||||
peer->last_reset = PEER_DOWN_AS_SETS_REJECT;
|
||||
if (BGP_IS_VALID_STATE_FOR_NOTIF(peer->connection->status))
|
||||
bgp_notify_send(peer->connection, BGP_NOTIFY_CEASE,
|
||||
BGP_NOTIFY_CEASE_CONFIG_CHANGE);
|
||||
}
|
||||
}
|
||||
|
||||
return CMD_SUCCESS;
|
||||
@ -2954,11 +2953,10 @@ DEFUN(no_bgp_reject_as_sets, no_bgp_reject_as_sets_cmd,
|
||||
* with aspath containing AS_SET or AS_CONFED_SET.
|
||||
*/
|
||||
for (ALL_LIST_ELEMENTS(bgp->peer, node, nnode, peer)) {
|
||||
if (BGP_IS_VALID_STATE_FOR_NOTIF(peer->connection->status)) {
|
||||
peer->last_reset = PEER_DOWN_AS_SETS_REJECT;
|
||||
peer->last_reset = PEER_DOWN_AS_SETS_REJECT;
|
||||
if (BGP_IS_VALID_STATE_FOR_NOTIF(peer->connection->status))
|
||||
bgp_notify_send(peer->connection, BGP_NOTIFY_CEASE,
|
||||
BGP_NOTIFY_CEASE_CONFIG_CHANGE);
|
||||
}
|
||||
}
|
||||
|
||||
return CMD_SUCCESS;
|
||||
@ -5107,12 +5105,13 @@ static int peer_conf_interface_get(struct vty *vty, const char *conf_if,
|
||||
else
|
||||
peer_flag_unset(peer, PEER_FLAG_IFPEER_V6ONLY);
|
||||
|
||||
peer->last_reset = PEER_DOWN_V6ONLY_CHANGE;
|
||||
|
||||
/* v6only flag changed. Reset bgp seesion */
|
||||
if (BGP_IS_VALID_STATE_FOR_NOTIF(peer->connection->status)) {
|
||||
peer->last_reset = PEER_DOWN_V6ONLY_CHANGE;
|
||||
if (BGP_IS_VALID_STATE_FOR_NOTIF(peer->connection->status))
|
||||
bgp_notify_send(peer->connection, BGP_NOTIFY_CEASE,
|
||||
BGP_NOTIFY_CEASE_CONFIG_CHANGE);
|
||||
} else
|
||||
else
|
||||
bgp_session_reset(peer);
|
||||
}
|
||||
|
||||
|
123
bgpd/bgpd.c
123
bgpd/bgpd.c
@ -306,11 +306,11 @@ static int bgp_router_id_set(struct bgp *bgp, const struct in_addr *id,
|
||||
for (ALL_LIST_ELEMENTS(bgp->peer, node, nnode, peer)) {
|
||||
IPV4_ADDR_COPY(&peer->local_id, id);
|
||||
|
||||
if (BGP_IS_VALID_STATE_FOR_NOTIF(peer->connection->status)) {
|
||||
peer->last_reset = PEER_DOWN_RID_CHANGE;
|
||||
peer->last_reset = PEER_DOWN_RID_CHANGE;
|
||||
|
||||
if (BGP_IS_VALID_STATE_FOR_NOTIF(peer->connection->status))
|
||||
bgp_notify_send(peer->connection, BGP_NOTIFY_CEASE,
|
||||
BGP_NOTIFY_CEASE_CONFIG_CHANGE);
|
||||
}
|
||||
}
|
||||
|
||||
/* EVPN uses router id in RD, update them */
|
||||
@ -440,11 +440,12 @@ void bm_wait_for_fib_set(bool set)
|
||||
*/
|
||||
for (ALL_LIST_ELEMENTS_RO(bm->bgp, next, bgp)) {
|
||||
for (ALL_LIST_ELEMENTS_RO(bgp->peer, node, peer)) {
|
||||
peer->last_reset = PEER_DOWN_SUPPRESS_FIB_PENDING;
|
||||
|
||||
if (!BGP_IS_VALID_STATE_FOR_NOTIF(
|
||||
peer->connection->status))
|
||||
continue;
|
||||
|
||||
peer->last_reset = PEER_DOWN_SUPPRESS_FIB_PENDING;
|
||||
bgp_notify_send(peer->connection, BGP_NOTIFY_CEASE,
|
||||
BGP_NOTIFY_CEASE_CONFIG_CHANGE);
|
||||
}
|
||||
@ -496,10 +497,11 @@ void bgp_suppress_fib_pending_set(struct bgp *bgp, bool set)
|
||||
* let's just start over
|
||||
*/
|
||||
for (ALL_LIST_ELEMENTS_RO(bgp->peer, node, peer)) {
|
||||
peer->last_reset = PEER_DOWN_SUPPRESS_FIB_PENDING;
|
||||
|
||||
if (!BGP_IS_VALID_STATE_FOR_NOTIF(peer->connection->status))
|
||||
continue;
|
||||
|
||||
peer->last_reset = PEER_DOWN_SUPPRESS_FIB_PENDING;
|
||||
bgp_notify_send(peer->connection, BGP_NOTIFY_CEASE,
|
||||
BGP_NOTIFY_CEASE_CONFIG_CHANGE);
|
||||
}
|
||||
@ -523,11 +525,11 @@ void bgp_cluster_id_set(struct bgp *bgp, struct in_addr *cluster_id)
|
||||
if (peer->sort != BGP_PEER_IBGP)
|
||||
continue;
|
||||
|
||||
if (BGP_IS_VALID_STATE_FOR_NOTIF(peer->connection->status)) {
|
||||
peer->last_reset = PEER_DOWN_CLID_CHANGE;
|
||||
peer->last_reset = PEER_DOWN_CLID_CHANGE;
|
||||
|
||||
if (BGP_IS_VALID_STATE_FOR_NOTIF(peer->connection->status))
|
||||
bgp_notify_send(peer->connection, BGP_NOTIFY_CEASE,
|
||||
BGP_NOTIFY_CEASE_CONFIG_CHANGE);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -547,11 +549,11 @@ void bgp_cluster_id_unset(struct bgp *bgp)
|
||||
if (peer->sort != BGP_PEER_IBGP)
|
||||
continue;
|
||||
|
||||
if (BGP_IS_VALID_STATE_FOR_NOTIF(peer->connection->status)) {
|
||||
peer->last_reset = PEER_DOWN_CLID_CHANGE;
|
||||
peer->last_reset = PEER_DOWN_CLID_CHANGE;
|
||||
|
||||
if (BGP_IS_VALID_STATE_FOR_NOTIF(peer->connection->status))
|
||||
bgp_notify_send(peer->connection, BGP_NOTIFY_CEASE,
|
||||
BGP_NOTIFY_CEASE_CONFIG_CHANGE);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -676,14 +678,12 @@ void bgp_confederation_id_unset(struct bgp *bgp)
|
||||
/* We're looking for peers who's AS is not local */
|
||||
if (peer_sort(peer) != BGP_PEER_IBGP) {
|
||||
peer->local_as = bgp->as;
|
||||
peer->last_reset = PEER_DOWN_CONFED_ID_CHANGE;
|
||||
if (BGP_IS_VALID_STATE_FOR_NOTIF(
|
||||
peer->connection->status)) {
|
||||
peer->last_reset = PEER_DOWN_CONFED_ID_CHANGE;
|
||||
peer->connection->status))
|
||||
bgp_notify_send(peer->connection,
|
||||
BGP_NOTIFY_CEASE,
|
||||
BGP_NOTIFY_CEASE_CONFIG_CHANGE);
|
||||
}
|
||||
|
||||
else
|
||||
bgp_session_reset_safe(peer, &nnode);
|
||||
}
|
||||
@ -2091,11 +2091,11 @@ void peer_as_change(struct peer *peer, as_t as, enum peer_asn_type as_type,
|
||||
|
||||
/* Stop peer. */
|
||||
if (!CHECK_FLAG(peer->sflags, PEER_STATUS_GROUP)) {
|
||||
if (BGP_IS_VALID_STATE_FOR_NOTIF(peer->connection->status)) {
|
||||
peer->last_reset = PEER_DOWN_REMOTE_AS_CHANGE;
|
||||
peer->last_reset = PEER_DOWN_REMOTE_AS_CHANGE;
|
||||
if (BGP_IS_VALID_STATE_FOR_NOTIF(peer->connection->status))
|
||||
bgp_notify_send(peer->connection, BGP_NOTIFY_CEASE,
|
||||
BGP_NOTIFY_CEASE_CONFIG_CHANGE);
|
||||
} else
|
||||
else
|
||||
bgp_session_reset(peer);
|
||||
}
|
||||
origtype = peer_sort_lookup(peer);
|
||||
@ -2446,6 +2446,8 @@ static int peer_activate_af(struct peer *peer, afi_t afi, safi_t safi)
|
||||
if (!active && peer_active(peer)) {
|
||||
bgp_timer_set(peer->connection);
|
||||
} else {
|
||||
peer->last_reset = PEER_DOWN_AF_ACTIVATE;
|
||||
|
||||
if (peer_established(peer->connection)) {
|
||||
if (CHECK_FLAG(peer->cap, PEER_CAP_DYNAMIC_RCV)) {
|
||||
peer->afc_adv[afi][safi] = 1;
|
||||
@ -2458,18 +2460,15 @@ static int peer_activate_af(struct peer *peer, afi_t afi, safi_t safi)
|
||||
false);
|
||||
}
|
||||
} else {
|
||||
peer->last_reset = PEER_DOWN_AF_ACTIVATE;
|
||||
bgp_notify_send(peer->connection,
|
||||
BGP_NOTIFY_CEASE,
|
||||
BGP_NOTIFY_CEASE_CONFIG_CHANGE);
|
||||
}
|
||||
}
|
||||
if (peer->connection->status == OpenSent ||
|
||||
peer->connection->status == OpenConfirm) {
|
||||
peer->last_reset = PEER_DOWN_AF_ACTIVATE;
|
||||
peer->connection->status == OpenConfirm)
|
||||
bgp_notify_send(peer->connection, BGP_NOTIFY_CEASE,
|
||||
BGP_NOTIFY_CEASE_CONFIG_CHANGE);
|
||||
}
|
||||
/*
|
||||
* If we are turning on a AFI/SAFI locally and we've
|
||||
* started bringing a peer up, we need to tell
|
||||
@ -2481,11 +2480,9 @@ static int peer_activate_af(struct peer *peer, afi_t afi, safi_t safi)
|
||||
*/
|
||||
other = peer->doppelganger;
|
||||
if (other && (other->connection->status == OpenSent ||
|
||||
other->connection->status == OpenConfirm)) {
|
||||
other->last_reset = PEER_DOWN_AF_ACTIVATE;
|
||||
other->connection->status == OpenConfirm))
|
||||
bgp_notify_send(other->connection, BGP_NOTIFY_CEASE,
|
||||
BGP_NOTIFY_CEASE_CONFIG_CHANGE);
|
||||
}
|
||||
}
|
||||
|
||||
return 0;
|
||||
@ -2579,6 +2576,8 @@ static bool non_peergroup_deactivate_af(struct peer *peer, afi_t afi,
|
||||
}
|
||||
|
||||
if (peer_established(peer->connection)) {
|
||||
peer->last_reset = PEER_DOWN_NEIGHBOR_DELETE;
|
||||
|
||||
if (CHECK_FLAG(peer->cap, PEER_CAP_DYNAMIC_RCV)) {
|
||||
peer->afc_adv[afi][safi] = 0;
|
||||
peer->afc_nego[afi][safi] = 0;
|
||||
@ -2590,13 +2589,11 @@ static bool non_peergroup_deactivate_af(struct peer *peer, afi_t afi,
|
||||
bgp_clear_route(peer, afi, safi);
|
||||
peer->pcount[afi][safi] = 0;
|
||||
} else {
|
||||
peer->last_reset = PEER_DOWN_NEIGHBOR_DELETE;
|
||||
bgp_notify_send(peer->connection,
|
||||
BGP_NOTIFY_CEASE,
|
||||
BGP_NOTIFY_CEASE_CONFIG_CHANGE);
|
||||
}
|
||||
} else {
|
||||
peer->last_reset = PEER_DOWN_NEIGHBOR_DELETE;
|
||||
bgp_notify_send(peer->connection, BGP_NOTIFY_CEASE,
|
||||
BGP_NOTIFY_CEASE_CONFIG_CHANGE);
|
||||
}
|
||||
@ -3346,13 +3343,13 @@ int peer_group_bind(struct bgp *bgp, union sockunion *su, struct peer *peer,
|
||||
|
||||
SET_FLAG(peer->flags, PEER_FLAG_CONFIG_NODE);
|
||||
|
||||
if (BGP_IS_VALID_STATE_FOR_NOTIF(peer->connection->status)) {
|
||||
peer->last_reset = PEER_DOWN_RMAP_BIND;
|
||||
peer->last_reset = PEER_DOWN_RMAP_BIND;
|
||||
|
||||
if (BGP_IS_VALID_STATE_FOR_NOTIF(peer->connection->status))
|
||||
bgp_notify_send(peer->connection, BGP_NOTIFY_CEASE,
|
||||
BGP_NOTIFY_CEASE_CONFIG_CHANGE);
|
||||
} else {
|
||||
else
|
||||
bgp_session_reset(peer);
|
||||
}
|
||||
}
|
||||
|
||||
/* Create a new peer. */
|
||||
@ -4790,6 +4787,13 @@ static int peer_flag_action_set(const struct peer_flag_action *action_list,
|
||||
|
||||
static void peer_flag_modify_action(struct peer *peer, uint64_t flag)
|
||||
{
|
||||
if (flag == PEER_FLAG_DYNAMIC_CAPABILITY)
|
||||
peer->last_reset = PEER_DOWN_CAPABILITY_CHANGE;
|
||||
else if (flag == PEER_FLAG_PASSIVE)
|
||||
peer->last_reset = PEER_DOWN_PASSIVE_CHANGE;
|
||||
else if (flag == PEER_FLAG_DISABLE_CONNECTED_CHECK)
|
||||
peer->last_reset = PEER_DOWN_MULTIHOP_CHANGE;
|
||||
|
||||
if (flag == PEER_FLAG_SHUTDOWN) {
|
||||
if (CHECK_FLAG(peer->flags, flag)) {
|
||||
if (CHECK_FLAG(peer->sflags, PEER_STATUS_NSF_WAIT))
|
||||
@ -4838,13 +4842,6 @@ static void peer_flag_modify_action(struct peer *peer, uint64_t flag)
|
||||
BGP_EVENT_ADD(peer->connection, BGP_Stop);
|
||||
}
|
||||
} else if (BGP_IS_VALID_STATE_FOR_NOTIF(peer->connection->status)) {
|
||||
if (flag == PEER_FLAG_DYNAMIC_CAPABILITY)
|
||||
peer->last_reset = PEER_DOWN_CAPABILITY_CHANGE;
|
||||
else if (flag == PEER_FLAG_PASSIVE)
|
||||
peer->last_reset = PEER_DOWN_PASSIVE_CHANGE;
|
||||
else if (flag == PEER_FLAG_DISABLE_CONNECTED_CHECK)
|
||||
peer->last_reset = PEER_DOWN_MULTIHOP_CHANGE;
|
||||
|
||||
bgp_notify_send(peer->connection, BGP_NOTIFY_CEASE,
|
||||
BGP_NOTIFY_CEASE_CONFIG_CHANGE);
|
||||
} else
|
||||
@ -5564,12 +5561,12 @@ int peer_update_source_if_set(struct peer *peer, const char *ifname)
|
||||
|
||||
/* Check if handling a regular peer. */
|
||||
if (!CHECK_FLAG(peer->sflags, PEER_STATUS_GROUP)) {
|
||||
peer->last_reset = PEER_DOWN_UPDATE_SOURCE_CHANGE;
|
||||
/* Send notification or reset peer depending on state. */
|
||||
if (BGP_IS_VALID_STATE_FOR_NOTIF(peer->connection->status)) {
|
||||
peer->last_reset = PEER_DOWN_UPDATE_SOURCE_CHANGE;
|
||||
if (BGP_IS_VALID_STATE_FOR_NOTIF(peer->connection->status))
|
||||
bgp_notify_send(peer->connection, BGP_NOTIFY_CEASE,
|
||||
BGP_NOTIFY_CEASE_CONFIG_CHANGE);
|
||||
} else
|
||||
else
|
||||
bgp_session_reset(peer);
|
||||
|
||||
/* Apply new source configuration to BFD session. */
|
||||
@ -5601,13 +5598,13 @@ int peer_update_source_if_set(struct peer *peer, const char *ifname)
|
||||
member->update_if = XSTRDUP(MTYPE_PEER_UPDATE_SOURCE, ifname);
|
||||
sockunion_free(member->update_source);
|
||||
member->update_source = NULL;
|
||||
member->last_reset = PEER_DOWN_UPDATE_SOURCE_CHANGE;
|
||||
|
||||
/* Send notification or reset peer depending on state. */
|
||||
if (BGP_IS_VALID_STATE_FOR_NOTIF(member->connection->status)) {
|
||||
member->last_reset = PEER_DOWN_UPDATE_SOURCE_CHANGE;
|
||||
if (BGP_IS_VALID_STATE_FOR_NOTIF(member->connection->status))
|
||||
bgp_notify_send(member->connection, BGP_NOTIFY_CEASE,
|
||||
BGP_NOTIFY_CEASE_CONFIG_CHANGE);
|
||||
} else
|
||||
else
|
||||
bgp_session_reset(member);
|
||||
|
||||
/* Apply new source configuration to BFD session. */
|
||||
@ -5635,12 +5632,12 @@ void peer_update_source_addr_set(struct peer *peer, const union sockunion *su)
|
||||
|
||||
/* Check if handling a regular peer. */
|
||||
if (!CHECK_FLAG(peer->sflags, PEER_STATUS_GROUP)) {
|
||||
peer->last_reset = PEER_DOWN_UPDATE_SOURCE_CHANGE;
|
||||
/* Send notification or reset peer depending on state. */
|
||||
if (BGP_IS_VALID_STATE_FOR_NOTIF(peer->connection->status)) {
|
||||
peer->last_reset = PEER_DOWN_UPDATE_SOURCE_CHANGE;
|
||||
if (BGP_IS_VALID_STATE_FOR_NOTIF(peer->connection->status))
|
||||
bgp_notify_send(peer->connection, BGP_NOTIFY_CEASE,
|
||||
BGP_NOTIFY_CEASE_CONFIG_CHANGE);
|
||||
} else
|
||||
else
|
||||
bgp_session_reset(peer);
|
||||
|
||||
/* Apply new source configuration to BFD session. */
|
||||
@ -5671,13 +5668,13 @@ void peer_update_source_addr_set(struct peer *peer, const union sockunion *su)
|
||||
SET_FLAG(member->flags, PEER_FLAG_UPDATE_SOURCE);
|
||||
member->update_source = sockunion_dup(su);
|
||||
XFREE(MTYPE_PEER_UPDATE_SOURCE, member->update_if);
|
||||
member->last_reset = PEER_DOWN_UPDATE_SOURCE_CHANGE;
|
||||
|
||||
/* Send notification or reset peer depending on state. */
|
||||
if (BGP_IS_VALID_STATE_FOR_NOTIF(member->connection->status)) {
|
||||
member->last_reset = PEER_DOWN_UPDATE_SOURCE_CHANGE;
|
||||
if (BGP_IS_VALID_STATE_FOR_NOTIF(member->connection->status))
|
||||
bgp_notify_send(member->connection, BGP_NOTIFY_CEASE,
|
||||
BGP_NOTIFY_CEASE_CONFIG_CHANGE);
|
||||
} else
|
||||
else
|
||||
bgp_session_reset(member);
|
||||
|
||||
/* Apply new source configuration to BFD session. */
|
||||
@ -5723,12 +5720,12 @@ void peer_update_source_unset(struct peer *peer)
|
||||
|
||||
/* Check if handling a regular peer. */
|
||||
if (!CHECK_FLAG(peer->sflags, PEER_STATUS_GROUP)) {
|
||||
peer->last_reset = PEER_DOWN_UPDATE_SOURCE_CHANGE;
|
||||
/* Send notification or reset peer depending on state. */
|
||||
if (BGP_IS_VALID_STATE_FOR_NOTIF(peer->connection->status)) {
|
||||
peer->last_reset = PEER_DOWN_UPDATE_SOURCE_CHANGE;
|
||||
if (BGP_IS_VALID_STATE_FOR_NOTIF(peer->connection->status))
|
||||
bgp_notify_send(peer->connection, BGP_NOTIFY_CEASE,
|
||||
BGP_NOTIFY_CEASE_CONFIG_CHANGE);
|
||||
} else
|
||||
else
|
||||
bgp_session_reset(peer);
|
||||
|
||||
/* Apply new source configuration to BFD session. */
|
||||
@ -5758,13 +5755,13 @@ void peer_update_source_unset(struct peer *peer)
|
||||
sockunion_free(member->update_source);
|
||||
member->update_source = NULL;
|
||||
XFREE(MTYPE_PEER_UPDATE_SOURCE, member->update_if);
|
||||
member->last_reset = PEER_DOWN_UPDATE_SOURCE_CHANGE;
|
||||
|
||||
/* Send notification or reset peer depending on state. */
|
||||
if (BGP_IS_VALID_STATE_FOR_NOTIF(member->connection->status)) {
|
||||
member->last_reset = PEER_DOWN_UPDATE_SOURCE_CHANGE;
|
||||
if (BGP_IS_VALID_STATE_FOR_NOTIF(member->connection->status))
|
||||
bgp_notify_send(member->connection, BGP_NOTIFY_CEASE,
|
||||
BGP_NOTIFY_CEASE_CONFIG_CHANGE);
|
||||
} else
|
||||
else
|
||||
bgp_session_reset(member);
|
||||
|
||||
/* Apply new source configuration to BFD session. */
|
||||
@ -6730,12 +6727,12 @@ int peer_local_as_unset(struct peer *peer)
|
||||
|
||||
/* Check if handling a regular peer. */
|
||||
if (!CHECK_FLAG(peer->sflags, PEER_STATUS_GROUP)) {
|
||||
peer->last_reset = PEER_DOWN_LOCAL_AS_CHANGE;
|
||||
/* Send notification or stop peer depending on state. */
|
||||
if (BGP_IS_VALID_STATE_FOR_NOTIF(peer->connection->status)) {
|
||||
peer->last_reset = PEER_DOWN_LOCAL_AS_CHANGE;
|
||||
if (BGP_IS_VALID_STATE_FOR_NOTIF(peer->connection->status))
|
||||
bgp_notify_send(peer->connection, BGP_NOTIFY_CEASE,
|
||||
BGP_NOTIFY_CEASE_CONFIG_CHANGE);
|
||||
} else
|
||||
else
|
||||
BGP_EVENT_ADD(peer->connection, BGP_Stop);
|
||||
|
||||
/* Skip peer-group mechanics for regular peers. */
|
||||
@ -6757,13 +6754,13 @@ int peer_local_as_unset(struct peer *peer)
|
||||
UNSET_FLAG(member->flags, PEER_FLAG_LOCAL_AS_REPLACE_AS);
|
||||
member->change_local_as = 0;
|
||||
XFREE(MTYPE_BGP_NAME, member->change_local_as_pretty);
|
||||
member->last_reset = PEER_DOWN_LOCAL_AS_CHANGE;
|
||||
|
||||
/* Send notification or stop peer depending on state. */
|
||||
if (BGP_IS_VALID_STATE_FOR_NOTIF(member->connection->status)) {
|
||||
member->last_reset = PEER_DOWN_LOCAL_AS_CHANGE;
|
||||
if (BGP_IS_VALID_STATE_FOR_NOTIF(member->connection->status))
|
||||
bgp_notify_send(member->connection, BGP_NOTIFY_CEASE,
|
||||
BGP_NOTIFY_CEASE_CONFIG_CHANGE);
|
||||
} else
|
||||
else
|
||||
bgp_session_reset(member);
|
||||
}
|
||||
|
||||
@ -6790,6 +6787,7 @@ int peer_password_set(struct peer *peer, const char *password)
|
||||
|
||||
/* Check if handling a regular peer. */
|
||||
if (!CHECK_FLAG(peer->sflags, PEER_STATUS_GROUP)) {
|
||||
peer->last_reset = PEER_DOWN_PASSWORD_CHANGE;
|
||||
/* Send notification or reset peer depending on state. */
|
||||
if (BGP_IS_VALID_STATE_FOR_NOTIF(peer->connection->status))
|
||||
bgp_notify_send(peer->connection, BGP_NOTIFY_CEASE,
|
||||
@ -6827,6 +6825,7 @@ int peer_password_set(struct peer *peer, const char *password)
|
||||
XFREE(MTYPE_PEER_PASSWORD, member->password);
|
||||
member->password = XSTRDUP(MTYPE_PEER_PASSWORD, password);
|
||||
|
||||
member->last_reset = PEER_DOWN_PASSWORD_CHANGE;
|
||||
/* Send notification or reset peer depending on state. */
|
||||
if (BGP_IS_VALID_STATE_FOR_NOTIF(member->connection->status))
|
||||
bgp_notify_send(member->connection, BGP_NOTIFY_CEASE,
|
||||
|
@ -1819,6 +1819,7 @@ struct peer {
|
||||
#define PEER_DOWN_SOCKET_ERROR 34U /* Some socket error happened */
|
||||
#define PEER_DOWN_RTT_SHUTDOWN 35U /* Automatically shutdown due to RTT */
|
||||
#define PEER_DOWN_SUPPRESS_FIB_PENDING 36U /* Suppress fib pending changed */
|
||||
#define PEER_DOWN_PASSWORD_CHANGE 37U /* neighbor password command */
|
||||
/*
|
||||
* Remember to update peer_down_str in bgp_fsm.c when you add
|
||||
* a new value to the last_reset reason
|
||||
|
Loading…
Reference in New Issue
Block a user