summaryrefslogtreecommitdiff
path: root/bgpd/bgp_fsm.c
diff options
context:
space:
mode:
authorDonald Sharp <sharpd@nvidia.com>2023-08-26 21:30:08 -0400
committerDonald Sharp <sharpd@nvidia.com>2023-09-10 08:31:25 -0400
commit6dc9dc1edd08a523728918673e0fc558edd610ee (patch)
treeb6609f616432039a43464a237c04e589e07ba631 /bgpd/bgp_fsm.c
parent8e90c4c953bce7f9b2549de1edf1423d8b49ff58 (diff)
bgpd: modify bgp_connect_check to use a connection
Signed-off-by: Donald Sharp <sharpd@nvidia.com>
Diffstat (limited to 'bgpd/bgp_fsm.c')
-rw-r--r--bgpd/bgp_fsm.c40
1 files changed, 18 insertions, 22 deletions
diff --git a/bgpd/bgp_fsm.c b/bgpd/bgp_fsm.c
index 8cb8165d35..586776b03e 100644
--- a/bgpd/bgp_fsm.c
+++ b/bgpd/bgp_fsm.c
@@ -1625,45 +1625,43 @@ static void bgp_connect_check(struct event *thread)
int status;
socklen_t slen;
int ret;
- struct peer *peer;
+ struct peer_connection *connection = EVENT_ARG(thread);
+ struct peer *peer = connection->peer;
- peer = EVENT_ARG(thread);
- assert(!CHECK_FLAG(peer->connection->thread_flags,
- PEER_THREAD_READS_ON));
- assert(!CHECK_FLAG(peer->connection->thread_flags,
- PEER_THREAD_WRITES_ON));
- assert(!peer->connection->t_read);
- assert(!peer->connection->t_write);
+ assert(!CHECK_FLAG(connection->thread_flags, PEER_THREAD_READS_ON));
+ assert(!CHECK_FLAG(connection->thread_flags, PEER_THREAD_WRITES_ON));
+ assert(!connection->t_read);
+ assert(!connection->t_write);
- EVENT_OFF(peer->connection->t_connect_check_r);
- EVENT_OFF(peer->connection->t_connect_check_w);
+ EVENT_OFF(connection->t_connect_check_r);
+ EVENT_OFF(connection->t_connect_check_w);
/* Check file descriptor. */
slen = sizeof(status);
- ret = getsockopt(peer->connection->fd, SOL_SOCKET, SO_ERROR,
- (void *)&status, &slen);
+ ret = getsockopt(connection->fd, SOL_SOCKET, SO_ERROR, (void *)&status,
+ &slen);
/* If getsockopt is fail, this is fatal error. */
if (ret < 0) {
zlog_err("can't get sockopt for nonblocking connect: %d(%s)",
errno, safe_strerror(errno));
- BGP_EVENT_ADD(peer->connection, TCP_fatal_error);
+ BGP_EVENT_ADD(connection, TCP_fatal_error);
return;
}
/* When status is 0 then TCP connection is established. */
if (status == 0) {
if (CHECK_FLAG(peer->flags, PEER_FLAG_TIMER_DELAYOPEN))
- BGP_EVENT_ADD(peer->connection,
+ BGP_EVENT_ADD(connection,
TCP_connection_open_w_delay);
else
- BGP_EVENT_ADD(peer->connection, TCP_connection_open);
+ BGP_EVENT_ADD(connection, TCP_connection_open);
return;
} else {
if (bgp_debug_neighbor_events(peer))
zlog_debug("%s [Event] Connect failed %d(%s)",
peer->host, status, safe_strerror(status));
- BGP_EVENT_ADD(peer->connection, TCP_connection_open_failed);
+ BGP_EVENT_ADD(connection, TCP_connection_open_failed);
return;
}
}
@@ -1916,12 +1914,10 @@ static enum bgp_fsm_state_progress bgp_start(struct peer_connection *connection)
* bgp_connect_check() as the handler for each and cancel the
* unused event in that function.
*/
- event_add_read(bm->master, bgp_connect_check, peer,
- peer->connection->fd,
- &peer->connection->t_connect_check_r);
- event_add_write(bm->master, bgp_connect_check, peer,
- peer->connection->fd,
- &peer->connection->t_connect_check_w);
+ event_add_read(bm->master, bgp_connect_check, connection,
+ connection->fd, &connection->t_connect_check_r);
+ event_add_write(bm->master, bgp_connect_check, connection,
+ connection->fd, &connection->t_connect_check_w);
break;
}
return BGP_FSM_SUCCESS;