-/*
- * 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
\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
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
ibv_event_type_str\r
ibvw_get_windata\r
ibvw_release_windata\r
+ibvw_errno\r
#endif\r
}\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
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
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
\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
\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
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
if (SUCCEEDED(hr)) {\r
delete mr;\r
}\r
- return hr;\r
+ return ibvw_errno(hr);\r
}\r
\r
__declspec(dllexport)\r
if (SUCCEEDED(hr)) {\r
cq->cqe = (int) entries;\r
}\r
- return hr;\r
+ return ibvw_errno(hr);\r
}\r
\r
__declspec(dllexport)\r
} else {\r
hr = 0;\r
}\r
- return hr;\r
+ return ibvw_errno(hr);\r
}\r
\r
__declspec(dllexport)\r
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
(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
\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
\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
qp->state = attr->qp_state;\r
}\r
\r
- return hr;\r
+ return ibvw_errno(hr);\r
}\r
\r
__declspec(dllexport)\r
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
}\r
}\r
\r
- return hr;\r
+ return ibvw_errno(hr);\r
}\r
\r
__declspec(dllexport)\r
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
__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
__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
{\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
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
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
}\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
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
}\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
{\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
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
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
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
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
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
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
{\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
&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
if (id_priv != NULL) {\r
rdma_destroy_id(&id_priv->id);\r
}\r
- return hr;\r
+ return ret;\r
}\r
\r
__declspec(dllexport)\r
{\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
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
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
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
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
}\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
\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
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
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
{\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
{\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
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
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
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
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
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
rdma_event_str\r
rdma_set_option\r
rdma_migrate_id\r
+rdmaw_wsa_errno\r
#endif\r
\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