summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDonatas Abraitis <donatas@opensourcerouting.org>2024-12-05 10:49:52 +0200
committerDonatas Abraitis <donatas@opensourcerouting.org>2024-12-11 17:20:48 +0200
commitab3535fbcf37b59ec02332fa021142c5b7d6dd3e (patch)
tree305dba81a8c61d0fff9c70ba3fbc0137d0be7997
parent44f4a8ec4049c54e8d25465a735174bd0f15f81e (diff)
bgpd: Implement connect retry backoff
Instead of starting with a fairly high value of retry, let's try with a lower and increase with a backoff to reach what was a default value (120s). Signed-off-by: Donatas Abraitis <donatas@opensourcerouting.org>
-rw-r--r--bgpd/bgp_fsm.c14
-rw-r--r--bgpd/bgpd.h1
2 files changed, 12 insertions, 3 deletions
diff --git a/bgpd/bgp_fsm.c b/bgpd/bgp_fsm.c
index cadef39974..d135ba8099 100644
--- a/bgpd/bgp_fsm.c
+++ b/bgpd/bgp_fsm.c
@@ -491,11 +491,14 @@ static void bgp_connect_timer(struct event *thread)
assert(!connection->t_read);
if (bgp_debug_neighbor_events(peer))
- zlog_debug("%s [FSM] Timer (connect timer expire)", peer->host);
+ zlog_debug("%s [FSM] Timer (connect timer (%us) expire)", peer->host,
+ peer->v_connect);
if (CHECK_FLAG(peer->sflags, PEER_STATUS_ACCEPT_PEER))
bgp_stop(connection);
else {
+ if (!peer->connect)
+ peer->v_connect = MIN(BGP_MAX_CONNECT_RETRY, peer->v_connect * 2);
EVENT_VAL(thread) = ConnectRetry_timer_expired;
bgp_event(thread); /* bgp_event unlocks peer */
}
@@ -1224,9 +1227,14 @@ void bgp_fsm_change_status(struct peer_connection *connection,
peer_count = bgp->established_peers;
- if (status == Established)
+ if (status == Established) {
bgp->established_peers++;
- else if ((peer_established(connection)) && (status != Established))
+ /* Reset the retry timer if we already established */
+ if (peer->connect)
+ peer->v_connect = peer->connect;
+ else
+ peer->v_connect = peer->bgp->default_connect_retry;
+ } else if ((peer_established(connection)) && (status != Established))
bgp->established_peers--;
if (bgp_debug_neighbor_events(peer)) {
diff --git a/bgpd/bgpd.h b/bgpd/bgpd.h
index fafd207110..69048f1f65 100644
--- a/bgpd/bgpd.h
+++ b/bgpd/bgpd.h
@@ -2106,6 +2106,7 @@ struct bgp_nlri {
#define BGP_DEFAULT_HOLDTIME 180
#define BGP_DEFAULT_KEEPALIVE 60
#define BGP_DEFAULT_CONNECT_RETRY 30
+#define BGP_MAX_CONNECT_RETRY 120
#define BGP_DEFAULT_EBGP_ROUTEADV 0
#define BGP_DEFAULT_IBGP_ROUTEADV 0