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: [email protected] [mailto:linux-rdma-
> [email protected]] On Behalf Of Chuck Lever
> Sent: Saturday, March 14, 2015 2:57 AM
> To: [email protected]
> Subject: [PATCH v1 01/16] xprtrdma: Display IPv6 addresses and port numbers
> correctly
>
> Signed-off-by: Chuck Lever <[email protected]>
> ---
> 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 [email protected] 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