|
[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 |