From 1ef2ab06b60a1192a1b2af253d75e187ecc68381 Mon Sep 17 00:00:00 2001 From: Sean Hefty Date: Mon, 16 Aug 2010 10:33:20 -0700 Subject: [PATCH] librdmacm: add rdma_get_request --- trunk/ulp/librdmacm/include/rdma/rdma_cma.h | 3 ++ trunk/ulp/librdmacm/src/cma.cpp | 40 +++++++++++++++++++++ trunk/ulp/librdmacm/src/cma_exports.src | 1 + 3 files changed, 44 insertions(+) diff --git a/trunk/ulp/librdmacm/include/rdma/rdma_cma.h b/trunk/ulp/librdmacm/include/rdma/rdma_cma.h index b4cda67f..489fa66c 100644 --- a/trunk/ulp/librdmacm/include/rdma/rdma_cma.h +++ b/trunk/ulp/librdmacm/include/rdma/rdma_cma.h @@ -417,6 +417,9 @@ int rdma_connect(struct rdma_cm_id *id, struct rdma_conn_param *conn_param); __declspec(dllexport) int rdma_listen(struct rdma_cm_id *id, int backlog); +__declspec(dllexport) +int rdma_get_request(struct rdma_cm_id *listen, struct rdma_cm_id **id); + /** * rdma_accept - Called to accept a connection request. * @id: Connection identifier associated with the request. diff --git a/trunk/ulp/librdmacm/src/cma.cpp b/trunk/ulp/librdmacm/src/cma.cpp index 7240c4dd..f897245f 100644 --- a/trunk/ulp/librdmacm/src/cma.cpp +++ b/trunk/ulp/librdmacm/src/cma.cpp @@ -918,6 +918,46 @@ int rdma_listen(struct rdma_cm_id *id, int backlog) return 0; } +__declspec(dllexport) +int rdma_get_request(struct rdma_cm_id *listen, struct rdma_cm_id **id) +{ + struct cma_id_private *id_priv; + struct rdma_cm_event *event; + int ret; + + id_priv = CONTAINING_RECORD(listen, struct cma_id_private, id); + if (!id_priv->sync) { + return rdma_seterrno(EINVAL); + } + + if (listen->event) { + rdma_ack_cm_event(listen->event); + listen->event = NULL; + } + + ret = rdma_get_cm_event(listen->channel, &event); + if (ret) + return ret; + + if (event->status) { + ret = rdma_seterrno(event->status); + goto err; + } + + if (event->event != RDMA_CM_EVENT_CONNECT_REQUEST) { + ret = rdma_seterrno(EINVAL); + goto err; + } + + *id = event->id; + (*id)->event = event; + return 0; + +err: + listen->event = event; + return ret; +} + __declspec(dllexport) int rdma_accept(struct rdma_cm_id *id, struct rdma_conn_param *conn_param) { diff --git a/trunk/ulp/librdmacm/src/cma_exports.src b/trunk/ulp/librdmacm/src/cma_exports.src index 8f370bea..2d6b3364 100644 --- a/trunk/ulp/librdmacm/src/cma_exports.src +++ b/trunk/ulp/librdmacm/src/cma_exports.src @@ -32,5 +32,6 @@ rdma_set_option rdma_migrate_id rdma_getaddrinfo rdma_freeaddrinfo +rdma_get_request rdmaw_wsa_errno #endif -- 2.46.0