|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] RE: iscsi : numerical negotiation wording is ambiguousExcerpt 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 |