}
/* BGP Peer Down Cause */
-const char *const peer_down_str[] = {"",
- "Router ID changed",
- "Remote AS changed",
- "Local AS change",
- "Cluster ID changed",
- "Confederation identifier changed",
- "Confederation peer changed",
- "RR client config change",
- "RS client config change",
- "Update source change",
- "Address family activated",
- "Admin. shutdown",
- "User reset",
- "BGP Notification received",
- "BGP Notification send",
- "Peer closed the session",
- "Neighbor deleted",
- "Peer-group add member",
- "Peer-group delete member",
- "Capability changed",
- "Passive config change",
- "Multihop config change",
- "NSF peer closed the session",
- "Intf peering v6only config change",
- "BFD down received",
- "Interface down",
- "Neighbor address lost",
- "No path to specified Neighbor",
- "Waiting for Peer IPv6 LLA",
- "Waiting for VRF to be initialized",
- "No AFI/SAFI activated for peer",
- "AS Set config change",
- "Waiting for peer OPEN",
- "Reached received prefix count",
- "Socket Error",
- "Admin. shutdown (RTT)"};
+const char *const peer_down_str[] = {
+ "",
+ "Router ID changed",
+ "Remote AS changed",
+ "Local AS change",
+ "Cluster ID changed",
+ "Confederation identifier changed",
+ "Confederation peer changed",
+ "RR client config change",
+ "RS client config change",
+ "Update source change",
+ "Address family activated",
+ "Admin. shutdown",
+ "User reset",
+ "BGP Notification received",
+ "BGP Notification send",
+ "Peer closed the session",
+ "Neighbor deleted",
+ "Peer-group add member",
+ "Peer-group delete member",
+ "Capability changed",
+ "Passive config change",
+ "Multihop config change",
+ "NSF peer closed the session",
+ "Intf peering v6only config change",
+ "BFD down received",
+ "Interface down",
+ "Neighbor address lost",
+ "No path to specified Neighbor",
+ "Waiting for Peer IPv6 LLA",
+ "Waiting for VRF to be initialized",
+ "No AFI/SAFI activated for peer",
+ "AS Set config change",
+ "Waiting for peer OPEN",
+ "Reached received prefix count",
+ "Socket Error",
+ "Admin. shutdown (RTT)",
+ "Suppress Fib Turned On or Off",
+};
static void bgp_graceful_restart_timer_off(struct peer *peer)
{
void bm_wait_for_fib_set(bool set)
{
bool send_msg = false;
+ struct bgp *bgp;
+ struct peer *peer;
+ struct listnode *next, *node;
if (bm->wait_for_fib == set)
return;
if (send_msg && zclient)
zebra_route_notify_send(ZEBRA_ROUTE_NOTIFY_REQUEST,
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->status))
+ continue;
+
+ peer->last_reset = PEER_DOWN_SUPPRESS_FIB_PENDING;
+ bgp_notify_send(peer, BGP_NOTIFY_CEASE,
+ BGP_NOTIFY_CEASE_CONFIG_CHANGE);
+ }
+ }
}
/* Set the suppress fib pending for the bgp configuration */
void bgp_suppress_fib_pending_set(struct bgp *bgp, bool set)
{
bool send_msg = false;
+ struct peer *peer;
+ struct listnode *node;
if (bgp->inst_type == BGP_INSTANCE_TYPE_VIEW)
return;
zebra_route_notify_send(ZEBRA_ROUTE_NOTIFY_REQUEST,
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->status))
+ continue;
+
+ peer->last_reset = PEER_DOWN_SUPPRESS_FIB_PENDING;
+ bgp_notify_send(peer, BGP_NOTIFY_CEASE,
+ BGP_NOTIFY_CEASE_CONFIG_CHANGE);
+ }
}
/* BGP's cluster-id control. */