summaryrefslogtreecommitdiff
path: root/bgpd/bgp_fsm.c
diff options
context:
space:
mode:
authorDonald Sharp <sharpd@nvidia.com>2023-08-26 20:56:20 -0400
committerDonald Sharp <sharpd@nvidia.com>2023-09-10 08:31:25 -0400
commit3c7ef0a9c75d3ab2fc4395be31f06b87c1d719eb (patch)
tree3a1c9b52aebe5226e1f98975357c99d77f554492 /bgpd/bgp_fsm.c
parent3842286ed40d727fa338910139fc40daf9228d50 (diff)
bgpd: make bgp_timer_set use a peer_connection instead
The bgp_timer_set function should use a peer_connection pointer instead. Signed-off-by: Donald Sharp <sharpd@nvidia.com>
Diffstat (limited to 'bgpd/bgp_fsm.c')
-rw-r--r--bgpd/bgp_fsm.c101
1 files changed, 49 insertions, 52 deletions
diff --git a/bgpd/bgp_fsm.c b/bgpd/bgp_fsm.c
index 781c8aa1e2..c6e6f08d74 100644
--- a/bgpd/bgp_fsm.c
+++ b/bgpd/bgp_fsm.c
@@ -346,90 +346,90 @@ static struct peer *peer_xfer_conn(struct peer *from_peer)
/* Hook function called after bgp event is occered. And vty's
neighbor command invoke this function after making neighbor
structure. */
-void bgp_timer_set(struct peer *peer)
+void bgp_timer_set(struct peer_connection *connection)
{
afi_t afi;
safi_t safi;
+ struct peer *peer = connection->peer;
- switch (peer->connection->status) {
+ switch (connection->status) {
case Idle:
/* 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) {
- EVENT_OFF(peer->connection->t_start);
+ EVENT_OFF(connection->t_start);
} else {
- BGP_TIMER_ON(peer->connection->t_start, bgp_start_timer,
+ BGP_TIMER_ON(connection->t_start, bgp_start_timer,
peer->v_start);
}
- EVENT_OFF(peer->connection->t_connect);
- EVENT_OFF(peer->connection->t_holdtime);
+ EVENT_OFF(connection->t_connect);
+ EVENT_OFF(connection->t_holdtime);
bgp_keepalives_off(peer);
- EVENT_OFF(peer->connection->t_routeadv);
- EVENT_OFF(peer->connection->t_delayopen);
+ EVENT_OFF(connection->t_routeadv);
+ EVENT_OFF(connection->t_delayopen);
break;
case Connect:
/* After start timer is expired, the peer moves to Connect
status. Make sure start timer is off and connect timer is
on. */
- EVENT_OFF(peer->connection->t_start);
+ EVENT_OFF(connection->t_start);
if (CHECK_FLAG(peer->flags, PEER_FLAG_TIMER_DELAYOPEN))
- BGP_TIMER_ON(peer->connection->t_connect,
- bgp_connect_timer,
+ BGP_TIMER_ON(connection->t_connect, bgp_connect_timer,
(peer->v_delayopen + peer->v_connect));
else
- BGP_TIMER_ON(peer->connection->t_connect,
- bgp_connect_timer, peer->v_connect);
+ BGP_TIMER_ON(connection->t_connect, bgp_connect_timer,
+ peer->v_connect);
- EVENT_OFF(peer->connection->t_holdtime);
+ EVENT_OFF(connection->t_holdtime);
bgp_keepalives_off(peer);
- EVENT_OFF(peer->connection->t_routeadv);
+ EVENT_OFF(connection->t_routeadv);
break;
case Active:
/* Active is waiting connection from remote peer. And if
connect timer is expired, change status to Connect. */
- EVENT_OFF(peer->connection->t_start);
+ EVENT_OFF(connection->t_start);
/* If peer is passive mode, do not set connect timer. */
if (CHECK_FLAG(peer->flags, PEER_FLAG_PASSIVE)
|| CHECK_FLAG(peer->sflags, PEER_STATUS_NSF_WAIT)) {
- EVENT_OFF(peer->connection->t_connect);
+ EVENT_OFF(connection->t_connect);
} else {
if (CHECK_FLAG(peer->flags, PEER_FLAG_TIMER_DELAYOPEN))
- BGP_TIMER_ON(peer->connection->t_connect,
+ BGP_TIMER_ON(connection->t_connect,
bgp_connect_timer,
(peer->v_delayopen +
peer->v_connect));
else
- BGP_TIMER_ON(peer->connection->t_connect,
+ BGP_TIMER_ON(connection->t_connect,
bgp_connect_timer, peer->v_connect);
}
- EVENT_OFF(peer->connection->t_holdtime);
+ EVENT_OFF(connection->t_holdtime);
bgp_keepalives_off(peer);
- EVENT_OFF(peer->connection->t_routeadv);
+ EVENT_OFF(connection->t_routeadv);
break;
case OpenSent:
/* OpenSent status. */
- EVENT_OFF(peer->connection->t_start);
- EVENT_OFF(peer->connection->t_connect);
+ EVENT_OFF(connection->t_start);
+ EVENT_OFF(connection->t_connect);
if (peer->v_holdtime != 0) {
- BGP_TIMER_ON(peer->connection->t_holdtime,
- bgp_holdtime_timer, peer->v_holdtime);
+ BGP_TIMER_ON(connection->t_holdtime, bgp_holdtime_timer,
+ peer->v_holdtime);
} else {
- EVENT_OFF(peer->connection->t_holdtime);
+ EVENT_OFF(connection->t_holdtime);
}
bgp_keepalives_off(peer);
- EVENT_OFF(peer->connection->t_routeadv);
- EVENT_OFF(peer->connection->t_delayopen);
+ EVENT_OFF(connection->t_routeadv);
+ EVENT_OFF(connection->t_delayopen);
break;
case OpenConfirm:
/* OpenConfirm status. */
- EVENT_OFF(peer->connection->t_start);
- EVENT_OFF(peer->connection->t_connect);
+ EVENT_OFF(connection->t_start);
+ EVENT_OFF(connection->t_connect);
/*
* If the negotiated Hold Time value is zero, then the Hold Time
@@ -437,24 +437,24 @@ void bgp_timer_set(struct peer *peer)
* Additionally if a different hold timer has been negotiated
* than we must stop then start the timer again
*/
- EVENT_OFF(peer->connection->t_holdtime);
+ EVENT_OFF(connection->t_holdtime);
if (peer->v_holdtime == 0)
bgp_keepalives_off(peer);
else {
- BGP_TIMER_ON(peer->connection->t_holdtime,
- bgp_holdtime_timer, peer->v_holdtime);
+ BGP_TIMER_ON(connection->t_holdtime, bgp_holdtime_timer,
+ peer->v_holdtime);
bgp_keepalives_on(peer);
}
- EVENT_OFF(peer->connection->t_routeadv);
- EVENT_OFF(peer->connection->t_delayopen);
+ EVENT_OFF(connection->t_routeadv);
+ EVENT_OFF(connection->t_delayopen);
break;
case Established:
/* In Established status start and connect timer is turned
off. */
- EVENT_OFF(peer->connection->t_start);
- EVENT_OFF(peer->connection->t_connect);
- EVENT_OFF(peer->connection->t_delayopen);
+ EVENT_OFF(connection->t_start);
+ EVENT_OFF(connection->t_connect);
+ EVENT_OFF(connection->t_delayopen);
/*
* Same as OpenConfirm, if holdtime is zero then both holdtime
@@ -462,12 +462,12 @@ void bgp_timer_set(struct peer *peer)
* Additionally if a different hold timer has been negotiated
* then we must stop then start the timer again
*/
- EVENT_OFF(peer->connection->t_holdtime);
+ EVENT_OFF(connection->t_holdtime);
if (peer->v_holdtime == 0)
bgp_keepalives_off(peer);
else {
- BGP_TIMER_ON(peer->connection->t_holdtime,
- bgp_holdtime_timer, peer->v_holdtime);
+ BGP_TIMER_ON(connection->t_holdtime, bgp_holdtime_timer,
+ peer->v_holdtime);
bgp_keepalives_on(peer);
}
break;
@@ -482,12 +482,12 @@ void bgp_timer_set(struct peer *peer)
EVENT_OFF(peer->t_refresh_stalepath);
/* fallthru */
case Clearing:
- EVENT_OFF(peer->connection->t_start);
- EVENT_OFF(peer->connection->t_connect);
- EVENT_OFF(peer->connection->t_holdtime);
+ EVENT_OFF(connection->t_start);
+ EVENT_OFF(connection->t_connect);
+ EVENT_OFF(connection->t_holdtime);
bgp_keepalives_off(peer);
- EVENT_OFF(peer->connection->t_routeadv);
- EVENT_OFF(peer->connection->t_delayopen);
+ EVENT_OFF(connection->t_routeadv);
+ EVENT_OFF(connection->t_delayopen);
break;
case BGP_STATUS_MAX:
flog_err(EC_LIB_DEVELOPMENT,
@@ -661,7 +661,7 @@ static void bgp_graceful_restart_timer_off(struct peer *peer)
peer_delete(peer);
}
- bgp_timer_set(peer);
+ bgp_timer_set(peer->connection);
}
static void bgp_llgr_stale_timer_expire(struct event *thread)
@@ -2637,12 +2637,10 @@ int bgp_event_update(struct peer *peer, enum bgp_fsm_events event)
enum bgp_fsm_status next;
enum bgp_fsm_state_progress ret = 0;
int fsm_result = FSM_PEER_NOOP;
- struct peer *other;
int passive_conn = 0;
int dyn_nbr;
struct peer_connection *connection = peer->connection;
- other = peer->doppelganger;
passive_conn =
(CHECK_FLAG(peer->sflags, PEER_STATUS_ACCEPT_PEER)) ? 1 : 0;
dyn_nbr = peer_dynamic_neighbor(peer);
@@ -2675,7 +2673,6 @@ int bgp_event_update(struct peer *peer, enum bgp_fsm_events event)
bgp_establish.
Update the peer pointer accordingly */
fsm_result = FSM_PEER_TRANSFERRED;
- peer = other;
}
/* If status is changed. */
@@ -2694,7 +2691,7 @@ int bgp_event_update(struct peer *peer, enum bgp_fsm_events event)
}
/* Make sure timer is set. */
- bgp_timer_set(peer);
+ bgp_timer_set(connection);
break;
case BGP_FSM_FAILURE:
/*
@@ -2717,7 +2714,7 @@ int bgp_event_update(struct peer *peer, enum bgp_fsm_events event)
peer_down_str[peer->last_reset]);
bgp_stop(connection);
bgp_fsm_change_status(peer, Idle);
- bgp_timer_set(peer);
+ bgp_timer_set(connection);
}
fsm_result = FSM_PEER_STOPPED;
break;