summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--bgpd/bgp_fsm.c24
-rw-r--r--bgpd/bgp_keepalives.c8
-rw-r--r--bgpd/bgp_keepalives.h4
-rw-r--r--bgpd/bgpd.c2
4 files changed, 21 insertions, 17 deletions
diff --git a/bgpd/bgp_fsm.c b/bgpd/bgp_fsm.c
index b8e6cf6caa..a730f97450 100644
--- a/bgpd/bgp_fsm.c
+++ b/bgpd/bgp_fsm.c
@@ -157,7 +157,7 @@ static struct peer *peer_xfer_conn(struct peer *from_peer)
* fd is set to -1. If blocked on lock then keepalive
* thread can access peer pointer with fd -1.
*/
- bgp_keepalives_off(from_peer);
+ bgp_keepalives_off(from_peer->connection);
EVENT_OFF(peer->connection->t_routeadv);
EVENT_OFF(peer->connection->t_connect);
@@ -366,7 +366,7 @@ void bgp_timer_set(struct peer_connection *connection)
}
EVENT_OFF(connection->t_connect);
EVENT_OFF(connection->t_holdtime);
- bgp_keepalives_off(peer);
+ bgp_keepalives_off(connection);
EVENT_OFF(connection->t_routeadv);
EVENT_OFF(connection->t_delayopen);
break;
@@ -384,7 +384,7 @@ void bgp_timer_set(struct peer_connection *connection)
peer->v_connect);
EVENT_OFF(connection->t_holdtime);
- bgp_keepalives_off(peer);
+ bgp_keepalives_off(connection);
EVENT_OFF(connection->t_routeadv);
break;
@@ -407,7 +407,7 @@ void bgp_timer_set(struct peer_connection *connection)
bgp_connect_timer, peer->v_connect);
}
EVENT_OFF(connection->t_holdtime);
- bgp_keepalives_off(peer);
+ bgp_keepalives_off(connection);
EVENT_OFF(connection->t_routeadv);
break;
@@ -421,7 +421,7 @@ void bgp_timer_set(struct peer_connection *connection)
} else {
EVENT_OFF(connection->t_holdtime);
}
- bgp_keepalives_off(peer);
+ bgp_keepalives_off(connection);
EVENT_OFF(connection->t_routeadv);
EVENT_OFF(connection->t_delayopen);
break;
@@ -439,11 +439,11 @@ void bgp_timer_set(struct peer_connection *connection)
*/
EVENT_OFF(connection->t_holdtime);
if (peer->v_holdtime == 0)
- bgp_keepalives_off(peer);
+ bgp_keepalives_off(connection);
else {
BGP_TIMER_ON(connection->t_holdtime, bgp_holdtime_timer,
peer->v_holdtime);
- bgp_keepalives_on(peer);
+ bgp_keepalives_on(connection);
}
EVENT_OFF(connection->t_routeadv);
EVENT_OFF(connection->t_delayopen);
@@ -464,11 +464,11 @@ void bgp_timer_set(struct peer_connection *connection)
*/
EVENT_OFF(connection->t_holdtime);
if (peer->v_holdtime == 0)
- bgp_keepalives_off(peer);
+ bgp_keepalives_off(connection);
else {
BGP_TIMER_ON(connection->t_holdtime, bgp_holdtime_timer,
peer->v_holdtime);
- bgp_keepalives_on(peer);
+ bgp_keepalives_on(connection);
}
break;
case Deleted:
@@ -485,7 +485,7 @@ void bgp_timer_set(struct peer_connection *connection)
EVENT_OFF(connection->t_start);
EVENT_OFF(connection->t_connect);
EVENT_OFF(connection->t_holdtime);
- bgp_keepalives_off(peer);
+ bgp_keepalives_off(connection);
EVENT_OFF(connection->t_routeadv);
EVENT_OFF(connection->t_delayopen);
break;
@@ -1507,7 +1507,7 @@ enum bgp_fsm_state_progress bgp_stop(struct peer_connection *connection)
}
/* stop keepalives */
- bgp_keepalives_off(peer);
+ bgp_keepalives_off(connection);
/* Stop read and write threads. */
bgp_writes_off(connection);
@@ -2290,7 +2290,7 @@ bgp_establish(struct peer_connection *connection)
/* Reset uptime, turn on keepalives, send current table. */
if (!peer->v_holdtime)
- bgp_keepalives_on(peer);
+ bgp_keepalives_on(connection);
peer->uptime = monotime(NULL);
diff --git a/bgpd/bgp_keepalives.c b/bgpd/bgp_keepalives.c
index 48bde1220d..92123c2cd9 100644
--- a/bgpd/bgp_keepalives.c
+++ b/bgpd/bgp_keepalives.c
@@ -229,8 +229,10 @@ void *bgp_keepalives_start(void *arg)
/* --- thread external functions ------------------------------------------- */
-void bgp_keepalives_on(struct peer *peer)
+void bgp_keepalives_on(struct peer_connection *connection)
{
+ struct peer *peer = connection->peer;
+
if (CHECK_FLAG(peer->thread_flags, PEER_THREAD_KEEPALIVES_ON))
return;
@@ -258,8 +260,10 @@ void bgp_keepalives_on(struct peer *peer)
}
}
-void bgp_keepalives_off(struct peer *peer)
+void bgp_keepalives_off(struct peer_connection *connection)
{
+ struct peer *peer = connection->peer;
+
if (!CHECK_FLAG(peer->thread_flags, PEER_THREAD_KEEPALIVES_ON))
return;
diff --git a/bgpd/bgp_keepalives.h b/bgpd/bgp_keepalives.h
index 2b4389cac3..33e574da13 100644
--- a/bgpd/bgp_keepalives.h
+++ b/bgpd/bgp_keepalives.h
@@ -27,7 +27,7 @@
* If the peer is already registered for keepalives via this function, nothing
* happens.
*/
-extern void bgp_keepalives_on(struct peer *);
+extern void bgp_keepalives_on(struct peer_connection *connection);
/**
* Turns off keepalives for a peer.
@@ -36,7 +36,7 @@ extern void bgp_keepalives_on(struct peer *);
*
* If the peer is already unregistered for keepalives, nothing happens.
*/
-extern void bgp_keepalives_off(struct peer *);
+extern void bgp_keepalives_off(struct peer_connection *connection);
/**
* Pre-run initialization function for keepalives pthread.
diff --git a/bgpd/bgpd.c b/bgpd/bgpd.c
index ec66c5c405..749225bd30 100644
--- a/bgpd/bgpd.c
+++ b/bgpd/bgpd.c
@@ -2588,7 +2588,7 @@ int peer_delete(struct peer *peer)
bgp_soft_reconfig_table_task_cancel(bgp, NULL, peer);
- bgp_keepalives_off(peer);
+ bgp_keepalives_off(peer->connection);
bgp_reads_off(peer->connection);
bgp_writes_off(peer->connection);
event_cancel_event_ready(bm->master, peer);