]> git.openfabrics.org - ~ardavis/dapl.git/commitdiff
windows: new version of getlocalipaddr not portable
authorArlin Davis <arlin.r.davis@intel.com>
Wed, 25 Apr 2012 20:37:53 +0000 (13:37 -0700)
committerArlin Davis <arlin.r.davis@intel.com>
Wed, 25 Apr 2012 20:37:53 +0000 (13:37 -0700)
revert to the original getaddrinfo method for windows

Signed-off-by: Arlin Davis <arlin.r.davis@intel.com>
dapl/openib_common/util.c

index 06a6f3d979478c8f7ede909320da25ed897dfae1..33629b8f72bce14076a0d1abd263cf840f28ecac 100644 (file)
@@ -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
  *