]> git.puffer.fish Git - matthieu/frr.git/commitdiff
bgpd: Use bgp instance's default keepalive interval if < (holdtime/3)
authorTrey Aspelund <taspelund@cumulusnetworks.com>
Wed, 23 Sep 2020 18:16:50 +0000 (14:16 -0400)
committerDonatas Abraitis <donatas.abraitis@gmail.com>
Mon, 28 Sep 2020 08:22:03 +0000 (11:22 +0300)
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 <taspelund@cumulusnetworks.com>
(cherry picked from commit d8bf8c6128f2e493d473148213bd663a500c7f73)

bgpd/bgp_packet.c

index 7b089922d4bad49982a347df9fd5bcfb28657276..a79f7c24c8adbea0668df1fff0aec04ecc425dde 100644 (file)
@@ -1322,11 +1322,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) {