I see in the svcrdma code, there is a big check to abort creating listener if 
AF is not AF_INET,
Do we have plans to address this on the server as well?

static struct svc_xprt *svc_rdma_create(struct svc_serv *serv,
                                        struct net *net,
                                        struct sockaddr *sa, int salen,
                                        int flags)
{
        struct rdma_cm_id *listen_id;
        struct svcxprt_rdma *cma_xprt;
        int ret;

        dprintk("svcrdma: Creating RDMA socket\n");
        if (sa->sa_family != AF_INET) {
                dprintk("svcrdma: Address family %d is not supported.\n", 
sa->sa_family);
                return ERR_PTR(-EAFNOSUPPORT);

-Regards
Devesh

> -----Original Message-----
> From: linux-rdma-ow...@vger.kernel.org [mailto:linux-rdma-
> ow...@vger.kernel.org] On Behalf Of Chuck Lever
> Sent: Saturday, March 14, 2015 2:57 AM
> To: linux-rdma@vger.kernel.org
> Subject: [PATCH v1 01/16] xprtrdma: Display IPv6 addresses and port numbers
> correctly
> 
> Signed-off-by: Chuck Lever <chuck.le...@oracle.com>
> ---
>  net/sunrpc/xprtrdma/transport.c |   47
> ++++++++++++++++++++++++++++++++-------
>  net/sunrpc/xprtrdma/verbs.c     |   21 +++++++----------
>  2 files changed, 47 insertions(+), 21 deletions(-)
> 
> diff --git a/net/sunrpc/xprtrdma/transport.c b/net/sunrpc/xprtrdma/transport.c
> index 2e192ba..26a62e7 100644
> --- a/net/sunrpc/xprtrdma/transport.c
> +++ b/net/sunrpc/xprtrdma/transport.c
> @@ -157,12 +157,47 @@ static struct ctl_table sunrpc_table[] = {
>  static struct rpc_xprt_ops xprt_rdma_procs;  /* forward reference */
> 
>  static void
> +xprt_rdma_format_addresses4(struct rpc_xprt *xprt, struct sockaddr
> +*sap) {
> +     struct sockaddr_in *sin = (struct sockaddr_in *)sap;
> +     char buf[20];
> +
> +     snprintf(buf, sizeof(buf), "%08x", ntohl(sin->sin_addr.s_addr));
> +     xprt->address_strings[RPC_DISPLAY_HEX_ADDR] = kstrdup(buf,
> +GFP_KERNEL);
> +
> +     xprt->address_strings[RPC_DISPLAY_NETID] = "rdma"; }
> +
> +static void
> +xprt_rdma_format_addresses6(struct rpc_xprt *xprt, struct sockaddr
> +*sap) {
> +     struct sockaddr_in6 *sin6 = (struct sockaddr_in6 *)sap;
> +     char buf[40];
> +
> +     snprintf(buf, sizeof(buf), "%pi6", &sin6->sin6_addr);
> +     xprt->address_strings[RPC_DISPLAY_HEX_ADDR] = kstrdup(buf,
> +GFP_KERNEL);
> +
> +     xprt->address_strings[RPC_DISPLAY_NETID] = "rdma6"; }
> +
> +static void
>  xprt_rdma_format_addresses(struct rpc_xprt *xprt)  {
>       struct sockaddr *sap = (struct sockaddr *)
>                                       &rpcx_to_rdmad(xprt).addr;
> -     struct sockaddr_in *sin = (struct sockaddr_in *)sap;
> -     char buf[64];
> +     char buf[128];
> +
> +     switch (sap->sa_family) {
> +     case AF_INET:
> +             xprt_rdma_format_addresses4(xprt, sap);
> +             break;
> +     case AF_INET6:
> +             xprt_rdma_format_addresses6(xprt, sap);
> +             break;
> +     default:
> +             pr_err("rpcrdma: Unrecognized address family\n");
> +             return;
> +     }
> 
>       (void)rpc_ntop(sap, buf, sizeof(buf));
>       xprt->address_strings[RPC_DISPLAY_ADDR] = kstrdup(buf,
> GFP_KERNEL); @@ -170,16 +205,10 @@ xprt_rdma_format_addresses(struct
> rpc_xprt *xprt)
>       snprintf(buf, sizeof(buf), "%u", rpc_get_port(sap));
>       xprt->address_strings[RPC_DISPLAY_PORT] = kstrdup(buf,
> GFP_KERNEL);
> 
> -     xprt->address_strings[RPC_DISPLAY_PROTO] = "rdma";
> -
> -     snprintf(buf, sizeof(buf), "%08x", ntohl(sin->sin_addr.s_addr));
> -     xprt->address_strings[RPC_DISPLAY_HEX_ADDR] = kstrdup(buf,
> GFP_KERNEL);
> -
>       snprintf(buf, sizeof(buf), "%4hx", rpc_get_port(sap));
>       xprt->address_strings[RPC_DISPLAY_HEX_PORT] = kstrdup(buf,
> GFP_KERNEL);
> 
> -     /* netid */
> -     xprt->address_strings[RPC_DISPLAY_NETID] = "rdma";
> +     xprt->address_strings[RPC_DISPLAY_PROTO] = "rdma";
>  }
> 
>  static void
> diff --git a/net/sunrpc/xprtrdma/verbs.c b/net/sunrpc/xprtrdma/verbs.c index
> 124676c..1aa55b7 100644
> --- a/net/sunrpc/xprtrdma/verbs.c
> +++ b/net/sunrpc/xprtrdma/verbs.c
> @@ -50,6 +50,7 @@
>  #include <linux/interrupt.h>
>  #include <linux/slab.h>
>  #include <linux/prefetch.h>
> +#include <linux/sunrpc/addr.h>
>  #include <asm/bitops.h>
> 
>  #include "xprt_rdma.h"
> @@ -424,7 +425,7 @@ rpcrdma_conn_upcall(struct rdma_cm_id *id, struct
> rdma_cm_event *event)
>       struct rpcrdma_ia *ia = &xprt->rx_ia;
>       struct rpcrdma_ep *ep = &xprt->rx_ep;
>  #if IS_ENABLED(CONFIG_SUNRPC_DEBUG)
> -     struct sockaddr_in *addr = (struct sockaddr_in *) &ep-
> >rep_remote_addr;
> +     struct sockaddr *sap = (struct sockaddr *)&ep->rep_remote_addr;
>  #endif
>       struct ib_qp_attr *attr = &ia->ri_qp_attr;
>       struct ib_qp_init_attr *iattr = &ia->ri_qp_init_attr; @@ -480,9 +481,8
> @@ connected:
>               wake_up_all(&ep->rep_connect_wait);
>               /*FALLTHROUGH*/
>       default:
> -             dprintk("RPC:       %s: %pI4:%u (ep 0x%p): %s\n",
> -                     __func__, &addr->sin_addr.s_addr,
> -                     ntohs(addr->sin_port), ep,
> +             dprintk("RPC:       %s: %pIS:%u (ep 0x%p): %s\n",
> +                     __func__, sap, rpc_get_port(sap), ep,
>                       CONNECTION_MSG(event->event));
>               break;
>       }
> @@ -491,19 +491,16 @@ connected:
>       if (connstate == 1) {
>               int ird = attr->max_dest_rd_atomic;
>               int tird = ep->rep_remote_cma.responder_resources;
> -             printk(KERN_INFO "rpcrdma: connection to %pI4:%u "
> -                     "on %s, memreg %d slots %d ird %d%s\n",
> -                     &addr->sin_addr.s_addr,
> -                     ntohs(addr->sin_port),
> +
> +             pr_info("rpcrdma: connection to %pIS:%u on %s, memreg %d
> slots %d ird %d%s\n",
> +                     sap, rpc_get_port(sap),
>                       ia->ri_id->device->name,
>                       ia->ri_memreg_strategy,
>                       xprt->rx_buf.rb_max_requests,
>                       ird, ird < 4 && ird < tird / 2 ? " (low!)" : "");
>       } else if (connstate < 0) {
> -             printk(KERN_INFO "rpcrdma: connection to %pI4:%u closed
> (%d)\n",
> -                     &addr->sin_addr.s_addr,
> -                     ntohs(addr->sin_port),
> -                     connstate);
> +             pr_info("rpcrdma: connection to %pIS:%u closed (%d)\n",
> +                     sap, rpc_get_port(sap), connstate);
>       }
>  #endif
> 
> 
> --
> To unsubscribe from this list: send the line "unsubscribe linux-rdma" in the 
> body
> of a message to majord...@vger.kernel.org More majordomo info at
> http://vger.kernel.org/majordomo-info.html
N�����r��y����b�X��ǧv�^�)޺{.n�+����{��ٚ�{ay�ʇڙ�,j��f���h���z��w���
���j:+v���w�j�m��������zZ+�����ݢj"��!�i

Reply via email to