[openib-general] Re: DAPL CM Reject Questions

James Lentini jlentini at netapp.com
Thu May 12 14:31:42 PDT 2005



> Hal Rosenstock wrote:
>> On the passive side, an RTU is received but the QP cannot be transition
>> to RTS so a REJ is attempted as below:
>> 
>> static int do_rtu_recv(struct dapl_cm_id *conn)
>> {
>>         int status;
>> 
>>         status = dapl_modify_qp_state_to_rts(conn->cm_id, 
>> conn->ep->qp_handle);
>>         if (status) {
>>                 dapl_dbg_log(DAPL_DBG_TYPE_ERR, " do_rtu_recv: could not "
>>                              "modify QP state to RTS status %d\n", status);
>>                 goto reject;
>>         }
>> 	...
>> 
>> reject:
>>         ib_send_cm_rej(conn->cm_id, IB_CM_REJ_CONSUMER_DEFINED, NULL, 0,
>>                        NULL, 0);
>
> This should call ib_send_cm_dreq(), rather than a reject.

I've changed the above line to

(void) ib_send_cm_dreq(conn->cm_id, NULL, 0);

in revision 2329.

>> If RTU is received, the connection would be in ESTABLISHED state. Is
>> sending REJ valid there ? What's odd to me is that the CM state machine
>> in the IBA spec shows REJ being received in the established state on the
>> active side (and moving to TIMEWAIT) but there is no action out of
>> established on the passive side showing send REJ.
>
> On the passive side, the user can time out waiting for an RTU and issue a 
> reject.  But the RTU may have been sent (and lost) on the active side.  So, 
> the active side would be in the ESTABLISHED state when the REJ is received.
>
> This cannot happen on the passive side.
>
>> If sending REJ is valid on the passive side in established state, does
>> the current CM handle this ? It looks to me like it returns -EINVAL for
>> this case.
>
> See above...  I think that the CM code is correct, and my kDAPL 
> implementation is in error.

Were either of you going to work on a fix for this?



More information about the general mailing list