]> git.puffer.fish Git - mirror/frr.git/commitdiff
bgpd: config connect timer is not applied immediately for peers in non-established... 7449/head
authorsudhanshukumar22 <sudhanshu.kumar@broadcom.com>
Wed, 4 Nov 2020 05:21:42 +0000 (21:21 -0800)
committersudhanshukumar22 <sudhanshu.kumar@broadcom.com>
Tue, 2 Feb 2021 10:25:14 +0000 (02:25 -0800)
Description:
When user is config connect timer, it doesn't reflect
immediately. It reflect when next time neighbor is tried to reconnect.

Problem Description/Summary :
When user is config connect timer, it doesn't reflect
The network connection was aborted by the local system.d to reconnect.
Fix is to update the connect timer immediately if BGP
    session is not in establish state.

Expected Behavior :
If neighbor is not yet established, we should immediately apply the config connect timer to the peer.

Signed-off-by: sudhanshukumar22 <sudhanshu.kumar@broadcom.com>
bgpd/bgpd.c

index 368397d7aa7de96d891914ef4d5f9b3dbbe7f805..26e7552f5c6c6c4b3a16183979705c1b0396921a 100644 (file)
@@ -5305,9 +5305,14 @@ int peer_timers_connect_set(struct peer *peer, uint32_t connect)
        peer->v_connect = connect;
 
        /* Skip peer-group mechanics for regular peers. */
-       if (!CHECK_FLAG(peer->sflags, PEER_STATUS_GROUP))
+       if (!CHECK_FLAG(peer->sflags, PEER_STATUS_GROUP)) {
+               if (peer->status != Established) {
+                       if (peer_active(peer))
+                               BGP_EVENT_ADD(peer, BGP_Stop);
+                       BGP_EVENT_ADD(peer, BGP_Start);
+               }
                return 0;
-
+       }
        /*
         * Set flag and configuration on all peer-group members, unless they are
         * explicitely overriding peer-group configuration.
@@ -5321,6 +5326,12 @@ int peer_timers_connect_set(struct peer *peer, uint32_t connect)
                SET_FLAG(member->flags, PEER_FLAG_TIMER_CONNECT);
                member->connect = connect;
                member->v_connect = connect;
+
+               if (member->status != Established) {
+                       if (peer_active(member))
+                               BGP_EVENT_ADD(member, BGP_Stop);
+                       BGP_EVENT_ADD(member, BGP_Start);
+               }
        }
 
        return 0;
@@ -5348,9 +5359,14 @@ int peer_timers_connect_unset(struct peer *peer)
                peer->v_connect = peer->bgp->default_connect_retry;
 
        /* Skip peer-group mechanics for regular peers. */
-       if (!CHECK_FLAG(peer->sflags, PEER_STATUS_GROUP))
+       if (!CHECK_FLAG(peer->sflags, PEER_STATUS_GROUP)) {
+               if (peer->status != Established) {
+                       if (peer_active(peer))
+                               BGP_EVENT_ADD(peer, BGP_Stop);
+                       BGP_EVENT_ADD(peer, BGP_Start);
+               }
                return 0;
-
+       }
        /*
         * Remove flag and configuration from all peer-group members, unless
         * they are explicitely overriding peer-group configuration.
@@ -5364,6 +5380,12 @@ int peer_timers_connect_unset(struct peer *peer)
                UNSET_FLAG(member->flags, PEER_FLAG_TIMER_CONNECT);
                member->connect = 0;
                member->v_connect = peer->bgp->default_connect_retry;
+
+               if (member->status != Established) {
+                       if (peer_active(member))
+                               BGP_EVENT_ADD(member, BGP_Stop);
+                       BGP_EVENT_ADD(member, BGP_Start);
+               }
        }
 
        return 0;