summaryrefslogtreecommitdiff
path: root/bgpd/bgp_network.c
diff options
context:
space:
mode:
authorDonald Sharp <sharpd@nvidia.com>2023-09-08 12:18:07 -0400
committerDonald Sharp <sharpd@nvidia.com>2023-09-10 08:31:25 -0400
commit70c3c27ebc1c998a12c1edac05b47ddf53979de6 (patch)
tree35c5eb976d297cd279d97db93b70612498a46022 /bgpd/bgp_network.c
parentb2f25e1a17e601c687256715b50db109605c3a25 (diff)
bgpd: bgp_connect is struct peer_connection oriented
Make it so. Signed-off-by: Donald Sharp <sharpd@nvidia.com>
Diffstat (limited to 'bgpd/bgp_network.c')
-rw-r--r--bgpd/bgp_network.c45
1 files changed, 22 insertions, 23 deletions
diff --git a/bgpd/bgp_network.c b/bgpd/bgp_network.c
index fb5c297d4c..984cc53f5e 100644
--- a/bgpd/bgp_network.c
+++ b/bgpd/bgp_network.c
@@ -697,12 +697,12 @@ static int bgp_update_source(struct peer *peer)
}
/* BGP try to connect to the peer. */
-int bgp_connect(struct peer *peer)
+int bgp_connect(struct peer_connection *connection)
{
- assert(!CHECK_FLAG(peer->connection->thread_flags,
- PEER_THREAD_WRITES_ON));
- assert(!CHECK_FLAG(peer->connection->thread_flags,
- PEER_THREAD_READS_ON));
+ struct peer *peer = connection->peer;
+
+ assert(!CHECK_FLAG(connection->thread_flags, PEER_THREAD_WRITES_ON));
+ assert(!CHECK_FLAG(connection->thread_flags, PEER_THREAD_READS_ON));
ifindex_t ifindex = 0;
if (peer->conf_if && BGP_PEER_SU_UNSPEC(peer)) {
@@ -712,11 +712,11 @@ int bgp_connect(struct peer *peer)
}
frr_with_privs(&bgpd_privs) {
/* Make socket for the peer. */
- peer->connection->fd =
- vrf_sockunion_socket(&peer->su, peer->bgp->vrf_id,
- bgp_get_bound_name(peer));
+ connection->fd = vrf_sockunion_socket(&peer->su,
+ peer->bgp->vrf_id,
+ bgp_get_bound_name(peer));
}
- if (peer->connection->fd < 0) {
+ if (connection->fd < 0) {
peer->last_reset = PEER_DOWN_SOCKET_ERROR;
if (bgp_debug_neighbor_events(peer))
zlog_debug("%s: Failure to create socket for connection to %s, error received: %s(%d)",
@@ -725,18 +725,18 @@ int bgp_connect(struct peer *peer)
return -1;
}
- set_nonblocking(peer->connection->fd);
+ set_nonblocking(connection->fd);
/* Set the user configured MSS to TCP socket */
if (CHECK_FLAG(peer->flags, PEER_FLAG_TCP_MSS))
- sockopt_tcp_mss_set(peer->connection->fd, peer->tcp_mss);
+ sockopt_tcp_mss_set(connection->fd, peer->tcp_mss);
- bgp_socket_set_buffer_size(peer->connection->fd);
+ bgp_socket_set_buffer_size(connection->fd);
/* Set TCP keepalive when TCP keepalive is enabled */
- bgp_update_setsockopt_tcp_keepalive(peer->bgp, peer->connection->fd);
+ bgp_update_setsockopt_tcp_keepalive(peer->bgp, connection->fd);
- if (bgp_set_socket_ttl(peer, peer->connection->fd) < 0) {
+ if (bgp_set_socket_ttl(peer, connection->fd) < 0) {
peer->last_reset = PEER_DOWN_SOCKET_ERROR;
if (bgp_debug_neighbor_events(peer))
zlog_debug("%s: Failure to set socket ttl for connection to %s, error received: %s(%d)",
@@ -746,16 +746,15 @@ int bgp_connect(struct peer *peer)
return -1;
}
- sockopt_reuseaddr(peer->connection->fd);
- sockopt_reuseport(peer->connection->fd);
+ sockopt_reuseaddr(connection->fd);
+ sockopt_reuseport(connection->fd);
#ifdef IPTOS_PREC_INTERNETCONTROL
frr_with_privs(&bgpd_privs) {
if (sockunion_family(&peer->su) == AF_INET)
- setsockopt_ipv4_tos(peer->connection->fd, bm->tcp_dscp);
+ setsockopt_ipv4_tos(connection->fd, bm->tcp_dscp);
else if (sockunion_family(&peer->su) == AF_INET6)
- setsockopt_ipv6_tclass(peer->connection->fd,
- bm->tcp_dscp);
+ setsockopt_ipv6_tclass(connection->fd, bm->tcp_dscp);
}
#endif
@@ -767,7 +766,7 @@ int bgp_connect(struct peer *peer)
if (!BGP_PEER_SU_UNSPEC(peer))
bgp_md5_set(peer);
- bgp_md5_set_connect(peer->connection->fd, &peer->su, prefixlen,
+ bgp_md5_set_connect(connection->fd, &peer->su, prefixlen,
peer->password);
}
@@ -784,11 +783,11 @@ int bgp_connect(struct peer *peer)
if (bgp_debug_neighbor_events(peer))
zlog_debug("%s [Event] Connect start to %s fd %d", peer->host,
- peer->host, peer->connection->fd);
+ peer->host, connection->fd);
/* Connect to the remote peer. */
- return sockunion_connect(peer->connection->fd, &peer->su,
- htons(peer->port), ifindex);
+ return sockunion_connect(connection->fd, &peer->su, htons(peer->port),
+ ifindex);
}
/* After TCP connection is established. Get local address and port. */