From 4c50d78bc73685574548b3a781e914472b34a2cf 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 | 2 ++ trunk/ulp/librdmacm/src/cma.cpp | 39 +++++++++++++++++++++ trunk/ulp/librdmacm/src/cma_exports.src | 1 + 3 files changed, 42 insertions(+) diff --git a/trunk/ulp/librdmacm/include/rdma/rdma_cma.h b/trunk/ulp/librdmacm/include/rdma/rdma_cma.h index 2ef28689..66932cad 100644 --- a/trunk/ulp/librdmacm/include/rdma/rdma_cma.h +++ b/trunk/ulp/librdmacm/include/rdma/rdma_cma.h @@ -417,6 +417,8 @@ 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); +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..77cceb0b 100644 --- a/trunk/ulp/librdmacm/src/cma.cpp +++ b/trunk/ulp/librdmacm/src/cma.cpp @@ -918,6 +918,45 @@ int rdma_listen(struct rdma_cm_id *id, int backlog) return 0; } +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