Bart,
So the question
is, in what order does a device do the checking.
There
are many possibilites for handling a received key that is
unknown and comes
in with the value unknown:
A) Check
key
if key unknown, send
key=NotUnderstood
else ...process
key=value pair
B) Check
key
if key unknown
if value=NotUnderstood
silently drop (or close connection)
else send
key=NotUnderstood
I expect case A is
more likely to get implemented in the absence
of an explicit
statement. There would normally be no need to
examine the value
of a key when one doesn't understand the key.
In this case, the
receiver never does a test that detects the
apparent protocol
violation of making an offer with a value
NotUnderstood.
So, if we want to
stop the loop that Bill has found, we should
put in an explicit
requirement to test the value for NotUnderstood
before
responding to a key with NotUnderstood.
[Bart
Crane]
Sec. 4.2 stating that "None",
"Reject", "Irrelevant" and
"NotUnderstood"
are reserved implies that they do
need to be tested. The proposed
rule also implies that they be
tested.
My
interpretation is that these values must not be used, except
in
the
way that the spec defines their use.
The
spec defines their use ONLY as a response to an iSCSI-defined
key.
So,
their being used as the initial value to any key is
prohibited.
Thus, there is no need to add another rule regarding
not-responding to
keys
with NotUnderstood as a value, because a key with that value
is
a
protocol error.
This
could be made more explicit, but there does not seem to be
any
ambiguity.
Bart.
The alternative is
to leave things as they are and count on
implementations to
abort the negotiation based on a timeout
or a
count of excessive number of negotiation PDU
exchanges.
Regards,
Pat
This new rule is not necessary.
Sec. 4.2 says:
The constants None, Reject, Irrelevant, and
NotUnderstood
are reserved and must only
be used as described here.
In the situation you describe, the sender will be expecting
a response to "keyA", but the key-name was corrupted
to "keyB".
The receiver does not understand "keyB", and so responds with
"keyB=NotUnderstood".
To the sender, this appears to be the start of negotiating
a
new key, "keyB", with the value
"NotUnderstood".
But, this is not a valid use of the value "NotUnderstood",
so it is a protocol error.
So, the new rule of not-responding to keys with the value
"NotUnderstood" is not necessary.
Bart.
-----Original Message-----
From: Bill
Studenmund [mailto:wrstuden@wasabisystems.com]
Sent: Friday, August 09, 2002 9:12 AM
To: ips@ece.cmu.edu
Subject: Problem with use
of NotUnderstood in negotiations
I encountered a problem with how draft 15 specifies using
NotUnderstood as
a reply to keys that aren't
understood. Namely if something injects
garbage into
the negotiation stream we can end up with a key BOTH sides
don't understand, and so they both sit there sending
"foo=NotUnderstood"
back and forth to each
other.
Yes, well-behaved negotiators won't offer a key they don't
understand. But
the data stream can be corrupted, and
all it would take is a single-bit
error in a key name
and we encounter the above.
I propose we change the text to:
Any key not understood by the acceptor may be ignored by the
acceptor
without affecting the basic function.
However, unless the value for the
key was
"NotUnderstood", the answer for a key not understood MUST be
key=NotUnderstood. If the value for the key was "NotUnderstood",
the
acceptor MUST not answer the key.
Note: I can easily see closing the connection with an error in
the above
case too.
Thoughts?
Take care,
Bill