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