SORT BY:

LIST ORDER
THREAD
AUTHOR
SUBJECT


SEARCH

IPS HOME


    [Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

    iSCSI: comments/changes to draft-ietf-ips-iscsi-00.txt



    Hi Julian,
    
    Good job on the enormous effort bringing the iSCSI draft up to date.  I have
    a few general comments and some specific ones.  I have noted proposed
    changes to the draft in "diff -u" format with comments preceeded by '!'. 
    (I.e., additions are marked with '+', removals with '-', comments/questions
    with "+! ...".)
    
    Brief general (major architectural) comments:
    
    Mandating the use of the TCP urgent pointer is, in my opinion, very bad.  It
    breaks TCP independence and is also unrealiable in practice.  Recommending
    its use is good though.
    
    There are a lot of Reference Numbers in this new draft.  I can immediately
    see the utility of *CmdRN, but remain unconvinced about the necessity of the
    others.
    
    I would like to see the initiator be able to send the data PDU(s) on a
    different TCP stream(s) than the command PDU went on.  This will allow
    emulation of the asymmetric model.  This feature should be enabled by a Text
    command just in case any strange targets cannot cope with this.  (I realize
    the intent is to keep the Initiator Task Tags local to a network adapter,
    but I think this should be an implementation decision, not a protocol
    mandate.)
    
    Thanks for the good work.
    
    Daniel F. Smith
    Diffs follow.
    -- 
    IBM Almaden Research Center, 650 Harry Road, San Jose, CA 95120-6099, USA
    K65B/C2 Phone: +1(408)927-2072 Fax: +1(408)927-3010
    
    
    --- draft-ietf-ips-iscsi-00.txt.orig	Tue Nov  7 12:12:08 2000
    +++ draft-ietf-ips-iscsi-00.txt	Tue Nov  7 18:32:31 2000
    @@ -148,11 +148,11 @@
     
       
     Satran                Standards-Track, May 2001                     3 
     
                                     iSCSI                  November, 2000 
    - 
    +! Any table of contents? 
      
     1. Overview 
         
     1.1 SCSI Concepts 
         
    @@ -162,20 +162,22 @@
        the SCSI architecture. 
         
        At the highest level, SCSI is a family of interfaces for requesting 
        services from I/O devices, including hard drives, tape drives, CD and 
        DVD drives, printers, and scanners. In SCSI parlance, an individual 
    -   I/O device is called a ôlogical unitö. 
    +   I/O device is called a "logical unit". 
    +! I don't know what quote characters you were using, but they were weird
    +! blobs on my terminal.  Replaced throughout with double-quotes.
          
        SCSI is a client-server architecture. Clients of a SCSI interface are 
    -   called ôinitiatorsö. Initiators issue SCSI ôcommandsö to request 
    -   service from a logical unit. The ôdevice serverö on the logical unit 
    +   called "initiators". Initiators issue SCSI "commands" to request 
    +   service from a logical unit. The "device server" on the logical unit 
        accepts SCSI commands and executes them.  
         
    -   A ôSCSI transportö maps the client-server SCSI protocol to a specific 
    +   A "SCSI transport" maps the client-server SCSI protocol to a specific 
        interconnect. Initiators are one endpoint of a SCSI transport. The 
    -   ôtargetö is the other endpoint. A ôtargetö can have multiple LUs 
    +   "target" is the other endpoint. A "target" can have multiple LUs 
        behind it. Each logical unit has a number called a LUN. 
         
        A SCSI task is a SCSI command or possibly a linked set of SCSI 
        commands. Some LUNs support multiple pending (queued) tasks. The 
        queue of tasks is managed by the target, though. The target uses an 
    @@ -206,11 +208,11 @@
      
      
         
        In keeping with similar protocols, the initiator and target divide 
        their communications into messages. This document will use the term 
    -   ôiSCSI protocol data unitö (iSCSI PDU) for these messages. 
    +   "iSCSI protocol data unit" (iSCSI PDU) for these messages. 
         
     1.2.1 Layers & Sessions 
         
        The following conceptual layering model is used in this document to 
        specify initiator and target actions and how those relate to 
    @@ -230,17 +232,18 @@
        target form a session (loosely equivalent to a SCSI I-T nexus). A 
        session is defined by a session ID (composed of an initiator part and 
        a target part). TCP connections can be added and removed from a 
        session.  Connections within a session are identified by a connection 
        ID (CID). Across all connections within a session an initiator will 
    -   see one "target image" - all target identifying elements like LUN are 
    +   see one "target image" - all target-identifying elements like LUN are 
        the same. Also across all connections within a session a target will 
        see one "initiator image" - all initiator identifying elements like 
    -   Initiator Task Tag are the same.  
    +   Initiator Task Tag are taken from the same pool.
    +! Hurrah!  This is good.
         
        An iSCSI target MUST support at least one TCP connection.  An iSCSI 
    -   initiator SHOULD support several connections in a session. 
    +   initiator MAY support several connections in a session. 
         
     1.2.2 Ordering and iSCSI numbering 
         
        iSCSI uses Command, Status and Data numbering schemes. 
         
    @@ -276,35 +279,46 @@
         
        iSCSI supports ordered command delivery within a session.  All 
        commands (initiator-to-target) and responses (target-to-initiator) 
        are numbered.  Any SCSI activity is related to a task (SAM-2). The 
        task is identified by the Initiator Task Tag for the life of the 
    -   task.  Commands in transit from the initiator SCSI layer to the 
    +   task.
    +
    +   Commands in transit from the initiator SCSI layer to the 
        target SCSI layer are numbered by iSCSI and the number is carried by 
        the iSCSI PDU as CmdRN (Command-Reference-Number). 
        The numbering is session-wide.  All iSCSI PDUs that have a task 
        association carry this number. CmdRNs are allocated by the initiator 
        iSCSI within a 32 bit unsigned counter (modulo 2**32).  The value 0 
        is reserved and used to mean immediate delivery. Comparisons and 
        arithmetic on CmdRN SHOULD use Serial Number Arithmetic as defined in 
    -   [RFC1982] where SERIAL_BITS = 32.  
    +   [RFC1982] where SERIAL_BITS = 32.
    +
        The target may choose to deliver some task management commands for 
        immediate delivery.  The means by which the SCSI layer may request 
        immediate delivery for a command or by which iSCSI will decide by 
        itself to mark a PDU for immediate delivery are outside the scope of 
        this document.   
    +
        CmdRNs are significant only during command delivery to the target. 
        Once the device serving part of the target SCSI has received a 
        command, CmdRN ceases to be significant.  During command delivery to 
    -   the target, the allocated numbers are unique session wide.  The 
    -   initiator and target are assumed to have three registers that define 
    -   the allocation mechanism - CmdRN - the current command reference 
    -   number advanced by 1 on each command shipped; ExpCmdRN - the next 
    -   expected command by the target - acknowledges all commands up to it; 
    -   MaxCmdRN - the maximum number to be shipped - MaxCmdRN - ExpCmdRN 
    -   defines the queuing capacity of the receiving iSCSI layer.  
    +   the target, the allocated numbers are unique session wide.
    +
    +   The initiator and target are assumed to have three registers that define 
    +   the allocation mechanism.
    +      CmdRN: the current command reference number advanced by 1 on each
    +         command shipped.
    +      ExpCmdRN: the next expected command by the target, which acknowledges
    +         all commands up to it.
    +      MaxCmdRN: the maximum number to be shipped.  The
    +         queuing capacity of the receiving iSCSI layer is the difference
    +         between MaxCmdRN and ExpCmdRN.
    +
        The target SHOULD NOT transmit a MaxCmdRN that is more than 2**31 - 1 
    +! Does this mean that T can reduce its MaxCmdRN?  E.g., when there
    +! are more connections opened to it?  Otherwise, why this restriction?
        above the last ExpCmdRN.  CmdRN can take any value from ExpCmdRN to 
     
       
     Satran                Standards-Track, May 2001                     6 
     
    @@ -315,11 +329,11 @@
        outside this range or duplicates within the range not flagged with 
        the retry bit (the X bit in the opcode).  The target and initiator 
        registers MUST uphold causal ordering. 
         
        iSCSI initiators MUST implement the command/request numbering scheme 
    -   only if they support more than one connection per session (as even 
    +   if they support more than one connection per session (as even 
        sessions with a single connection may be expanded beyond one 
        connection). 
         
        Command numbering for sessions that will only be made up of one 
        connection is optional. iSCSI initiators utilizing a single 
    @@ -337,10 +351,11 @@
         
        Responses in transit from the target to the initiator are numbered.  
        The StatRN (Status Reference Number) is used for this purpose. StatRN 
        is a counter maintained per connection.  ExpStatRN is used by the 
        initiator to acknowledge status. 
    +
        To enable command recovery the target MAY maintain enough state to 
        enable data and status recovery after a connection failure. 
        A target can discard all the state information maintained for 
        recovery after the status delivery is acknowledged through ExpStatRN. 
        A large difference between StatRN and ExpStatRN may indicate a failed 
    @@ -349,12 +364,13 @@
        Initiators and Targets MUST support the response-numbering scheme 
        regardless of the support for command recovery. 
         
     1.2.2.3 Data PDU numbering 
         
    -   Incoming Data PDUs MAY be numbered by a target to enable fast 
    +   Data PDUs MAY be numbered by a target to enable fast 
        recovery of long running READ commands. 
    +
        Data PDUs are numbered with DataRN.  NOP command PDUs carrying the 
        same Initiator Tag as the Data PDUs are used to acknowledge the 
        incoming Data PDUs with ExpDataRN.  Support for Data PDU 
        acknowledgement and the maximum number of unacknowledged data PDUs 
        are negotiated at login. 
    @@ -365,14 +381,16 @@
      
      
        In a PDU carrying both data and status, the field is used for StatRN 
        and the last set of data blocks is implicitly acknowledged when 
        Status is acknowledged. 
    +! Gag!  How many *RNs are there?!?  I dislike them except for CmdRN.
         
     1.2.3 Timers and timeouts 
         
    -   Initiators MUST implement the following timers: 
    +   Initiators SHOULD implement the following timers at some level: 
    +! Normally in the system's SCSI layer.  May be infinite (hence SHOULD).
         
           - T1 - Command delivery timer 
           - T2 - Status delivery timer 
           - T3 - Data delivery timer 
         
    @@ -397,18 +415,20 @@
         
         
     1.2.4 iSCSI Login 
         
        The purpose of iSCSI login is to enable a TCP connection for iSCSI 
    -   use, authenticate the parties, negotiate the sessionÆs parameters, 
    +   use, authenticate the parties, negotiate the session's parameters, 
    +! Strange non-ASCII character for apostrophe.  Quote inserted.
        open a security association protocol and mark the connection as 
        belonging to an iSCSI session. 
          
        A session is used to identify to a target all the connections with a 
        given initiator. The targets listen on a well-known TCP port for 
        incoming connections. The initiator begins the login process by 
        connecting to that well-known TCP port.  
    +! This well-known TCP port to be defined by...
         
        As part of the login process, the initiator and target MAY wish to 
        authenticate each other and set a security association protocol for 
        the session. This can occur in many different ways and is subject to 
       
    @@ -418,36 +438,43 @@
      
      
        negotiation. Negotiation and security associations executed before 
        the Login Command are outside the scope of this document although 
        they might realize a related function (e.g., establish a IPsec or TLS 
    -   session). The Login Command starts the iSCSI Login Phase. Within the 
    +   session).
    +! I have no idea what the prior sentence means.  Maybe "This document will
    +! not cover the specific negotiation parameters of the chosen security
    +! scheme.  However, a security wrapper, e.g., SSL/TLS or IPsec, may
    +! decide to use no security features associated with the iSCSI transport."
    +
    +   The Login Command starts the iSCSI Login Phase. Within the 
        Login Phase, negotiation is carried on through parameters of the 
        Login Command and Response and optionally through intervening Text 
        Commands and Responses. The Login Response concludes the Login Phase. 
        Once suitable authentication has occurred, the target MAY authorize 
        the initiator to send SCSI commands. How the target chooses to 
        authorize an initiator is beyond the scope of this document. The 
        target indicates a successful authentication and authorization by 
        sending a login response with "accept login". Otherwise, it sends a 
    -   response with a ôlogin rejectö, indicating a session is not 
    +   response with a "login reject", indicating a session is not 
        established.  
    +
        It is expected that iSCSI parameters will be negotiated after the 
        security association protocol is established if there is a security 
        association. 
         
    -     
        The login message includes a session ID - composed with an initiator 
        part ISID and a target part TSID. For a new session, the TSID is 
        null. As part of the response, the target will generate a TSID. 
        Session specific parameters can be specified only for the first login 
    -   of a session (TSID null)(e.g., the maximum number of connections that 
    +   of a session (TSID null) (e.g., the maximum number of connections that 
        can be used for this session). Connection specific parameters (if 
        any) can be specified for any login. Thus, a session is operational 
        once it has at least one connection.  
         
    -   Any message except login and text sent on a TCP connection before 
    +   Any message except login response and text response sent on a
    +   TCP connection before 
        this connection gets into full feature phase at the initiator SHOULD 
        be ignored by the initiator. Any message except login and text 
        reaching a target on a TCP connection before the full feature phase 
        MUST be silently ignored by the target.  
         
    @@ -475,27 +502,36 @@
        and it MAY be selected by omission (i.e. <key>:none MAY be omitted). 
         
        The general format is: 
         
           Offer-> <key>:(<value1>,<value2>,...,<valuen>) 
    +! Does the comma ',' now become a special character?  I was hoping to limit
    +! special escaped characters to ':' (key special) and nul '\0' (key and
    +! value special).
           Answer-> <key>:<valuex>  
         
         
     1.2.6 iSCSI Full Feature Phase 
      
        Once the initiator is authorized to do so, the iSCSI session is in 
    -   iSCSI full feature phase. The initiator may send SCSI commands and 
    +   iSCSI full feature phase. The initiator may now send SCSI commands and 
        data to the various LUNs on the target by wrapping them in iSCSI 
    -   messages that go over the established iSCSI session.  For SCSI 
    +   messages that go over the established iSCSI session.
    +
    +   For SCSI 
        commands that require data and/or parameter transfer, the (optional) 
        data and the status for a command must be sent over the same TCP 
        connection that was used to deliver the SCSI command (we call this 
        "connection allegiance").  Thus if an initiator issues a READ 
        command, the target must send the requested data, if any, followed by 
        the status to the initiator over the same TCP connection that was 
        used to deliver the SCSI command.  If an initiator issues a WRITE 
        command, the initiator must send the data, if any, for that command 
    +! Why must data be sent over the same TCP connection?  I'd like to send
    +! it over a different one to get the assymetic functionality.  I.e.,
    +! send a bunch of commands over stream A, with unsolicited data sucked
    +! out by the target on stream B.
        and the target MUST return the status over the same TCP connection 
        that was used to deliver the SCSI command.  However consecutive 
        commands that are part of a SCSI linked commands task MAY use 
        different connections - connection allegiance is strictly per-command 
        and not per-task. During iSCSI Full Feature Phase, the initiator and 
    @@ -504,17 +540,23 @@
        - user data or command parameters) is sent as either unsolicited data 
        or solicited data.  Unsolicited data can be part of an iSCSI command 
        PDU ("immediate data") or an iSCSI data PDU.  An initiator may send 
        only one unsolicited data item (immediate or in a separate PDU) - all 
        subsequent data items have to be solicited.  Solicited data are sent 
    +! Why?  I think this should be relaxed.  If I has the option of sending
    +! an arbitrarily long data PDU then there's no advantage to be gained
    +! by disallowing unsolicited shorter data PDUs, but much to lose.
        in response to Ready To Transfer (R2T) PDUs.  Targets operate in 
        either solicited (R2T) data mode or unsolicited (non R2T) data mode.  
        An initiator MUST always honor an R2T data request.  It is considered 
        an error for an initiator to send unsolicited data PDUs to a target 
        operating in R2T mode (only solicited data).  It is also an error for 
        an initiator to send more than one unsolicited data PDU (whether 
    -   immediate or as a separate PDU).  An initiator MAY request, at login, 
    +   immediate or as a separate PDU).
    +
    +   An initiator MAY request, at login, 
    +! (Again, disagree.)
        to send immediate data blocks of any size. If the initiator requests 
        a specific block size the target MUST indicate the size of immediate 
        data blocks it is ready to accept in its response.  Beside iSCSI, 
        SCSI also imposes a limit on the amount of unsolicited data a target 
       
    @@ -523,35 +565,51 @@
                                     iSCSI                  November, 2000 
      
      
        is willing to accept. The iSCSI immediate data limit MUST not exceed 
        the SCSI limit. 
    -    
    +! (Yet again, disagree.  TCP has perfectly good flow control, while SCSI may
    +! not.  Consider the really-really long network connection and the tape
    +! drive with an 8KB data limit.  TCP will do much better than SCSI here.)
    +   
        A target SHOULD NOT silently discard data and request retransmission 
        through R2T.  Initiators MUST NOT perform any score boarding for data 
    +! What is score boarding?
        and the residual count calculation is to be performed by the targets.  
    -   Incoming data is always solicited. SCSI Data packets are matched to 
    +   Data returned to the initiator is always solicited. SCSI Data packets
    +   are matched to 
        their corresponding SCSI commands by using Tags that are specified in 
        the protocol. 
         
    -   Initiator tags for pending commands are unique initiator-wide for a 
    -   session.  Target tags for pending commands are unique LU-wide for the 
    -   session; together with the LUN they form a target-wide unique 
    +   Initiator tags for pending commands are unique session-wide for an
    +   initiator.  Target tags for pending commands are unique session-wide
    +   for the LU.  Together with the LUN they form a target-wide unique 
    +! Did you mean "for the LU" or "for the target" or (even) "for the Initiator
    +! Task Tag"?  As worded, it means we have to match
    +! the Target Tag with the LUN.  Sigh---that's a tricky 12-byte table index.
    +! It can be mitigated to 8 bytes with an Initiator Tag/Target Tag index.
    +! I'd prefer a 4-byte index by making it "for the target".
        composite tag for a session.  The above mechanisms are designed to 
        accomplish efficient data delivery and a large degree of control over 
    -   the data flow.  iSCSI initiators and targets MUST also enforce some 
    +   the data flow.
    +
    +   iSCSI initiators and targets MUST also enforce some 
        ordering rules to achieve deadlock-free operation.  
        Unsolicited data MUST be sent on every connection in the same order 
        in which commands were sent. If the amount of data exceeds the amount 
        allowed for unsolicited write data, the specific connection MUST be 
        stalled - no new data will be sent on the specific connection until 
        initiator receives an R2T iSCSI PDU from the target.  A target 
    +! (Again, disagree.)
        receiving data out of order or observing a connection violating the 
        above rules MUST terminate the session. 
    +! (Agree here, though I would use SHOULD.  Otherwise nasty people might
    +! start inserting random data PDUs into iSCSI streams just to disrupt
    +! sessions and force logins.)
         
        Each iSCSI session to a target is treated as if it originated from a 
    -   different initiator. 
    +   different and logically independent initiator. 
         
     1.2.7 iSCSI Connection Termination 
         
        Connection termination is assumed an exceptional event.  
        Graceful TCP connection shutdowns are done by sending TCP FINs. 
    @@ -559,10 +617,15 @@
        outstanding tasks that have allegiance to the connection.  A target 
        SHOULD respond rapidly to a FIN from the initiator by closing it's 
        half of the connection as soon as it has finished all outstanding 
        tasks that have allegiance to the connection.  Connection termination 
        with outstanding tasks may require recovery actions. 
    +! I would still like a close command (with a CmdRN).  Just for completeness.
    +! (I know it isn't strictly necessary, but it does allow a target to close
    +! the TCP stream for the initiator, which may have useful FIN_WAITx
    +! properties in TCP and other transport protocols.  In HTTP, the server
    +! closes the connection, not the client.)
         
        Connection termination is also required as prelude to recovery.  By 
        terminating a connection before starting recovery, initiator and 
        target can avoid having stale PDUs being received after recovery.  In 
        this case, the initiator will send a LOGOUT request on any of the 
    @@ -579,15 +642,15 @@
         
     1.2.8 Naming & mapping 
      
        Text string names are used in iSCSI to: 
         
    -      - provide explicitly a transportID for the target to enable the 
    -      later to recognize the initiator because the conventional IP-
    -      address and port tuple is inaccurate behind firewalls and NAT 
    +      - provide explicitly a initiatorID for the target to enable the 
    +      target to recognize the initiator because the conventional IP-
    +      address and port pair is inaccurate behind firewalls and NAT 
           devices (key - initiator) 
    -      - provide a target selector - targetID for simple 
    +      - provide a targetID for simple 
           configurations hiding several targets behind an IP-address and 
           port (key - target) 
           - provide a symbolic address for source and destination targets 
           in third party commands (through the map command)    
         
    @@ -598,39 +661,44 @@
        relate them to other names and name handling mechanisms the following 
        syntax for names SHOULD be used 
         
           <domain-name>[/modifier] 
         
    -   Where domain-name follows DNS rules and the modifier is an 
    +   Where domain-name follows DNS (or dotted IP) rules and the modifier is an 
        alphanumeric string (N.B. the whole pattern follows the URL 
        structure) 
         
        Some mapped names for third party command use might have to include a 
        port number.  For those the following syntax SHOULD be used: 
         
    -      <domain-name>[[/modifier]:[port]] 
    +      <domain-name>[:<port>][/modifier]
         
        The text to address transformation, wherever needed, will be 
        performed through available name translation services (DNS servers, 
    -   LDAP accessible directories etc.) 
    +   LDAP accessible directories etc.).
         
        To enable simple devices to operate without name-to-address 
        conversion services the following conventions SHOULD be used: 
         
           A domain name that contains exactly four numbers separated by 
           dots (.), where each number is in the range 0 through 255, will 
           be interpreted as an IPv4 address. 
           A domain name that contains more than four, but at most 16 
           numbers separated by dots (.), where each number is in the 
           range 0 through 255, will be interpreted as an Ipv6 address. 
    +! These are covered in RFCs.  I forget the numbers for citation... B-)
         
       
     Satran                Standards-Track, May 2001                    12 
     
                                     iSCSI                  November, 2000 
      
    - 
    +   Examples of DNS addresses/names:
    +
    +      tapedrive37.acme.com/cart3
    +      tapedrive38.acme.com 
    +
        Examples of IPv4 addresses/names: 
         
           10.0.0.1/diskfarm1 
           10.0.0.2 
         
    @@ -643,38 +711,40 @@
         
        For management/support tools as well as naming services that use a 
        text prefix to express the protocol intended (as in http:// or 
        ftp://) the following form MAY be used: 
         
    -      iSCSI://<domain-name>[[/modifier]:[port]] 
    +      iSCSI://<domain-name>[:<port>][/modifier]
    +! Is "iSCSI" case-sensitive?
         
        Examples: 
         
         
           iSCSI://diskfarm1.acme.com 
           iSCSI://computingcenter.acme.com/diskfarm1 
    -       
    -    
    -    
    +      iSCSI://printroom.acme.com:4002/scanners/drum12
    +
        When a target has to act as an initiator for a third party command, 
        it MAY use the initiator name it learned during login as required by 
        the authentication mechanism to the third party.  
         
        To address targets and logical units within a target, SCSI uses a 
        fixed length (8 bytes) uniform addressing scheme; in this document, 
        we call those addresses SCSI reference addresses (SRA). 
    +! This is a LUN?  Right?
         
        To provide the target with the protocol specific addresses (iSCSI or 
        FC) iSCSI uses a Map Command; the Map command sends the managing 
        target the protocol specific addresses and gets from the target the 
        SRAs to use in subsequent commands.  For iSCSI, a protocol specific      
        address is a TCP address and a modifier.  After mapping, iSCSI will 
        be provided with a handle to the address in standard SCSI format. 
    +   The Map command is useful for third party commands.
         
     1.2.9 Message Framing 
         
    -   iSCSI presents an mapping of the SCSI protocol onto TCP.  This 
    +   iSCSI presents a mapping of the SCSI protocol onto TCP.  This 
        encapsulation is accomplished by sending iSCSI PDUs that are of 
        varying length. Unfortunately, TCP does not have a built-in mechanism 
     
       
     Satran                Standards-Track, May 2001                    13 
    @@ -711,13 +781,17 @@
        length) makes it impossible to find message boundaries in subsequent 
        TCP segments. The missing TCP segment must be received before any 
        following segments can be processed. 
         
        The iSCSI protocol uses the urgent bit in the TCP header to delineate 
    -   iSCSI messages. The first byte of every iSCSI message MUST be marked 
    +   iSCSI messages. The first byte of every iSCSI PDU sent SHOULD be marked 
        "urgent".  The result is the TCP urgent pointer will point to the 
        first byte of the iSCSI message in the TCP segment. 
    +! Not strictly true.  There can only be one outstanding urgent pointer,
    +! and it always points to the most recently queued urgent byte.  Hence,
    +! analysers will get a pointer to _a_ start-of-PDU, but not the _next_
    +! start-of-PDU.
         
        When a large iSCSI message is sent, the first TCP segment will 
        contain the iSCSI header, but the remaining TCP segments will not 
        contain any iSCSI framing information.  To minimize the amount of 
        buffering required when an iSCSI header is lost, it is recommended 
    @@ -737,23 +811,23 @@
      
        interpretation is being used on the data received. Bit 7 in the first 
        byte of the iSCSI message (F bit in the opcode field) that shall 
        always be zero.  Bit 7 in the following byte (opcode specific fields) 
        shall always be one.  When an iSCSI implementation receives an out of 
    +! Ugh!  B-P
        order TCP segment with the Urgent pointer defined, it shall look at 
        the byte pointed to by the Urgent pointer.  If the bit is clear, the 
        sender is RFC1122 compliant.  If the bit is set, the sender has 
        implemented the BSD interpretation, and must "back up" one byte to 
        find the beginning of the iSCSI message. 
    -    
    -
    -
    -
    -
    -
    -
    -
    +! I am strongly against mandating this policy.
    +! It is a clever and useful idea, but impractical.  There are sandboxed
    +! TCP/socket implementations that will not allow the urgent bit to be set
    +! and it's also possible for the TCP stream to be reframed and urgent lost.
    +! Lose the "MUST" and I'll be happy!  (After all, if the target receives
    +! a non-complient data PDU (i.e., no urgent flag) it is supposed to drop the
    +! stream, whereas this section is purely informational and for convenience.)
     
     
     
     
     
    @@ -798,11 +872,11 @@
        are to be represented in network byte order (i.e., big endian).  Any 
        bits not defined should be set to zero. 
         
     2.1 Template Header and Opcodes 
         
    -   All iSCSI PDUs  begin with a 48-byte header. Additional data appears, 
    +   All iSCSI PDUs begin with a 48-byte header. Additional data appears, 
        as necessary, beginning with byte 48. The fields of Opcode and Length 
        appear in all iSCSI PDUs. In addition, the Initiator Task tag, 
        Logical Unit Number, and Flags fields, when used, always appear in 
        the same location in the header. 
         
    @@ -810,12 +884,12 @@
         
        Byte /    0       |       1       |       2       |       3       | 
           /              |               |               |               | 
          |7 6 5 4 3 2 1 0|7 6 5 4 3 2 1 0|7 6 5 4 3 2 1 0|7 6 5 4 3 2 1 0|            
          +---------------+---------------+---------------+---------------+ 
    -    0|F| Opcode      |1|X| Opcode-specific fields                    | 
    -     |               | |P|                                           | 
    +    0|0| Opcode      |1|X| Opcode-specific fields                    | 
    +     | |             | |P|                                           | 
          +---------------+---------------+---------------+---------------+ 
         4| Length of Data (after 48 byte Header)                         | 
          +---------------+---------------+---------------+---------------+ 
         8| LUN or Opcode-specific fields                                 | 
          +                                                               + 
    @@ -824,23 +898,20 @@
        16| Initiator Task Tag or Opcode-specific fields                  | 
          +---------------+---------------+---------------+---------------+ 
        20/ Opcode-specific fields                                        / 
         +/                                                               / 
          +---------------+---------------+---------------+---------------+ 
    -   48| Header digest (optional-constant-length)                      | 
    +   48| Header digest (optional, constant-length)                     | 
          +---------------------------------------------------------------+ 
    -   +n/                                                               / 
    -    +/ Data (optional)                                               / 
    +   +n/ Data (optional)                                               / 
    +    +/                                                               / 
          +---------------------------------------------------------------+ 
    -    m| Data digest (optional-variable-length)    | 
    +    m/ Data digest (optional, variable-length)                       / 
    +    +/                                                               /
          +---------------------------------------------------------------+ 
         
    -2.1.1 F bit 
    -       
    -   If set to 1 indicates BSD semantic for the urgent pointer. 
    -   If set to 0 indicates RFC 1122 semantic for the urgent pointer. 
    -    
    +! Section 2.1.1 deleted.  Unnecessary.    
       
     Satran                Standards-Track, May 2001                    16 
     
                                     iSCSI                  November, 2000 
      
    @@ -871,10 +942,13 @@
           0x02 SCSI Task Management Command 
           0x03 Login Command 
           0x04 Text Command 
           0x05 SCSI Data (for WRITE operation) 
           0x06 NOP Command (from initiator to target) 
    +! Can we rename the four NOP commands 0x00, 0x06, 0x40 and 0x46?  Or comment
    +! them better?  I presume NOP-In preceeds NOP-Out and (independently)
    +! NOP Command preceeds NOP Response.  Did 0x06 used to be ping?
           0x07 Map Command 
           0x08 Logout Command 
            
         
        Valid target opcodes are: 
    @@ -906,12 +980,12 @@
            
     2.1.3 Opcode-specific fields 
            
        These fields have different meanings for different messages. 
        Bit 7 of the second byte MUST be 1 and bit 6 of the second byte is 
    -   used as a retry indicator for commands (X bit) or Poll bit and must 
    -   be 0 in all other iSCSI PDUs 
    +   used as a retry indicator for commands (X bit) or Poll bit (P) and must 
    +   be 0 in all other iSCSI PDUs.
            
     2.1.4 Length 
         
        The Length field indicates the number of bytes, beyond the first 48 
        bytes, that are being sent together with this message header. The 
    @@ -926,10 +1000,11 @@
        Number (LUN) field identifies which  Logical Unit..  If the opcode 
        does not relate to a Logical Unit, this field either is ignored or 
        may be used for some other purpose.  The LUN field is 64-bits in 
        accordance with [SAM2]. The exact format of this field can be found 
        in the [SAM2] document. 
    +! Is this field also the SRA holder?
         
     2.1.6 Initiator Task Tag  
         
        The initiator assigns a Task Tag to each SCSI task that it issues.  
        This tag is a session-wide unique identifier that can be used to 
    @@ -941,12 +1016,12 @@
        be the least significant n-bits of the Initiator Task Tag. For 
        example: 
         
           tag:16 
         
    -   means that only the last 16 bits of the Initiator Task Tag will be 
    -   used (the first 16 have to be 0). 
    +   means that only the low 16 bits of the Initiator Task Tag will be 
    +   used (the high 16 have to be 0). 
       
     Satran                Standards-Track, May 2001                    18 
     
                                     iSCSI                  November, 2000 
      
    @@ -1012,11 +1087,11 @@
         
        Byte /    0       |       1       |       2       |       3       | 
           /              |               |               |               | 
          |7 6 5 4 3 2 1 0|7 6 5 4 3 2 1 0|7 6 5 4 3 2 1 0|7 6 5 4 3 2 1 0| 
          +---------------+---------------+---------------+---------------+ 
    -    0|F|  0x01       |1|X|R|W|0|ATTR | Reserved (0)  | AddCDB 
    +    0|0|  0x01       |1|X|R|W|0|ATTR | Reserved (0)  | AddCDB        |
          +---------------+---------------+---------------+---------------+ 
         4| Length                                                        | 
          +---------------+---------------+---------------+---------------+ 
         8| Logical Unit Number (LUN)                                     | 
          +                                                               + 
    @@ -1040,11 +1115,10 @@
         
     2.2.1 Flags & Task Attributes 
         
           The flags field for a SCSI Command is: 
         
    -    
           b7   1   MUST be 1 for framing 
           b6   Retry (X)  
           b5   (R) set to 1 when input data is expected   
           b4   (W) set to 1 when output data is expected 
           b3   Reserved (MUST be 0) 
    @@ -1066,20 +1140,24 @@
           4    ACA 
         
     2.2.2 AddCDB  
         
        Additional CDB length (over 16) in units of 4 bytes. 
    +! I thought the CDB was limited to 256 bytes by SAM2 (hunch).  This
    +! could just be changed to be equal to the actual CDB length.  It would
    +! be nicer that way.
         
     2.2.3 CmdRN - Command Reference Number 
         
        Enables ordered delivery across multiple connections in a single 
        session. 
         
     2.2.4 ExpStatRN - Expected Status Reference Number  
         
    -   Command responses up to ExpStatRN -1 (mod 2**32) have been received 
    +   Command responses up to ExpStatRN-1 (mod 2**32) have been received 
        (acknowledges status) on the connection.   
    +! I'm still not convinced that the target requires this information.
         
     2.2.5 Expected Data Transfer Length 
         
        For unidirectional operations, the Expected Data Transfer Length 
        field states the number of bytes of data involved in this SCSI 
    @@ -1092,10 +1170,13 @@
        For bi-directional operations, this field states the number of data 
        bytes involved in the outbound transfer. For bi-directional 
        operations, an additional field indicating the Expected Bidi-Read 
        Data Transfer Length is following the (possibly extended) CDB as 
        shown bellow: 
    +! I'd prefer this swapped....  Have the return length in the main PDU
    +! and the send length in the extended part.  Just personal preference
    +! (from implementation hassles).
         
          +---------------+---------------+---------------+---------------+ 
        48/ Additional CDB (if any)                                       / 
         +/                                                               / 
          +---------------+---------------+---------------+---------------+ 
    @@ -1135,18 +1216,20 @@
        Some SCSI commands require additional parameter data to accompany the 
        SCSI command. This data may be placed beyond the 48-byte boundary of 
        the iSCSI header.  Alternatively, user data (as from a WRITE 
        operation) can be placed in the same PDU (both cases referred to as 
        immediate data). 
    +
    +! Form feed here?
         
     2.3 SCSI Response  
         
        Byte /    0       |       1       |       2       |       3       | 
           /              |               |               |               | 
          |7 6 5 4 3 2 1 0|7 6 5 4 3 2 1 0|7 6 5 4 3 2 1 0|7 6 5 4 3 2 1 0| 
          +---------------+---------------+---------------+---------------+ 
    -    0|F|  0x41       |1|Rsvd |o|u|O|U| Reserved (0)                  | 
    +    0|0|  0x41       |1|Rsvd |o|u|O|U| Reserved (0)                  | 
          +---------------+---------------+---------------+---------------+ 
         4| Length                                                        | 
          +---------------+---------------+---------------+---------------+ 
         8| Reserved (0)                                                  | 
          +                                                               + 
    @@ -1166,11 +1249,11 @@
                                     iSCSI                  November, 2000 
      
      
        32| MaxCmdRN                                                      | 
          +---------------+---------------+---------------+---------------+ 
    -   36| Command Status| Reserved (0)                                  | 
    +   36| Command Status| iSCSI status  | Reserved (0)                  | 
          +---------------+---------------+---------------+---------------+ 
        40| Resp_length                   | Sense_length                  | 
          +---------------+---------------+---------------+---------------+ 
        44| Bidi-Read Residual Count                                      | 
          +---------------+---------------+---------------+---------------+ 
    @@ -1181,21 +1264,22 @@
     2.3.1 Byte 1 - Flags 
         
           b0   (U) set for Residual Underflow. In this case, the Basic 
           Residual Count indicates how many bytes were not transferred 
           out of those expected to be transferred. 
    -      b1   (O) set for Residual Overflow. In this case, the Bsic 
    +      b1   (O) set for Residual Overflow. In this case, the Basic 
           Residual Count indicates how many bytes could not be 
           transferred because the initiator's Expected Data Transfer 
           Length was too small. 
    -      b2   (u) same as b0 but for the read-part of a bi-directional 
    +      b2   (u) same as b0 but for the write-part of a bi-directional 
           operation      
           b3   (o) same as b1 but for the read-part of a bi-directional 
           operation      
    -      b4-6 not used (SHOULD be set to 0) 
    +      b4-6 not used (set to 0) 
         
    -   Bits O and U are mutually exclusive and so are bits o and u. 
    +   Only one of bits O and U may be set. Similarly with bits o and u. 
    +! "Mutually exclusive" might imply "O xor U = 1"!
         
     2.3.2 Basic Residual Count  
         
        The Basic Residual Count field is valid only in case either the U bit 
        or the O bit is set. If neither bit is set, the Basic Residual Count 
    @@ -1219,24 +1303,36 @@
                                     iSCSI                  November, 2000 
      
      
        transferred in because the initiator's Expected Bidi-Read Transfer 
        Length was too small. 
    +! It occurs to me that it would be much simpler to have two fields and two
    +! flags.  That is, WriteDelta and ReadDelta.  The sign of the deltas would
    +! be indicated by the flags O and I.  Normally both fields would be zero.
    +! This should work for R, W and R/W commands.  (We might even want to
    +! specify signed deltas to eliminate the flags altogether.)
         
    -2.3.4 Command Status 
    +2.3.4 Command Status and iSCSI Status
         
        The Command Status field is used to report the SCSI status of the 
        command (as specified in [SAM2]). 
    +
    +   The iSCSI Status field is used to report problems in transporting the
    +   command to the LU.  The following values are currently defined.
    +
    +      0  no error
    +      1  LU not found (could not start command phase to LU)
         
     2.3.5 Resp_length - Response length 
         
     2.3.6 Sense_length - Length of sense data 
         
     2.3.7 Response and/or Sense Data 
         
        iSCSI targets MUST support and enable autosense.  If the Command 
        Status was CHECK CONDITION (0x02), then the Response and/or Sense 
    +! Hurrah!  Take a stand!
        Data field will contain sense data for the failed command after the 
        response data.  Some sense codes will relate to iSCSI check 
        conditions (e.g. excessive number of outstanding commands, immediate 
        data blocks too large etc.).  The Length parameters specify the 
        number of bytes in each section of this field.  If no error occurred, 
    @@ -1337,11 +1433,11 @@
         
        Byte /    0       |       1       |       2       |       3       | 
           /              |               |               |               | 
          |7 6 5 4 3 2 1 0|7 6 5 4 3 2 1 0|7 6 5 4 3 2 1 0|7 6 5 4 3 2 1 0| 
          +---------------+---------------+---------------+---------------+ 
    -    0|F|  0x00       |1|P| Reserved (0)                              | 
    +    0|0|  0x00       |1|P| Reserved (0)                              | 
          +---------------+---------------+---------------+---------------+ 
         4| Length                                                        | 
          +---------------+---------------+---------------+---------------+ 
         8/ Reserved (0)                                                  / 
         +/                                                               / 
    @@ -1353,11 +1449,11 @@
          +---------------+---------------+---------------+---------------+ 
        48 
         
     2.4.1 P - poll bit 
         
    -   Request a NOP-In message 
    +   Request a NOP-In message from the target.
         
     
     
     
     
    @@ -1392,11 +1488,11 @@
         
        Byte /    0       |       1       |       2       |       3       | 
           /              |               |               |               | 
          |7 6 5 4 3 2 1 0|7 6 5 4 3 2 1 0|7 6 5 4 3 2 1 0|7 6 5 4 3 2 1 0| 
          +---------------+---------------+---------------+---------------+ 
    -    0|F|  0x40       |1|P| Reserved (0)                              | 
    +    0|0|  0x40       |1|P| Reserved (0)                              | 
          +---------------+---------------+---------------+---------------+ 
         4| Length                                                        | 
          +---------------+---------------+---------------+---------------+ 
         8/ Reserved (0)                                                  / 
         +/                                                               / 
    @@ -1410,11 +1506,11 @@
          +---------------+---------------+---------------+---------------+ 
        48 
         
     2.5.1 P - poll bit 
         
    -   Request a NOP-Out message 
    +   Request a NOP-Out message from the initiator.
         
     
     
     
     
    @@ -1444,11 +1540,11 @@
         
        Byte /    0       |       1       |       2       |       3       | 
           /              |               |               |               | 
          |7 6 5 4 3 2 1 0|7 6 5 4 3 2 1 0|7 6 5 4 3 2 1 0|7 6 5 4 3 2 1 0| 
          +---------------+---------------+---------------+---------------+ 
    -    0|F|  0x02       |1|0| Function  | Reserved (0)                  | 
    +    0|0|  0x02       |1|0| Function  | Reserved (0)                  | 
          +---------------+---------------+---------------+---------------+ 
         4| Length                                                        | 
          +---------------+---------------+---------------+---------------+ 
         8| Logical Unit Number (LUN)                                     | 
          +                                                               + 
    @@ -1494,18 +1590,21 @@
      
      
        For the functions above a SCSI Task Management Response MUST be 
        returned, using the Initiator Task Tag to identify the operation for 
        which it is responding.   
    +
        For the <Clear Task Set> the target MUST send an Asynchronous Event 
        to all other attached initiators to inform them that all pending 
        tasks are cancelled and then enter the ACA state for any initiator 
        for which it had pending tasks. 
    +
        For the <Target Warm Reset> and <Target Cold Reset> functions, the 
        target cancels all pending operations. The target MUST send an 
        Asynchronous Event to all attached initiators notifying them that the 
        target is being reset.   
    +! For warm reset, should the target/LU send an AE once reset is complete?
         
        In addition, for the <Target Warm Reset> the target will enter the 
        ACA state on all sessions and all LUs on which an AE was sent. 
         
        In addition, for the <Target Cold Reset> the target then MUST 
    @@ -1555,11 +1654,11 @@
         
        Byte /    0       |       1       |       2       |       3       | 
           /              |               |               |               | 
          |7 6 5 4 3 2 1 0|7 6 5 4 3 2 1 0|7 6 5 4 3 2 1 0|7 6 5 4 3 2 1 0| 
          +---------------+---------------+---------------+---------------+ 
    -    0|F| 0x42        |1|0| Reserved (0)                              | 
    +    0|0| 0x42        |1|0| Reserved (0)                              | 
          +---------------+---------------+---------------+---------------+ 
         4| Length                                                        | 
          +---------------+---------------+---------------+---------------+ 
         8| Logical Unit Number (LUN)                                     | 
          +                                                               + 
    @@ -1671,11 +1770,11 @@
         
        Byte /    0       |       1       |       2       |       3       | 
           /              |               |               |               | 
          |7 6 5 4 3 2 1 0|7 6 5 4 3 2 1 0|7 6 5 4 3 2 1 0|7 6 5 4 3 2 1 0| 
          +---------------+---------------+---------------+---------------+ 
    -    0|F| 0x05        |1|0| Reserved (0)                              | 
    +    0|0| 0x05        |1|0| Reserved (0)                              | 
          +---------------+---------------+---------------+---------------+ 
         4| Length                                                        | 
          +---------------+---------------+---------------+---------------+ 
         8| LUN or Reserved (0)                                           | 
        12|                                                               | 
    @@ -1721,11 +1820,11 @@
         
        Byte /    0       |       1       |       2       |       3       | 
           /              |               |               |               | 
          |7 6 5 4 3 2 1 0|7 6 5 4 3 2 1 0|7 6 5 4 3 2 1 0|7 6 5 4 3 2 1 0| 
          +---------------+---------------+---------------+---------------+ 
    -    0|F| 0x45        |1|P| (0) |S|O|U| Reserved (0)                  | 
    +    0|0| 0x45        |1|P| (0) |S|O|U| Reserved (0)                  | 
          +---------------+---------------+---------------+---------------+ 
         4| Length                                                        | 
          +---------------+---------------+---------------+---------------+ 
         8| Reserved (0)                                                  | 
          +---------------+---------------+---------------+---------------+ 
    @@ -1788,12 +1887,12 @@
        command completed with an error, then the response and sense data 
        must be sent in a SCSI Response packet and must not be sent in a SCSI 
        Data packet. 
         
           b0-1 as in an ordinary SCSI Response 
    -      b2   S (status)- set to indicate that the Command Status field 
    -      contains status 
    +      b2   S (status)- set to indicate that the Command Status and
    +      and iSCSI Status fields contain valid information
           b3-5 not used (should be set to 0) 
           b6   P (poll) - set to indicate data acknowledgement is 
           requested; b7 and b2 are mutually exclusive - if S bit is set P 
           bit MUST be ignored   
         
    @@ -1808,12 +1907,13 @@
        specifying the next expected packet in a NOP command with the same 
        Initiator Tag. Acknowledging NOP PDUs MAY be postponed for a maximum 
        of 32 incoming data PDUs.  An explicit request for acknowledgement 
        made by setting the P bit MUST be honored. 
         
    -    
    +2.8.6 Command Status and iSCSI Status
     
    +   See the description in SCSI Response (section 2.3).
     
     
       
     Satran                Standards-Track, May 2001                    34 
     
    @@ -1830,11 +1930,11 @@
         
        Byte /    0       |       1       |       2       |       3       | 
           /              |               |               |               | 
          |7 6 5 4 3 2 1 0|7 6 5 4 3 2 1 0|7 6 5 4 3 2 1 0|7 6 5 4 3 2 1 0| 
          +---------------+---------------+---------------+---------------+ 
    -    0|F| 0x04        |1|0| Type      | Reserved (0)                  | 
    +    0|0| 0x04        |1|0| Type      | Reserved (0)                  | 
          +---------------+---------------+---------------+---------------+ 
         4| Length                                                        | 
          +---------------+---------------+---------------+---------------+ 
         8/ Reserved (0)                                                  / 
         +/                                                               / 
    @@ -1853,14 +1953,18 @@
        48/ Text                                                          / 
         +/                                                               / 
          +---------------+---------------+---------------+---------------+ 
         
     2.9.1 Type 
    +
    +   This field contains a value designating the context of the Text command.
    +   Currently defined values are:
         
           0 outside login phase 
           1 within login 
    -       
    +! What is this field used for anyway?  Doesn't everyone know what phase
    +! they're in?
         
     2.9.2 Length 
         
        This is the length, in bytes, of the Text field. 
         
    @@ -1880,33 +1984,37 @@
     2.9.4 Text 
         
        The initiator sends the target a set of key:value or key:(list) pairs 
        encoded in UTF-8 Unicode. The key and value are separated by a ':' 
        (0x3A) delimiter. Many key:value pairs can be included in the Text 
    -   block by separating them with null ' ' (0x00) delimiters. Some basic 
    -   key:value pairs are described in Appendix A & C.  The target responds 
    +   block by separating them with nul '\0' (0x00) delimiters. Some basic 
    +   key:value pairs are described in Appendices A & C.  The target responds 
        by sending its response back to the initiator. The target and 
        initiator can then perform some advanced operations based on their 
        common capabilities. 
         
        Manufacturers may introduce new keys by prefixing them with their 
    -   (reversed) domain name, for example,  
    +   (reversed) domain name, for example the company owning the domain
    +   acme.com can issue
         
    -      com.foo.bar.do_something:0000000000000003 
    +      com.acme.bar.foo.do_something:0000000000000003 
         
        Any key that the target does not understand may be ignored without 
        affecting basic function. Once the target has processed all the 
        key:value or key:(list) pairs, it responds with the Text Response 
        command, listing the parameters that it supports. It is recommended 
        that Text operations that will take a long time should be placed in 
        their own Text command.  If the Text Response does not contain a key 
        that was requested, the initiator must assume that the key was not 
        understood by the target. 
    +
        Targets and initiators may limit the size of the text accepted in a 
        text command and text response as well as the size of key:value 
        pairs.  Such limits should be indicated at login. 
    +
        The default limit is 16384 UTF8 characters. 
    +! Is this a hard limit, or made to match the common window size in TCP?
         
         
     
     
     
    @@ -1937,11 +2045,11 @@
         
        Byte /    0       |       1       |       2       |       3       | 
           /              |               |               |               | 
          |7 6 5 4 3 2 1 0|7 6 5 4 3 2 1 0|7 6 5 4 3 2 1 0|7 6 5 4 3 2 1 0| 
          +---------------+---------------+---------------+---------------+ 
    -    0|F| 0x44        |1|0| Type      | Reserved (0)                  | 
    +    0|0| 0x44        |1|0| Type      | Reserved (0)                  | 
          +---------------+---------------+---------------+---------------+ 
         4| Length                                                        | 
          +---------------+---------------+---------------+---------------+ 
         8/ Reserved (0)                                                  / 
         +/                                                               / 
    @@ -1963,12 +2071,11 @@
         +/                                                               / 
          +---------------+---------------+---------------+---------------+ 
         
     2.10.1 Type 
         
    -      0 outside login phase 
    -      1 within login 
    +   This field is mirrored from the original Text command.
            
     2.10.2 Length 
         
        This is the length, in bytes, of the Text Response field. 
         
    @@ -1989,11 +2096,11 @@
        format as the Text Command. Appendix C lists some basic Text Commands 
        and their Responses.  If the Text Response does not contain a key 
        that was requested, the initiator must assume that the key was not 
        understood by the target or that the answer is <key>:none and the two 
        MUST be equivalent where applicable. 
    -    
    +! I don't like this "none" thing.  It's ugly.  Blank (nul) would be better.
     
     
     
     
     
    @@ -2047,11 +2154,11 @@
         
        Byte /    0       |       1       |       2       |       3       | 
           /              |               |               |               | 
          |7 6 5 4 3 2 1 0|7 6 5 4 3 2 1 0|7 6 5 4 3 2 1 0|7 6 5 4 3 2 1 0| 
          +---------------+---------------+---------------+---------------+ 
    -    0|F| 0x03        |1|0| Rsrvd (0) | Version-major | Version-minor | 
    +    0|0| 0x03        |1|0| Rsrvd (0) | Version-major | Version-minor | 
          +---------------+---------------+---------------+---------------+ 
         4| Length                                                        | 
          +---------------+---------------+---------------+---------------+ 
         8| CID                           | Reserved (0)                  | 
          +---------------+---------------+---------------+---------------+ 
    @@ -2070,19 +2177,21 @@
         +/                                                               / 
          +---------------+---------------+---------------+---------------+ 
         
     2.11.1 Version-major 
         
    -   Currently 1. 
    +   Currently 0. 
         
     2.11.2 Version-minor 
       
    -   Currently 0.  
    +   Currently 3.  
    +! It isn't a standard yet!
         
     2.11.3 CID 
         
    -   A unique id for this connection within the session 
    +   A unique id for this connection within the session.
    +! Who decides this?  What is it?  Tell me something about it!
         
     2.11.4 Initiator Task Tag 
         
       
     Satran                Standards-Track, May 2001                    39 
    @@ -2090,10 +2199,11 @@
                                     iSCSI                  November, 2000 
      
      
        This tag identifies all the commands and responses within the login 
        sequence. 
    +! Arghh!  That's no help.
         
     2.11.5 InitCmdRN 
         
        Is significant only if TSID is zero and indicates the starting 
        Command reference number for this session; it SHOULD be zero for all 
    @@ -2154,11 +2264,11 @@
         
        Byte /    0       |       1       |       2       |       3       | 
           /              |               |               |               | 
          |7 6 5 4 3 2 1 0|7 6 5 4 3 2 1 0|7 6 5 4 3 2 1 0|7 6 5 4 3 2 1 0| 
          +---------------+---------------+---------------+---------------+ 
    -    0|F| 0x43        |1|0| Rsrvd (0) | Version-major | Version-minor | 
    +    0|0| 0x43        |1|0| Rsrvd (0) | Version-major | Version-minor | 
          +---------------+---------------+---------------+---------------+ 
         4| Length                                                        | 
          +---------------+---------------+---------------+---------------+ 
         8/ Reserved (0)                                                  / 
         +/                                                               / 
    @@ -2205,10 +2315,12 @@
         
        The Status returned in a Login Response is one of the following: 
         
           0 accept login   (will now accept SCSI commands) 
           1 reject login 
    +! What happened to "more authentication required" to allow the challenge/
    +! reponse sequence to go through Text commands?
         
        In the case that the Status is "accept login" the initiator may 
        proceed to issue SCSI commands.  In the case that the Status is 
        "reject login" the initiator should immediately close down its end of 
        the TCP connection, thus freeing up the target's port for some other 
    @@ -2261,11 +2373,12 @@
         
        Byte /    0       |       1       |       2       |       3       | 
           /              |               |               |               | 
          |7 6 5 4 3 2 1 0|7 6 5 4 3 2 1 0|7 6 5 4 3 2 1 0|7 6 5 4 3 2 1 0| 
          +---------------+---------------+---------------+---------------+ 
    -    0|1|  0x06       |1|P| Reserved (0)                              | 
    +    0|0|  0x06       |1|P| Reserved (0)                              | 
    +! There was a one above---assumed to be a mistake.  Otherwise, explain.
          +---------------+---------------+---------------+---------------+ 
         4| Length                                                        | 
          +---------------+---------------+---------------+---------------+ 
         8/ Reserved (0)                                                  / 
         +/                                                               / 
    @@ -2312,11 +2425,11 @@
        close the connection and may try to establish a new connection. 
         
        The NOP command with the P bit not set MAY be used to acknowledge 
        data received from a target (data-ack). In this case, the command 
        caries the same Initiator Task Tag as the data it acknowledges and 
    -   the CmdRN field MUST be zero.  The field ExpStatRN/ ExpDataRN is then 
    +   the CmdRN field MUST be zero.  The field ExpStatRN/ExpDataRN is then 
        understood to be ExpDataRN. Repeated or obsolete data 
        acknowledgements MUST be silently discarded by the target.   
         
         
         
    @@ -2370,11 +2483,11 @@
         
        Byte /    0       |       1       |       2       |       3       | 
           /              |               |               |               | 
          |7 6 5 4 3 2 1 0|7 6 5 4 3 2 1 0|7 6 5 4 3 2 1 0|7 6 5 4 3 2 1 0| 
          +---------------+---------------+---------------+---------------+ 
    -    0|F| 0x46        |1|0| Reserved (0)                              | 
    +    0|0| 0x46        |1|0| Reserved (0)                              | 
          +---------------+---------------+---------------+---------------+ 
         4| Length                                                        | 
          +---------------+---------------+---------------+---------------+ 
         8/ Reserved (0)                                                  / 
         +/                                                               / 
    @@ -2424,11 +2537,11 @@
         
        Byte /    0       |       1       |       2       |       3       | 
           /              |               |               |               | 
          |7 6 5 4 3 2 1 0|7 6 5 4 3 2 1 0|7 6 5 4 3 2 1 0|7 6 5 4 3 2 1 0| 
          +---------------+---------------+---------------+---------------+ 
    -    0|F| 0x07        |1|0| Function  | Reserved (0)                  | 
    +    0|0| 0x07        |1|0| Function  | Reserved (0)                  | 
          +---------------+---------------+---------------+---------------+ 
         4| Length                                                        | 
          +---------------+---------------+---------------+---------------+ 
         8| Reserved (0)                                                  | 
          +                                                               + 
    @@ -2448,18 +2561,16 @@
        48| Descriptor Type               | Descriptor Length             | 
          +---------------+---------------+---------------+---------------+ 
        52/ Descriptor                                                    / 
         +/                                                               / 
          +---------------+---------------+---------------+---------------+ 
    -   --------------------------------------------------------------------- 
    -     +---------------+---------------+---------------+---------------+ 
    -     | Descriptor Type               | Descriptor Length             | 
    +    +| Descriptor Type               | Descriptor Length             | 
          +---------------+---------------+---------------+---------------+ 
    -     / Descriptor                                                    / 
    +    +/ Descriptor                                                    / 
         +/                                                               / 
          +---------------+---------------+---------------+---------------+ 
    -    
    +    + ...    
         
             or 
         
     
     
    @@ -2475,16 +2586,14 @@
         
          +---------------+---------------+---------------+---------------+ 
        48| 8 byte Descriptor                                             | 
         +|                                                               | 
          +---------------+---------------+---------------+---------------+ 
    -   --------------------------------------------------------------------- 
    -     +---------------+---------------+---------------+---------------+ 
    -   N | 8 byte Descriptor                                             | 
    +    +| 8 byte Descriptor                                             | 
         +|                                                               | 
          +---------------+---------------+---------------+---------------+ 
    -    
    +    + ...
         
        The mapping command enables the initiator to map iSCSI specific 
        addresses and access control information into formats compliant with 
        the SCSI command standards (e.g., [SPC-2]). 
         
    @@ -2496,11 +2605,11 @@
           provide the 8 byte SCSI compliant address reference 
           0    Unmap - given a SCSI compliant address reference remove 
           the mapping associated with it. 
         
        Address/access control descriptors follow the header.  For the map 
    -   function the following descriptor types are defined: 
    +   function the following Descriptor Types are defined: 
         
           0    Binary IP Version 4 TCP address (IP+Port) followed by a 
           selector string; length should be 6+the selector length+1 
           1    Binary IP Version 6 TCP address (IP+Port) followed by a 
           selector string; length should be 18+the selector length+1 
    @@ -2508,11 +2617,11 @@
           selector followed by null) 
           3    FC address & port - in case access control is based on 
           transport ID 
           4    access proxy token 
         
    -   Details for 3 & 4 have to be coordinated with T10 
    +   Details for 3 & 4 have to be coordinated with T10.
         
        For the unmap function the descriptors are standard 8 byte SRAs (SCSI 
        Reference Address) 
         
     
    @@ -2530,11 +2639,11 @@
         
        Byte /    0       |       1       |       2       |       3       | 
           /              |               |               |               | 
          |7 6 5 4 3 2 1 0|7 6 5 4 3 2 1 0|7 6 5 4 3 2 1 0|7 6 5 4 3 2 1 0| 
          +---------------+---------------+---------------+---------------+ 
    -    0|F| 0x47        |1|0| Reserved (0)                              | 
    +    0|0| 0x47        |1|0| Reserved (0)                              | 
          +---------------+---------------+---------------+---------------+ 
         4| Length                                                        | 
          +---------------+---------------+---------------+---------------+ 
         8| Reserved (0)                                                  | 
          +                                                               + 
    @@ -2553,11 +2662,17 @@
        36| Response      | Reserved (0)                                  | 
          +---------------+---------------+---------------+---------------+ 
        40/ Reserved (0)                                                  / 
         +/                                                               / 
          +---------------+---------------+---------------+---------------+ 
    -   48 
    +   48| SRA 1                                                         |
    +     |                                                               |
    +     +---------------+---------------+---------------+---------------+ 
    +   56| SRA 2 (if specified)                                          |   
    +     |                                                               |
    +     +---------------+---------------+---------------+---------------+ 
    +    + ...
         
     2.16.1 Entries Mapped 
         
        The total number of mapped entries. 
         
    @@ -2576,17 +2691,17 @@
     
                                     iSCSI                  November, 2000 
      
      
           0    Function Complete 
    -      1    Map Function Rejected - Bad Descriptors 
    +      1    Map Function Rejected - bad descriptors 
           2    Map Function Rejected - too many descriptors 
    -      3    Unmap Function Rejected - Bad Descriptor 
    +      3    Unmap Function Rejected - bad descriptor 
         
        If the Response to a map is function complete the data following the 
    -   header contains the SRAs to be used in third party commands; each SRA 
    -   matches a descriptor in the Map command. 
    +   header contains the 8-byte SRAs to be used in third party commands; each
    +   SRA matches the corresponding descriptor in the Map command. 
         
        Note that a map command can only entirely succeed (and then all 
        descriptors are mapped or unmapped) or entirely fail. 
         
     
    @@ -2638,16 +2753,17 @@
         
        The logout command is used by an initiator to "clean-up" the target 
        end of a failing connection and enable recovery to start. 
        On sessions with a single connection, this might imply opening a 
        second connection with the sole purpose of cleaning-up the first. 
    +! Will this also close the TCP stream?
         
        Byte /    0       |       1       |       2       |       3       | 
           /              |               |               |               | 
          |7 6 5 4 3 2 1 0|7 6 5 4 3 2 1 0|7 6 5 4 3 2 1 0|7 6 5 4 3 2 1 0| 
          +---------------+---------------+---------------+---------------+ 
    -    0|F| 0x08        |1|0|Reserved (0)                               | 
    +    0|1| 0x08        |1|0|Reserved (0)                               | 
          +---------------+---------------+---------------+---------------+ 
         4| Length                                                        | 
          +---------------+---------------+---------------+---------------+ 
         8| CID                           | Reserved (0)                  | 
          +---------------+---------------+---------------+---------------+ 
    @@ -2698,11 +2814,12 @@
         
        Byte /    0       |       1       |       2       |       3       | 
           /              |               |               |               | 
          |7 6 5 4 3 2 1 0|7 6 5 4 3 2 1 0|7 6 5 4 3 2 1 0|7 6 5 4 3 2 1 0| 
          +---------------+---------------+---------------+---------------+ 
    -    0|1| 0x48        |1|0| Reserved (0)                              | 
    +    0|0| 0x48        |1|0| Reserved (0)                              | 
    +! Was the one above deliberate?
          +---------------+---------------+---------------+---------------+ 
         4| Length                                                        | 
          +---------------+---------------+---------------+---------------+ 
         8/ Reserved (0)                                                  / 
          /                                                               / 
    @@ -2770,11 +2887,11 @@
         
        Byte /    0       |       1       |       2       |       3       | 
           /              |               |               |               | 
          |7 6 5 4 3 2 1 0|7 6 5 4 3 2 1 0|7 6 5 4 3 2 1 0|7 6 5 4 3 2 1 0| 
          +---------------+---------------+---------------+---------------+ 
    -    0|F| 0x50        |1|0| Reserved (0)                              | 
    +    0|0| 0x50        |1|0| Reserved (0)                              | 
          +---------------+---------------+---------------+---------------+ 
         4| Length                                                        | 
          +---------------+---------------+---------------+---------------+ 
         8| Reserved (0)                                                  | 
          +                                                               + 
    @@ -2861,11 +2978,11 @@
         
        Byte /    0       |       1       |       2       |       3       | 
           /              |               |               |               | 
          |7 6 5 4 3 2 1 0|7 6 5 4 3 2 1 0|7 6 5 4 3 2 1 0|7 6 5 4 3 2 1 0| 
          +---------------+---------------+---------------+---------------+ 
    -    0|F| 0x51        |1|0| Reserved (0)                              | 
    +    0|0| 0x51        |1|0| Reserved (0)                              | 
          +---------------+---------------+---------------+---------------+ 
         4| Length                                                        | 
          +---------------+---------------+---------------+---------------+ 
         8| Logical Unit Number (LUN)                                     | 
          +                                                               + 
    @@ -2888,11 +3005,11 @@
        48/ Sense Data                                                    / 
         +/                                                               / 
          +---------------+---------------+---------------+---------------+ 
         
         
    -2.20.1 iSCSI Event 
    +2.20.1 iSCSI Event Indicator
         
        Some Asynchronous Events are strictly related to iSCSI while others 
        are related to SAM-2.  The codes returned for iSCSI Asynchronous 
        Events are: 
         
    @@ -3022,11 +3139,11 @@
         
        Byte /    0       |       1       |       2       |       3       | 
           /              |               |               |               | 
          |7 6 5 4 3 2 1 0|7 6 5 4 3 2 1 0|7 6 5 4 3 2 1 0|7 6 5 4 3 2 1 0| 
          +---------------+---------------+---------------+---------------+ 
    -    0|F| 0x7f)       |1|0| Reserved (0)                              | 
    +    0|0| 0x7f)       |1|0| Reserved (0)                              | 
          +---------------+---------------+---------------+---------------+ 
         4| Length                                                        | 
          +---------------+---------------+---------------+---------------+ 
         8/ Reserved (0)                                                  / 
         +/                                                               / 
    @@ -3108,10 +3225,14 @@
           command.  This indicates the start of the authentication 
           sequence. The command includes the protocol version supported 
           by the target and the security parameters (not iSCSI 
           parameters, those will be returned only after security is 
           established to protect them) supported by the target. 
    +! I dislike the idea of a Text Response to a Login request.  I prefer the
    +! old method of "more authentication required" from an architectural point
    +! of view.  (This method is effectively using Text Response as a Text
    +! Request, which is just wrong. B-)
            
     3.2 Security negotiation 
         
        The negotiation proceeds as follows: 
         
    @@ -3131,11 +3252,11 @@
           to the least.  
           -The target MUST reply with the first option in the list it 
           supports.  The parameters are encoded in Unicode - UTF8 as 
           key:value (e.g., the encryption option of triple-DES will 
           appear as encryption:3des-cbc).  The initiator MAY send 
    -      proprietary options as well. The ônoneö option MUST be included 
    +      proprietary options as well. The "none" option MUST be included 
           in the list, indicating no algorithm supported by the target. 
           If security is to be established, the initiator MUST NOT send 
           parameters other than security parameters in the login command. 
           The general parameters should be negotiated only after security 
           is established at the desired level.  Any operational 
    @@ -3240,15 +3361,16 @@
         
        For any outstanding SCSI command, it is assumed that iSCSI in 
        conjunction with SCSI at the initiator is able to keep enough 
        information to be able to rebuild the command PDU, that outgoing data 
        is available (in host memory) for retransmission while the command is 
    -   outstanding. It is also assumed that at a target iSCSI and 
    +   outstanding. It is also assumed that, at a target, iSCSI and 
        specialized TCP implementations are able to recover unacknowledged 
    -   data packets from a closing connection or, alternatively the target 
    -   has means to re-read data from a device server.  It is further 
    -   assumed that a target will keep the "status & sense" for a command it 
    +   data packets from a closing connection or, alternatively, the target 
    +   has the means to re-read data from a device server.  It is further 
    +   assumed that a target will keep the Status and Sense for a command it 
    +! Bitwise AND would have been fun though.  B-)
        has executed while the total number of outstanding commands and 
        executed commands does not exceed its limit. A target will 
        sequentially number the delivered responses and thus enable 
        initiators to tell when a response is missing and which response is 
        missing. 
    @@ -3260,11 +3382,11 @@
        for some devices and communications networks recovery may be complex 
        and may percolate to upper software layers.  It is assumed that 
        targets and/or initiators will recognize a failing connection by 
        either transport level means (TCP) or by a gap in the command or 
        response stream that is not filled for a long time, or by a failing 
    -   iSCSI ping (the later should be used periodically by highly reliable 
    +   iSCSI ping/NOP (the later should be used periodically by highly reliable 
        implementations).  Initiators and targets SHOULD use the keep-alive 
        option on the TCP connection to enable early link failure detection 
        on idle links.  
         
        The iSCSI recovery involves the following steps: 
    @@ -3272,11 +3394,11 @@
           -abort offending TCP connection(s) (target & initiator) and 
           recover at target all unacknowledged read-data 
           -issue a Logout command on a remaining connection or create a 
           new connection and issue the Logout command  
           -wait for the Logout response  
    -      -if needed create one or more new TCP connections (within the 
    +      -if needed, create one or more new TCP connections (within the 
           same session) and associate all outstanding commands from the 
           failed connection to the new connection at both initiator and 
           target. 
     
     
    @@ -3292,12 +3414,12 @@
           are not acknowledged yet or a new CmdRN if they were 
           acknowledged; the retry (X) flag in the command PDU will be set 
           -upon receiving the new/retry commands the target will resume 
           command execution; for write commands it means requesting data 
           retransmission through R2T, for reads retransmitting recovered 
    -      data and for "terminated" commands retransmitting the status & 
    -      sense while retaining the original StatRN. If data recovery is 
    +      data and for "terminated" commands retransmitting the Status and
    +      Sense while retaining the original StatRN. If data recovery is 
           not possible, the target will either provide data from the 
           media or redo the operation (if the operation is not idempotent 
           the device server may fail the operation). 
            
         
    @@ -3306,16 +3428,16 @@
        The authors recognize that mapping framed messages over a "stream" 
        connection (like TCP) makes the proposed mechanisms vulnerable to 
        simple software framing errors and introducing framing mechanisms may 
        be onerous for performance and bandwidth.  Command reference numbers 
        and the above mechanisms for connection drop and reestablishment will 
    -   help handle this type of mapping errors. 
    +   help detect and handle these types of mapping errors. 
         
     4.3 Session Errors 
         
        If all the connections of a session fail and can't be reestablished 
    -   in a short time or if initiators detect protocol errors repeatedly an 
    +   in a short time or if initiators detect protocol errors repeatedly, an 
        initiator may choose to terminate a session and establish a new 
        session. It will terminate all outstanding requests with an iSCSI 
        error indication before initiating a new session.  A target that 
        detects one of the above errors will take the following actions: 
         
    @@ -3349,11 +3471,11 @@
        mechanism was designed to enable RDMA at the iSCSI level or lower. 
         
     5.1 Small TCP Segments 
         
        It is recommended that TCP segments be limited in size to no more 
    -   than 8K bytes. One reason we recommend small segments is to allow a 
    +   than 8192 bytes. One reason we recommend small segments is to allow a 
        stronger type of checksum, possibly utilizing CRC, which is practical 
        only for smaller segments. 
         
     5.2 Multiple Network Adapters 
         
    @@ -3398,12 +3520,12 @@
      
     6. Security Considerations 
         
     6.1 Data Integrity 
         
    -   We assume that basic level end-to-end data integrity can be assured 
    -   by TCP, by using the standard checksum.  For those applications for 
    +   We assume that basic level end-to-end data integrity can be reasonably
    +   handled by TCP, by using the standard checksum.  For those applications for 
        which data integrity is of utmost importance iSCSI will provide an 
        integrity option. 
          
     6.2 Network operations and the Threat Model 
         
    @@ -3420,30 +3542,30 @@
        Attacks fall into three main areas; passive, active, and denial of 
        service. 
         
     6.2.1.1 Passive Attacks 
         
    -   In general, data transfers will be made through a switched fabric, 
    +   Often, data transfers will be made through a switched fabric, 
        making sniffing difficult. In addition, the nature of the data (block 
        transfers), even if sniffed, would not necessarily be readily 
        understandable to the attacker.  That being said, a determined 
        attacker, by capturing of content and analyzing traffic over time, 
    -   could replicate enough of a drive to make the captured data 
    +   could replicate enough of a storage device to make the captured data 
        meaningful. Certain storage operations which are mostly 
        unidirectional, such as writing to a tape or reading from a CD-ROM, 
    -   are even more susceptible to passive attacks since the listener will 
    +   are more susceptible to passive attacks since the listener will 
        be able to replicate most if not all of the operation. 
         
        Passive attacks by traffic analysis alone is deemed out of scope 
        since it is unlikely that the listener will be able to guess any 
        pertinent information without knowing the content of the messages.  
        It is also out of scope to detect passive attacks. The protocol must 
        be able to prevent passive attacks by masking the contents of 
        messages through some form of encryption. 
         
        Finally, it is assumed that a strong authentication mechanism will be 
    -   necessary. Therefore, any long-lived passwords or private keys must 
    +   necessary. Therefore, any long-lived passwords or private keys should
        never be sent in the clear. 
       
     Satran                Standards-Track, May 2001                    64 
     
                                     iSCSI                  November, 2000 
    @@ -3454,11 +3576,11 @@
         
        Whereas passive attacks involve SNIFFING, active attacks will 
        generally involve SPOOFING. If an attacker can successfully 
        masquerade as a client, he will have total read/write access to those 
        storage resources assigned to that client. Spoofing as a server is 
    -   more difficult, since many operations involve client reads of some 
    +   sometimes more difficult, since many operations involve client reads of some 
        expected or otherwise understandable data. 
         
        Most likely, many of the sessions will be long-lived. This feature 
        has a dual effect of making these sessions more vulnerable to attack 
        (hijacking TCP connections, cryptographic attacks), while at the same 
    @@ -3475,11 +3597,11 @@
        the effect of reducing performance, and as such can act as a denial 
        of service. It is possible that an attacker can modify a message in 
        such a way the session becomes uncoordinated, resulting in a tear 
        down of the session. 
         
    -6.2.2 Security Model 
    +6.2.2 iSCSI Security Models
         
     6.2.2.1 No Security 
         
        This mode does not authenticate nor does it encrypt data. This mode 
        should only be used in environments where there is minimal security 
    @@ -3492,10 +3614,12 @@
        errors. Once the client is authenticated, all messages are sent and 
        received in the clear.  This mode should only be used when there is 
        minimal risk to man-in-the-middle attacks, eavesdropping, message 
        insertion, deletion, and modification. For example, this mode can be 
        used when IPsec is used in security gateways. 
    +
    +! Digest?
         
     6.2.2.3 iSCSI integrity and authentication 
       
     Satran                Standards-Track, May 2001                    65 
     
    @@ -3517,10 +3641,11 @@
         
        This mode provides for the end-to-end encryption (e.g. IPsec). In 
        addition to authenticating the client, it provides end-to-end data 
        integrity and protects against man-in-the-middle attacks, 
        eavesdropping, message insertion, deletion, and modification. 
    +! And SSL/TLS?
         
        A connection or multiple connections can be protected end-to-end by 
        using IPSec.  In this case, the initiator must use the "Implicit 
        Authentication" parameter to indicate that IPSec should be used to 
        specify the Access ID and perform authentication. 
    @@ -3546,11 +3671,11 @@
        encrypted passwords and trusted certificate authorities.  Once the 
        initiator and target are confident of the identity of the attached 
        party, the established channel is considered secure. 
         
     6.4 Feasibility 
    -    
    +! Bad page split.    
       
     Satran                Standards-Track, May 2001                    66 
     
                                     iSCSI                  November, 2000 
      
    @@ -3612,11 +3737,11 @@
      
      
     7. IANA Considerations 
         
        There will be a well-known port for iSCSI connections.  This well 
    -   known port is registered with IANA. 
    +   known port will be registered with IANA. 
         
         
     
     
     
    @@ -3721,11 +3846,11 @@
     
                                     iSCSI                  November, 2000 
      
      
           [TLS]     The TLS Protocol, RFC 2246, T. Dierks et al. 
    -    
    +! RFC for IPv6 dotted notation.    
         
         
     
     
     
    @@ -3792,11 +3917,11 @@
         
         
         
             Daniel F. Smith 
             IBM Almaden Research Center 
    -        650 Harry Road 
    +        650 Harry Road K65/C2
             San Jose, CA 95120-6099, USA 
             Phone: +1 408 927 2072 
             Email: dfsmith@almaden.ibm.com 
         
         
    @@ -3991,11 +4116,11 @@
         
        The following table details authentication methods. 
         
        +-----------------------------------------------------------+ 
        | Name          | Description                               | 
    -  
    +! Bad page split.  
     Satran                Standards-Track, May 2001                    74 
     
                                     iSCSI                  November, 2000 
      
      
    @@ -4004,10 +4129,12 @@
        +-----------------------------------------------------------+ 
        | password      | Plain text user-password                  | 
        +-----------------------------------------------------------+ 
        | challenge     | Challenge and response                    | 
        +-----------------------------------------------------------+ 
    +   | kerberos5     | Defined by Kerberos version 5 protocol    |
    +   +-----------------------------------------------------------+ 
        | none          | No authentication                         | 
        +-----------------------------------------------------------+ 
         
        The following table details public key algorithms for authentication. 
         
    @@ -4032,10 +4159,11 @@
        For example, if ssh-dss is selected: 
         
           public_key:ssh-dss,p,q,g,y 
         
        Here the "p", "q", "g", and "y" parameters (encoded as numbers in 
    +! In hexidecimal?  In decimal?  In MIME?  In base 64+'A'?
        Unicode UTF8) form the signature key blob. 
         
        Signing and verifying using this key format are done according to the 
        Digital Signature Standard [FIPS-186] using the SHA-1 hash. A 
        description can also be found in [Schneier]. 
    @@ -4121,13 +4249,13 @@
           init_auth:password 
           I-> Text authenticate:alef,sesam 
        If the authentication is successful: 
           T->StartSecure:HERE 
           ... 
    -      T-> Login ôlogin acceptö 
    +      T-> Login "login accept" 
        If the authentication was not successful: 
    -      T-> Login ôlogin rejectö 
    +      T-> Login "login reject" 
            
         
        Note - the Text command including SecureStart:HERE and each PDU after 
        it will have the trailer consisting in a hmac-md5 digest for the 
        header and a crc32 for each 2k of data (or fraction thereof). 
    @@ -4157,12 +4285,12 @@
     
                                     iSCSI                  November, 2000 
      
      
              If the user was not confirmed, the target sends a login 
    -         response message with ôlogin rejectö to the initiator. Else, 
    -         it can send a login response with ôlogin acceptö and MAY 
    +         response message with "login reject" to the initiator. Else, 
    +         it can send a login response with "login accept" and MAY 
              attach a secret: 
               
           T->Text StartSecure:HERE secret: 
           I->Text ... parameters ...EndLogin:HERE 
           T->Login (accept) ... parameters ...   
    @@ -4184,11 +4312,11 @@
            
               
              Note: the last packet should have the appropriate trailers. 
               
        If the initiator was not confirmed, the target sends a login response 
    -   message with ôlogin rejectö to the initiator. Else, it can continue 
    +   message with "login reject" to the initiator. Else, it can continue 
        with the login process: 
               
           T-> Text authenticate:user,blob salt:532678925 
            
        In here, the target authenticates itself to the initiator. If the 
    @@ -4234,15 +4362,15 @@
           T-> Text challenge:question2 
           I-> Text authenticate:answer2 
            
        And at the end: 
            
    -      T-> Login ôlogin acceptö 
    +      T-> Login "login accept" 
            
        If the authentication was not successful: 
         
    -      T-> Login ôlogin rejectö 
    +      T-> Login "login reject" 
         
        Note - the Text command after authentication and each PDU thereafter 
        will have in the trailer an hmac-md5 digest for the header and a 
        crc32 for each 2k of data (or fraction of it). 
         
    @@ -4384,18 +4512,19 @@
        immediate data length requested, etc.. 
         
     08 MaxConnections 
         
        MaxConnections:<number-from-1-to-65442>   
    +! Okay... how was this number picked?
         
        Initiator and target negotiate the maximum number of connections 
        requested/acceptable. 
         
         
     09 Target 
         
    -   Target:<domainname>[/modifier] 
    +   Target:<domainname>[:<port>][/modifier] 
         
        Examples: 
         
           Target:disk-array.sj-bldg-h.cisco.com 
           Target:disk-array.sj-bldg-h.cisco.com/control7 
    @@ -4442,10 +4571,11 @@
        is required, unless both the initiator and the target send this key-
        pair attribute specifying UseR2T:no.  Once UseR2T has been set to 
        'no', it cannot be set back to 'yes'.  Note than only the first 
        outgoing data item (either immediate data or a separate PDU) can be 
        sent unsolicited by a R2T. 
    +! Could we use "1" and "0" here instead of "yes" and "no"?
         
     12 BidiUseR2T 
         
        BidiUseR2T:<yes|no>  
         
    @@ -4486,27 +4616,27 @@
     14 ImmediateDataLength 
         
        ImmediateDataLength:<number>  
         
        Initiator and target negotiate the maximum length supported for 
    -   immediate data. Default is 4GB. 
    +   immediate data. Default is 2**32-1 bytes. 
         
         
     15 ITagLength   
         
    -   ITagLength:<number-from8-to-32>  
    +   ITagLength:<number-from-8-to-32>  
         
        Initiator and target negotiate the significant length of the 
        initiator tag to be used. Default is 32. 
         
         
     16 PingMaxReplyLength 
         
        PingMaxReplyLength:<number>  
         
        Initiator and target negotiate the maximum length of data contained 
    -   in a ping reply. Default is 4096. 
    +   in a ping reply. Default is 4096 bytes. 
         
     17 StartSecure 
         
        StartSecure:HERE  
         
    
    --End--
    


Home

Last updated: Tue Sep 04 01:06:30 2001
6315 messages in chronological order