conn->params.private_data_len,
conn->params.responder_resources,
conn->params.initiator_depth );
-#if 0
- /* Get default connect request timeout values, and adjust */
- ret = rdma_get_option(conn->cm_id, RDMA_PROTO_IB, IB_CM_REQ_OPTIONS,
- (void*)&req_opt, &optlen);
- if (ret) {
- dapl_dbg_log(DAPL_DBG_TYPE_ERR, " rdma_get_option failed: %s\n",
- strerror(errno));
- goto bail;
- }
-
- dapl_dbg_log(DAPL_DBG_TYPE_CM, " route_resolve: "
- "Set CR times - response %d to %d, retry %d to %d\n",
- req_opt.remote_cm_response_timeout,
- conn->hca->ib_trans.max_cm_timeout,
- req_opt.max_cm_retries,
- conn->hca->ib_trans.max_cm_retries);
-
- /* Use hca response time setting for connect requests */
- req_opt.max_cm_retries = conn->hca->ib_trans.max_cm_retries;
- req_opt.remote_cm_response_timeout =
- conn->hca->ib_trans.max_cm_timeout;
- req_opt.local_cm_response_timeout =
- req_opt.remote_cm_response_timeout;
- ret = rdma_set_option(conn->cm_id, RDMA_PROTO_IB, IB_CM_REQ_OPTIONS,
- (void*)&req_opt, optlen);
- if (ret) {
- dapl_dbg_log(DAPL_DBG_TYPE_ERR, " rdma_set_option failed: %s\n",
- strerror(errno));
- goto bail;
- }
-#endif
ret = rdma_connect(conn->cm_id, &conn->params);
+
if (ret) {
dapl_dbg_log(DAPL_DBG_TYPE_ERR, " rdma_connect failed: %s\n",
strerror(errno));
dapl_os_lock(&conn->lock);
conn->destroy = 1;
- if (conn->ep)
+ if (conn->ep) {
conn->ep->cm_handle = IB_INVALID_HANDLE;
+ conn->ep->qp_handle = IB_INVALID_HANDLE;
+ }
cm_id = conn->cm_id;
conn->cm_id = NULL;
new_conn->hca = conn->hca;
/* Get requesters connect data, setup for accept */
- new_conn->params.responder_resources =
- DAPL_MIN(event->param.conn.initiator_depth,
- conn->hca->ib_trans.max_rdma_rd_in);
- new_conn->params.initiator_depth =
- DAPL_MIN(event->param.conn.responder_resources,
- conn->hca->ib_trans.max_rdma_rd_out);
+ new_conn->params.responder_resources =
+ DAPL_MIN(event->param.conn.responder_resources,
+ conn->hca->ib_trans.max_rdma_rd_in);
+ new_conn->params.initiator_depth =
+ DAPL_MIN(event->param.conn.initiator_depth,
+ conn->hca->ib_trans.max_rdma_rd_out);
new_conn->params.flow_control = event->param.conn.flow_control;
new_conn->params.rnr_retry_count = event->param.conn.rnr_retry_count;
&conn->cm_id->route.addr.dst_addr)->sin_addr.s_addr));
/* setup local and remote ports for ep query */
- conn->ep->param.remote_port_qual = rdma_get_dst_port(conn->cm_id);
- conn->ep->param.local_port_qual = rdma_get_src_port(conn->cm_id);
+ conn->ep->param.remote_port_qual =
+ ntohs(rdma_get_dst_port(conn->cm_id));
+ conn->ep->param.local_port_qual =
+ ntohs(rdma_get_src_port(conn->cm_id));
dapl_evd_connection_callback(conn, IB_CME_CONNECTED,
event->param.conn.private_data, conn->ep);
" disconnect(ep %p, conn %p, id %d flags %x)\n",
ep_ptr,conn, (conn?conn->cm_id:0),close_flags);
- if (conn == IB_INVALID_HANDLE)
+ if ((conn == IB_INVALID_HANDLE) || (conn->cm_id == NULL))
return DAT_SUCCESS;
/* no graceful half-pipe disconnect option */
}
cr_ptr->param.local_ep_handle = ep_handle;
- ep_ptr->qp_handle = cr_conn;
- ep_ptr->cm_handle = cr_conn;
- cr_conn->ep = ep_ptr;
cr_conn->params.private_data = p_data;
cr_conn->params.private_data_len = p_size;
goto bail;
}
+ /* save accepted conn and EP reference */
+ ep_ptr->qp_handle = cr_conn;
+ ep_ptr->cm_handle = cr_conn;
+ cr_conn->ep = ep_ptr;
+
/* setup local and remote ports for ep query */
ep_ptr->param.remote_port_qual = rdma_get_dst_port(cr_conn->cm_id);
ep_ptr->param.local_port_qual = rdma_get_src_port(cr_conn->cm_id);