From patchwork Thu Jul 5 16:38:09 2012 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Arlin Davis X-Patchwork-Id: 1161671 Return-Path: X-Original-To: patchwork-linux-rdma@patchwork.kernel.org Delivered-To: patchwork-process-083081@patchwork2.kernel.org Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by patchwork2.kernel.org (Postfix) with ESMTP id 11386DFB7C for ; Thu, 5 Jul 2012 16:38:14 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751483Ab2GEQiM (ORCPT ); Thu, 5 Jul 2012 12:38:12 -0400 Received: from mga01.intel.com ([192.55.52.88]:63640 "EHLO mga01.intel.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751000Ab2GEQiL (ORCPT ); Thu, 5 Jul 2012 12:38:11 -0400 Received: from fmsmga002.fm.intel.com ([10.253.24.26]) by fmsmga101.fm.intel.com with ESMTP; 05 Jul 2012 09:38:11 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="4.71,315,1320652800"; d="scan'208";a="188812412" Received: from orsmsx604.amr.corp.intel.com ([10.22.226.87]) by fmsmga002.fm.intel.com with ESMTP; 05 Jul 2012 09:38:10 -0700 Received: from orsmsx102.amr.corp.intel.com (10.22.225.129) by orsmsx604.amr.corp.intel.com (10.22.226.87) with Microsoft SMTP Server (TLS) id 8.2.255.0; Thu, 5 Jul 2012 09:38:10 -0700 Received: from orsmsx101.amr.corp.intel.com ([169.254.8.125]) by ORSMSX102.amr.corp.intel.com ([169.254.1.101]) with mapi id 14.01.0355.002; Thu, 5 Jul 2012 09:38:10 -0700 From: "Davis, Arlin R" To: "linux-rdma@vger.kernel.org" CC: "ofw@lists.openfabrics.org" Subject: [PATCH 2/7] windows: new version of getlocalipaddr not portable Thread-Topic: [PATCH 2/7] windows: new version of getlocalipaddr not portable Thread-Index: AQHNWsyPkzn1YvAWpk+7p3H3wL4kYw== Date: Thu, 5 Jul 2012 16:38:09 +0000 Message-ID: <54347E5A035A054EAE9D05927FB467F9481A87D3@ORSMSX101.amr.corp.intel.com> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-originating-ip: [10.22.254.139] MIME-Version: 1.0 Sender: linux-rdma-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-rdma@vger.kernel.org revert to the original getaddrinfo method for windows Signed-off-by: Arlin Davis --- dapl/openib_common/util.c | 144 +++++++++++++++++++++++++++++++++------------ 1 files changed, 105 insertions(+), 39 deletions(-) -- 1.7.3 diff --git a/dapl/openib_common/util.c b/dapl/openib_common/util.c index 06a6f3d..33629b8 100644 --- a/dapl/openib_common/util.c +++ b/dapl/openib_common/util.c @@ -75,6 +75,69 @@ release: return hr; } +DAT_RETURN getlocalipaddr(char *addr, int addr_len) +{ + struct sockaddr_in *sin; + struct addrinfo *res, hint, *ai; + int ret; + char hostname[256]; + char *netdev = getenv("DAPL_SCM_NETDEV"); + +retry: + /* use provided netdev instead of default hostname */ + if (netdev != NULL) { + ret = getipaddr_netdev(netdev, addr, addr_len); + if (ret) { + dapl_log(DAPL_DBG_TYPE_ERR, + " getlocalipaddr: NETDEV = %s" + " but not configured on system? ERR = %s\n", + netdev, strerror(ret)); + return dapl_convert_errno(ret, "getlocalipaddr"); + } else + return DAT_SUCCESS; + } + + if (addr_len < sizeof(*sin)) { + return DAT_INTERNAL_ERROR; + } + + ret = gethostname(hostname, 256); + if (ret) + return dapl_convert_errno(ret, "gethostname"); + + memset(&hint, 0, sizeof hint); + hint.ai_flags = AI_PASSIVE; + hint.ai_family = AF_INET; + hint.ai_socktype = SOCK_STREAM; + hint.ai_protocol = IPPROTO_TCP; + + ret = getaddrinfo(hostname, NULL, &hint, &res); + if (ret) { + dapl_log(DAPL_DBG_TYPE_ERR, + " getaddrinfo ERR: %d %s\n", ret, gai_strerror(ret)); + return DAT_INVALID_ADDRESS; + } + + ret = DAT_INVALID_ADDRESS; + for (ai = res; ai; ai = ai->ai_next) { + sin = (struct sockaddr_in *)ai->ai_addr; + if (*((uint32_t *) & sin->sin_addr) != htonl(0x7f000001)) { + *((struct sockaddr_in *)addr) = *sin; + ret = DAT_SUCCESS; + break; + } + } + + freeaddrinfo(res); + + /* only loopback found, retry netdev eth0 */ + if (ret == DAT_INVALID_ADDRESS) { + netdev = "eth0"; + goto retry; + } + + return ret; +} #else // _WIN64 || WIN32 /* Get IP address using network device name */ @@ -114,43 +177,6 @@ int getipaddr_netdev(char *name, char *addr, int addr_len) close(skfd); return ret; } -#endif - -enum ibv_mtu dapl_ib_mtu(int mtu) -{ - switch (mtu) { - case 256: - return IBV_MTU_256; - case 512: - return IBV_MTU_512; - case 1024: - return IBV_MTU_1024; - case 2048: - return IBV_MTU_2048; - case 4096: - return IBV_MTU_4096; - default: - return IBV_MTU_1024; - } -} - -char *dapl_ib_mtu_str(enum ibv_mtu mtu) -{ - switch (mtu) { - case IBV_MTU_256: - return "256"; - case IBV_MTU_512: - return "512"; - case IBV_MTU_1024: - return "1024"; - case IBV_MTU_2048: - return "2048"; - case IBV_MTU_4096: - return "4096"; - default: - return "1024"; - } -} DAT_RETURN getlocalipaddr(char *addr, int addr_len) { @@ -163,13 +189,13 @@ DAT_RETURN getlocalipaddr(char *addr, int addr_len) /* use provided netdev instead of default hostname */ if (netdev != NULL) { ret = getipaddr_netdev(netdev, addr, addr_len); - if (ret) { + if (ret) { dapl_log(DAPL_DBG_TYPE_ERR, " getlocalipaddr: NETDEV = %s" " but not configured on system? ERR = %s\n", netdev, strerror(ret)); return dapl_convert_errno(ret, "getlocalipaddr"); - } else + } else return DAT_SUCCESS; } @@ -197,6 +223,46 @@ bail: return dapl_convert_errno(ret, "getlocalipaddr"); } +#endif + +enum ibv_mtu dapl_ib_mtu(int mtu) +{ + switch (mtu) { + case 256: + return IBV_MTU_256; + case 512: + return IBV_MTU_512; + case 1024: + return IBV_MTU_1024; + case 2048: + return IBV_MTU_2048; + case 4096: + return IBV_MTU_4096; + default: + return IBV_MTU_1024; + } +} + +char *dapl_ib_mtu_str(enum ibv_mtu mtu) +{ + switch (mtu) { + case IBV_MTU_256: + return "256"; + case IBV_MTU_512: + return "512"; + case IBV_MTU_1024: + return "1024"; + case IBV_MTU_2048: + return "2048"; + case IBV_MTU_4096: + return "4096"; + default: + return "1024"; + } +} + + + /* * dapls_ib_query_hca *