diff options
| author | Donald Sharp <sharpd@nvidia.com> | 2023-08-26 21:30:08 -0400 | 
|---|---|---|
| committer | Donald Sharp <sharpd@nvidia.com> | 2023-09-10 08:31:25 -0400 | 
| commit | 6dc9dc1edd08a523728918673e0fc558edd610ee (patch) | |
| tree | b6609f616432039a43464a237c04e589e07ba631 /bgpd/bgp_fsm.c | |
| parent | 8e90c4c953bce7f9b2549de1edf1423d8b49ff58 (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.c | 40 | 
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;  | 
