diff options
| author | Donatas Abraitis <donatas@opensourcerouting.org> | 2024-12-05 10:49:52 +0200 |
|---|---|---|
| committer | Donatas Abraitis <donatas@opensourcerouting.org> | 2024-12-11 17:20:48 +0200 |
| commit | ab3535fbcf37b59ec02332fa021142c5b7d6dd3e (patch) | |
| tree | 305dba81a8c61d0fff9c70ba3fbc0137d0be7997 | |
| parent | 44f4a8ec4049c54e8d25465a735174bd0f15f81e (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.c | 14 | ||||
| -rw-r--r-- | bgpd/bgpd.h | 1 |
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 |
