From a486ca181d44682187016d41d6922c68474b226d Mon Sep 17 00:00:00 2001 From: Mr NeilBrown Date: Fri, 7 Feb 2020 13:05:57 +1100 Subject: [PATCH] LU-10391 lnet: change lnet_sock_connect to take sockaddr Rather than passing a u32 IPv4 address plus port to lnet_sock_connect() pass a 'struct sockaddr'. This will allow IPv6 addresses to be requested. Signed-off-by: Mr NeilBrown Change-Id: I83ba37bcaade4a84cbce47d93f02043d038c5b29 Reviewed-on: https://review.whamcloud.com/37703 Tested-by: jenkins Tested-by: Maloo Reviewed-by: Andreas Dilger Reviewed-by: Serguei Smirnov Reviewed-by: Aurelien Degremont --- lnet/include/lnet/lib-lnet.h | 3 ++- lnet/lnet/acceptor.c | 5 ++++- lnet/lnet/lib-socket.c | 18 +++++------------- 3 files changed, 11 insertions(+), 15 deletions(-) diff --git a/lnet/include/lnet/lib-lnet.h b/lnet/include/lnet/lib-lnet.h index c4e5550..10ad352 100644 --- a/lnet/include/lnet/lib-lnet.h +++ b/lnet/include/lnet/lib-lnet.h @@ -803,7 +803,8 @@ int lnet_sock_read(struct socket *sock, void *buffer, int nob, int timeout); struct socket *lnet_sock_listen(int port, int backlog, struct net *ns); struct socket *lnet_sock_connect(int interface, int local_port, - __u32 peer_ip, int peer_port, struct net *ns); + struct sockaddr *peeraddr, + struct net *ns); int lnet_peers_start_down(void); int lnet_peer_buffer_credits(struct lnet_net *net); diff --git a/lnet/lnet/acceptor.c b/lnet/lnet/acceptor.c index b11e09d..2fb84c8 100644 --- a/lnet/lnet/acceptor.c +++ b/lnet/lnet/acceptor.c @@ -159,9 +159,12 @@ lnet_connect(lnet_nid_t peer_nid, int interface, __u32 peer_ip, port >= LNET_ACCEPTOR_MIN_RESERVED_PORT; --port) { /* Iterate through reserved ports. */ + struct sockaddr_in paddr = {.sin_family = AF_INET}; + paddr.sin_addr.s_addr = htonl(peer_ip); + paddr.sin_port = htons(peer_port); sock = lnet_sock_connect(interface, port, - peer_ip, peer_port, ns); + (struct sockaddr *)&paddr, ns); if (IS_ERR(sock)) { rc = PTR_ERR(sock); if (rc == -EADDRINUSE || rc == -EADDRNOTAVAIL) diff --git a/lnet/lnet/lib-socket.c b/lnet/lnet/lib-socket.c index b801b47..5974818 100644 --- a/lnet/lnet/lib-socket.c +++ b/lnet/lnet/lib-socket.c @@ -376,25 +376,17 @@ lnet_sock_listen(int local_port, int backlog, struct net *ns) struct socket * lnet_sock_connect(int interface, int local_port, - __u32 peer_ip, int peer_port, + struct sockaddr *peeraddr, struct net *ns) { struct socket *sock; - struct sockaddr_in srvaddr; int rc; - memset(&srvaddr, 0, sizeof(srvaddr)); - srvaddr.sin_family = AF_INET; - srvaddr.sin_port = htons(peer_port); - srvaddr.sin_addr.s_addr = htonl(peer_ip); - - sock = lnet_sock_create(interface, (struct sockaddr *)&srvaddr, - local_port, ns); + sock = lnet_sock_create(interface, peeraddr, local_port, ns); if (IS_ERR(sock)) return sock; - rc = kernel_connect(sock, (struct sockaddr *)&srvaddr, - sizeof(srvaddr), 0); + rc = kernel_connect(sock, peeraddr, sizeof(struct sockaddr_in), 0); if (rc == 0) return sock; @@ -404,8 +396,8 @@ lnet_sock_connect(int interface, int local_port, * port... */ CDEBUG_LIMIT(rc == -EADDRNOTAVAIL ? D_NET : D_NETERROR, - "Error %d connecting %d -> %pI4h/%d\n", rc, - local_port, &peer_ip, peer_port); + "Error %d connecting %d -> %pISp\n", rc, + local_port, peeraddr); sock_release(sock); return ERR_PTR(rc); -- 1.8.3.1