From: Donatas Abraitis Date: Wed, 2 Oct 2019 15:06:37 +0000 (+0300) Subject: bgpd: Keep the session down if maximum-prefix is reached X-Git-Url: https://git.puffer.fish/?a=commitdiff_plain;h=cb84b33e827eddc99f745ffbafc68ed488579c71;p=mirror%2Ffrr.git bgpd: Keep the session down if maximum-prefix is reached Under high load instances with hundreds of thousands of prefixes this could result in very unstable systems. When maximum-prefix is set, but restart timer is not set then the session flaps between Idle(Pfx) -> Established -> Idle(Pfx) states. Signed-off-by: Donatas Abraitis --- diff --git a/bgpd/bgp_network.c b/bgpd/bgp_network.c index 1bbcf8ca2b..0db2c3cce4 100644 --- a/bgpd/bgp_network.c +++ b/bgpd/bgp_network.c @@ -440,12 +440,15 @@ static int bgp_accept(struct thread *thread) return -1; } - /* Check whether max prefix restart timer is set for the peer */ - if (peer1->t_pmax_restart) { + /* Do not try to reconnect if the peer reached maximum + * prefixes, restart timer is still running or the peer + * is shutdown. + */ + if (BGP_PEER_START_SUPPRESSED(peer1)) { if (bgp_debug_neighbor_events(peer1)) zlog_debug( - "%s - incoming conn rejected - " - "peer max prefix timer is active", + "[Event] Incoming BGP connection rejected from %s " + "due to maximum-prefix or shutdown", peer1->host); close(bgp_sock); return -1;