]> git.openfabrics.org - ~shefty/rdma-win.git/commitdiff
librdmacm: add rdma_get_request
authorSean Hefty <sean.hefty@intel.com>
Mon, 16 Aug 2010 17:33:20 +0000 (10:33 -0700)
committerSean Hefty <sean.hefty@intel.com>
Mon, 16 Aug 2010 20:54:58 +0000 (13:54 -0700)
trunk/ulp/librdmacm/include/rdma/rdma_cma.h
trunk/ulp/librdmacm/src/cma.cpp
trunk/ulp/librdmacm/src/cma_exports.src

index b4cda67f1d18436888b2895040a3acd3a9d7a26c..aa9d70785e580711ebd0d46bc3c25125c9031414 100644 (file)
@@ -417,6 +417,8 @@ int rdma_connect(struct rdma_cm_id *id, struct rdma_conn_param *conn_param);
 __declspec(dllexport)\r
 int rdma_listen(struct rdma_cm_id *id, int backlog);\r
 \r
+int rdma_get_request(struct rdma_cm_id *listen, struct rdma_cm_id **id);\r
+\r
 /**\r
  * rdma_accept - Called to accept a connection request.\r
  * @id: Connection identifier associated with the request.\r
index 7240c4dd89a739a80dbdab0a58aaa1772a823529..f897245f2207a983e19231f95031511b7f08f79c 100644 (file)
@@ -918,6 +918,46 @@ int rdma_listen(struct rdma_cm_id *id, int backlog)
        return 0;\r
 }\r
 \r
+__declspec(dllexport)\r
+int rdma_get_request(struct rdma_cm_id *listen, struct rdma_cm_id **id)\r
+{\r
+       struct cma_id_private *id_priv;\r
+       struct rdma_cm_event *event;\r
+       int ret;\r
+\r
+       id_priv = CONTAINING_RECORD(listen, struct cma_id_private, id);\r
+       if (!id_priv->sync) {\r
+               return rdma_seterrno(EINVAL);\r
+       }\r
+\r
+       if (listen->event) {\r
+               rdma_ack_cm_event(listen->event);\r
+               listen->event = NULL;\r
+       }\r
+\r
+       ret = rdma_get_cm_event(listen->channel, &event);\r
+       if (ret)\r
+               return ret;\r
+\r
+       if (event->status) {\r
+               ret = rdma_seterrno(event->status);\r
+               goto err;\r
+       }\r
+       \r
+       if (event->event != RDMA_CM_EVENT_CONNECT_REQUEST) {\r
+               ret = rdma_seterrno(EINVAL);\r
+               goto err;\r
+       }\r
+\r
+       *id = event->id;\r
+       (*id)->event = event;\r
+       return 0;\r
+\r
+err:\r
+       listen->event = event;\r
+       return ret;\r
+}\r
+\r
 __declspec(dllexport)\r
 int rdma_accept(struct rdma_cm_id *id, struct rdma_conn_param *conn_param)\r
 {\r
index 8f370bea1afc32e9e62f3e32cf7d126273feb6e2..2d6b33645f749135e84b047ad90bb2c58e25c453 100644 (file)
@@ -32,5 +32,6 @@ rdma_set_option
 rdma_migrate_id\r
 rdma_getaddrinfo\r
 rdma_freeaddrinfo\r
+rdma_get_request\r
 rdmaw_wsa_errno\r
 #endif\r