Whamcloud - gitweb
LU-10391 lnet: change lnet_sock_connect to take sockaddr 03/37703/6
authorMr NeilBrown <neilb@suse.de>
Fri, 7 Feb 2020 02:05:57 +0000 (13:05 +1100)
committerOleg Drokin <green@whamcloud.com>
Thu, 23 Apr 2020 16:48:54 +0000 (16:48 +0000)
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 <neilb@suse.de>
Change-Id: I83ba37bcaade4a84cbce47d93f02043d038c5b29
Reviewed-on: https://review.whamcloud.com/37703
Tested-by: jenkins <devops@whamcloud.com>
Tested-by: Maloo <maloo@whamcloud.com>
Reviewed-by: Andreas Dilger <adilger@whamcloud.com>
Reviewed-by: Serguei Smirnov <ssmirnov@whamcloud.com>
Reviewed-by: Aurelien Degremont <degremoa@amazon.com>
lnet/include/lnet/lib-lnet.h
lnet/lnet/acceptor.c
lnet/lnet/lib-socket.c

index c4e5550..10ad352 100644 (file)
@@ -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);
index b11e09d..2fb84c8 100644 (file)
@@ -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)
index b801b47..5974818 100644 (file)
@@ -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);