]> 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 17:33:20 +0000 (10:33 -0700)
trunk/ulp/librdmacm/include/rdma/rdma_cma.h
trunk/ulp/librdmacm/src/cma.cpp
trunk/ulp/librdmacm/src/cma_exports.src

index 2ef286895d923ff3ebef3c67289cbf01214454aa..66932cad2b5f0f9a20f938a610e15cf4bf878b6c 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..77cceb0b9f0e0b6fa61a18dd9da956759361ecac 100644 (file)
@@ -918,6 +918,45 @@ int rdma_listen(struct rdma_cm_id *id, int backlog)
        return 0;\r
 }\r
 \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