|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: iSCSI: keys/parameter dependence
(I've thrown some text out to keep it shorter)
--- "Robert D. Russell" <rdr@io.iol.unh.edu> wrote:
> The following paragraph from an e-mail from Martins
> Krikis
> made me realize that the definition of the new C bit
> is not correct, because it goes much further
> than is necessary to solve the "split key" problem,
> and as a result, it opens up a whole new set of
> problems,
> complicates what was previously a simple situation,
> and
> breaks a lot of already running and tested code.
The C-bit actually simplifies a previously very
complicated situation. As to "running and tested",
I don't think many people have encountered split
PDUs in operational stage or FFP Text negotiations
yet.
> I don't believe the intention of the recent
> discussion
> that led to the introduction of the C bit was, in
> fact,
> to allow "batching" or to throw out "ordering" of
> the
> sending of keys. However, the definition in Draft
> 12-95
> sections 9.10.2 and 9.11.2 seems to now allow
> batching:
Those, who prefer the "batch-processing" approach
fought for the C-bit, so I would say that it was
introduced in order to allow it.
Regarding ordering, however, it had never been
defined, and I would hate to see it introduced.
In my opinion, it is best to treat all operational
parameters as independent and negotiate them as
such. Just before the commit
(i.e., turning on the T or F bit), one can do an
all-encompassing consistency check and reset
the negotiations if the values violate the laws
imposed on them, or offer some more keys to solve
any such problems, if this is still possible.
I could even imagine negotiations
succeeding but laws
(e.g. FirstBurstSize <= MaxBurstSize) not being
broken when sending data... OK, the last thing
might technically be forbidden at the moment
but it is not that unreasonable. It would be
something like
FirstBursSize = min(FirstBurstSize, MaxBurstSize)
done after the negotiation end, and then you can
forget about dependencies.I think it is way
easier than worrying about key ordering every
time something is sent or received.
> (I agree with John Huffered that Martins' comments
> about
> "ordering" are not correct in any case.)
I'd have to know which particular ones are we
talking about in order to clarify my position.
> The problem I see with this definition of the C bit
> is that
> the sending side can force the receiving NOT to
> process
> a PDU containing key=value pairs, even if all those
> key=value
> pairs are complete within the PDU. Therefore, the
> receiver
> is forced to save this PDU (and any number of
> following PDUs)
> until the sender finally sends C = 0.
"You may process, just please don't send anything
back yet, because I'm not finished sending stuff
to you. The small PDU size wrt the abnormally large
data amounts that I have to send (all very important
and urgent) are making it hard for me to fit it all
in a single PDU."
> In the worst
> case, the
> sender could send one key=value pair per PDU with
> the C bit set
> to 0 and the receiver could not reply to any of
> these until it
> got one with C bit set to 1.
If this is really a problem, I'm happy to retreat
my position to one of the other schemes, going
as far as allowing the responding side to send
responses and originate key declarations, but
not to originate keys that are not declarations.
I am really fond of doing batch-processing of the
keys and I would hate to have it broken again.
> As the e-mail from Martins indicates, some people
> are already
> taking this to mean that parameter negotiations will
> "normally"
> be batched.
I'm planning to batch my parameters. But I don't
care how the other side processes them, as long as
it sticks to the (new) protocol and doesn't interrupt
me when I have the C-bit still set.
> Up until the introduction of the C bit,
> PDUs and keys
> in them were always processed as received, and most
> code already does
> this, since it is the most logical and efficient way
> to do it.
> We should still encourage this as the "normal" way
> of negotiating.
How could you possibly know what "most code" does?
I would even conjecture that most code isn't out
there open for examination or experimentation with.
Most code that I've seen does batch-processing.
I must admit, the batch is typically one PDU and
the code can break if keys are getting split.
The C-bit allows a trivial update of that code
to deal with split keys as well.
> I believe the problem we were trying to solve by
> introducing
> the C bit was the one where a key was split over a
> PDU boundary
sure
> -- we were not trying to redesign the negotiation
> mechanism,
and we didn't really. It's still essentially the
same, one side sends some pairs, the other side
answers. But PDU boundaries no longer mess up this
simple scheme.
> which was discussed on the mailing list long ago and
> has been
> working in a lot of running code for the past two
> plugfests.
Did you see split-keys outside of security stage?
What happened, if so?
> Could we therefore please change the definition of
> the C bit in
> section 9.10.2 to read:
> "When set to 1, indicates that the text in this Text
> Request
> contains a single key=value pair, and that pair is
> incomplete
> within this PDU."
I could see it anyway when I find no terminating '\0'.
But how would this change help with the original
split-key problem (both sides feeling like
originators)? Do you propose to send complete
pairs separated from split-pairs? And the sender
to check for each key=value whether it will fit
entirely or not? If so, please see the very
lengthy discussion which got us to the C-bit.
> I'm not happy about seeing such a major change (C
> flag bit)
> introduced so late in the process to solve an
> "almost" non-existant
> problem (split keys).
Yes it is "almost" non-existant. That's why I asked
above, have you seen split-keys outside security
stage or not?
> It is "almost" non-existand
> because of
> the following considerations (some of which were
> already
> mentioned on the list and are just summarized here):
> During the login process, the PDU size is 8192
> bytes.
> Therefore, except for the long keys during
> negotiation
> that follows a chosen AuthMethod, there is never a
> need to split
> keys across pdu boundaries during login --
> even if you negotiate every possible login key
> (except those special keys that occur in security
> protocols)
> to its maximum length, you do not reach the total of
> 8192 bytes.
> It is not even close! Therefore, there is no need
> for any
> implication that the C bit should appear during this
> process.
OK, disallow it completely. Just don't let some
split-keys make both sides feel like originators,
nor ask me to check each key=value pair I'm preparing
for fitting or not fitting.
> When those long security keys are needed, the
> negotiation process is
> in a 1 key over, 1 key back exchange mode, so there
> is no "batching"
> possible and the split key should in fact be the
> only key in the pdu.
Sure, although nothing prevents me from declaring
that my 1 key=value is my "whole batch" and apply
batch-processing to this pair.
> Finally, during text exchanges, there only 6 keys
> that can be
> legally sent (plus the X-extension key):
> SendTargets, TargetName,
> TargetAlias, TargetAddress, InitiatorAlias, and
> MaxRecvPDULength.
> None of these can legally have a value greater than
> 255 bytes,
> which is well less than the minimum PDU size (512
> bytes).
And how many instances of TargetName and TargetAddress
can the SendTargets command provoke from the other
side? I think it can easily overflow the 8192 bytes.
> So there is no need to split keys over boundaries
> during text
> negotiation, except perhaps for the X-extension
> keys.
One could get away without splitting keys ever
(but not necessarily without splitting values).
However, a scheme like that means that the sender
has to check whether a newly prepared pair fits
or doesn't (definition of "fits" varies depending
on whether the key may be split or not).
Again, the lengthy previous discussions were all
about why this would be a bad requirement to have.
> In summary, I would like to see as little disruption
> as possible
> to the key negotiation scheme which has been stable
> for a long time,
I think the C-bit just achieved that. A "batch"
is a "virtual PDU" (no length restrictions).
Once you get a "batch", you're welcome to send
the response batch, just as previously done with PDUs.
Except that nobody has to worry about split keys
anymore.
> I believe my modification to
> the definition of
> the C flag accomplishes that, without introducing
> any new, false
> perceptions about "batching" and "ordering".
It's nice that batching is now possible. Having
any ordering (within a "batch") is entirely
unnecessary, however, IMO.
Martins Krikis, Intel Corp.
Disclaimer: these opinions are mine and may not be
those of my emplyer
__________________________________________________
Do You Yahoo!?
Yahoo! - Official partner of 2002 FIFA World Cup
http://fifaworldcup.yahoo.com
Home Last updated: Tue Jun 04 11:18:37 2002 10486 messages in chronological order |