All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH krping]: Add support to accept IPV6 addresses as input argument
@ 2013-10-04 11:24 Somnath Kotur
       [not found] ` <2bc438ad-a900-4f5a-81a5-c49fafdc193e-3RiH6ntJJkOPfaB/Gd0HpljyZtpTMMwT@public.gmane.org>
  0 siblings, 1 reply; 7+ messages in thread
From: Somnath Kotur @ 2013-10-04 11:24 UTC (permalink / raw)
  To: linux-rdma-u79uwXL29TY76Z2rM5mHXA; +Cc: Somnath Kotur


Signed-off-by: Somnath Kotur <somnath.kotur-laKkSmNT4hbQT0dZR+AlfA@public.gmane.org>
---
v2: Incorporated Steve's comments and changed sockaddr to sockaddr_storage

 krping.c |   51 ++++++++++++++++++++++++++++++++++++---------------
 1 files changed, 36 insertions(+), 15 deletions(-)

diff --git a/krping.c b/krping.c
index 59900ab..ac31023 100644
--- a/krping.c
+++ b/krping.c
@@ -79,6 +79,7 @@ static const struct krping_option krping_opts[] = {
 	{"count", OPT_INT, 'C'},
 	{"size", OPT_INT, 'S'},
 	{"addr", OPT_STRING, 'a'},
+	{"addr6", OPT_STRING, 'A'},
 	{"port", OPT_INT, 'p'},
 	{"verbose", OPT_NOPARAM, 'v'},
 	{"validate", OPT_NOPARAM, 'V'},
@@ -131,6 +132,7 @@ static struct proc_dir_entry *krping_proc;
  *
  * /bin/echo server,port=9999,addr=192.168.69.142,validate > /proc/krping  
  * /bin/echo client,port=9999,addr=192.168.69.142,validate > /proc/krping  
+ * /bin/echo client,port=9999,addr6=2001:db8:0:f101::1,validate > /proc/krping
  *
  * krping "ping/pong" loop:
  * 	client sends source rkey/addr/len
@@ -235,8 +237,9 @@ struct krping_cb {
 	struct krping_stats stats;
 
 	uint16_t port;			/* dst port in NBO */
-	uint32_t addr;			/* dst addr in NBO */
+	u8 addr[16];			/* dst addr in NBO */
 	char *addr_str;			/* dst addr string */
+	uint8_t addr_type;		/* ADDR_FAMILY - IPv4/V6 */
 	int verbose;			/* verbose logging */
 	int count;			/* ping count */
 	int size;			/* ping data size */
@@ -1577,17 +1580,32 @@ static int fastreg_supported(struct ib_device *dev)
 	return 1;
 }
 
+static void fill_sockaddr(struct sockaddr_storage *sin, struct krping_cb *cb)
+{
+	memset(sin, 0, sizeof(*sin));
+
+	if (cb->addr_type == AF_INET) {
+		struct sockaddr_in *sin4 = (struct sockaddr_in *)sin;
+		sin4->sin_family = AF_INET;
+		memcpy((void *)&sin4->sin_addr.s_addr, cb->addr, 4);
+		sin4->sin_port = cb->port;
+	} else if (cb->addr_type == AF_INET6) {
+		struct sockaddr_in6 *sin6 = (struct sockaddr_in6 *)sin;
+		sin6->sin6_family = AF_INET6;
+		memcpy((void *)&sin6->sin6_addr, cb->addr, 16);
+		sin6->sin6_port = cb->port;
+	}
+}
+
 static int krping_bind_server(struct krping_cb *cb)
 {
-	struct sockaddr_in sin;
+	struct sockaddr_storage sin;
 	int ret;
 
-	memset(&sin, 0, sizeof(sin));
-	sin.sin_family = AF_INET;
-	sin.sin_addr.s_addr = cb->addr;
-	sin.sin_port = cb->port;
 
-	ret = rdma_bind_addr(cb->cm_id, (struct sockaddr *) &sin);
+	fill_sockaddr(&sin, cb);
+
+	ret = rdma_bind_addr(cb->cm_id, (struct sockaddr *)&sin);
 	if (ret) {
 		printk(KERN_ERR PFX "rdma_bind_addr error %d\n", ret);
 		return ret;
@@ -2047,16 +2065,12 @@ static int krping_connect_client(struct krping_cb *cb)
 
 static int krping_bind_client(struct krping_cb *cb)
 {
-	struct sockaddr_in sin;
+	struct sockaddr_storage sin;
 	int ret;
 
-	memset(&sin, 0, sizeof(sin));
-	sin.sin_family = AF_INET;
-	sin.sin_addr.s_addr = cb->addr;
-	sin.sin_port = cb->port;
+	fill_sockaddr(&sin, cb);
 
-	ret = rdma_resolve_addr(cb->cm_id, NULL, (struct sockaddr *) &sin,
-				2000);
+	ret = rdma_resolve_addr(cb->cm_id, NULL, (struct sockaddr *)&sin, 2000);
 	if (ret) {
 		printk(KERN_ERR PFX "rdma_resolve_addr error %d\n", ret);
 		return ret;
@@ -2155,9 +2169,16 @@ int krping_doit(char *cmd)
 		switch (op) {
 		case 'a':
 			cb->addr_str = optarg;
-			cb->addr = in_aton(optarg);
+			in4_pton(optarg, -1, cb->addr, -1, NULL);
+			cb->addr_type = AF_INET;
 			DEBUG_LOG("ipaddr (%s)\n", optarg);
 			break;
+		case 'A':
+			cb->addr_str = optarg;
+			in6_pton(optarg, -1, cb->addr, -1, NULL);
+			cb->addr_type = AF_INET6;
+			DEBUG_LOG("ipv6addr (%s)\n", optarg);
+			break;
 		case 'p':
 			cb->port = htons(optint);
 			DEBUG_LOG("port %d\n", (int)optint);
-- 
1.7.1

--
To unsubscribe from this list: send the line "unsubscribe linux-rdma" in
the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

^ permalink raw reply related	[flat|nested] 7+ messages in thread

* Re: [PATCH krping]: Add support to accept IPV6 addresses as input argument
       [not found] ` <2bc438ad-a900-4f5a-81a5-c49fafdc193e-3RiH6ntJJkOPfaB/Gd0HpljyZtpTMMwT@public.gmane.org>
@ 2013-10-04 14:47   ` Steve Wise
       [not found]     ` <524ED4FA.1080404-7bPotxP6k4+P2YhJcF5u+vpXobYPEAuW@public.gmane.org>
  2013-10-07 15:59   ` Steve Wise
  1 sibling, 1 reply; 7+ messages in thread
From: Steve Wise @ 2013-10-04 14:47 UTC (permalink / raw)
  To: Somnath Kotur; +Cc: linux-rdma-u79uwXL29TY76Z2rM5mHXA


On 10/4/2013 6:24 AM, Somnath Kotur wrote:
> Signed-off-by: Somnath Kotur <somnath.kotur-laKkSmNT4hbQT0dZR+AlfA@public.gmane.org>
> ---
> v2: Incorporated Steve's comments and changed sockaddr to sockaddr_storage
>
>

Hey Somnath,  thanks for providing this.  What HW have you tested with?

Steve.
--
To unsubscribe from this list: send the line "unsubscribe linux-rdma" in
the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

^ permalink raw reply	[flat|nested] 7+ messages in thread

* RE: [PATCH krping]: Add support to accept IPV6 addresses as input argument
       [not found]     ` <524ED4FA.1080404-7bPotxP6k4+P2YhJcF5u+vpXobYPEAuW@public.gmane.org>
@ 2013-10-05  4:28       ` Somnath Kotur
  0 siblings, 0 replies; 7+ messages in thread
From: Somnath Kotur @ 2013-10-05  4:28 UTC (permalink / raw)
  To: Steve Wise; +Cc: linux-rdma-u79uwXL29TY76Z2rM5mHXA



> Hey Somnath,  thanks for providing this.  What HW have you tested with?
> 
> Steve.
Thank you Steve. Have tested it against the Emulex HW / ocrdma driver
--
To unsubscribe from this list: send the line "unsubscribe linux-rdma" in
the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [PATCH krping]: Add support to accept IPV6 addresses as input argument
       [not found] ` <2bc438ad-a900-4f5a-81a5-c49fafdc193e-3RiH6ntJJkOPfaB/Gd0HpljyZtpTMMwT@public.gmane.org>
  2013-10-04 14:47   ` Steve Wise
@ 2013-10-07 15:59   ` Steve Wise
  1 sibling, 0 replies; 7+ messages in thread
From: Steve Wise @ 2013-10-07 15:59 UTC (permalink / raw)
  To: Somnath Kotur; +Cc: linux-rdma-u79uwXL29TY76Z2rM5mHXA

On 10/4/2013 6:24 AM, Somnath Kotur wrote:
> Signed-off-by: Somnath Kotur <somnath.kotur-laKkSmNT4hbQT0dZR+AlfA@public.gmane.org>
>

Applied.  Thanks.

--
To unsubscribe from this list: send the line "unsubscribe linux-rdma" in
the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [PATCH krping]: Add support to accept IPV6 addresses as input argument.
       [not found] ` <68b243a0-781c-4d56-8a25-5dbb3d464a3c-3RiH6ntJJkOPfaB/Gd0HpljyZtpTMMwT@public.gmane.org>
  2013-10-03 16:29   ` Steve Wise
@ 2013-10-03 18:17   ` Or Gerlitz
  1 sibling, 0 replies; 7+ messages in thread
From: Or Gerlitz @ 2013-10-03 18:17 UTC (permalink / raw)
  To: Somnath Kotur; +Cc: linux-rdma

Somnath Kotur <somnath.kotur-laKkSmNT4hbQT0dZR+AlfA@public.gmane.org> wrote:

empty change-log? please write something...


> Signed-off-by: Somnath Kotur <somnath.kotur-laKkSmNT4hbQT0dZR+AlfA@public.gmane.org>
> ---
>  krping.c |   55 ++++++++++++++++++++++++++++++++++++++++---------------
>  1 files changed, 40 insertions(+), 15 deletions(-)
>
> diff --git a/krping.c b/krping.c
> index 59900ab..43799eb 100644
> --- a/krping.c
> +++ b/krping.c
> @@ -79,6 +79,7 @@ static const struct krping_option krping_opts[] = {
>         {"count", OPT_INT, 'C'},
>         {"size", OPT_INT, 'S'},
>         {"addr", OPT_STRING, 'a'},
> +       {"addr6", OPT_STRING, 'A'},
>         {"port", OPT_INT, 'p'},
>         {"verbose", OPT_NOPARAM, 'v'},
>         {"validate", OPT_NOPARAM, 'V'},
> @@ -131,6 +132,7 @@ static struct proc_dir_entry *krping_proc;
>   *
>   * /bin/echo server,port=9999,addr=192.168.69.142,validate > /proc/krping
>   * /bin/echo client,port=9999,addr=192.168.69.142,validate > /proc/krping
> + * /bin/echo client,port=9999,addr6=2001:db8:0:f101::1,validate > /proc/krping
>   *
>   * krping "ping/pong" loop:
>   *     client sends source rkey/addr/len
> @@ -235,8 +237,9 @@ struct krping_cb {
>         struct krping_stats stats;
>
>         uint16_t port;                  /* dst port in NBO */
> -       uint32_t addr;                  /* dst addr in NBO */
> +       u8 addr[16];                    /* dst addr in NBO */
>         char *addr_str;                 /* dst addr string */
> +       uint8_t addr_type;              /* ADDR_FAMILY - IPv4/V6 */
>         int verbose;                    /* verbose logging */
>         int count;                      /* ping count */
>         int size;                       /* ping data size */
> @@ -1577,17 +1580,32 @@ static int fastreg_supported(struct ib_device *dev)
>         return 1;
>  }
>
> +static void fill_sockaddr(struct sockaddr *sin, struct krping_cb *cb)
> +{
> +       memset(sin, 0, sizeof(*sin));
> +
> +       if (cb->addr_type == AF_INET) {
> +               struct sockaddr_in *sin4 = (struct sockaddr_in *)sin;
> +               sin4->sin_family = AF_INET;
> +               memcpy((void *)&sin4->sin_addr.s_addr, cb->addr, 4);
> +               sin4->sin_port = cb->port;
> +       } else if (cb->addr_type == AF_INET6) {
> +               struct sockaddr_in6 *sin6 = (struct sockaddr_in6 *)sin;
> +               sin6->sin6_family = AF_INET6;
> +               memcpy((void *)&sin6->sin6_addr, cb->addr, 16);
> +               sin6->sin6_port = cb->port;
> +       }
> +}
> +
>  static int krping_bind_server(struct krping_cb *cb)
>  {
> -       struct sockaddr_in sin;
> +       struct sockaddr sin;
>         int ret;
>
> -       memset(&sin, 0, sizeof(sin));
> -       sin.sin_family = AF_INET;
> -       sin.sin_addr.s_addr = cb->addr;
> -       sin.sin_port = cb->port;
>
> -       ret = rdma_bind_addr(cb->cm_id, (struct sockaddr *) &sin);
> +       fill_sockaddr(&sin, cb);
> +
> +       ret = rdma_bind_addr(cb->cm_id, &sin);
>         if (ret) {
>                 printk(KERN_ERR PFX "rdma_bind_addr error %d\n", ret);
>                 return ret;
> @@ -1692,7 +1710,9 @@ static void krping_test_client(struct krping_cb *cb)
>                         printk(KERN_ERR PFX "krping_format_send failed\n");
>                         break;
>                 }
> +               DEBUG_LOG("%s(): Calling ib_post_send\n", __func__);
>                 ret = ib_post_send(cb->qp, &cb->sq_wr, &bad_wr);
> +               DEBUG_LOG("%s(): ib_post_send = %d\n", __func__, ret);

letfover prints @ fast-path from debugging? please remove them

>                 if (ret) {
>                         printk(KERN_ERR PFX "post send error %d\n", ret);
>                         break;
> @@ -2029,6 +2049,7 @@ static int krping_connect_client(struct krping_cb *cb)
>         conn_param.initiator_depth = 1;
>         conn_param.retry_count = 10;
>
> +       DEBUG_LOG("Calling rdma_connect..\n");
>         ret = rdma_connect(cb->cm_id, &conn_param);

remove this one too,
--
To unsubscribe from this list: send the line "unsubscribe linux-rdma" in
the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [PATCH krping]: Add support to accept IPV6 addresses as input argument.
       [not found] ` <68b243a0-781c-4d56-8a25-5dbb3d464a3c-3RiH6ntJJkOPfaB/Gd0HpljyZtpTMMwT@public.gmane.org>
@ 2013-10-03 16:29   ` Steve Wise
  2013-10-03 18:17   ` Or Gerlitz
  1 sibling, 0 replies; 7+ messages in thread
From: Steve Wise @ 2013-10-03 16:29 UTC (permalink / raw)
  To: Somnath Kotur; +Cc: linux-rdma-u79uwXL29TY76Z2rM5mHXA

On 10/3/2013 1:13 AM, Somnath Kotur wrote:
> Signed-off-by: Somnath Kotur <somnath.kotur-laKkSmNT4hbQT0dZR+AlfA@public.gmane.org>
> ---
>   krping.c |   55 ++++++++++++++++++++++++++++++++++++++++---------------
>   1 files changed, 40 insertions(+), 15 deletions(-)
>
> diff --git a/krping.c b/krping.c
> index 59900ab..43799eb 100644
> --- a/krping.c
> +++ b/krping.c
> @@ -79,6 +79,7 @@ static const struct krping_option krping_opts[] = {
>   	{"count", OPT_INT, 'C'},
>   	{"size", OPT_INT, 'S'},
>   	{"addr", OPT_STRING, 'a'},
> +	{"addr6", OPT_STRING, 'A'},
>   	{"port", OPT_INT, 'p'},
>   	{"verbose", OPT_NOPARAM, 'v'},
>   	{"validate", OPT_NOPARAM, 'V'},
> @@ -131,6 +132,7 @@ static struct proc_dir_entry *krping_proc;
>    *
>    * /bin/echo server,port=9999,addr=192.168.69.142,validate > /proc/krping
>    * /bin/echo client,port=9999,addr=192.168.69.142,validate > /proc/krping
> + * /bin/echo client,port=9999,addr6=2001:db8:0:f101::1,validate > /proc/krping
>    *
>    * krping "ping/pong" loop:
>    * 	client sends source rkey/addr/len
> @@ -235,8 +237,9 @@ struct krping_cb {
>   	struct krping_stats stats;
>   
>   	uint16_t port;			/* dst port in NBO */
> -	uint32_t addr;			/* dst addr in NBO */
> +	u8 addr[16];			/* dst addr in NBO */
>   	char *addr_str;			/* dst addr string */
> +	uint8_t addr_type;		/* ADDR_FAMILY - IPv4/V6 */
>   	int verbose;			/* verbose logging */
>   	int count;			/* ping count */
>   	int size;			/* ping data size */
> @@ -1577,17 +1580,32 @@ static int fastreg_supported(struct ib_device *dev)
>   	return 1;
>   }
>   
> +static void fill_sockaddr(struct sockaddr *sin, struct krping_cb *cb)
> +{
> +	memset(sin, 0, sizeof(*sin));
> +
> +	if (cb->addr_type == AF_INET) {
> +		struct sockaddr_in *sin4 = (struct sockaddr_in *)sin;
> +		sin4->sin_family = AF_INET;
> +		memcpy((void *)&sin4->sin_addr.s_addr, cb->addr, 4);
> +		sin4->sin_port = cb->port;
> +	} else if (cb->addr_type == AF_INET6) {
> +		struct sockaddr_in6 *sin6 = (struct sockaddr_in6 *)sin;
> +		sin6->sin6_family = AF_INET6;
> +		memcpy((void *)&sin6->sin6_addr, cb->addr, 16);
> +		sin6->sin6_port = cb->port;
> +	}
> +}
> +
>   static int krping_bind_server(struct krping_cb *cb)
>   {
> -	struct sockaddr_in sin;
> +	struct sockaddr sin;

Doesn't this need to be sockaddr_storage?


>   	int ret;
>   
> -	memset(&sin, 0, sizeof(sin));
> -	sin.sin_family = AF_INET;
> -	sin.sin_addr.s_addr = cb->addr;
> -	sin.sin_port = cb->port;
>   
> -	ret = rdma_bind_addr(cb->cm_id, (struct sockaddr *) &sin);
> +	fill_sockaddr(&sin, cb);
> +
> +	ret = rdma_bind_addr(cb->cm_id, &sin);
>   	if (ret) {
>   		printk(KERN_ERR PFX "rdma_bind_addr error %d\n", ret);
>   		return ret;
> @@ -1692,7 +1710,9 @@ static void krping_test_client(struct krping_cb *cb)
>   			printk(KERN_ERR PFX "krping_format_send failed\n");
>   			break;
>   		}
> +		DEBUG_LOG("%s(): Calling ib_post_send\n", __func__);
>   		ret = ib_post_send(cb->qp, &cb->sq_wr, &bad_wr);
> +		DEBUG_LOG("%s(): ib_post_send = %d\n", __func__, ret);
>   		if (ret) {
>   			printk(KERN_ERR PFX "post send error %d\n", ret);
>   			break;
> @@ -2029,6 +2049,7 @@ static int krping_connect_client(struct krping_cb *cb)
>   	conn_param.initiator_depth = 1;
>   	conn_param.retry_count = 10;
>   
> +	DEBUG_LOG("Calling rdma_connect..\n");
>   	ret = rdma_connect(cb->cm_id, &conn_param);
>   	if (ret) {
>   		printk(KERN_ERR PFX "rdma_connect error %d\n", ret);
> @@ -2047,16 +2068,12 @@ static int krping_connect_client(struct krping_cb *cb)
>   
>   static int krping_bind_client(struct krping_cb *cb)
>   {
> -	struct sockaddr_in sin;
> +	struct sockaddr sin;

and here too.

>   	int ret;
>   
> -	memset(&sin, 0, sizeof(sin));
> -	sin.sin_family = AF_INET;
> -	sin.sin_addr.s_addr = cb->addr;
> -	sin.sin_port = cb->port;
> +	fill_sockaddr(&sin, cb);
>   
> -	ret = rdma_resolve_addr(cb->cm_id, NULL, (struct sockaddr *) &sin,
> -				2000);
> +	ret = rdma_resolve_addr(cb->cm_id, NULL, &sin, 2000);
>   	if (ret) {
>   		printk(KERN_ERR PFX "rdma_resolve_addr error %d\n", ret);
>   		return ret;
> @@ -2103,6 +2120,7 @@ static void krping_run_client(struct krping_cb *cb)
>   		printk(KERN_ERR PFX "ib_post_recv failed: %d\n", ret);
>   		goto err2;
>   	}
> +	DEBUG_LOG("ib_post_recv success!\n");
>   
>   	ret = krping_connect_client(cb);
>   	if (ret) {
> @@ -2155,9 +2173,16 @@ int krping_doit(char *cmd)
>   		switch (op) {
>   		case 'a':
>   			cb->addr_str = optarg;
> -			cb->addr = in_aton(optarg);
> +			in4_pton(optarg, -1, cb->addr, -1, NULL);
> +			cb->addr_type = AF_INET;
>   			DEBUG_LOG("ipaddr (%s)\n", optarg);
>   			break;
> +		case 'A':
> +			cb->addr_str = optarg;
> +			in6_pton(optarg, -1, cb->addr, -1, NULL);
> +			cb->addr_type = AF_INET6;
> +			DEBUG_LOG("ipv6addr (%s)\n", optarg);
> +			break;
>   		case 'p':
>   			cb->port = htons(optint);
>   			DEBUG_LOG("port %d\n", (int)optint);

--
To unsubscribe from this list: send the line "unsubscribe linux-rdma" in
the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

^ permalink raw reply	[flat|nested] 7+ messages in thread

* [PATCH krping]: Add support to accept IPV6 addresses as input argument.
@ 2013-10-03  6:13 Somnath Kotur
       [not found] ` <68b243a0-781c-4d56-8a25-5dbb3d464a3c-3RiH6ntJJkOPfaB/Gd0HpljyZtpTMMwT@public.gmane.org>
  0 siblings, 1 reply; 7+ messages in thread
From: Somnath Kotur @ 2013-10-03  6:13 UTC (permalink / raw)
  To: linux-rdma-u79uwXL29TY76Z2rM5mHXA; +Cc: Somnath Kotur

Signed-off-by: Somnath Kotur <somnath.kotur-laKkSmNT4hbQT0dZR+AlfA@public.gmane.org>
---
 krping.c |   55 ++++++++++++++++++++++++++++++++++++++++---------------
 1 files changed, 40 insertions(+), 15 deletions(-)

diff --git a/krping.c b/krping.c
index 59900ab..43799eb 100644
--- a/krping.c
+++ b/krping.c
@@ -79,6 +79,7 @@ static const struct krping_option krping_opts[] = {
 	{"count", OPT_INT, 'C'},
 	{"size", OPT_INT, 'S'},
 	{"addr", OPT_STRING, 'a'},
+	{"addr6", OPT_STRING, 'A'},
 	{"port", OPT_INT, 'p'},
 	{"verbose", OPT_NOPARAM, 'v'},
 	{"validate", OPT_NOPARAM, 'V'},
@@ -131,6 +132,7 @@ static struct proc_dir_entry *krping_proc;
  *
  * /bin/echo server,port=9999,addr=192.168.69.142,validate > /proc/krping  
  * /bin/echo client,port=9999,addr=192.168.69.142,validate > /proc/krping  
+ * /bin/echo client,port=9999,addr6=2001:db8:0:f101::1,validate > /proc/krping
  *
  * krping "ping/pong" loop:
  * 	client sends source rkey/addr/len
@@ -235,8 +237,9 @@ struct krping_cb {
 	struct krping_stats stats;
 
 	uint16_t port;			/* dst port in NBO */
-	uint32_t addr;			/* dst addr in NBO */
+	u8 addr[16];			/* dst addr in NBO */
 	char *addr_str;			/* dst addr string */
+	uint8_t addr_type;		/* ADDR_FAMILY - IPv4/V6 */
 	int verbose;			/* verbose logging */
 	int count;			/* ping count */
 	int size;			/* ping data size */
@@ -1577,17 +1580,32 @@ static int fastreg_supported(struct ib_device *dev)
 	return 1;
 }
 
+static void fill_sockaddr(struct sockaddr *sin, struct krping_cb *cb)
+{
+	memset(sin, 0, sizeof(*sin));
+
+	if (cb->addr_type == AF_INET) {
+		struct sockaddr_in *sin4 = (struct sockaddr_in *)sin;
+		sin4->sin_family = AF_INET;
+		memcpy((void *)&sin4->sin_addr.s_addr, cb->addr, 4);
+		sin4->sin_port = cb->port;
+	} else if (cb->addr_type == AF_INET6) {
+		struct sockaddr_in6 *sin6 = (struct sockaddr_in6 *)sin;
+		sin6->sin6_family = AF_INET6;
+		memcpy((void *)&sin6->sin6_addr, cb->addr, 16);
+		sin6->sin6_port = cb->port;
+	}
+}
+
 static int krping_bind_server(struct krping_cb *cb)
 {
-	struct sockaddr_in sin;
+	struct sockaddr sin;
 	int ret;
 
-	memset(&sin, 0, sizeof(sin));
-	sin.sin_family = AF_INET;
-	sin.sin_addr.s_addr = cb->addr;
-	sin.sin_port = cb->port;
 
-	ret = rdma_bind_addr(cb->cm_id, (struct sockaddr *) &sin);
+	fill_sockaddr(&sin, cb);
+
+	ret = rdma_bind_addr(cb->cm_id, &sin);
 	if (ret) {
 		printk(KERN_ERR PFX "rdma_bind_addr error %d\n", ret);
 		return ret;
@@ -1692,7 +1710,9 @@ static void krping_test_client(struct krping_cb *cb)
 			printk(KERN_ERR PFX "krping_format_send failed\n");
 			break;
 		}
+		DEBUG_LOG("%s(): Calling ib_post_send\n", __func__);
 		ret = ib_post_send(cb->qp, &cb->sq_wr, &bad_wr);
+		DEBUG_LOG("%s(): ib_post_send = %d\n", __func__, ret);
 		if (ret) {
 			printk(KERN_ERR PFX "post send error %d\n", ret);
 			break;
@@ -2029,6 +2049,7 @@ static int krping_connect_client(struct krping_cb *cb)
 	conn_param.initiator_depth = 1;
 	conn_param.retry_count = 10;
 
+	DEBUG_LOG("Calling rdma_connect..\n");
 	ret = rdma_connect(cb->cm_id, &conn_param);
 	if (ret) {
 		printk(KERN_ERR PFX "rdma_connect error %d\n", ret);
@@ -2047,16 +2068,12 @@ static int krping_connect_client(struct krping_cb *cb)
 
 static int krping_bind_client(struct krping_cb *cb)
 {
-	struct sockaddr_in sin;
+	struct sockaddr sin;
 	int ret;
 
-	memset(&sin, 0, sizeof(sin));
-	sin.sin_family = AF_INET;
-	sin.sin_addr.s_addr = cb->addr;
-	sin.sin_port = cb->port;
+	fill_sockaddr(&sin, cb);
 
-	ret = rdma_resolve_addr(cb->cm_id, NULL, (struct sockaddr *) &sin,
-				2000);
+	ret = rdma_resolve_addr(cb->cm_id, NULL, &sin, 2000);
 	if (ret) {
 		printk(KERN_ERR PFX "rdma_resolve_addr error %d\n", ret);
 		return ret;
@@ -2103,6 +2120,7 @@ static void krping_run_client(struct krping_cb *cb)
 		printk(KERN_ERR PFX "ib_post_recv failed: %d\n", ret);
 		goto err2;
 	}
+	DEBUG_LOG("ib_post_recv success!\n");
 
 	ret = krping_connect_client(cb);
 	if (ret) {
@@ -2155,9 +2173,16 @@ int krping_doit(char *cmd)
 		switch (op) {
 		case 'a':
 			cb->addr_str = optarg;
-			cb->addr = in_aton(optarg);
+			in4_pton(optarg, -1, cb->addr, -1, NULL);
+			cb->addr_type = AF_INET;
 			DEBUG_LOG("ipaddr (%s)\n", optarg);
 			break;
+		case 'A':
+			cb->addr_str = optarg;
+			in6_pton(optarg, -1, cb->addr, -1, NULL);
+			cb->addr_type = AF_INET6;
+			DEBUG_LOG("ipv6addr (%s)\n", optarg);
+			break;
 		case 'p':
 			cb->port = htons(optint);
 			DEBUG_LOG("port %d\n", (int)optint);
-- 
1.7.1

--
To unsubscribe from this list: send the line "unsubscribe linux-rdma" in
the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

^ permalink raw reply related	[flat|nested] 7+ messages in thread

end of thread, other threads:[~2013-10-07 15:59 UTC | newest]

Thread overview: 7+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2013-10-04 11:24 [PATCH krping]: Add support to accept IPV6 addresses as input argument Somnath Kotur
     [not found] ` <2bc438ad-a900-4f5a-81a5-c49fafdc193e-3RiH6ntJJkOPfaB/Gd0HpljyZtpTMMwT@public.gmane.org>
2013-10-04 14:47   ` Steve Wise
     [not found]     ` <524ED4FA.1080404-7bPotxP6k4+P2YhJcF5u+vpXobYPEAuW@public.gmane.org>
2013-10-05  4:28       ` Somnath Kotur
2013-10-07 15:59   ` Steve Wise
  -- strict thread matches above, loose matches on Subject: below --
2013-10-03  6:13 Somnath Kotur
     [not found] ` <68b243a0-781c-4d56-8a25-5dbb3d464a3c-3RiH6ntJJkOPfaB/Gd0HpljyZtpTMMwT@public.gmane.org>
2013-10-03 16:29   ` Steve Wise
2013-10-03 18:17   ` Or Gerlitz

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.