]> git.openfabrics.org - ~shefty/rdma-win.git/commitdiff
Refresh of errno
authorSean Hefty <sean.hefty@intel.com>
Wed, 14 Apr 2010 00:07:05 +0000 (17:07 -0700)
committerSean Hefty <sean.hefty@intel.com>
Wed, 14 Apr 2010 00:07:05 +0000 (17:07 -0700)
trunk/inc/user/linux/_errno.h
trunk/ulp/libibverbs/include/infiniband/verbs.h
trunk/ulp/libibverbs/src/ibv_exports.src
trunk/ulp/libibverbs/src/ibv_main.cpp
trunk/ulp/libibverbs/src/verbs.cpp
trunk/ulp/librdmacm/include/rdma/rdma_cma.h
trunk/ulp/librdmacm/src/cma.cpp
trunk/ulp/librdmacm/src/cma_exports.src
trunk/ulp/librdmacm/src/cma_main.cpp

index 6d17e37ac207e8167fd007a2624e9cbe0671e62b..c3e595981082212d8c59b11563fe523af7224c2c 100755 (executable)
@@ -1,55 +1,91 @@
-/*
- * Copyright (c) 2009 Intel Corp, Inc.  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
- * General Public License (GPL) Version 2, available from the file
- * COPYING in the main directory of this source tree, or the
- * OpenIB.org BSD license below:
- *
- *     Redistribution and use in source and binary forms, with or
- *     without modification, are permitted provided that the following
- *     conditions are met:
- *
- *      - Redistributions of source code must retain the above
- *        copyright notice, this list of conditions and the following
- *        disclaimer.
- *
- *      - Redistributions in binary form must reproduce the above
- *        copyright notice, this list of conditions and the following
- *        disclaimer in the documentation and/or other materials
- *        provided with the distribution.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
- * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
- * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
- * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
- * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
- * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
- * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
- * SOFTWARE.
- *
- */
-
-#ifndef _UNISTD_H_
-#define _UNISTD_H_
-
-#include <stdio.h>
-
-#define sleep(s) SleepEx(s * 1000, TRUE)
-
-static __inline int getdomainname(char *name, size_t len)
-{
-       return -1;
-}
-
-static __inline char* getpass(char *message)
-{
-       static char password[128];
-
-       printf("%s", message);
-       scanf_s("%127s", password, 128);
-       return password;
-}
-
-#endif /* _UNISTD_H_ */
+/*\r
+ * Copyright (c) 2009 Intel Corp, Inc.  All rights reserved.\r
+ *\r
+ * This software is available to you under a choice of one of two\r
+ * licenses.  You may choose to be licensed under the terms of the GNU\r
+ * General Public License (GPL) Version 2, available from the file\r
+ * COPYING in the main directory of this source tree, or the\r
+ * OpenIB.org BSD license below:\r
+ *\r
+ *     Redistribution and use in source and binary forms, with or\r
+ *     without modification, are permitted provided that the following\r
+ *     conditions are met:\r
+ *\r
+ *      - Redistributions of source code must retain the above\r
+ *        copyright notice, this list of conditions and the following\r
+ *        disclaimer.\r
+ *\r
+ *      - Redistributions in binary form must reproduce the above\r
+ *        copyright notice, this list of conditions and the following\r
+ *        disclaimer in the documentation and/or other materials\r
+ *        provided with the distribution.\r
+ *\r
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,\r
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\r
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\r
+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS\r
+ * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN\r
+ * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN\r
+ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\r
+ * SOFTWARE.\r
+ *\r
+ */\r
+\r
+#ifndef __ERRNO_H_\r
+#define __ERRNO_H_\r
+\r
+#include <errno.h>\r
+\r
+/* provide defines missing in older errno.h */\r
+#ifndef EINVAL\r
+#define EINVAL          22\r
+#define ERANGE          34\r
+#define EILSEQ          42\r
+#define STRUNCATE       80\r
+#endif\r
+\r
+#ifndef EADDRINUSE\r
+#define EADDRINUSE      100\r
+#define EADDRNOTAVAIL   101\r
+#define EAFNOSUPPORT    102\r
+#define EALREADY        103\r
+#define EBADMSG         104\r
+#define ECANCELED       105\r
+#define ECONNABORTED    106\r
+#define ECONNREFUSED    107\r
+#define ECONNRESET      108\r
+#define EDESTADDRREQ    109\r
+#define EHOSTUNREACH    110\r
+#define EIDRM           111\r
+#define EINPROGRESS     112\r
+#define EISCONN         113\r
+#define ELOOP           114\r
+#define EMSGSIZE        115\r
+#define ENETDOWN        116\r
+#define ENETRESET       117\r
+#define ENETUNREACH     118\r
+#define ENOBUFS         119\r
+#define ENODATA         120\r
+#define ENOLINK         121\r
+#define ENOMSG          122\r
+#define ENOPROTOOPT     123\r
+#define ENOSR           124\r
+#define ENOSTR          125\r
+#define ENOTCONN        126\r
+#define ENOTRECOVERABLE 127\r
+#define ENOTSOCK        128\r
+#define ENOTSUP         129\r
+#define EOPNOTSUPP      130\r
+#define EOTHER          131\r
+#define EOVERFLOW       132\r
+#define EOWNERDEAD      133\r
+#define EPROTO          134\r
+#define EPROTONOSUPPORT 135\r
+#define EPROTOTYPE      136\r
+#define ETIME           137\r
+#define ETIMEDOUT       138\r
+#define ETXTBSY         139\r
+#define EWOULDBLOCK     140\r
+#endif\r
+\r
+#endif /* __ERRNO_H_ */\r
index 4a83b27a26d85f380c31bb0fb80565abf9040f15..91e568420d38dd6c39e953713a836b293a5cfab3 100644 (file)
@@ -37,7 +37,7 @@
 \r
 #include <windows.h>\r
 #include <rdma\winverbs.h>\r
-#include <errno.h>\r
+#include <_errno.h>\r
 #include <comp_channel.h>\r
 \r
 #ifdef __cplusplus\r
@@ -53,18 +53,6 @@ typedef unsigned __int16     uint16_t;
 typedef unsigned __int32       uint32_t;\r
 typedef unsigned __int64       uint64_t;\r
 \r
-#define EOVERFLOW              WV_BUFFER_OVERFLOW\r
-#define EISCONN                        WV_CONNECTION_ACTIVE\r
-#define ECONNREFUSED   WV_CONNECTION_REFUSED\r
-#define ETIMEDOUT              WV_TIMEOUT\r
-#define ENETUNREACH            WV_HOST_UNREACHABLE\r
-#define EADDRINUSE             WV_ADDRESS_ALREADY_EXISTS\r
-#define EALREADY               WV_IO_PENDING\r
-#define EAFNOSUPPORT   WV_INVALID_ADDRESS\r
-#define EWOULDBLOCK            WV_DEVICE_BUSY\r
-\r
-#define ECONNRESET             WSAECONNRESET\r
-\r
 union ibv_gid\r
 {\r
        uint8_t                 raw[16];\r
index 67707a55834d5defbd2ce9321ee7e2debd563c42..e9a8a8338ae8dd73a0c6813b97fafb6b4df4eb4f 100644 (file)
@@ -53,4 +53,5 @@ ibv_port_state_str
 ibv_event_type_str\r
 ibvw_get_windata\r
 ibvw_release_windata\r
+ibvw_errno\r
 #endif\r
index f480a18ac2a4d635545f33af0bc9669e57330d1a..ca292a686eb0dae99c036dd2d2836c08fcefea99 100644 (file)
@@ -57,12 +57,12 @@ BOOL WINAPI DllMain(HINSTANCE hInstance, DWORD dwReason, LPVOID lpReserved)
 }\r
 \r
 __declspec(dllexport)\r
-int ibvw_errno(HRSULT hr)\r
+int ibvw_wv_errno(HRSULT hr)\r
 {\r
        switch (hr) {\r
-       case WV_SUCCESS:                        _set_errno(0); return 0;\r
-       case WV_PENDING:                        _set_errno(EALREADY); break;\r
-       case WV_IO_PENDING:                     _set_errno(EALREADY); break;\r
+       case WV_SUCCESS:                        return 0;\r
+       case WV_PENDING:                        _set_errno(EINPROGRESS); break;\r
+       case WV_IO_PENDING:                     _set_errno(EINPROGRESS); break;\r
        case WV_TIMEOUT:                        _set_errno(ETIMEDOUT); break;\r
        case WV_BUFFER_OVERFLOW:        _set_errno(EOVERFLOW); break;\r
        case WV_DEVICE_BUSY:            _set_errno(EBUSY); break;\r
@@ -82,7 +82,7 @@ int ibvw_errno(HRSULT hr)
        case WV_HOST_UNREACHABLE:       _set_errno(ENETUNREACH); break;\r
        case WV_CONNECTION_ABORTED:     _set_errno(ECONNABORTED); break;\r
        case WV_REMOTE_OP_ERROR:        _set_errno(EREMOTEIO); break;\r
-       case WV_UNKNOWN_ERROR:          _set_errno(eio); break;\r
+       case WV_UNKNOWN_ERROR:          _set_errno(EIO); break;\r
        }\r
        return -1;\r
 }\r
index 849f8aeb35e0cad558a9308b929735fb1236bd9b..fe2df60ebd12777bc133692ea4133050e7d4258c 100644 (file)
@@ -83,7 +83,7 @@ static int ibv_find_gid_index(struct ibv_context *context, uint8_t port_num,
                ret = ibv_query_gid(context, port_num, i++, &sgid);\r
        } while (!ret && memcmp(&sgid, gid, sizeof *gid));\r
 \r
-       return ret ? ret : i - 1;\r
+       return ret ? -1 : i - 1;\r
 }\r
 \r
 static void ibv_convert_ah_attr(struct ibv_context *context,\r
@@ -140,7 +140,7 @@ int ibv_query_device(struct ibv_context *context,
 \r
        hr = context->cmd_if->Query(&attr);\r
        if (FAILED(hr)) {\r
-               return hr;\r
+               return ibvw_errno(hr);\r
        }\r
 \r
        sprintf(device_attr->fw_ver, "0x%I64x", attr.FwVersion);\r
@@ -208,7 +208,7 @@ int ibv_query_port(struct ibv_context *context, uint8_t port_num,
        \r
        hr = context->cmd_if->QueryPort(port_num, &attr);\r
        if (FAILED(hr)) {\r
-               return hr;\r
+               return ibvw_errno(hr);\r
        }\r
 \r
        port_attr->state = (enum ibv_port_state) attr.State;\r
@@ -238,14 +238,14 @@ __declspec(dllexport)
 int ibv_query_gid(struct ibv_context *context, uint8_t port_num,\r
                                  int index, union ibv_gid *gid)\r
 {\r
-       return context->cmd_if->QueryGid(port_num, index, (WV_GID *) gid);\r
+       return ibvw_errno(context->cmd_if->QueryGid(port_num, index, (WV_GID *) gid));\r
 }\r
 \r
 __declspec(dllexport)\r
 int ibv_query_pkey(struct ibv_context *context, uint8_t port_num,\r
                                   int index, uint16_t *pkey)\r
 {\r
-       return context->cmd_if->QueryPkey(port_num, (UINT16) index, pkey);\r
+       return ibvw_errno(context->cmd_if->QueryPkey(port_num, (UINT16) index, pkey));\r
 }\r
 \r
 __declspec(dllexport)\r
@@ -311,7 +311,7 @@ int ibv_dereg_mr(struct ibv_mr *mr)
        if (SUCCEEDED(hr)) {\r
                delete mr;\r
        }\r
-       return hr;\r
+       return ibvw_errno(hr);\r
 }\r
 \r
 __declspec(dllexport)\r
@@ -386,7 +386,7 @@ int ibv_resize_cq(struct ibv_cq *cq, int cqe)
        if (SUCCEEDED(hr)) {\r
                cq->cqe = (int) entries;\r
        }\r
-       return hr;\r
+       return ibvw_errno(hr);\r
 }\r
 \r
 __declspec(dllexport)\r
@@ -407,7 +407,7 @@ int ibv_req_notify_cq(struct ibv_cq *cq, int solicited_only)
        } else {\r
                hr = 0;\r
        }\r
-       return hr;\r
+       return ibvw_errno(hr);\r
 }\r
 \r
 __declspec(dllexport)\r
@@ -506,7 +506,7 @@ int ibv_modify_srq(struct ibv_srq *srq,
                attr.srq_limit = srq_attr->srq_limit;\r
        }\r
 \r
-       return srq->handle->Modify(attr.max_wr, attr.srq_limit);\r
+       return ibvw_errno(srq->handle->Modify(attr.max_wr, attr.srq_limit));\r
 }\r
 \r
 __declspec(dllexport)\r
@@ -522,7 +522,7 @@ int ibv_post_srq_recv(struct ibv_srq *srq,
                                                                          (WV_SGE *) (*bad_recv_wr)->sg_list,\r
                                                                          (*bad_recv_wr)->num_sge);\r
        }\r
-       return hr;\r
+       return ibvw_errno(hr);\r
 }\r
 \r
 __declspec(dllexport)\r
@@ -533,7 +533,7 @@ int ibv_query_srq(struct ibv_srq *srq, struct ibv_srq_attr *srq_attr)
 \r
        hr = srq->handle->Query(&max_wr, &max_sge, &srq_limit);\r
        if (FAILED(hr)) {\r
-               return hr;\r
+               return ibvw_errno(hr);\r
        }\r
 \r
        srq_attr->max_wr = (uint32_t) max_wr;\r
@@ -626,7 +626,7 @@ int ibv_query_qp(struct ibv_qp *qp, struct ibv_qp_attr *attr,
 \r
        hr = qp->handle->Query(&wv_attr);\r
        if (FAILED(hr)) {\r
-               return hr;\r
+               return ibvw_errno(hr);\r
        }\r
 \r
        /* ibv_qp exposes qp_num.  Save qp_num from query. */\r
@@ -725,7 +725,7 @@ int ibv_modify_qp(struct ibv_qp *qp, struct ibv_qp_attr *attr,
                qp->state = attr->qp_state;\r
        }\r
 \r
-       return hr;\r
+       return ibvw_errno(hr);\r
 }\r
 \r
 __declspec(dllexport)\r
@@ -737,7 +737,7 @@ int ibv_post_send(struct ibv_qp *qp, struct ibv_send_wr *wr,
        struct ibv_ah *ah;\r
 \r
        if ((qp->qp_type == IBV_QPT_UD) && (wr->next != NULL))\r
-               return WV_NOT_SUPPORTED;\r
+               return ibvw_errno(WV_NOT_SUPPORTED);\r
 \r
        for (cur_wr = wr; cur_wr != NULL; cur_wr = cur_wr->next) {\r
                if (qp->qp_type == IBV_QPT_UD) {\r
@@ -778,7 +778,7 @@ int ibv_post_send(struct ibv_qp *qp, struct ibv_send_wr *wr,
                }\r
        }\r
 \r
-       return hr;\r
+       return ibvw_errno(hr);\r
 }\r
 \r
 __declspec(dllexport)\r
@@ -791,7 +791,7 @@ int ibv_post_recv(struct ibv_qp *qp, struct ibv_recv_wr *wr,
                hr = qp->handle->PostReceive((*bad_wr)->wr_id, (WV_SGE *) (*bad_wr)->sg_list,\r
                                                                         (*bad_wr)->num_sge);\r
        }\r
-       return hr;\r
+       return ibvw_errno(hr);\r
 }\r
 \r
 __declspec(dllexport)\r
@@ -890,11 +890,11 @@ int ibv_destroy_ah(struct ibv_ah *ah)
 __declspec(dllexport)\r
 int ibv_attach_mcast(struct ibv_qp *qp, union ibv_gid *gid, uint16_t lid)\r
 {\r
-       return qp->ud_handle->AttachMulticast((WV_GID *) gid, lid, NULL);\r
+       return ibvw_errno(qp->ud_handle->AttachMulticast((WV_GID *) gid, lid, NULL));\r
 }\r
 \r
 __declspec(dllexport)\r
 int ibv_detach_mcast(struct ibv_qp *qp, union ibv_gid *gid, uint16_t lid)\r
 {\r
-       return qp->ud_handle->DetachMulticast((WV_GID *) gid, lid, NULL);\r
+       return ibvw_errno(qp->ud_handle->DetachMulticast((WV_GID *) gid, lid, NULL));\r
 }\r
index 7b9a6e0e5792dc56104da7dd1d829e32759bd852..0fd481c4b4171c965403857db98830dcabcfd003 100644 (file)
@@ -626,6 +626,9 @@ int rdma_set_option(struct rdma_cm_id *id, int level, int optname,
 __declspec(dllexport)\r
 int rdma_migrate_id(struct rdma_cm_id *id, struct rdma_event_channel *channel);\r
 \r
+__declspec(dllexport)\r
+int rdmaw_wsa_errno(int wsa_err);\r
+\r
 #ifdef __cplusplus\r
 }\r
 #endif\r
index 40e741136b9a0f2e4be8859024593033c69b21b7..ff0b98e9bafa401b6bd3c2651111d3dc281d245a 100644 (file)
@@ -244,15 +244,16 @@ int rdma_create_id(struct rdma_event_channel *channel,
 {\r
        struct cma_id_private *id_priv;\r
        HRESULT hr;\r
+       int ret;\r
 \r
-       hr = ucma_acquire();\r
-       if (hr) {\r
-               return hr;\r
+       ret = ucma_acquire();\r
+       if (ret) {\r
+               return ret;\r
        }\r
 \r
        id_priv = new struct cma_id_private;\r
        if (id_priv == NULL) {\r
-               hr = ENOMEM;\r
+               ret = ENOMEM;\r
                goto err1;\r
        }\r
 \r
@@ -269,6 +270,7 @@ int rdma_create_id(struct rdma_event_channel *channel,
                hr = windata.prov->CreateDatagramEndpoint(&id_priv->id.ep.datagram);\r
        }\r
        if (FAILED(hr)) {\r
+               ret = ibvw_errno(hr);\r
                goto err2;\r
        }\r
 \r
@@ -364,11 +366,12 @@ static int ucma_query_connect(struct rdma_cm_id *id, struct rdma_conn_param *par
        struct cma_id_private *id_priv;\r
        WV_CONNECT_ATTRIBUTES attr;\r
        HRESULT hr;\r
+       int ret;\r
 \r
        id_priv = CONTAINING_RECORD(id, struct cma_id_private, id);\r
        hr = id->ep.connect->Query(&attr);\r
        if (FAILED(hr)) {\r
-               return hr;\r
+               return ibvw_errno(hr);\r
        }\r
 \r
        RtlCopyMemory(&id->route.addr.src_addr, &attr.LocalAddress,\r
@@ -388,9 +391,9 @@ static int ucma_query_connect(struct rdma_cm_id *id, struct rdma_conn_param *par
        }\r
 \r
        if (id_priv->cma_dev == NULL && attr.Device.DeviceGuid != 0) {\r
-               hr = ucma_get_device(id_priv, attr.Device.DeviceGuid);\r
-               if (FAILED(hr)) {\r
-                       return hr;\r
+               ret = ucma_get_device(id_priv, attr.Device.DeviceGuid);\r
+               if (ret) {\r
+                       return ret;\r
                }\r
 \r
                id->route.addr.addr.ibaddr.pkey = attr.Device.Pkey;\r
@@ -405,6 +408,7 @@ static int ucma_query_datagram(struct rdma_cm_id *id, struct rdma_ud_param *para
        struct cma_id_private *id_priv;\r
        WV_DATAGRAM_ATTRIBUTES attr;\r
        HRESULT hr;\r
+       int ret;\r
 \r
        id_priv = CONTAINING_RECORD(id, struct cma_id_private, id);\r
        hr = id->ep.datagram->Query(&attr);\r
@@ -427,9 +431,9 @@ static int ucma_query_datagram(struct rdma_cm_id *id, struct rdma_ud_param *para
        }\r
 \r
        if (id_priv->cma_dev == NULL && attr.Device.DeviceGuid != 0) {\r
-               hr = ucma_get_device(id_priv, attr.Device.DeviceGuid);\r
-               if (FAILED(hr))\r
-                       return hr;\r
+               ret = ucma_get_device(id_priv, attr.Device.DeviceGuid);\r
+               if (ret)\r
+                       return ret;\r
                id->route.addr.addr.ibaddr.pkey = attr.Device.Pkey;\r
                id_priv->id.port_num = attr.Device.PortNumber;\r
        }\r
@@ -441,24 +445,29 @@ int rdma_bind_addr(struct rdma_cm_id *id, struct sockaddr *addr)
 {\r
        struct cma_id_private *id_priv;\r
        HRESULT hr;\r
+       int ret;\r
 \r
        if (id->ps == RDMA_PS_TCP) {\r
                hr = id->ep.connect->BindAddress(addr);\r
                if (SUCCEEDED(hr)) {\r
-                       hr = ucma_query_connect(id, NULL);\r
+                       ret = ucma_query_connect(id, NULL);\r
+               } else {\r
+                       ret = ibvw_errno(hr);\r
                }\r
        } else {\r
                hr = id->ep.datagram->BindAddress(addr);\r
                if (SUCCEEDED(hr)) {\r
-                       hr = ucma_query_datagram(id, NULL);\r
+                       ret = ucma_query_datagram(id, NULL);\r
+               } else {\r
+                       ret = ibvw_errno(hr);\r
                }\r
        }\r
 \r
-       if (SUCCEEDED(hr)) {\r
+       if (!ret) {\r
                id_priv = CONTAINING_RECORD(id, struct cma_id_private, id);\r
                id_priv->state = cma_addr_bind;\r
        }\r
-       return hr;\r
+       return ret;\r
 }\r
 \r
 __declspec(dllexport)\r
@@ -470,6 +479,7 @@ int rdma_resolve_addr(struct rdma_cm_id *id, struct sockaddr *src_addr,
        SOCKET s;\r
        DWORD size;\r
        HRESULT hr;\r
+       int ret;\r
 \r
        id_priv = CONTAINING_RECORD(id, struct cma_id_private, id);\r
        if (id_priv->state == cma_idle) {\r
@@ -480,21 +490,21 @@ int rdma_resolve_addr(struct rdma_cm_id *id, struct sockaddr *src_addr,
                                s = socket(dst_addr->sa_family, SOCK_DGRAM, IPPROTO_UDP);\r
                        }\r
                        if (s == INVALID_SOCKET) {\r
-                               return WSAGetLastError();\r
+                               return rdmaw_wsa_errno(WSAGetLastError());\r
                        }\r
 \r
                        hr = WSAIoctl(s, SIO_ROUTING_INTERFACE_QUERY, dst_addr, ucma_addrlen(dst_addr),\r
                                                  &addr, sizeof addr, &size, NULL, NULL);\r
                        closesocket(s);\r
                        if (FAILED(hr)) {\r
-                               return WSAGetLastError();\r
+                               return rdmaw_wsa_errno(WSAGetLastError());\r
                        }\r
                        src_addr = &addr.Sa;\r
                }\r
 \r
-               hr = rdma_bind_addr(id, src_addr);\r
-               if (FAILED(hr)) {\r
-                       return hr;\r
+               ret = rdma_bind_addr(id, src_addr);\r
+               if (ret) {\r
+                       return ret;\r
                }\r
        }\r
 \r
@@ -516,14 +526,14 @@ int rdma_resolve_route(struct rdma_cm_id *id, int timeout_ms)
        hr = IBAT::ResolvePath(&id->route.addr.src_addr, &id->route.addr.dst_addr,\r
                                                   &path, timeout_ms);\r
        if (FAILED(hr)) {\r
-               return hr;\r
+               return ibvw_errno(hr);\r
        }\r
 \r
        hr = (id->ps == RDMA_PS_TCP) ?\r
                 id->ep.connect->Modify(WV_EP_OPTION_ROUTE, &path, sizeof path) :\r
                 id->ep.datagram->Modify(WV_EP_OPTION_ROUTE, &path, sizeof path);\r
        if (FAILED(hr)) {\r
-               return hr;\r
+               return ibvw_errno(hr);\r
        }\r
 \r
        id_priv = CONTAINING_RECORD(id, struct cma_id_private, id);\r
@@ -547,7 +557,7 @@ static int ucma_modify_qp_init(struct cma_id_private *id_priv, struct ibv_qp *qp
                                                                           id_priv->id.route.addr.addr.ibaddr.pkey,\r
                                                                           &index);\r
        if (FAILED(hr)) {\r
-               return hr;\r
+               return ibvw_errno(hr);\r
        }\r
 \r
        qp_attr.pkey_index = index;\r
@@ -638,11 +648,12 @@ int rdma_connect(struct rdma_cm_id *id, struct rdma_conn_param *conn_param)
        struct cma_id_private *id_priv;\r
        WV_CONNECT_PARAM attr;\r
        HRESULT hr;\r
+       int ret;\r
        \r
        id_priv = CONTAINING_RECORD(id, struct cma_id_private, id);\r
-       hr = ucma_valid_param(id_priv, conn_param);\r
-       if (FAILED(hr)) {\r
-               return hr;\r
+       ret = ucma_valid_param(id_priv, conn_param);\r
+       if (ret) {\r
+               return ret;\r
        }\r
 \r
        RtlZeroMemory(&attr, sizeof attr);\r
@@ -663,7 +674,7 @@ int rdma_connect(struct rdma_cm_id *id, struct rdma_conn_param *conn_param)
                id_priv->refcnt--;\r
                id->comp_entry.Busy = 0;\r
                id_priv->state = cma_route_resolve;\r
-               return hr;\r
+               return ibvw_errno(hr);\r
        }\r
 \r
        return 0;\r
@@ -673,17 +684,18 @@ static int ucma_get_request(struct cma_id_private *listen, int index)
 {\r
        struct cma_id_private *id_priv = NULL;\r
        HRESULT hr;\r
+       int ret;\r
 \r
        EnterCriticalSection(&lock);\r
        if (listen->state != cma_listening) {\r
-               hr = WV_INVALID_PARAMETER;\r
+               ret = ibvw_errno(WV_INVALID_PARAMETER);\r
                goto err1;\r
        }\r
 \r
        InterlockedIncrement(&listen->refcnt);\r
-       hr = rdma_create_id(listen->id.channel, &listen->req_list[index],\r
+       ret = rdma_create_id(listen->id.channel, &listen->req_list[index],\r
                                                listen, listen->id.ps);\r
-       if (FAILED(hr)) {\r
+       if (ret) {\r
                goto err2;\r
        }\r
 \r
@@ -701,6 +713,7 @@ static int ucma_get_request(struct cma_id_private *listen, int index)
                                                                                                &id_priv->id.comp_entry.Overlap);\r
        }\r
        if (FAILED(hr) && hr != WV_IO_PENDING) {\r
+               ret = ibvw_errno(hr);\r
                id_priv->id.comp_entry.Busy = 0;\r
                id_priv->refcnt--;\r
                goto err2;\r
@@ -716,7 +729,7 @@ err1:
        if (id_priv != NULL) {\r
                rdma_destroy_id(&id_priv->id);\r
        }\r
-       return hr;\r
+       return ret;\r
 }\r
 \r
 __declspec(dllexport)\r
@@ -724,7 +737,7 @@ int rdma_listen(struct rdma_cm_id *id, int backlog)
 {\r
        struct cma_id_private *id_priv, *req_id;\r
        HRESULT hr;\r
-       int i;\r
+       int i, ret;\r
 \r
        if (backlog <= 0) {\r
                backlog = CMA_DEFAULT_BACKLOG;\r
@@ -743,13 +756,13 @@ int rdma_listen(struct rdma_cm_id *id, int backlog)
        hr = (id->ps == RDMA_PS_TCP) ?\r
                 id->ep.connect->Listen(backlog) : id->ep.datagram->Listen(backlog);\r
        if (FAILED(hr)) {\r
-               return hr;\r
+               return ibvw_errno(hr);\r
        }\r
 \r
        for (i = 0; i < backlog; i++) {\r
-               hr = ucma_get_request(id_priv, i);\r
-               if (FAILED(hr)) {\r
-                       return hr;\r
+               ret = ucma_get_request(id_priv, i);\r
+               if (ret) {\r
+                       return ret;\r
                }\r
        }\r
 \r
@@ -762,11 +775,12 @@ int rdma_accept(struct rdma_cm_id *id, struct rdma_conn_param *conn_param)
        struct cma_id_private *id_priv;\r
        WV_CONNECT_PARAM attr;\r
        HRESULT hr;\r
+       int ret;\r
 \r
        id_priv = CONTAINING_RECORD(id, struct cma_id_private, id);\r
-       hr = ucma_valid_param(id_priv, conn_param);\r
-       if (FAILED(hr)) {\r
-               return hr;\r
+       ret = ucma_valid_param(id_priv, conn_param);\r
+       if (ret) {\r
+               return ret;\r
        }\r
 \r
        RtlZeroMemory(&attr, sizeof attr);\r
@@ -787,7 +801,7 @@ int rdma_accept(struct rdma_cm_id *id, struct rdma_conn_param *conn_param)
                id_priv->refcnt--;\r
                id->comp_entry.Busy = 0;\r
                id_priv->state = cma_disconnected;\r
-               return hr;\r
+               return ibvw_errno(hr);\r
        }\r
 \r
        return 0;\r
@@ -804,7 +818,7 @@ int rdma_reject(struct rdma_cm_id *id, const void *private_data,
        id_priv->state = cma_disconnected;\r
        hr = id->ep.connect->Reject(private_data, private_data_len);\r
        if (FAILED(hr)) {\r
-               return hr;\r
+               return ibvw_errno(hr);\r
        }\r
        return 0;\r
 }\r
@@ -829,7 +843,7 @@ int rdma_disconnect(struct rdma_cm_id *id)
        }\r
        hr = id->ep.connect->Disconnect(NULL);\r
        if (FAILED(hr)) {\r
-               return hr;\r
+               return ibvw_errno(hr);\r
        }\r
 \r
        return 0;\r
@@ -861,12 +875,12 @@ static int ucma_process_conn_req(struct cma_event *event)
 \r
        ucma_get_request(listen, id_priv->index);\r
 \r
-       if (SUCCEEDED(event->event.status)) {\r
+       if (!event->event.status) {\r
                event->event.status = ucma_query_connect(&id_priv->id,\r
                                                                                                 &event->event.param.conn);\r
        }\r
 \r
-       if (SUCCEEDED(event->event.status)) {\r
+       if (!event->event.status) {\r
                event->event.event = RDMA_CM_EVENT_CONNECT_REQUEST;\r
                id_priv->state = cma_passive_connect;\r
                event->event.listen_id = &listen->id;\r
@@ -885,7 +899,7 @@ static int ucma_process_conn_resp(struct cma_event *event)
        WV_CONNECT_PARAM attr;\r
        HRESULT hr;\r
 \r
-       if (FAILED(event->event.status)) {\r
+       if (event->event.status) {\r
                goto err;\r
        }\r
 \r
@@ -902,7 +916,7 @@ static int ucma_process_conn_resp(struct cma_event *event)
                goto err;\r
        }\r
 \r
-       return WV_IO_PENDING;\r
+       return EINPROGRESS;\r
 \r
 err:\r
        event->event.event = (event->event.status == WV_REJECTED) ?\r
@@ -916,12 +930,12 @@ static void ucma_process_establish(struct cma_event *event)
 {\r
        struct cma_id_private *id_priv = event->id_priv;\r
 \r
-       if (SUCCEEDED(event->event.status)) {\r
+       if (!event->event.status) {\r
                event->event.status = ucma_query_connect(&id_priv->id,\r
                                                                                                 &event->event.param.conn);\r
        }\r
 \r
-       if (SUCCEEDED(event->event.status)) {\r
+       if (!event->event.status) {\r
                event->event.event = RDMA_CM_EVENT_ESTABLISHED;\r
 \r
                id_priv->state = cma_connected;\r
@@ -938,7 +952,7 @@ static int ucma_process_event(struct cma_event *event)
 {\r
        struct cma_id_private *listen, *id_priv;\r
        WV_CONNECT_ATTRIBUTES attr;\r
-       HRESULT hr = 0;\r
+       int ret = 0;\r
 \r
        id_priv = event->id_priv;\r
 \r
@@ -948,7 +962,7 @@ static int ucma_process_event(struct cma_event *event)
                listen = (struct cma_id_private *) id_priv->id.context;\r
                if (listen->state != cma_listening) {\r
                        InterlockedDecrement(&id_priv->refcnt);\r
-                       hr = WV_CANCELLED;\r
+                       ret = ECANCELLED;\r
                        break;\r
                }\r
 \r
@@ -962,7 +976,7 @@ static int ucma_process_event(struct cma_event *event)
                event->event.event = RDMA_CM_EVENT_ROUTE_RESOLVED;\r
                break;\r
        case cma_active_connect:\r
-               hr = ucma_process_conn_resp(event);\r
+               ret = ucma_process_conn_resp(event);\r
                break;\r
        case cma_accepting:\r
                ucma_process_establish(event);\r
@@ -977,11 +991,11 @@ static int ucma_process_event(struct cma_event *event)
                break;\r
        default:\r
                InterlockedDecrement(&id_priv->refcnt);\r
-               hr = WV_CANCELLED;\r
+               ret = ECANCELLED;\r
        }\r
        LeaveCriticalSection(&lock);\r
 \r
-       return hr;\r
+       return ret;\r
 }\r
 \r
 __declspec(dllexport)\r
@@ -1028,13 +1042,13 @@ __declspec(dllexport)
 int rdma_join_multicast(struct rdma_cm_id *id, struct sockaddr *addr,\r
                                                void *context)\r
 {\r
-       return WV_NOT_SUPPORTED;\r
+       return ENOSYS;\r
 }\r
 \r
 __declspec(dllexport)\r
 int rdma_leave_multicast(struct rdma_cm_id *id, struct sockaddr *addr)\r
 {\r
-       return WV_NOT_SUPPORTED;\r
+       return ENOSYS;\r
 }\r
 \r
 __declspec(dllexport)\r
@@ -1082,7 +1096,7 @@ __declspec(dllexport)
 int rdma_set_option(struct rdma_cm_id *id, int level, int optname,\r
                                        void *optval, size_t optlen)\r
 {\r
-       return WV_NOT_SUPPORTED;\r
+       return ENOSYS;\r
 }\r
 \r
 __declspec(dllexport)\r
index 853173b38ff37f6c897a9efc319a7f89b7566ba8..a8fe8f312ab538f124133d9bbb261d9c0097ae4b 100644 (file)
@@ -30,4 +30,5 @@ rdma_free_devices
 rdma_event_str\r
 rdma_set_option\r
 rdma_migrate_id\r
+rdmaw_wsa_errno\r
 #endif\r
index 0084633de9649849964ce9bb33204a56f9235045..ababfb8b1d56ebb680c5213a91ed52833d572d4e 100644 (file)
@@ -56,3 +56,49 @@ BOOL WINAPI DllMain(HINSTANCE hInstance, DWORD dwReason, LPVOID lpReserved)
 \r
        return TRUE;\r
 }\r
+\r
+__declspec(dllexport)\r
+int rdmaw_wsa_errno(int wsa_err)\r
+{\r
+       switch (wsa_err) {\r
+       case 0:                                 return 0;\r
+       case WSAEWOULDBLOCK             _set_errno(EWOULDBLOCK); break;\r
+       case WSAEINPROGRESS             _set_errno(EINPROGRESS); break;\r
+       case WSAEALREADY                _set_errno(EALREADY); break;\r
+       case WSAENOTSOCK                _set_errno(ENOTSOCK); break;\r
+       case WSAEDESTADDRREQ    _set_errno(EDESTADDRREQ); break;\r
+       case WSAEMSGSIZE                _set_errno(EMSGSIZE); break;\r
+       case WSAEPROTOTYPE              _set_errno(EPROTOTYPE); break;\r
+       case WSAENOPROTOOPT             _set_errno(ENOPROTOOPT); break;\r
+       case WSAEPROTONOSUPPORT _set_errno(EPROTONOSUPPORT); break;\r
+       case WSAESOCKTNOSUPPORT _set_errno(ESOCKTNOSUPPORT); break;\r
+       case WSAEOPNOTSUPP              _set_errno(EOPNOTSUPP); break;\r
+       case WSAEPFNOSUPPORT    _set_errno(EPFNOSUPPORT); break;\r
+       case WSAEAFNOSUPPORT    _set_errno(EAFNOSUPPORT); break;\r
+       case WSAEADDRINUSE              _set_errno(EADDRINUSE); break;\r
+       case WSAEADDRNOTAVAIL   _set_errno(EADDRNOTAVAIL); break;\r
+       case WSAENETDOWN                _set_errno(ENETDOWN); break;\r
+       case WSAENETUNREACH             _set_errno(ENETUNREACH); break;\r
+       case WSAENETRESET               _set_errno(ENETRESET); break;\r
+       case WSAECONNABORTED    _set_errno(ECONNABORTED); break;\r
+       case WSAECONNRESET              _set_errno(ECONNRESET); break;\r
+       case WSAENOBUFS                 _set_errno(ENOBUFS); break;\r
+       case WSAEISCONN                 _set_errno(EISCONN); break;\r
+       case WSAENOTCONN                _set_errno(ENOTCONN); break;\r
+       case WSAESHUTDOWN               _set_errno(ESHUTDOWN); break;\r
+       case WSAETOOMANYREFS    _set_errno(ETOOMANYREFS); break;\r
+       case WSAETIMEDOUT               _set_errno(ETIMEDOUT); break;\r
+       case WSAECONNREFUSED    _set_errno(ECONNREFUSED); break;\r
+       case WSAELOOP                   _set_errno(ELOOP); break;\r
+       case WSAENAMETOOLONG    _set_errno(ENAMETOOLONG); break;\r
+       case WSAEHOSTDOWN               _set_errno(EHOSTDOWN); break;\r
+       case WSAEHOSTUNREACH    _set_errno(EHOSTUNREACH); break;\r
+       case WSAENOTEMPTY               _set_errno(ENOTEMPTY); break;\r
+       case WSAEPROCLIM                _set_errno(EPROCLIM); break;\r
+       case WSAEUSERS                  _set_errno(EUSERS); break;\r
+       case WSAEDQUOT                  _set_errno(EDQUOT); break;\r
+       case WSAESTALE                  _set_errno(ESTALE); break;\r
+       case WSAEREMOTE                 _set_errno(EREMOTE); break;\r
+       }\r
+       return -1;\r
+}\r