]> git.puffer.fish Git - matthieu/frr.git/commitdiff
bgpd: peer_active is connection oriented, make it so
authorDonald Sharp <sharpd@nvidia.com>
Wed, 6 Nov 2024 20:30:32 +0000 (15:30 -0500)
committerDonald Sharp <sharpd@nvidia.com>
Tue, 26 Nov 2024 16:59:39 +0000 (11:59 -0500)
Signed-off-by: Donald Sharp <sharpd@nvidia.com>
bgpd/bgp_fsm.c
bgpd/bgp_network.c
bgpd/bgp_nexthop.c
bgpd/bgp_zebra.c
bgpd/bgpd.c
bgpd/bgpd.h

index 463296f0258a2813670818882dda07bef2dfc156..cadef399742387c39745151c4306e5c13c132ad0 100644 (file)
@@ -325,8 +325,8 @@ void bgp_timer_set(struct peer_connection *connection)
                /* First entry point of peer's finite state machine.  In Idle
                   status start timer is on unless peer is shutdown or peer is
                   inactive.  All other timer must be turned off */
-               if (BGP_PEER_START_SUPPRESSED(peer) || !peer_active(peer)
-                   || peer->bgp->vrf_id == VRF_UNKNOWN) {
+               if (BGP_PEER_START_SUPPRESSED(peer) || !peer_active(connection) ||
+                   peer->bgp->vrf_id == VRF_UNKNOWN) {
                        EVENT_OFF(connection->t_start);
                } else {
                        BGP_TIMER_ON(connection->t_start, bgp_start_timer,
index e6117a5ce02165ffa8603355ddf6700f3b95c0af..f1bea1c189ffe9d3921c8a06b4dd9cd10fcb35bd 100644 (file)
@@ -504,7 +504,7 @@ static void bgp_accept(struct event *thread)
                        bgp_fsm_change_status(connection1, Active);
                        EVENT_OFF(connection1->t_start);
 
-                       if (peer_active(peer1)) {
+                       if (peer_active(peer1->connection)) {
                                if (CHECK_FLAG(peer1->flags,
                                               PEER_FLAG_TIMER_DELAYOPEN))
                                        BGP_EVENT_ADD(connection1,
@@ -557,7 +557,7 @@ static void bgp_accept(struct event *thread)
        }
 
        /* Check that at least one AF is activated for the peer. */
-       if (!peer_active(peer1)) {
+       if (!peer_active(connection1)) {
                if (bgp_debug_neighbor_events(peer1))
                        zlog_debug(
                                "%s - incoming conn rejected - no AF activated for peer",
@@ -658,7 +658,7 @@ static void bgp_accept(struct event *thread)
                bgp_event_update(connection1, TCP_connection_closed);
        }
 
-       if (peer_active(peer)) {
+       if (peer_active(peer->connection)) {
                if (CHECK_FLAG(peer->flags, PEER_FLAG_TIMER_DELAYOPEN))
                        BGP_EVENT_ADD(connection, TCP_connection_open_w_delay);
                else
index bf0f3b15cfde6e20799179b6350625f75373887a..1ef90a8e382a6a80464c2f7a23b7571544a5a0be 100644 (file)
@@ -444,7 +444,7 @@ void bgp_connected_add(struct bgp *bgp, struct connected *ifc)
                    !peer_established(peer->connection) &&
                    !CHECK_FLAG(peer->flags, PEER_FLAG_IFPEER_V6ONLY)) {
                        connection = peer->connection;
-                       if (peer_active(peer))
+                       if (peer_active(connection))
                                BGP_EVENT_ADD(connection, BGP_Stop);
                        BGP_EVENT_ADD(connection, BGP_Start);
                }
index 16f4a0d2df198c8e82db20cd80ff1cd5dfcdd4b7..688dfacaa0b6b990c6ba2f18085b29a77866c90d 100644 (file)
@@ -137,7 +137,7 @@ static void bgp_start_interface_nbrs(struct bgp *bgp, struct interface *ifp)
        for (ALL_LIST_ELEMENTS(bgp->peer, node, nnode, peer)) {
                if (peer->conf_if && (strcmp(peer->conf_if, ifp->name) == 0) &&
                    !peer_established(peer->connection)) {
-                       if (peer_active(peer))
+                       if (peer_active(peer->connection))
                                BGP_EVENT_ADD(peer->connection, BGP_Stop);
                        BGP_EVENT_ADD(peer->connection, BGP_Start);
                }
index 9d0f579c28621a8acc0f910b82badb2e5e1c10de..f92ae969f8c44d258c050a9a85b0518f1ca4800b 100644 (file)
@@ -1986,7 +1986,7 @@ struct peer *peer_create(union sockunion *su, const char *conf_if,
                bgp->coalesce_time = MIN(BGP_MAX_SUBGROUP_COALESCE_TIME, ct);
        }
 
-       active = peer_active(peer);
+       active = peer_active(peer->connection);
        if (!active) {
                if (peer->connection->su.sa.sa_family == AF_UNSPEC)
                        peer->last_reset = PEER_DOWN_NBR_ADDR;
@@ -2019,7 +2019,7 @@ struct peer *peer_create(union sockunion *su, const char *conf_if,
        if (bgp->autoshutdown)
                peer_flag_set(peer, PEER_FLAG_SHUTDOWN);
        /* Set up peer's events and timers. */
-       else if (!active && peer_active(peer))
+       else if (!active && peer_active(peer->connection))
                bgp_timer_set(peer->connection);
 
        bgp_peer_gr_flags_update(peer);
@@ -2412,13 +2412,13 @@ static int peer_activate_af(struct peer *peer, afi_t afi, safi_t safi)
        if (peer_af_create(peer, afi, safi) == NULL)
                return 1;
 
-       active = peer_active(peer);
+       active = peer_active(peer->connection);
        peer->afc[afi][safi] = 1;
 
        if (peer->group)
                peer_group2peer_config_copy_af(peer->group, peer, afi, safi);
 
-       if (!active && peer_active(peer)) {
+       if (!active && peer_active(peer->connection)) {
                bgp_timer_set(peer->connection);
        } else {
                peer->last_reset = PEER_DOWN_AF_ACTIVATE;
@@ -3358,7 +3358,7 @@ int peer_group_bind(struct bgp *bgp, union sockunion *su, struct peer *peer,
                }
 
                /* Set up peer's events and timers. */
-               if (peer_active(peer))
+               if (peer_active(peer->connection))
                        bgp_timer_set(peer->connection);
        }
 
@@ -4599,9 +4599,11 @@ bool bgp_path_attribute_treat_as_withdraw(struct peer *peer, char *buf,
 }
 
 /* If peer is configured at least one address family return 1. */
-bool peer_active(struct peer *peer)
+bool peer_active(struct peer_connection *connection)
 {
-       if (BGP_CONNECTION_SU_UNSPEC(peer->connection))
+       struct peer *peer = connection->peer;
+
+       if (BGP_CONNECTION_SU_UNSPEC(connection))
                return false;
 
        if (peer->bfd_config) {
@@ -6296,7 +6298,7 @@ int peer_timers_connect_set(struct peer *peer, uint32_t connect)
        /* Skip peer-group mechanics for regular peers. */
        if (!CHECK_FLAG(peer->sflags, PEER_STATUS_GROUP)) {
                if (!peer_established(peer->connection)) {
-                       if (peer_active(peer))
+                       if (peer_active(peer->connection))
                                BGP_EVENT_ADD(peer->connection, BGP_Stop);
                        BGP_EVENT_ADD(peer->connection, BGP_Start);
                }
@@ -6317,7 +6319,7 @@ int peer_timers_connect_set(struct peer *peer, uint32_t connect)
                member->v_connect = connect;
 
                if (!peer_established(member->connection)) {
-                       if (peer_active(member))
+                       if (peer_active(member->connection))
                                BGP_EVENT_ADD(member->connection, BGP_Stop);
                        BGP_EVENT_ADD(member->connection, BGP_Start);
                }
@@ -6350,7 +6352,7 @@ int peer_timers_connect_unset(struct peer *peer)
        /* Skip peer-group mechanics for regular peers. */
        if (!CHECK_FLAG(peer->sflags, PEER_STATUS_GROUP)) {
                if (!peer_established(peer->connection)) {
-                       if (peer_active(peer))
+                       if (peer_active(peer->connection))
                                BGP_EVENT_ADD(peer->connection, BGP_Stop);
                        BGP_EVENT_ADD(peer->connection, BGP_Start);
                }
@@ -6371,7 +6373,7 @@ int peer_timers_connect_unset(struct peer *peer)
                member->v_connect = peer->bgp->default_connect_retry;
 
                if (!peer_established(member->connection)) {
-                       if (peer_active(member))
+                       if (peer_active(member->connection))
                                BGP_EVENT_ADD(member->connection, BGP_Stop);
                        BGP_EVENT_ADD(member->connection, BGP_Start);
                }
@@ -8646,8 +8648,7 @@ static int peer_unshut_after_cfg(struct bgp *bgp)
                                   peer->host);
 
                peer->shut_during_cfg = false;
-               if (peer_active(peer) &&
-                   peer->connection->status != Established) {
+               if (peer_active(peer->connection) && peer->connection->status != Established) {
                        if (peer->connection->status != Idle)
                                BGP_EVENT_ADD(peer->connection, BGP_Stop);
                        BGP_EVENT_ADD(peer->connection, BGP_Start);
index 2b6921b695030d96f0cb4f9be0e70e1f6ce1d41c..df55d879e71d3a2726c8eea6de1203ed71c7a981 100644 (file)
@@ -2295,7 +2295,7 @@ extern struct peer *peer_unlock_with_caller(const char *, struct peer *);
 extern enum bgp_peer_sort peer_sort(struct peer *peer);
 extern enum bgp_peer_sort peer_sort_lookup(struct peer *peer);
 
-extern bool peer_active(struct peer *);
+extern bool peer_active(struct peer_connection *connection);
 extern bool peer_active_nego(struct peer *);
 extern bool peer_afc_received(struct peer *peer);
 extern bool peer_afc_advertised(struct peer *peer);