git.samba.org
/
metze
/
samba
/
wip.git
/ commitdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
| commitdiff |
tree
raw
|
patch
|
inline
| side by side (parent:
25dd2e3
)
WIP
author
Ralph Boehme
<slow@samba.org>
Fri, 30 Sep 2016 06:08:43 +0000
(23:08 -0700)
committer
Stefan Metzmacher
<metze@samba.org>
Fri, 1 Jun 2018 12:35:10 +0000
(14:35 +0200)
libcli/smb/smb_direct_daemon.c
patch
|
blob
|
history
diff --git
a/libcli/smb/smb_direct_daemon.c
b/libcli/smb/smb_direct_daemon.c
index 83d891fb21669a0079804bbe056aac2ced0c4f8a..0ea3e5944fd9b902b1b1502b91aa36ec3476861e 100644
(file)
--- a/
libcli/smb/smb_direct_daemon.c
+++ b/
libcli/smb/smb_direct_daemon.c
@@
-581,7
+581,7
@@
static NTSTATUS smbd_direct_daemon_listen(
ZERO_STRUCT(inaddr);
inaddr.sin_family = AF_INET;
ZERO_STRUCT(inaddr);
inaddr.sin_family = AF_INET;
- inaddr.sin_port =
5445
;
+ inaddr.sin_port =
htons(5445)
;
inaddr.sin_addr.s_addr = INADDR_ANY;
result = rdma_bind_addr(daemon_state->rdma.cm_id,
inaddr.sin_addr.s_addr = INADDR_ANY;
result = rdma_bind_addr(daemon_state->rdma.cm_id,
@@
-853,7
+853,6
@@
static void rdma_cm_handler(struct tevent_context *ev,
private_data, struct smb_direct_daemon_state);
struct smb_direct_connection *sconn = NULL;
struct rdma_cm_event *cm_ev = NULL;
private_data, struct smb_direct_daemon_state);
struct smb_direct_connection *sconn = NULL;
struct rdma_cm_event *cm_ev = NULL;
- struct rdma_cm_event cm_ev_copy;
int result;
NTSTATUS status;
int result;
NTSTATUS status;
@@
-865,41
+864,49
@@
static void rdma_cm_handler(struct tevent_context *ev,
return;
}
return;
}
- cm_ev_copy = *cm_ev;
-
result = rdma_ack_cm_event(cm_ev
);
- if (result != 0) {
- DBG_ERR("rdma_ack_cm_event failed [%s]\n", strerror(errno));
- goto fail;
- }
-
cm_ev = NULL
;
+ DBG_ERR("cm_event type [%d] cm_id [%p]\n",
+
cm_ev->event, cm_ev->id
);
+
+ switch (cm_ev->event) {
+ case RDMA_CM_EVENT_CONNECT_REQUEST: {
+ struct rdma_conn_param conn_param;
+
uint8_t ird_ord_hdr[8]
;
- DBG_DEBUG("cm_event type [%d] cm_id [%p]\n",
-
cm_ev_copy.event, cm_ev_copy.id
);
+ RSIVAL(ird_ord_hdr, 0, 0);
+
RSIVAL(ird_ord_hdr, 4, 16
);
- switch (cm_ev_copy.event) {
- case RDMA_CM_EVENT_CONNECT_REQUEST:
DBG_DEBUG("RDMA_CM_EVENT_CONNECT_REQUEST\n");
DBG_DEBUG("RDMA_CM_EVENT_CONNECT_REQUEST\n");
- result = rdma_accept(cm_ev_copy.id, NULL);
+ ZERO_STRUCT(conn_param);
+// conn_param.private_data = ird_ord_hdr;
+// conn_param.private_data_len = sizeof(ird_ord_hdr);
+ conn_param.responder_resources = 1;
+ conn_param.initiator_depth = 1;
+// conn_param.retry_count = 10;
+
+ errno = 0;
+
+ result = rdma_accept(cm_ev->id, NULL);
if (result != 0) {
if (result != 0) {
- DBG_ERR("rdma_accept failed [%s]
\n", strerror(errno)
);
+ DBG_ERR("rdma_accept failed [%s]
result [%d]\n", strerror(errno), result
);
goto fail;
}
sconn = smb_direct_connection_listener(daemon_state,
goto fail;
}
sconn = smb_direct_connection_listener(daemon_state,
- cm_ev
_copy.
id);
+ cm_ev
->
id);
if (sconn == NULL) {
DBG_ERR("smb_direct_connection_create failed\n");
return;
}
if (sconn == NULL) {
DBG_ERR("smb_direct_connection_create failed\n");
return;
}
- cm_ev
_copy.
id->context = sconn;
+ cm_ev
->
id->context = sconn;
break;
break;
+ }
case RDMA_CM_EVENT_ESTABLISHED:
DBG_DEBUG("RDMA_CM_EVENT_ESTABLISHED\n");
case RDMA_CM_EVENT_ESTABLISHED:
DBG_DEBUG("RDMA_CM_EVENT_ESTABLISHED\n");
- sconn = talloc_get_type_abort(cm_ev
_copy.
id->context,
+ sconn = talloc_get_type_abort(cm_ev
->
id->context,
struct smb_direct_connection);
status = smb_direct_connection_complete_alloc(sconn);
if (!NT_STATUS_IS_OK(status)) {
struct smb_direct_connection);
status = smb_direct_connection_complete_alloc(sconn);
if (!NT_STATUS_IS_OK(status)) {
@@
-914,7
+921,7
@@
static void rdma_cm_handler(struct tevent_context *ev,
case RDMA_CM_EVENT_DISCONNECTED:
DBG_DEBUG("RDMA_CM_EVENT_DISCONNECTED\n");
case RDMA_CM_EVENT_DISCONNECTED:
DBG_DEBUG("RDMA_CM_EVENT_DISCONNECTED\n");
- sconn = talloc_get_type(cm_ev
_copy.
id->context,
+ sconn = talloc_get_type(cm_ev
->
id->context,
struct smb_direct_connection);
TALLOC_FREE(sconn);
break;
struct smb_direct_connection);
TALLOC_FREE(sconn);
break;
@@
-924,17
+931,25
@@
static void rdma_cm_handler(struct tevent_context *ev,
goto fail;
default:
goto fail;
default:
- DBG_ERR("event %d\n", cm_ev
_copy.
event);
+ DBG_ERR("event %d\n", cm_ev
->
event);
goto fail;
}
goto fail;
}
+ result = rdma_ack_cm_event(cm_ev);
+ if (result != 0) {
+ DBG_ERR("rdma_ack_cm_event failed [%s]\n", strerror(errno));
+ goto fail;
+ }
return;
fail:
return;
fail:
- if (cm_ev_copy.id == daemon_state->rdma.cm_id) {
+ rdma_ack_cm_event(cm_ev);
+
+ if (cm_ev->id == daemon_state->rdma.cm_id) {
/* Listening conn is erroring out, shut it down and die */
TALLOC_FREE(daemon_state->listening_conn);
/* Listening conn is erroring out, shut it down and die */
TALLOC_FREE(daemon_state->listening_conn);
+ // tevent_req_error(daemon_state->req, EPANIC);
}
TALLOC_FREE(sconn);
}
TALLOC_FREE(sconn);