return tevent_req_post(req, ev);
}
+ memset(state->rep.buffer, 0x1F, sizeof(state->rep.buffer));
state->rep.sge[0].addr = (uint64_t) (uintptr_t) state->rep.buffer;
- state->rep.sge[0].length = sizeof(state->rep.buffer);;
+ state->rep.sge[0].length = sizeof(state->rep.buffer);
state->rep.sge[0].lkey = state->rep.mr->lkey;
state->rep.wr.sg_list = state->rep.sge;
state->rep.wr.num_sge = ARRAY_SIZE(state->rep.sge);
switch (wc.opcode) {
case IBV_WC_SEND:
break;
+ case IBV_WC_RECV:
+ DEBUG(0,("%s:%s: ret[%d] errno[%d]\n",
+ __location__, __FUNCTION__, ret, errno));
+ dump_data(0, state->rep.buffer, sizeof(state->rep.buffer));
+
+ //ret = ibv_post_recv(cb->qp, &cb->rq_wr, &bad_wr);
+ break;
case IBV_WC_RDMA_WRITE:
break;
case IBV_WC_RDMA_READ:
break;
- case IBV_WC_RECV:
- //ret = ibv_post_recv(cb->qp, &cb->rq_wr, &bad_wr);
- break;
default:
break;
}
}
switch (state->t->rdma.cm_event->event) {
+ case RDMA_CM_EVENT_DISCONNECTED:
+ status = NT_STATUS_CONNECTION_DISCONNECTED;
+ break;
case RDMA_CM_EVENT_ADDR_RESOLVED:
case RDMA_CM_EVENT_ADDR_ERROR:
case RDMA_CM_EVENT_ROUTE_RESOLVED:
case RDMA_CM_EVENT_CONNECT_ERROR:
case RDMA_CM_EVENT_UNREACHABLE:
case RDMA_CM_EVENT_REJECTED:
- case RDMA_CM_EVENT_DISCONNECTED:
case RDMA_CM_EVENT_DEVICE_REMOVAL:
case RDMA_CM_EVENT_MULTICAST_JOIN:
case RDMA_CM_EVENT_MULTICAST_ERROR:
case RDMA_CM_EVENT_ADDR_CHANGE:
case RDMA_CM_EVENT_TIMEWAIT_EXIT:
- //error
+ status = NT_STATUS_INVALID_NETWORK_RESPONSE;
break;
}
rdma_ack_cm_event(state->t->rdma.cm_event);
state->t->rdma.cm_event = NULL;
}
+
+ TALLOC_FREE(state->t->ibv.fde_channel);
+ TALLOC_FREE(state->t->rdma.fde_channel);
+ tevent_req_nterror(req, status);
}
NTSTATUS smb_direct_negotiate_recv(struct tevent_req *req)