switch (event->event) {
case RDMA_CM_EVENT_UNREACHABLE:
case RDMA_CM_EVENT_CONNECT_ERROR:
+ dapl_dbg_log(
+ DAPL_DBG_TYPE_WARN,
+ " dapli_cm_active_handler: CONN_ERR "
+ " event=0x%x status=%d\n",
+ event->event, event->status);
+
dapl_evd_connection_callback(conn,
IB_CME_DESTINATION_UNREACHABLE,
NULL, conn->ep);
break;
case RDMA_CM_EVENT_REJECTED:
+ dapl_dbg_log(
+ DAPL_DBG_TYPE_WARN,
+ " dapli_cm_active_handler: REJECTED reason=%d\n",
+ event->status);
dapl_evd_connection_callback(conn, IB_CME_DESTINATION_REJECT,
NULL, conn->ep);
break;
struct rdma_cm_event *event)
{
struct dapl_cm_id *new_conn;
+#ifdef DAPL_DBG
+ struct rdma_addr *ipaddr = &conn->cm_id->route.addr;
+#endif
dapl_dbg_log(DAPL_DBG_TYPE_CM,
" passive_cb: conn %p id %d event %d\n",
event->private_data, new_conn->sp);
break;
case RDMA_CM_EVENT_UNREACHABLE:
+ dapls_cr_callback(conn, IB_CME_DESTINATION_UNREACHABLE,
+ NULL, conn->sp);
+
case RDMA_CM_EVENT_CONNECT_ERROR:
+
+ dapl_dbg_log(
+ DAPL_DBG_TYPE_WARN,
+ " dapli_cm_passive: CONN_ERR "
+ " event=0x%x status=%d",
+ " on SRC 0x%x,0x%x DST 0x%x,0x%x\n",
+ event->event, event->status,
+ ntohl(((struct sockaddr_in *)
+ &ipaddr->src_addr)->sin_addr.s_addr),
+ ntohs(((struct sockaddr_in *)
+ &ipaddr->src_addr)->sin_port),
+ ntohl(((struct sockaddr_in *)
+ &ipaddr->dst_addr)->sin_addr.s_addr),
+ ntohs(((struct sockaddr_in *)
+ &ipaddr->dst_addr)->sin_port));
+
dapls_cr_callback(conn, IB_CME_DESTINATION_UNREACHABLE,
NULL, conn->sp);
break;
+
case RDMA_CM_EVENT_REJECTED:
- dapls_cr_callback(conn, IB_CME_DESTINATION_REJECT, NULL,
- conn->sp);
+
+ dapl_dbg_log(
+ DAPL_DBG_TYPE_WARN,
+ " dapli_cm_passive: REJECTED reason=%d"
+ " on SRC 0x%x,0x%x DST 0x%x,0x%x\n",
+ event->status,
+ ntohl(((struct sockaddr_in *)
+ &ipaddr->src_addr)->sin_addr.s_addr),
+ ntohs(((struct sockaddr_in *)
+ &ipaddr->src_addr)->sin_port),
+ ntohl(((struct sockaddr_in *)
+ &ipaddr->dst_addr)->sin_addr.s_addr),
+ ntohs(((struct sockaddr_in *)
+ &ipaddr->dst_addr)->sin_port));
+
+ dapls_cr_callback(conn, IB_CME_DESTINATION_REJECT,
+ NULL, conn->sp);
break;
case RDMA_CM_EVENT_ESTABLISHED:
{
DAT_RETURN dat_status = DAT_SUCCESS;
ib_cm_srvc_handle_t conn;
+ DAT_SOCK_ADDR6 addr; /* local binding address */
/* Allocate CM and initialize lock */
if ((conn = dapl_os_alloc(sizeof(*conn))) == NULL)
}
/* open identifies the local device; per DAT specification */
- ((struct sockaddr_in *)&ia_ptr->hca_ptr->hca_address)->sin_port =
- htons(MAKE_PORT(ServiceID));
+ /* Get family and address then set port to consumer's ServiceID */
+ dapl_os_memcpy(&addr, &ia_ptr->hca_ptr->hca_address, sizeof(addr));
+ ((struct sockaddr_in *)&addr)->sin_port = htons(MAKE_PORT(ServiceID));
+
- if (rdma_bind_addr(conn->cm_id,
- (struct sockaddr *)&ia_ptr->hca_ptr->hca_address)) {
+ if (rdma_bind_addr(conn->cm_id,(struct sockaddr *)&addr)) {
if (errno == EBUSY)
dat_status = DAT_CONN_QUAL_IN_USE;
else