From patchwork Thu Jul 18 19:52:11 2013 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Hefty, Sean" X-Patchwork-Id: 2829796 Return-Path: X-Original-To: patchwork-linux-rdma@patchwork.kernel.org Delivered-To: patchwork-parsemail@patchwork1.web.kernel.org Received: from mail.kernel.org (mail.kernel.org [198.145.19.201]) by patchwork1.web.kernel.org (Postfix) with ESMTP id 5E75C9F4D4 for ; Thu, 18 Jul 2013 19:52:55 +0000 (UTC) Received: from mail.kernel.org (localhost [127.0.0.1]) by mail.kernel.org (Postfix) with ESMTP id 2E14E201E0 for ; Thu, 18 Jul 2013 19:52:54 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id B87AF201B6 for ; Thu, 18 Jul 2013 19:52:52 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1759493Ab3GRTwu (ORCPT ); Thu, 18 Jul 2013 15:52:50 -0400 Received: from mga09.intel.com ([134.134.136.24]:52363 "EHLO mga09.intel.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1759441Ab3GRTwt (ORCPT ); Thu, 18 Jul 2013 15:52:49 -0400 Received: from orsmga002.jf.intel.com ([10.7.209.21]) by orsmga102.jf.intel.com with ESMTP; 18 Jul 2013 12:50:07 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="4.89,696,1367996400"; d="scan'208";a="372729274" Received: from cst-linux.jf.intel.com ([10.23.221.72]) by orsmga002.jf.intel.com with ESMTP; 18 Jul 2013 12:52:39 -0700 From: sean.hefty@intel.com To: linux-rdma@vger.kernel.org Cc: Sean Hefty Subject: [PATCH librdmacm 1/3] cmatose: Allow user to specify address format Date: Thu, 18 Jul 2013 12:52:11 -0700 Message-Id: <1374177133-802-1-git-send-email-sean.hefty@intel.com> X-Mailer: git-send-email 1.7.3 Sender: linux-rdma-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-rdma@vger.kernel.org X-Spam-Status: No, score=-7.2 required=5.0 tests=BAYES_00, RCVD_IN_DNSWL_HI, RP_MATCHES_RCVD, UNPARSEABLE_RELAY autolearn=unavailable version=3.3.1 X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on mail.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP From: Sean Hefty Provide an option for the user to indicate the type of addresses used as input. Support hostname, IPv4, IPv6, and GIDs. Signed-off-by: Sean Hefty --- examples/cmatose.c | 44 +++++++++++++++++++++++++++++++------------- examples/common.c | 4 ++-- examples/common.h | 1 + man/ucmatose.1 | 22 ++++++++++++++++++---- 4 files changed, 52 insertions(+), 19 deletions(-) diff --git a/examples/cmatose.c b/examples/cmatose.c index 2b6b2b1..ab3e746 100644 --- a/examples/cmatose.c +++ b/examples/cmatose.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2005-2006,2011 Intel Corporation. All rights reserved. + * Copyright (c) 2005-2006,2011-2012 Intel Corporation. All rights reserved. * * This software is available to you under a choice of one of two * licenses. You may choose to be licensed under the terms of the GNU @@ -81,6 +81,7 @@ static uint8_t tos; static uint8_t migrate = 0; static char *dst_addr; static char *src_addr; +static struct rdma_addrinfo hints; static int create_message(struct cmatest_node *node) { @@ -385,7 +386,7 @@ static int alloc_nodes(void) if (dst_addr) { ret = rdma_create_id(test.channel, &test.nodes[i].cma_id, - &test.nodes[i], RDMA_PS_TCP); + &test.nodes[i], hints.ai_port_space); if (ret) goto err; } @@ -497,19 +498,15 @@ static int migrate_channel(struct rdma_cm_id *listen_id) static int run_server(void) { struct rdma_cm_id *listen_id; - struct rdma_addrinfo hints; int i, ret; printf("cmatose: starting server\n"); - ret = rdma_create_id(test.channel, &listen_id, &test, RDMA_PS_TCP); + ret = rdma_create_id(test.channel, &listen_id, &test, hints.ai_port_space); if (ret) { perror("cmatose: listen request failed"); return ret; } - memset(&hints, 0, sizeof hints); - hints.ai_flags = RAI_PASSIVE; - hints.ai_port_space = RDMA_PS_TCP; ret = get_rdma_addr(src_addr, dst_addr, port, &hints, &test.rai); if (ret) { perror("cmatose: getrdmaaddr error"); @@ -579,13 +576,10 @@ out: static int run_client(void) { - struct rdma_addrinfo hints; int i, ret, ret2; printf("cmatose: starting client\n"); - memset(&hints, 0, sizeof hints); - hints.ai_port_space = RDMA_PS_TCP; ret = get_rdma_addr(src_addr, dst_addr, port, &hints, &test.rai); if (ret) { perror("cmatose: getaddrinfo error"); @@ -642,7 +636,8 @@ int main(int argc, char **argv) { int op, ret; - while ((op = getopt(argc, argv, "s:b:c:C:S:t:p:m")) != -1) { + hints.ai_port_space = RDMA_PS_TCP; + while ((op = getopt(argc, argv, "s:b:f:P:c:C:S:t:p:m")) != -1) { switch (op) { case 's': dst_addr = optarg; @@ -650,6 +645,23 @@ int main(int argc, char **argv) case 'b': src_addr = optarg; break; + case 'f': + if (!strncasecmp("ip", optarg, 2)) { + hints.ai_flags = RAI_NUMERICHOST; + } else if (!strncasecmp("gid", optarg, 3)) { + hints.ai_flags = RAI_NUMERICHOST | RAI_FAMILY; + hints.ai_family = AF_IB; + } else if (strncasecmp("name", optarg, 4)) { + fprintf(stderr, "Warning: unknown address format\n"); + } + break; + case 'P': + if (!strncasecmp("ib", optarg, 2)) { + hints.ai_port_space = RDMA_PS_IB; + } else if (strncasecmp("tcp", optarg, 3)) { + fprintf(stderr, "Warning: unknown port space format\n"); + } + break; case 'c': connections = atoi(optarg); break; @@ -673,6 +685,10 @@ int main(int argc, char **argv) printf("usage: %s\n", argv[0]); printf("\t[-s server_address]\n"); printf("\t[-b bind_address]\n"); + printf("\t[-f address_format]\n"); + printf("\t name, ip, ipv6, or gid\n"); + printf("\t[-P port_space]\n"); + printf("\t tcp or ib\n"); printf("\t[-c connections]\n"); printf("\t[-C message_count]\n"); printf("\t[-S message_size]\n"); @@ -694,10 +710,12 @@ int main(int argc, char **argv) if (alloc_nodes()) exit(1); - if (dst_addr) + if (dst_addr) { ret = run_client(); - else + } else { + hints.ai_flags |= RAI_PASSIVE; ret = run_server(); + } printf("test complete\n"); destroy_nodes(); diff --git a/examples/common.c b/examples/common.c index 4eb5bbe..0b6428c 100644 --- a/examples/common.c +++ b/examples/common.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2005-2006 Intel Corporation. All rights reserved. + * Copyright (c) 2005-2006,2012 Intel Corporation. All rights reserved. * * This software is available to you under a choice of one of two * licenses. You may choose to be licensed under the terms of the GNU @@ -58,7 +58,7 @@ int get_rdma_addr(char *src, char *dst, char *port, rai_hints = *hints; if (src) { - rai_hints.ai_flags = RAI_PASSIVE; + rai_hints.ai_flags |= RAI_PASSIVE; ret = rdma_getaddrinfo(src, NULL, &rai_hints, &res); if (ret) return ret; diff --git a/examples/common.h b/examples/common.h index 7cf16d2..f7511f0 100644 --- a/examples/common.h +++ b/examples/common.h @@ -39,6 +39,7 @@ #include #include +#include #if __BYTE_ORDER == __BIG_ENDIAN static inline uint64_t cpu_to_be64(uint64_t x) { return x; } diff --git a/man/ucmatose.1 b/man/ucmatose.1 index 73477ea..95dc2d6 100644 --- a/man/ucmatose.1 +++ b/man/ucmatose.1 @@ -4,10 +4,12 @@ ucmatose \- RDMA CM connection and simple ping-pong test. .SH SYNOPSIS .sp .nf -\fIucmatose\fR [-s server_address] [-b bind_address] [-c connections] - [-C message_count] [-S message_size] -\fIucmatose\fR -s server_address [-b bind_address] [-c connections] - [-C message_count] [-S message_size] [-t tos] +\fIucmatose\fR [-s server_address] [-b bind_address] + [-f address_format] [-P port_space] + [-c connections] [-C message_count] [-S message_size] +\fIucmatose\fR -s server_address [-b bind_address] + [-f address_format] [-P port_space] + [-c connections] [-C message_count] [-S message_size] [-t tos] .fi .SH "DESCRIPTION" Establishes a set of reliable RDMA connections between two nodes using the @@ -22,6 +24,18 @@ This option must be specified by the client. \-b bind_address The local network address to bind to. .TP +\-f address_format +Specifies the format of the server and bind address. Be default, the +format is determined by getaddrinfo() as either being a hostname, an IPv4 +address, or an IPv6 address. This option may be used to indicate that +a specific address format has been provided. Supported address_format +values are: name, ip, ipv6, and gid. +.TP +\-P port_space +Specifies the port space for the connection. Be default, the port space +is the RDMA TCP port space. (Note that the RDMA port space may be separate +from that used for IP.) Supported port_space values are: tcp and ib. +.TP \-c connections The number of connections to establish between the client and server. (default 1)