 
| 
 | 
 [Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] iSCSI: Use of Reject as a key valueJulian: Attached are 2 ascii text files. The first, reject_extracts.txt, contains all the pieces of draft 14 (the latest available txt version of the drafts) that say anything about the use of Reject as a key value. (At least all those I could find using simple search -- unfortunately, Reject is also the name of a PDU and hence it is not a simple mechanical process to distinguish the two uses! If I missed some, please let me know.) The second, reject_comments.txt, are my comments on these excerpts from the standard. It seems to me that the key thing missing in the standard is a general statement about "what to do next" if a key=Reject response is received. Except for the OFMarkInt and IFMarkInt keys, I could find no other statement about how to proceed after receiving the key=Reject response. In looking through the e-mails posted to the list for June and July, I also could find nothing, although many people seem to be taking the third of the 3 interpretations I listed in reject_comments.txt. I am requesting a clear statement somewhere in the standard that says "what to do next" upon receiving a key=Reject response. Thank you for your consideration. Bob Russell InterOperability Lab University of New Hampshire rdr@iol.unh.edu 603-862-3774 
All references in draft 14 to use of "Reject" as a key value.
-------------------------------------------------------------
...
4.2  Text Mode Negotiation
...
   The general format of text negotiation is:
      Originator-> <key>=<valuex>
      Responder-> <key>=<valuey>|NotUnderstood|Irrelevant|Reject
   The originator or declarer can either be the initiator or the target 
   and the responder can either be the target or initiator, respec-
   tively. Targets are not limited to respond to key=value pairs as 
   offered by the initiator. The target may offer key=value pairs of its 
   own. 
   All negotiations are explicit (i.e., the result MUST be based only on 
   newly exchanged or declared values). There are no implicit offers. If 
   an explicit offer is not made then a reply cannot be expected. Con-
   servative design requires also that default values should not be 
   relied upon when use of some other value has serious consequences. 
   The value offered or declared can be a numerical-value, a numerical-
   range defined by lower and upper value - both integers separated by 
   tilde, a binary value, a text-value, a iSCSI-name-value, an iSCSI-
   local-name-value, a boolean-value (Yes or No), or a list of comma 
   separated text-values. A range or a large-numerical-value MAY ONLY be 
   offered if it is explicitly allowed for a key. An iSCSI-name-value 
   and an iSCSI-local-name-value can be used only where explicitly 
   allowed. A selected value can be an numerical-value, a large-numeri-
   cal-value, a text-value or a boolean-value.
   If a specific key is not relevant for the current negotiation, the 
   responder may answer with the constant "Irrelevant" for all types of 
   negotiation. However the negotiation is not considered as failed if 
   the response is "Irrelevant".
   Any key not understood by the responder may be ignored by the 
   responder without affecting the basic function. However, the Text 
   Response for a key not understood MUST be key=NotUnderstood.
   The constants "None", "Reject", "Irrelevant", and "NotUnderstood" are 
   reserved and must only be used as described here.
   Reject or Irrelevant are legitimate negotiation options where allowed 
   but their excessive use is discouraged. A negotiation is considered 
   complete when the responder has sent the key value pair even if the 
   value is "Reject", "Irrelevant", or "NotUnderstood. Sending the key 
   again would be a re-negotiation
    
   Some basic key=value pairs are described in Chapter 11. All keys in 
   Chapter 11, except for the X- extension format, MUST be supported by 
   iSCSI initiators and targets and MUST NOT be answered with NotUnder-
   stood.
    
...
4.2.1  List negotiations
   In list negotiation, the originator sends a list of values (which may 
   include "None") in its order of preference.
   The responding party MUST respond with the same key and the first 
   value that it supports (and is allowed to use for the specific origi-
   nator) selected from the originator list. 
   The constant "None" MUST always be used to indicate a missing func-
   tion. However, None is a valid selection only if it is explicitly 
   offered. 
   If a responder does not understand any particular value in a list it 
   MUST ignore it. If a responder does support, understand or is allowed 
   to use none of the offered options with a specific originator, it may 
   use the constant "Reject" or terminate the negotiation. The selec-
   tion of a value not offered is considered a negotiation failure and 
   is handled as a protocol error. 
4.2.2  Simple-value negotiations
   For simple-value negotiations, the responding party MUST respond with 
   the same key. The value it selects, based on the selection rule spe-
   cific to the key, becomes the negotiation result. For a numerical 
   range the value selected must be an integer within the offered range 
   or "Reject" (if the range is unacceptable). An offer of a value not 
   admissible (e.g., not within the specified bounds) MAY be answered 
   with the constant "Reject" or the responder MAY select an admissible 
   value. The selection, by the responder, of a value not admissible 
   under the selection rules is considered a negotiation failure and is 
   handled accordingly. The selection rules are key-specific. 
...
4.3  Login Phase
...
   Neither the initiator nor the target should attempt to declare or 
   negotiate a parameter more than once during login except for 
   responses to specific keys that explicitly allow repeated key decla-
   rations (e.g. TargetAddress). If detected by the target this MUST 
   result in a Login reject (initiator error). The initiator MUST drop 
   the connection
    
...
4.3.2  iSCSI Security Negotiation
   The security exchange sets the security mechanism and authenticates
   the initiator user and the target to each other. The exchange pro-
   ceeds according to the authentication method chosen in the negotia-
   tion phase and is conducted using the login requests' and responses' 
   key=value parameters.
   An initiator directed negotiation proceeds as follows:
     -The initiator sends a login request with an ordered list of 
       the options it supports (authentication algorithm). The 
       options are listed in the initiator's order of preference. 
       The initiator MAY also send proprietary options. 
     -The target MUST reply with the first option in the list it 
       supports and is allowed to use for the specific initiator 
       unless it does not support any in which case it MUST answer 
       with "Reject" (see also Section 4.2 Text Mode Negotiation). 
       The parameters are encoded in UTF8 as key=value. For secu-
       rity parameters, see Chapter 10.
...
A.3.2   OFMarkInt, IFMarkInt
   Use: IO
   Senders: Initiator and Target
   Scope: CO
   Offering:
   OFMarkInt=<numeric-range-from-1-to-65535> 
   IFMarkInt=<numeric-range-from-1-to-65535>
   Responding:
   OFMarkInt=<numeric-value-from-1-to-65535>|Reject
   IFMarkInt=<numeric-value-from-1-to-65535>|Reject
   OFMarkInt is used to set the interval for the initiator to target 
   markers on the connection.  IFMarkInt is used to set the interval for 
   the target to initiator markers on the connection.
   For the offering the initiator or target indicates the minimum to 
   maximum interval (in 4-byte words) it wants the markers for one or 
   both directions. In case it only wants a specific value, only a sin-
   gle value has to be specified. The responder selects a value within 
   the minimum and maximum offered or the only value offered or indi-
   cates through the xFMarker key=value its inability to set and/or 
   receive markers. When the interval is unacceptable the responder 
   answers with "Reject".  Reject is resetting the marker function in 
   the specified direction (Output or Input) to No.
...
Comments on the use of "Reject" as a key value.
In section 4.2, the "general format of text negotiation" clearly allows
both initiator and target to send and receive a "Reject" value.
However, this "general format" does not necessarily imply that it is
legal to send a "Reject" value at any time and for any key!
Later in the same section 4.2 it says:
    "Reject or Irrelevant are legitimate negotiation options where
    allowed but ...".
This could be read to imply that further explanations must be given to
indicate where Reject (Irrelevant) is allowed.  In fact, the standard 
explicitly lists the following specific situations where Reject is allowed.
    1.  In section 4.2.1, List negotiations, it says:
        
        "If a responder does support, understand or is allowed to use
        none of the offered options with a specific originator, it may
        use the constant "Reject" or terminate the negotiation."
      --This could be understood to mean that "Reject" does NOT terminate
        the negotiation.  However, the next sentence in the standard says:
        "The selection of a value not offered is considered a negotiation
        failure and is handled as a protocol error."
      --Clearly "Reject" was not offered, so if it appears in the
        response, this sentence could be understood to mean that the
        negotiation failed.
    2.  In section 4.2.2, Simple-value negotiations, it says:
        "For a numerical range the value selected must be an integer
        withing the offered range or "Reject" (if the range is
        unacceptable)."
      --This explicitly allows Reject as a response for numerical range
        parameters (of which there are only two: OFMarkInt and IFMarkInt),
        but doesn't say what to do next if Reject is used.  However,
        section A.3.2 does say what to do for the OFMarkInt and IFMarkInt
        keys (see below).
    3.  Also in section 4.2.2, Simple-value negotiations, it says:
        "An offer of a value not admissible (e.e., not within the specified
        bounds) MAY be answered with the constant "Reject" or the responder
        MAY select an admissible value."
      --This explicitly allows Reject as a response for other simple-value
        types (keys expecting numerical values, boolean values, etc.),
        but again doesn't say what to do next if Reject is used.
    4.  In section 4.3.2, iSCSI Security Negotiation, it says:
        "-The target MUST reply with the first option in the list it
        supports and is allowed to use for the specific initiator
        unless it does not support any in which case it MUST answer
        with "Reject" (see also Section 4.2 Text Mode Negotiation)."
      --Ok, but then what happens next -- has the negotiation failed?
        If not, what value is used for the rejected key -- the value
        in effect prior to this offer/response exchange?  The standard
        never says.
    5.  In section A.3.2, OFMarkInt, IFMarkInt, it says:
        "Responding:
        OFMarkInt=<numeric-range-from-1-to-65535>|Reject
        IFMarkInt=<numeric-range-from-1-to-65535>|Reject"
      --This is the only instance where Reject is explicitly specified
        as a valid response for a specific key.
    6.  Also in section A.3.2, OFMarkInt, IFMarkInt, it says:
        "When the interval is unacceptable the responder answers with
        "Reject".  Reject is resetting the marker function in the
        specified direction (Output or Input) to No."
      --This is also the only instance where the standard says what to
        do when a response value of Reject is used.
I believe the source of much confusion is that, except for point 6 above,
the standard never says what is supposed to happen next when a response
value of Reject is used!
There are at least the following three interpretations:
    1.  Both sides use the value of the key in effect before the offer
        and continue with negotiations as if nothing had happened,
        although this particular key cannot be offered again in this
        negotiation sequence (that is explicit).
    2.  Treat the negotiation as a failure and take appropriate action.
        During login, appropriate action is to close the connection.
        During text negotiation during FFP, appropriate action is
        to ignore all the negotiations in this sequence of text request
        text response exchanges.
    3.  If possible, use the value of the key in effect before the
        offer (and continue as in point 1).  If not possible, treat
        the negotiation as a failure (and take appropriate action,
        as in point 2).
Perhaps this vagueness is intentional, and all interpretations are
allowed.  However, I believe it would remove a lot of confusion
if the standard said something about what to do next!
Comments?
 
 
 Home Last updated: Tue Jul 30 10:39:12 2002 11481 messages in chronological order |