Subject: iSCSI - negotiating against defaults/renegotiation the same key

From: "Julian Satran" <[email-masked]>
Date: Tue, 16 Oct 2001 19:51:09 +0300

Dear colleagues,

I think that my previous proposal about negotiating against defaults is
flawed.
I was based on the simple-minded assumption that after the initiator has
said all he had to say (as evidenced by the T=1) the target may assume that
the values the target puts forward are against default. I even prepared a
text in
5.3 that read:

   When the initiator issues a login request with the T bit set to 1 the
   target MUST assume that this request includes also an "imaginary
   content".  The "imaginary content" consists of key=value pairs including
   all the operational keys that have a default value and where not sent
   yet by the initiator during the operational parameter negotiation. The
   values in the "imaginary content" are the key default values.  This
   enables an initiator to avoid sending all the defaults while the target
   may negotiate as if they where sent.

 But that was wrong. Here is a simple example:

 A simple initiator may issue a first login entering the operational
 negotiation and having T=1 and nothing beyond the 2 names:

 I->T Iname... Tname

 This means only that he does not care about things like MaxBurst and is
 content with defaults.

 The target (in my proposal prompted by Santosh's request) can't do
 anything but lower the value while under our simple rule of self contained
 negotiations he could ask for a burst increase and the negotiation could
 have proceeded.

 For this (and a several other scenarios that  you can easily build) I
 suggest we stick with our "old" rule that a negotiation must be completely
 "self contained".

 Now about the other two subjects:

 1-Multiple negotiations on one key - we may choose one of the following
 ways out:

   a)say that both initiator and target MAY drop the login if that happens
   (and close the connection)
   b)say that both initiator and target MUST drop the login if that happens
   (and close the connection)
   c)say that this is legitimate (a negotiated parameter change due to a
   later change not know when the negotiation started)
   d)say that the whole sequence of Login request/responses is a a "single
   single virtual exchange" and the last value is the single one that
   counts in every direction - this one is somewhat related to the length
   question but does not allow branching decisions

 I am would favor a)

 2. Text block length - we gave away (for a while) on our 4k text messages.
 That makes negotiation difficult and might somehow help some of the
 framing schemes:

 I think we may want to do one of the following:

   a) mandate that the default 8k is valid during login and change only at
   end of login
   b) get back to a separate length for text and fix it at 4 or 8k (not
   ideal for framing)

 Option a may solve the login issue but leaves us with an ugly text
 negotiation.

 Option b will require the framing folks to come up with a solution (works
 with markers though).

 I am in favor of b (a different and predefined length for text buffers)
 and return to the "complete" negotiation buffers
 that raise far less logical problems that the concatenation scheme we are
 (temporarily in).

 Julo

---

From: Santosh Rao <[email-masked]>
Date: Tue, 16 Oct 2001 11:31:01 -0700

Julian,

Can you clarify what you mean by "self contained negotiations" ? Further
comments inline.

Thanks,
Santosh

>  negotiations he could ask for a burst increase and the negotiation could

If the initiator did'nt have any limitation on FirstBurstSize &
MaxBurstSize, it should be sending 0 (no limit) and not 64K or 128K.
Sending a finite value implies the initiator has a specific limit on the
amount it can handle. 

While on this subject, I suggest that the default value of MaxBurstSize
be 0, since the initiator does not usually care about or have a limit on
this field. The field is more a limitation of the target's ability and
using 0 allows the target to send back the maximum it can support as the
result of the negotiation.

-- 
##################################
Santosh Rao
Software Design Engineer,
HP-UX iSCSI Driver Team,
Hewlett Packard, Cupertino.
email : [email-masked]
Phone : 408-447-3751
##################################

---

From: "Mallikarjun C." <[email-masked]>
Date: Tue, 16 Oct 2001 19:05:54 -0700

Julian,

As I see it, there are at least two options in 
negotiating for defaults -
	A) As David implied in an earlier message,
           mandate every defined key to be negotiated.
           That leaves target to originate only 
           vendor-unique keys, to be responded in
           vendor-unique ways.
        B) Leave the defaults in, and rely on the T-bit 
           to prompt target to originate non-default key 
           values.  We would then have to specify that
           an initiator MUST explicitly state "can 
           accept any value" when it really is the 
           case (to prevent the case you're concerned
           about).  IOW, non-mention of a text key 
           should have the exact semantics of an 
           explicit offering of the default.

I am mildly partial towards A.

Regarding re-negotiating the same key, I guess I 
would prefer (b) - mandating a connection to be
dropped. [ BTW, I am not sure (c) is correct -
both parties should know when a negotiation 
started, to potentially discard the results of
a partial negotiation on a failure. ]

On the topic of differentiating text exchanges from
that of others, I would vote no - so I guess I support
your option (a).   Please comment how it does make
the negotiation more complicated.

Regards.
-- 
Mallikarjun 

Mallikarjun Chadalapaka
Networked Storage Architecture
Network Storage Solutions Organization
MS 5668	Hewlett-Packard, Roseville.
[email-masked]