if ( !pd || len <= 0 )\r
return;\r
\r
- dapl_log ( DAPL_DBG_TYPE_CM, "--> %s: private_data:\n ",prefix);\r
+ dapl_log ( DAPL_DBG_TYPE_CM, "--> %s: private_data(len %d)\n ",prefix,len);\r
\r
if (len > IB_MAX_REP_PDATA_SIZE)\r
{\r
for ( i = 0 ; i < len; i++ )\r
{\r
dapl_log ( DAPL_DBG_TYPE_CM, "%2x ", pd[i]);\r
- if ( ((i+1) % 20) == 0 ) \r
+ if ( ((i+1) % 5) == 0 ) \r
dapl_log ( DAPL_DBG_TYPE_CM, "\n ");\r
}\r
dapl_log ( DAPL_DBG_TYPE_CM, "\n");\r
(void)dapl_os_memzero(cm_ptr, sizeof(*cm_ptr));\r
cm_ptr->ref_count = 1;\r
\r
- if (dapl_os_lock_init(&cm_ptr->lock))\r
+ if (dapl_os_lock_init(&cm_ptr->lock)) {\r
+ dapl_os_free(cm_ptr, sizeof(*cm_ptr));\r
return NULL;\r
+ }\r
\r
dapl_llist_init_entry((DAPL_LLIST_ENTRY *)&cm_ptr->list_entry);\r
\r
dapl_os_free(cm_ptr, sizeof(*cm_ptr));\r
}\r
\r
-/* dapl_ep_link_cm() */\r
void dapls_cm_acquire(dp_ib_cm_handle_t cm_ptr)\r
{\r
dapl_os_lock(&cm_ptr->lock);\r
dapl_os_unlock(&cm_ptr->lock);\r
}\r
\r
-/* dapl_ep_unlink_cm() */\r
void dapls_cm_release(dp_ib_cm_handle_t cm_ptr)\r
{\r
dapl_os_lock(&cm_ptr->lock);\r
dapl_os_assert(cm_ptr->ib_cm.h_qp == p_cm_rep_rec->h_cm_rep.h_qp);\r
\r
dapl_dbg_log (DAPL_DBG_TYPE_CM, \r
- "--> DiCRpcb: EP = %lx local_max_rdma_read_in %d\n", \r
+ "--> DiCRpcb: EP %lx local_max_rdma_read_in %d\n", \r
ep_ptr, p_cm_rep_rec->resp_res);\r
\r
p_ca = (dapl_ibal_ca_t *) \r
\r
#endif /* NO_NAME_SERVICE */\r
\r
-#if defined(DAPL_DBG)\r
- {\r
- char ipa[20];\r
- \r
- //rval = ((struct sockaddr_in *) (&dest_ia_addr))->sin_addr.s_addr;\r
-\r
- dapl_dbg_log (DAPL_DBG_TYPE_CM|DAPL_DBG_TYPE_CALLBACK, \r
- "%s: query SA for RemoteAddr: %s\n",\r
- __FUNCTION__,\r
- dapli_get_ip_addr_str( (DAT_SOCK_ADDR6*)\r
- &dest_ia_addr, ipa) );\r
- }\r
-#endif\r
-\r
/* preserve CR cm handle data */\r
dapl_os_memcpy( (void*)&cm_ptr->ib_cm,\r
(void*)&p_cm_req_rec->h_cm_req,\r
(void*)&dest_ia_addr,\r
sizeof(dest_ia_addr));\r
\r
+#if defined(DAPL_DBG)\r
+ {\r
+ char ipa[20];\r
+ \r
+ //rval = ((struct sockaddr_in *) (&dest_ia_addr))->sin_addr.s_addr;\r
+\r
+ dapl_dbg_log (DAPL_DBG_TYPE_CM|DAPL_DBG_TYPE_CALLBACK, \r
+ "%s: query SA (CM %lx)->dst_ip_addr: %s\n",\r
+ __FUNCTION__,cm_ptr,\r
+ dapli_get_ip_addr_str(\r
+ (DAT_SOCK_ADDR6*) &cm_ptr->dst_ip_addr, ipa) );\r
+ }\r
+#endif\r
+\r
/* FIXME - Vu\r
* We have NOT used/saved the primary and alternative path record\r
* ie. p_cm_req_rec->p_primary_path and p_cm_req_rec->p_alt_path\r
dapls_cr_callback ( cm_ptr,\r
IB_CME_CONNECTION_REQUEST_PENDING,\r
(void * __ptr64) p_cm_req_rec->p_req_pdata,\r
- IB_REQ_PDATA_SIZE,\r
+ IB_REQ_PDATA_SIZE,\r
(void * __ptr64) sp_ptr );\r
}\r
\r
IN ib_cm_mra_rec_t *p_cm_mra_rec )\r
{\r
UNUSED_PARAM( p_cm_mra_rec );\r
- dapl_dbg_log (DAPL_DBG_TYPE_CM | DAPL_DBG_TYPE_CALLBACK, \r
+ dapl_dbg_log (DAPL_DBG_TYPE_CM | DAPL_DBG_TYPE_CALLBACK, \r
"--> DiCMcb: CM callback MRA\n");\r
}\r
\r
dapli_ib_cm_rtu_cb (\r
IN ib_cm_rtu_rec_t *p_cm_rtu_rec )\r
{\r
- DAPL_EP *ep_ptr;\r
+ DAPL_EP *ep_ptr;\r
dp_ib_cm_handle_t cm_ptr;\r
\r
dapl_os_assert (p_cm_rtu_rec != NULL);\r
dapl_os_assert(cm_ptr->ib_cm.h_qp == p_cm_rtu_rec->h_qp);\r
\r
dapl_dbg_log (DAPL_DBG_TYPE_CM | DAPL_DBG_TYPE_CALLBACK, \r
- "--> DiCRucb: EP %lx QP %lx\n", ep_ptr, ep_ptr->qp_handle); \r
+ "--> DiCRucb: EP %lx QP %lx CR %lx\n",\r
+ ep_ptr, ep_ptr->qp_handle, ep_ptr->cr_ptr); \r
\r
if (ep_ptr->cr_ptr)\r
{\r
\r
sp_ptr = ((DAPL_CR *) ep_ptr->cr_ptr)->sp_ptr;\r
\r
+ /* passive connection side */\r
dapls_cr_callback ( cm_ptr,\r
IB_CME_CONNECTED,\r
(void * __ptr64) p_cm_rtu_rec->p_rtu_pdata,\r
{\r
\r
DAPL_HEADER *header;\r
- void *vp;\r
+ dp_ib_cm_handle_t cm;\r
char ipa[20];\r
+ char *rtype;\r
\r
header = (DAPL_HEADER *)dat_handle;\r
\r
if (header->magic == DAPL_MAGIC_EP) \r
{\r
- vp = &((DAPL_EP *) dat_handle)->remote_ia_address;\r
+ cm = dapl_get_cm_from_ep((DAPL_EP *)dat_handle);\r
+ rtype = "EP";\r
}\r
else if (header->magic == DAPL_MAGIC_CR) \r
{\r
- vp = &((DAPL_CR *) dat_handle)->remote_ia_address;\r
+ cm = ((DAPL_CR *) dat_handle)->ib_cm_handle;\r
+ rtype = "CR";\r
}\r
else \r
{\r
return DAT_INVALID_HANDLE;\r
}\r
\r
- dapl_os_memcpy( remote_address, vp, sizeof(DAT_SOCK_ADDR6) );\r
+ dapl_os_memcpy( remote_address, &cm->dst_ip_addr, sizeof(DAT_SOCK_ADDR6) );\r
\r
- dapl_dbg_log ( DAPL_DBG_TYPE_CM, "%s: returns %s\n",\r
- __FUNCTION__,\r
+ dapl_dbg_log ( DAPL_DBG_TYPE_CM, "%s: returns %s remote Addrs %s\n",\r
+ __FUNCTION__, rtype,\r
dapli_get_ip_addr_str((DAT_SOCK_ADDR6*)remote_address,ipa) );\r
\r
return DAT_SUCCESS;\r
IN DAT_CLOSE_FLAGS disconnect_flags )\r
{\r
ib_api_status_t ib_status = IB_SUCCESS;\r
- ib_cm_dreq_t cm_dreq;\r
- dp_ib_cm_handle_t cm_ptr;\r
+ ib_cm_dreq_t cm_dreq;\r
+ dp_ib_cm_handle_t cm_ptr;\r
\r
dapl_os_assert(ep_ptr);\r
\r
/* EP-CM, save/release CR CM object, use EP CM object already linked */\r
cm_ptr = dapl_get_cm_from_ep(ep_ptr);\r
if (!cm_ptr) {\r
- dapl_dbg_log ( DAPL_DBG_TYPE_ERR,\r
+ dapl_dbg_log ( DAPL_DBG_TYPE_ERR,\r
"--> DsIBAC: CM linking to EP %p not available\n",\r
ep_ptr);\r
- return (DAT_INVALID_STATE);\r
+ return (DAT_INVALID_STATE);\r
}\r
- /* get h_al and connection ID from CR CM object, h_qp already set */\r
- cm_ptr->ib_cm.cid = cr_ptr->ib_cm_handle->ib_cm.cid; \r
- cm_ptr->ib_cm.h_al = cr_ptr->ib_cm_handle->ib_cm.h_al;\r
- dapls_cm_release(cr_ptr->ib_cm_handle);\r
- cr_ptr->ib_cm_handle = NULL;\r
\r
/* set remote IP addr fields. IP addr data is deduced from Connection\r
* Request record (gid/lib) and stashed away for use here. DAPL 1.1\r
* in 2.0?\r
*/\r
dapl_os_memcpy( (void*)&ep_ptr->remote_ia_address,\r
- (void*)&cm_ptr->dst_ip_addr,\r
+ (void*)&cr_ptr->ib_cm_handle->dst_ip_addr,\r
sizeof(DAT_SOCK_ADDR6) );\r
\r
dapl_os_memcpy( (void*)&cr_ptr->remote_ia_address,\r
(void*)&ep_ptr->remote_ia_address,\r
sizeof(DAT_SOCK_ADDR6) );\r
\r
-#if defined(DAPL_DBG) && 0\r
+#if defined(DAPL_DBG)\r
{\r
char ipa[20];\r
\r
"%s: EP(%lx) RemoteAddr: %s\n",\r
__FUNCTION__, ep_ptr,\r
dapli_get_ip_addr_str(\r
- (DAT_SOCK_ADDR6*)&ep_ptr->remote_ia_address, ipa));\r
+ (DAT_SOCK_ADDR6*)&ep_ptr->remote_ia_address, ipa) );\r
}\r
#endif\r
\r
- ep_ptr->qp_state = IB_QPS_INIT;\r
+ dapl_os_memcpy( (void*)&cm_ptr->dst_ip_addr,\r
+ (void*)&cr_ptr->ib_cm_handle->dst_ip_addr,\r
+ sizeof(DAT_SOCK_ADDR6) );\r
+\r
+ /* get h_al and connection ID from CR CM object, h_qp already set */\r
+ cm_ptr->ib_cm.cid = cr_ptr->ib_cm_handle->ib_cm.cid; \r
+ cm_ptr->ib_cm.h_al = cr_ptr->ib_cm_handle->ib_cm.h_al;\r
+ dapls_cm_release(cr_ptr->ib_cm_handle);\r
+\r
+ cr_ptr->ib_cm_handle = cm_ptr; /* for dapli_get_sp_ep() upcall */\r
+\r
ep_ptr->cr_ptr = cr_ptr;\r
\r
dapl_os_memzero ( (void*)&cm_rep, sizeof (ib_cm_rep_t) );\r
dapl_dbg_log ( DAPL_DBG_TYPE_ERR,\r
"--> DsIBAC: EP %lx QP %lx CR reply failed '%s'\n",\r
ep_ptr, ep_ptr->qp_handle, ib_get_err_str(ib_status) );\r
-\r
- /* errors not perculated back to CR callback which allocated the\r
- * memory, free it here on error.\r
- */\r
}\r
\r
return ( dapl_ib_status_convert ( ib_status ) );\r