|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] RE: iscsi : numerical negotiation wording is ambiguous
Excerpt of message (sent 3 October 2001) by Julian Satran:
> An example:
> 08.txt logic
> i->t DataPDULength=16k
> t->i DataPDULength= 24k
>
> Selected value is 16k
>
> i->t DataPDULength=16k
> t->i DataPDULength= 8k
>
> Selected value is 8k
>
> t->i DataPDULength=16k
> i->t DataPDULength= 24k
>
> Selected value is 16k
>
> t->i DataPDULength=16k
> i->t DataPDULength= 8k
>
> Selected value is 8k
>
> -----
>
> Responder selects logic
>
> i->t DataPDULength=16k
> t->i DataPDULength= 24k
>
> Error - Initiator Reject - Closes connection
>
> i->t DataPDULength=16k
> t->i DataPDULength= 8k
>
> Selected value is 8k
>
> t->i DataPDULength=16k
> i->t DataPDULength= 24k
>
> Error Target has to terminate with parameter error
>
> t->i DataPDULength=16k
> i->t DataPDULength= 8k
>
> Selected value is 8k
In most protocols, "responder selects" is used. And the rule is that
the responder MUST respond with a value acceptable to both sides.
Therefore, if the negotiation rule for DataPDULength is to pick the
smaller of the two values preferred by the two sides, your first and
third examples would be defective implementations. Often, protocol
specs don't say what to do with defective implementations; a typical
answer is to terminate the conversation, which is a sensible answer.
Sending rejects is not that useful for defective implementations,
since there is no reason to assume that they will all of a sudden
start to act correctly. Also, it is useful to build in protocol
mechanisms for bit errors, memory errors, dropped packets, etc. -- but
it is generally NOT useful to build mechanisms that apply only when
the other side has a software bug. I agree with Deva that the
appropriate response to a protocol violation is to terminate the
conversation.
So for "responder selects" examples 1 and 3 should have read like
this:
i->t DataPDULength=16k
t->i DataPDULength= 16k (t wants 24 but 16 is the agreed value)
...
t->i DataPDULength=16k
i->t DataPDULength= 16k (i wants 24 but 16 is the agreed value)
paul
Home Last updated: Wed Oct 03 15:17:26 2001 7007 messages in chronological order |