Add reason checking on provider rejects and set appropriate op type in reject message. Reject can be called from cr callback during failures. User reject will be IB_CM_REJ_REASON_CONSUMER_REJ. Add warning message on active side.
Signed-off-by: Arlin Davis <[email protected]> --- dapl/openib_ucm/cm.c | 34 ++++++++++++++++++++++++++-------- 1 files changed, 26 insertions(+), 8 deletions(-) diff --git a/dapl/openib_ucm/cm.c b/dapl/openib_ucm/cm.c index 762bd66..6efcad2 100644 --- a/dapl/openib_ucm/cm.c +++ b/dapl/openib_ucm/cm.c @@ -402,11 +402,12 @@ static void ucm_process_recv(ib_hca_transport_t *tp, break; default: dapl_log(DAPL_DBG_TYPE_WARN, - " ucm_recv: UNKNOWN state" - " <- op %s, %s spsp %x sqpn %x\n", - dapl_cm_op_str(ntohs(msg->op)), - dapl_cm_state_str(cm->state), - ntohs(msg->sport), ntohl(msg->sqpn)); + " ucm_recv: Warning, UNKNOWN state" + " <- op %s, %s spsp %x sqpn %x slid %x\n", + dapl_cm_op_str(ntohs(msg->op)), + dapl_cm_state_str(cm->state), + ntohs(msg->sport), ntohl(msg->sqpn), + ntohs(msg->saddr.ib.lid)); dapl_os_unlock(&cm->lock); break; } @@ -1065,9 +1066,19 @@ static void ucm_connect_rtu(dp_ib_cm_handle_t cm, ib_cm_msg_t *msg) event = IB_CME_CONNECTED; else if (ntohs(msg->op) == DCM_REJ_USER) event = IB_CME_DESTINATION_REJECT_PRIVATE_DATA; - else + else { + dapl_log(DAPL_DBG_TYPE_WARN, + " Warning, non-user CR REJECT:" + " cm %p op %s, st %s dlid %x iqp %x port %x <-" + " slid %x iqp %x port %x\n", cm, + dapl_cm_op_str(ntohs(msg->op)), + dapl_cm_state_str(cm->state), + ntohs(msg->daddr.ib.lid), ntohl(msg->daddr.ib.qpn), + ntohs(msg->dport), ntohs(msg->saddr.ib.lid), + ntohl(msg->saddr.ib.qpn), ntohs(msg->sport)); + event = IB_CME_DESTINATION_REJECT; - + } if (event != IB_CME_CONNECTED) { dapl_log(DAPL_DBG_TYPE_CM, " ACTIVE: CM_REQ REJECTED:" @@ -1203,6 +1214,9 @@ ud_bail: (DAT_COUNT)ntohs(cm->msg.p_size), (DAT_PVOID *)cm->msg.p_data, (DAT_PVOID *)&xevent); + + if (event != DAT_IB_UD_CONNECTION_EVENT_ESTABLISHED) + dapli_cm_free(cm); } else #endif { @@ -1942,8 +1956,12 @@ dapls_ib_reject_connection(IN dp_ib_cm_handle_t cm, cm->msg.saddr.ib.qp_type = cm->msg.daddr.ib.qp_type; dapl_os_memcpy(&cm->msg.saddr.ib.gid[0], &cm->hca->ib_trans.addr.ib.gid, 16); - cm->msg.op = htons(DCM_REJ_USER); + if (reason == IB_CM_REJ_REASON_CONSUMER_REJ) + cm->msg.op = htons(DCM_REJ_USER); + else + cm->msg.op = htons(DCM_REJ_CM); + if (ucm_send(&cm->hca->ib_trans, &cm->msg, pdata, psize)) { dapl_log(DAPL_DBG_TYPE_WARN, " cm_reject: send ERR: %s\n", strerror(errno)); -- 1.7.3 _______________________________________________ ofw mailing list [email protected] http://lists.openfabrics.org/cgi-bin/mailman/listinfo/ofw
