mirror of
https://git.proxmox.com/git/mirror_frr
synced 2025-07-27 13:06:51 +00:00
Merge pull request #14982 from donaldsharp/bgp_suppress_fib_clear_peers
bgpd: Make `suppress-fib-pending` clear peering
This commit is contained in:
commit
c45a9dabe2
@ -562,7 +562,8 @@ void bgp_delayopen_timer(struct event *thread)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* BGP Peer Down Cause */
|
/* BGP Peer Down Cause */
|
||||||
const char *const peer_down_str[] = {"",
|
const char *const peer_down_str[] = {
|
||||||
|
"",
|
||||||
"Router ID changed",
|
"Router ID changed",
|
||||||
"Remote AS changed",
|
"Remote AS changed",
|
||||||
"Local AS change",
|
"Local AS change",
|
||||||
@ -597,7 +598,9 @@ const char *const peer_down_str[] = {"",
|
|||||||
"Waiting for peer OPEN",
|
"Waiting for peer OPEN",
|
||||||
"Reached received prefix count",
|
"Reached received prefix count",
|
||||||
"Socket Error",
|
"Socket Error",
|
||||||
"Admin. shutdown (RTT)"};
|
"Admin. shutdown (RTT)",
|
||||||
|
"Suppress Fib Turned On or Off",
|
||||||
|
};
|
||||||
|
|
||||||
static void bgp_graceful_restart_timer_off(struct peer_connection *connection,
|
static void bgp_graceful_restart_timer_off(struct peer_connection *connection,
|
||||||
struct peer *peer)
|
struct peer *peer)
|
||||||
|
38
bgpd/bgpd.c
38
bgpd/bgpd.c
@ -410,6 +410,9 @@ void bgp_router_id_static_set(struct bgp *bgp, struct in_addr id)
|
|||||||
void bm_wait_for_fib_set(bool set)
|
void bm_wait_for_fib_set(bool set)
|
||||||
{
|
{
|
||||||
bool send_msg = false;
|
bool send_msg = false;
|
||||||
|
struct bgp *bgp;
|
||||||
|
struct peer *peer;
|
||||||
|
struct listnode *next, *node;
|
||||||
|
|
||||||
if (bm->wait_for_fib == set)
|
if (bm->wait_for_fib == set)
|
||||||
return;
|
return;
|
||||||
@ -428,12 +431,32 @@ void bm_wait_for_fib_set(bool set)
|
|||||||
if (send_msg && zclient)
|
if (send_msg && zclient)
|
||||||
zebra_route_notify_send(ZEBRA_ROUTE_NOTIFY_REQUEST,
|
zebra_route_notify_send(ZEBRA_ROUTE_NOTIFY_REQUEST,
|
||||||
zclient, set);
|
zclient, set);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* If this is configed at a time when peers are already set
|
||||||
|
* FRR needs to reset the connection(s) as that some installs
|
||||||
|
* may have already happened in some shape fashion or form
|
||||||
|
* let's just start over
|
||||||
|
*/
|
||||||
|
for (ALL_LIST_ELEMENTS_RO(bm->bgp, next, bgp)) {
|
||||||
|
for (ALL_LIST_ELEMENTS_RO(bgp->peer, node, peer)) {
|
||||||
|
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);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Set the suppress fib pending for the bgp configuration */
|
/* Set the suppress fib pending for the bgp configuration */
|
||||||
void bgp_suppress_fib_pending_set(struct bgp *bgp, bool set)
|
void bgp_suppress_fib_pending_set(struct bgp *bgp, bool set)
|
||||||
{
|
{
|
||||||
bool send_msg = false;
|
bool send_msg = false;
|
||||||
|
struct peer *peer;
|
||||||
|
struct listnode *node;
|
||||||
|
|
||||||
if (bgp->inst_type == BGP_INSTANCE_TYPE_VIEW)
|
if (bgp->inst_type == BGP_INSTANCE_TYPE_VIEW)
|
||||||
return;
|
return;
|
||||||
@ -465,6 +488,21 @@ void bgp_suppress_fib_pending_set(struct bgp *bgp, bool set)
|
|||||||
zebra_route_notify_send(ZEBRA_ROUTE_NOTIFY_REQUEST,
|
zebra_route_notify_send(ZEBRA_ROUTE_NOTIFY_REQUEST,
|
||||||
zclient, set);
|
zclient, set);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* If this is configed at a time when peers are already set
|
||||||
|
* FRR needs to reset the connection as that some installs
|
||||||
|
* may have already happened in some shape fashion or form
|
||||||
|
* let's just start over
|
||||||
|
*/
|
||||||
|
for (ALL_LIST_ELEMENTS_RO(bgp->peer, node, peer)) {
|
||||||
|
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);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* BGP's cluster-id control. */
|
/* BGP's cluster-id control. */
|
||||||
|
@ -1757,6 +1757,7 @@ struct peer {
|
|||||||
#define PEER_DOWN_PFX_COUNT 33U /* Reached received prefix count */
|
#define PEER_DOWN_PFX_COUNT 33U /* Reached received prefix count */
|
||||||
#define PEER_DOWN_SOCKET_ERROR 34U /* Some socket error happened */
|
#define PEER_DOWN_SOCKET_ERROR 34U /* Some socket error happened */
|
||||||
#define PEER_DOWN_RTT_SHUTDOWN 35U /* Automatically shutdown due to RTT */
|
#define PEER_DOWN_RTT_SHUTDOWN 35U /* Automatically shutdown due to RTT */
|
||||||
|
#define PEER_DOWN_SUPPRESS_FIB_PENDING 36U /* Suppress fib pending changed */
|
||||||
/*
|
/*
|
||||||
* Remember to update peer_down_str in bgp_fsm.c when you add
|
* Remember to update peer_down_str in bgp_fsm.c when you add
|
||||||
* a new value to the last_reset reason
|
* a new value to the last_reset reason
|
||||||
|
Loading…
Reference in New Issue
Block a user