struct tevent_fd *fde;
} sock;
struct {
+ struct smb_direct_rdma_context context;
struct rdma_cm_id *cm_id;
struct rdma_event_channel *cm_channel;
struct tevent_fd *fde_channel;
smb_set_close_on_exec(c->rdma.cm_channel->fd);
set_blocking(c->rdma.cm_channel->fd, false);
+ c->rdma.context.c = c;
#if RDMA_USER_CM_MAX_ABI_VERSION >= 2
ret = rdma_create_id(c->rdma.cm_channel,
&c->rdma.cm_id,
- c, RDMA_PS_TCP);
+ &c->rdma.context,
+ RDMA_PS_TCP);
#else
#error
ret = rdma_create_id(c->rdma.cm_channel,
&c->rdma.cm_id,
- c);
+ &c->rdma.context);
#endif
if (ret != 0) {
TALLOC_FREE(c);
#ifndef _LIBCLI_SMB_SMB_DIRECT_H_
#define _LIBCLI_SMB_SMB_DIRECT_H_
+struct smb_direct_daemon_state;
struct smb_direct_connection;
+struct smb_direct_listener;
+
struct rdma_cm_id;
+struct smb_direct_rdma_context {
+ struct smb_direct_daemon_state *d;
+ struct smb_direct_connection *c;
+ struct smb_direct_listener *l;
+};
+
//Hack...
extern struct smb_direct_connection *smb_direct_conn;
struct smb_direct_daemon_conn *listening_conn;
struct {
+ struct smb_direct_rdma_context context;
struct rdma_cm_id *cm_id;
struct rdma_event_channel *cm_channel;
struct tevent_fd *cm_channel_fde;
* Connection object, one for each peer.
*/
+ struct smb_direct_rdma_context context;
+
/* Backpointer to the global daemon state */
struct smb_direct_daemon_state *daemon_state;
set_close_on_exec(daemon_state->rdma.cm_channel->fd);
set_blocking(daemon_state->rdma.cm_channel->fd, false);
+ daemon_state->rdma.context.d = daemon_state;
#if RDMA_USER_CM_MAX_ABI_VERSION >= 2
result = rdma_create_id(daemon_state->rdma.cm_channel,
&daemon_state->rdma.cm_id,
- conn,
+ &daemon_state->rdma.context,
RDMA_PS_TCP);
#else
result = rdma_create_id(daemon_state->rdma.cm_channel,
&daemon_state->rdma.cm_id,
- conn);
+ &daemon_state->rdma.context);
#endif
if (result != 0) {
DBG_ERR("rdma_create_id failed [%s]\n",