From 7aa4fd5ba79d9ba77e993da209089ef013883bc8 Mon Sep 17 00:00:00 2001 From: Trey Aspelund Date: Wed, 23 Sep 2020 14:16:50 -0400 Subject: [PATCH] bgpd: Use bgp instance's default keepalive interval if < (holdtime/3) bgp->default_keepalive was not considered when setting peer->v_keepalive, causing the effective keepalive interval to always be (holdtime/3), even when default_keepalive < (holdtime/3). This ensures that the default_keepalive is used when it's set and is < (holdtime/3). Signed-off-by: Trey Aspelund (cherry picked from commit d8bf8c6128f2e493d473148213bd663a500c7f73) --- bgpd/bgp_packet.c | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/bgpd/bgp_packet.c b/bgpd/bgp_packet.c index ee3580edf..6c077878b 100644 --- a/bgpd/bgp_packet.c +++ b/bgpd/bgp_packet.c @@ -1319,11 +1319,18 @@ static int bgp_open_receive(struct peer *peer, bgp_size_t size) else peer->v_holdtime = send_holdtime; - if ((CHECK_FLAG(peer->flags, PEER_FLAG_TIMER)) - && (peer->keepalive < peer->v_holdtime / 3)) - peer->v_keepalive = peer->keepalive; - else - peer->v_keepalive = peer->v_holdtime / 3; + /* Set effective keepalive to 1/3 the effective holdtime. + * Use configured keeplive when < effective keepalive. + */ + peer->v_keepalive = peer->v_holdtime / 3; + if (CHECK_FLAG(peer->flags, PEER_FLAG_TIMER)) { + if (peer->keepalive && peer->keepalive < peer->v_keepalive) + peer->v_keepalive = peer->keepalive; + } else { + if (peer->bgp->default_keepalive + && peer->bgp->default_keepalive < peer->v_keepalive) + peer->v_keepalive = peer->bgp->default_keepalive; + } /* Open option part parse. */ if (optlen != 0) { -- 2.39.5