INTERNET-DRAFT                            P. Culley
draft-culley-mpa-issueresponses-00.txt      Hewlett-Packard Company


                                          Expires: March 2004


        Comment responses for Marker PDU Aligned Framing for TCP
                             Specification







































Culley                   Expires: March 2004                 [Page 1]


INTERNET-DRAFT           MPA Framing for TCP          23 January 2004



Status of this Memo

   This document is an Internet-Draft and is subject to all
   provisions of Section 10 of RFC2026.

   Internet-Drafts are working documents of the Internet Engineering
   Task Force (IETF), its areas, and its working groups.  Note that
   other groups may also distribute working documents as Internet-
   Drafts.

   Internet-Drafts are draft documents valid for a maximum of six
   months and may be updated, replaced, or obsoleted by other
   documents at any time.  It is inappropriate to use Internet-Drafts
   as reference material or to cite them other than as "work in
   progress."

   The list of current Internet-Drafts can be accessed at
   http://www.ietf.org/1id-abstracts.html. The list of Internet-Draft
   Shadow Directories can be accessed at
   http://www.ietf.org/shadow.html




























Culley                   Expires: March 2004                 [Page 2]


INTERNET-DRAFT           MPA Framing for TCP          23 January 2004



Abstract

   This draft is a response to comments about draft-ietf-rddp-mpa-00
   received on the RDDP reflector, the response is long enough to
   warrant a draft.  Comments on connection startup sequence,
   rejecting a connection, and allowing "Active/Active" connections.



   Table of Contents

Status of this Memo.................................................2
Abstract............................................................3
1       Introduction...............................................4
2       Issue on allowed startup sequence..........................5
2.1     Dual Stack Designs with the current draft..................6
2.2     Dual Stack with no FPDU sending restriction...............11
2.3     Why should we consider changing the draft?................14
3       Active/Active Connections.................................15
3.1     Why should we consider changing the draft?................17
4       Adding a "rejected connection" bit........................18
5       References................................................20
5.1     Normative References......................................20
5.2     Informative References....................................20
6       Author's Addresses........................................20


   Table of Figures

Figure 1 Typical MPA/TCP immediate startup..........................8
Figure 2 MPA/TCP immediate startup with Early FPDU sent by responder11
Figure 3 MPA/TCP immediate startup "Active/Active".................16
















Culley                   Expires: March 2004                 [Page 3]


INTERNET-DRAFT           MPA Framing for TCP          23 January 2004



1  Introduction

   The reader is presumed to be familiar with [MPA], [DDP], and may
   find it useful to have looked at the connection management
   sections of [verbs].  Some portions of the comments also imply
   knowledge of [RDMA].

   This draft is simply a discussion of the design choices that led
   to the current MPA draft and is intended to assist the workgroup
   in making informed decisions on the appropriate direction for
   future MPA drafts.

   It is unlikely that this draft will be updated.  Comments and
   suggested directions are welcome and should be directed to the
   RDDP mailing list (rddp@ietf.org).

































Culley                   Expires: March 2004                 [Page 4]


INTERNET-DRAFT           MPA Framing for TCP          23 January 2004



2  Issue on allowed startup sequence

   An issue was brought regarding a specific MUST in the MPA
   specification (included below):

        4.  MPA "Responder" mode implementations MUST receive and
        validate at least one FPDU before sending any FPDUs or
        markers.

        Note: this requirement is present to allow the Initiator time
        to get its receiver into full operation before an FPDU
        arrives, avoiding potentially difficult requirements on the
        receiver.

   Caitlin wrote:

   "As previously covered, I believe this rule is overly broad. The
   only requirement is that neither side send their MPA Start Frame
   before they are ready to process DDP Segments."

   Caitlin's requirement can be interpreted at least two ways,
   either:

   A) It is ok to send FPDUs as soon as the start frame is sent (but
   potentially before the incoming start frame is received), OR,

   B) It is ok to send as long as the start frame has been sent and
   received.

   Using the first interpretation, Caitlin's rule has the following
   problems:

   1)  The sender must know the receiver's correct marker/CRC
       settings before sending FPDU's or risk having the connection
       torn down.

       Caitlin also feels that this may be a reasonable response, she
       wrote:

        "If a mismatch in capabilities will result in terminating the
        connection, then there is nothing wrong with sending FPDUs
        before this is confirmed. If there is a mismatch, the FPDUs
        will be flushed anyway. Obviously traffic should not be
        placed on the network that has any substantial chance of
        being thrown away. But if the sender has reason to believe
        that it already knows its peers mode (perhaps based on


Culley                   Expires: March 2004                 [Page 5]


INTERNET-DRAFT           MPA Framing for TCP          23 January 2004



        directory information or prior connections) then it should
        not be required to stall waiting for dynamic confirmation."

   2)  The inclusion of the "private data" in the startup frame was
       based on the design requirement for the ULP to send and get a
       reply to some private data before binding the TCP/MPA
       connection to DDP (and choosing a PD).  The rule above allows
       binding to DDP and sending an FPDU before the reply arrives,
       also increasing the opportunity for incorrect ULP
       configuration.  As above, if the ULP already knows the peers
       configuration, then this may not be an issue (and the private
       data was not actually necessary for this ULP).

   3)  The rule requires that the receiver design be prepared to
       receive an FPDU BEFORE it has actually been bound to DDP.
       This can happen with out of order TCP segment arrival, or due
       to internal processing delay.  It is also possible that the
       start frame might even be in the same TCP segment.  This,
       while not any kind of violation of TCP, makes for much more
       Difficult "Dual Stack" implementations.  The effects on dual
       stacks and the transition between them will be discussed
       further below.

   Using the second interpretation of Caitlin's rule (it is ok to
   send FPDUs as long as start frame has been sent and received), the
   problem is only of implementation, again making a "Dual Stack"
   design more difficult.

   In order to evaluate this issue, we present a discussion of what
   we expect to be a common design implementation, a "dual stack".

2.1  Dual Stack Designs with the current draft

   Warning, the following is highly implementation specific, and as
   such must not be regarded as any kind of requirement on
   implementations.

   MPA/DDP implementations are commonly expected to be implemented as
   part of a "Dual stack" architecture.  One "stack" is the
   traditional TCP stack, usually with a sockets interface API and
   the various OS dependent layers and a "standard" NIC.  The second
   stack is the MPA/DDP "stack" with its own API, and potentially
   separate code or hardware to deal with the MPA/DDP data.  Of
   course, implementations may vary, so the following comments are of
   an advisory nature only.



Culley                   Expires: March 2004                 [Page 6]


INTERNET-DRAFT           MPA Framing for TCP          23 January 2004



   The use of the two "stacks" offers advantages:

        TCP connection setup is usually done with the TCP stack. This
        allows use of the usual naming and addressing mechanisms.  It
        also means that any mechanisms used to "harden" the
        connection setup against security threats are also used when
        starting MPA/DDP.

        Some applications may have been originally designed for TCP,
        but are "enhanced" to utilize MPA/DDP after a negotiation
        reveals the capability to do so.  The negotiation process
        takes place in TCP's streaming mode, using the usual TCP
        APIs.

        Even new applications, designed for RDMA or DDP, still need
        to exchange some private data (and the start frames) prior to
        binding DDP. Using the traditional TCP streaming mode for
        this exchange allows this to be done using well understood
        methods and simplifies the full MPA/DDP stack (since full
        streaming mode operations and API's need not also be
        supported by that stack).

   The main disadvantage of using two stacks is the conversion of an
   active TCP connection between them.  This process must be done
   with care to prevent loss of data.

   Following is the proposed connection setup showing interactions at
   each level of the stack.  Note that, while the example shows an
   MPA startup just after the TCP connects, it is also expected that
   some applications will pass some amount of streaming data before
   performing the MPA startup.

















Culley                   Expires: March 2004                 [Page 7]


INTERNET-DRAFT           MPA Framing for TCP          23 January 2004



+----------------+       +----------------+
| MPA INITIATOR  |       | MPA RESPONDER  |
+----------------+       +----------------+
ULP  DDP  MPA  TCP       TCP  MPA  DDP  ULP
 |    |    |    |         |    |    |    |
 |    |    |    |         |<-------------|A
A|------------->|   SYN   |    |    |    |
 |    |    |    |-------->|    |    |    |
 |    |    |    | SYN+ACK |    |    |    |
 |    |    |    |<--------|    |    |    |
 |    |    |    |   ACK   |    |    |    |
 |    |    |    |-------->|    |    |    |
B|<-------------|         |------------->|B
 |    |    |    |         |    |    |    |
 |    |    |    |         |    |    |    |
 |    |    |    |         |    |<--------|C
C|-------->|--->| MPA REQ |    |1   |    |
 |    |   1|2   |-------->|    |    |    |
 |    |    |    |         |--->|-------->|D
 |    |    |    |         |   2|3   |    |
 |    |    |    |         |    |    |    |
 |    |    |    | MPA REP |<---|<---|<---|E
 |    |    |    |<--------|   5|4   |    |
D|<--------|<---|         |    |    |    |
 |    |   4|3   |         |    |    |    |
 |    |    |    |         |    |    |    |
E|--->|    |    |         |    |    |    |
 |    |    |    |         |    |    |    |
F|--->|--->|===>|         |    |    |    |
 |    |   5|6   |========>|    |    |    |
 |    |    |    |         |===>|--->|--->|G
 |    |    |    |         |   6|    |    |
 |    |    |    |         |    |    |    |
 |    |    |    |         |<===|<---|<---|H
 |    |    |    |<========|   8|7   |    |
G|<---|<---|<===|         |    |    |    |
 |    |    |7   |         |    |    |    |
 |    |    |    |         |    |    |    |

               Figure 1 Typical MPA/TCP immediate startup








Culley                   Expires: March 2004                 [Page 8]


INTERNET-DRAFT           MPA Framing for TCP          23 January 2004




Initiator
     ULP A     connect
     ULP B     TCP connection established
     ULP C     MPA initiate negotiation, send Request frame
     ULP D     receive MPA Reply + private data
     ULP E     connect DDP (post untagged buffers)
     ULP F     send DDP message
     ULP G     receive DDP message

Responder
     ULP A     listen
     ULP B     accept (connection established)
     ULP C     MPA listen
     ULP D     receive MPA Request Frame + private data
     ULP E     Accept: Send Response frame + private data,
               connect DDP (post untagged buffers)
     ULP G     receive DDP message
     ULP H     send DDP message

Initiator Using the Legacy stacks
     MPA 1   ULP requests MPA to 'initiate' mode frame exchange
     MPA 2   MPA sends "MPA Request Frame" + private data
     MPA 3   MPA received "MPA Reply Frame" from responder
     MPA 4   MPA sends private data to ULP
          Using the DDP/MPA stack
     MPA 5   ULP/DDP requests MPA to send DDP message
     MPA 6   MPA sends FPDU to responder
     MPA 7   MAP receives FPDU from responder

Responder Using the Legacy stacks
     MPA 1   ULP requests MPA to 'respond' to mode frame exchange
     MPA 2   MPA receives "MPA Request Frame" from initiator
     MPA 3   MPA sends private data to ULP
     MPA 4   MPA receives private data from ULP
          Using the DDP/MPA stack
     MPA 5   MPA sends "MPA Reply Frame" to initiator
     MPA 6   MPA receives FPDU from initiator
     MPA 7   ULP/DDP requests MPA to send DDP message
     MPA 8   MPA sends FPDU to initiator

   The switching between the legacy stack, and the TCP/MPA/DDP stack
   occurs at point (ULP E) for both the initiator and responder.  For
   the initiator, no additional incoming streaming data is expected
   or buffered, so that no buffers need be passed between stacks.  If
   any data did appear, it would be a protocol violation and could be
   dropped.

Culley                   Expires: March 2004                 [Page 9]


INTERNET-DRAFT           MPA Framing for TCP          23 January 2004



   Note that if the last Ack was not sent at the time of the
   transition, or if packet loss occurs, the initiator's RDDP stack
   is responsible for sending or resending that Ack.  Any repeated
   incoming data can be dropped.

   For the Responder, the transition point occurs at the time the
   last streaming mode message (Start frame) is sent.  To allow an
   implementation to avoid a potential race between getting into FPDU
   mode and the arrival of the first FPDU, the transition (as
   described in [verbs]) suggests that the last streaming mode
   message be sent by the RDDP stack.  This allows the stack to do
   any of several strategies to avoid the race.  At the time of the
   transition, again no data is expected inbound or buffered, so that
   no buffers need be passed between stacks.

   As with the initiator, the responder may have to (re)acknowledge
   prior data.  It may also have to retransmit it's last streaming
   message while being prepared to receive an FPDU.

   As can be seen, one advantage of implementing this way is that
   there is no need to pass "undelivered" data between the stacks.



























Culley                   Expires: March 2004                [Page 10]


INTERNET-DRAFT           MPA Framing for TCP          23 January 2004



2.2  Dual Stack with no FPDU sending restriction

   Let us look at using a dual stack design, but allowing FPDUs to be
   sent any time after sending and receiving the start frames (the
   second interpretation of Caitlin's proposed rule).

+----------------+       +----------------+
| MPA INITIATOR  |       | MPA RESPONDER  |
+----------------+       +----------------+
ULP  DDP  MPA  TCP       TCP  MPA  DDP  ULP
 |    |    |    |         |    |    |    |
 |    |    |    |         |<-------------|A
A|------------->|   SYN   |    |    |    |
 |    |    |    |-------->|    |    |    |
 |    |    |    | SYN+ACK |    |    |    |
 |    |    |    |<--------|    |    |    |
 |    |    |    |   ACK   |    |    |    |
 |    |    |    |-------->|    |    |    |
B|<-------------|         |------------->|B
 |    |    |    |         |    |    |    |
 |    |    |    |         |    |    |    |
 |    |    |    |         |    |<--------|C
C|-------->|--->| MPA REQ |    |1   |    |
 |    |   1|2   |-------->|    |    |    |
 |    |    |    |         |--->|-------->|D
 |    |    |    |         |   2|3   |    |
 |    |    |    |         |    |    |    |
 |    |    |    | MPA REP |<---|<---|<---|E
 |    |    |    |<--------|   5|4   |    |
D|<--------|<---|         |    |    |    |
 |    |   4|3   |         |    |    |    |
 |    |    |    |         |<===|<---|<---|H
 |    |    |    |<========|   6|5   |    |
 |    |    |   5|         |    |    |    |
E|--->|    |    |         |    |    |    |
 |    |    |    |         |    |    |    |
F|<---|<---|<===|         |    |    |    |
 |    |    |6   |         |    |    |    |
 |    |    |    |         |    |    |    |
G|--->|--->|===>|         |    |    |    |
 |    |   7|8   |========>|    |    |    |
 |    |    |    |         |===>|--->|--->|G
 |    |    |    |         |   6|    |    |

       Figure 2 MPA/TCP immediate startup with Early FPDU sent by
                               responder


Culley                   Expires: March 2004                [Page 11]


INTERNET-DRAFT           MPA Framing for TCP          23 January 2004




Initiator
     ULP A     connect
     ULP B     TCP connection established
     ULP C     MPA initiate negotiation, send Request frame
     ULP D     receive MPA Reply + private data
     ULP E     connect DDP (post untagged buffers)
     ULP F     receive DDP message
     ULP G     send DDP message

Responder
     ULP A     listen
     ULP B     accept (connection established)
     ULP C     MPA listen
     ULP D     receive MPA Request Frame + private data
     ULP E     Accept: Send Response frame + private data,
               connect DDP (post untagged buffers)
     ULP H     send DDP message
     ULP G     receive DDP message


Initiator Using the Legacy stacks
     MPA 1   ULP requests MPA to 'initiate' mode frame exchange
     MPA 2   MPA sends "MPA Request Frame" + private data
     MPA 3   MPA received "MPA Reply Frame" from responder
     MPA 4   MPA sends private data to ULP
     TCP 5   TCP receives the FPDU but has nowhere to deliver it
          Using the DDP/MPA stack
     MPA 6   MPA receives DDP message from TCP as DDP is bound
             and passes it up to DDP (and ultimately the app)
     MPA 7   ULP/DDP requests MPA to send DDP message
     MPA 8   MPA sends FPDU to responder

Responder Using the Legacy stacks
     MPA 1   ULP enables MPA to Listen for MPA Request Frame
     MPA 2   MPA receives "MPA Request Frame" from initiator
     MPA 3   MPA sends private data to ULP
     MPA 4   MPA receives private data from ULP
          Using the DDP/MPA stack
     MPA 5   MPA sends "MPA Reply Frame" to initiator
     MPA 6   ULP/DDP requests MPA to send DDP message
     MPA 7   MPA sends FPDU to initiator
     MPA 8   MPA receives FPDU from initiator





Culley                   Expires: March 2004                [Page 12]


INTERNET-DRAFT           MPA Framing for TCP          23 January 2004



   Note that between the initiator ULP 'D' and 'E', the incoming
   messages can arrive from TCP in lots of ways.  The example shows
   them arriving separately with no DDP buffer present to place the
   FPDU, because DDP is not yet enabled.  However, several other
   situations could occur, such as;

   *  The two messages can arrive in the same TCP segment.

   *  The two messages can arrive out of order.

   *  The second message could be incomplete.

   *  A message or message fragment can arrive during the stack
      conversion.

   All of these situations require additional design care in dealing
   with the conversion between stacks.

   None of these situations are present if the rules in the current
   draft are adopted.

        Note: It is still possible for an attacker or improperly
        implemented sender to violate the draft rules and send data
        when it is not expected (during the stack conversion).  In
        this case, a receiver implementation SHOULD ignore any
        unexpected data and terminate the connection.  If any such
        data arrives such that it is lost but not easily detected the
        receiver MAY continue to maintain the connection.  This could
        happen if the data arrived in the legacy stack, but was not
        transferred to the MPA/DDP stack at binding time, and normal
        FPDUs or no data at all arrived for the MPA/DDP stack.

        The above note will be added to the Security section of MPA
        if the original draft mechanisms are adopted.



   If we were to further consider using the first interpretation of
   Caitlin's rule (can send FPDUs as soon as we send a start frame)
   we end up with the problems identified at the beginning of the
   draft, as well as the dual stack transition problems just
   described.






Culley                   Expires: March 2004                [Page 13]


INTERNET-DRAFT           MPA Framing for TCP          23 January 2004



2.3  Why should we consider changing the draft?

   Caitlin's suggestions seem to make some sense at first glance, in
   that they can potentially reduce the time for a DDP/MPA connection
   to get into operation.

   Let's look at what kind of applications can actually take
   advantage of the reduced setup time.

   We believe that most ULPs that connect DDP immediately after TCP
   will be using a client/server design.  In this design, the Request
   Frame would start from the client and would carry things like the
   client credentials, Send and RDMA Read Buffer credits and other
   ULP required data as the "private data".  The server would respond
   with its own credits and authorization or denial (and closing of
   the connection) in the Private Data of the Response Frame.  The
   next transaction would be the client beginning the real working
   request in DDP mode.  This fits well with the current draft
   proposal.

   ULPs that might not be as good a fit would be those that wanted
   the server to transmit first after the client started the MPA
   connection; perhaps the initial client request was included in the
   Private Data of the Request Frame.  A ULP that might have been
   designed this way will have to insert another message on the wire
   incurring another round trip of delay before getting the first
   response.  Of course this means that the encoding of the first
   request is different than other requests as it is sent in the
   private data, instead of a DDP message, potentially leading to
   greater ULP protocol complexity.

   Another ULP that would not fit as well would be where the server
   started the MPA connection first; in this case the client might
   want to get to work as soon as it had sent the Response Frame.  We
   don't think this will be common since the server would not have an
   opportunity to authorize the client until after it had committed
   more significant server side resources to the session (goes
   against current DOS avoidance practice).

   The ability to reduce the startup time in the latter two cases
   does require dual stack designs to have the ability to pass
   undelivered data between stacks, some of which is potentially out
   of order or incomplete.  The Stack switch would also have to
   handle potential asynchronous IP packet or TCP segment arrival.
   Since this adds considerable complexity and provides opportunity
   for errors in implementations, the author group felt that the
   gains were not worth the costs.

Culley                   Expires: March 2004                [Page 14]


INTERNET-DRAFT           MPA Framing for TCP          23 January 2004



3  Active/Active Connections

   A second issue brought up for discussion was the possibility for a
   so called "Active-Active" MPA connection startup.

        "All that is required is to define a third value for "instant
        start", which each side sends *and* expects to receive."

   This suggestion has some of the same problems as the prior issue
   and also has the problem that the startup frames and "private
   data" is no longer a request/response type format, but is instead
   blindly sent by both sides prior to the MPA/DDP binding.  Without
   more protocol work to deal with potential rejected configurations,
   there is no way to respond to a bad connection configuration
   except to tear it down.

   An attempt to add "rejected only" responses would complicate the
   protocol and the MPA/DDP engine design, in that a receiver would
   not be sure if the next data was an FPDU or a response frame.

   For the following example, the TCP session is already connected,
   and the MPA connection type is Caitlin's proposed "Active/Active".
   Notice that there is no opportunity for a "private data" response.
   Again we are assuming the second interpretation of Caitlin's
   startup sequence rule (It is ok to send as long as the start frame
   has been sent and received).






















Culley                   Expires: March 2004                [Page 15]


INTERNET-DRAFT           MPA Framing for TCP          23 January 2004



+----------------+                 +----------------+
| MPA INITIATOR  |                 | MPA RESPONDER  |
+----------------+                 +----------------+
ULP  DDP  MPA  TCP                 TCP  MPA  DDP  ULP
 |    |    |    |                   |    |    |    |
C|-------->|--->| MPA REQ   MPA REQ |<---|<--------|C
 |    |   1|2   |-----   -----------|   2|1   |    |
 |    |    |    |     \ /           |    |    |    |
 |    |    |    |      X            |    |    |    |
 |    |    |    |     / \           |    |    |    |
 |    |    |    |<----   \          |    |    |    |
D|<--------|<---|         \         |    |    |    |
 |    |   4|3   |         |         |    |    |    |
 |    |    |    |         |         |    |    |    |
E|--->|    |    |         |         |    |    |    |
 |    |    |    |         |         |    |    |    |
F|--->|--->|===>|          \        |    |    |    |
 |    |   5|6   |===========+======>|(Z) |    |    |
 |    |    |    |            \
 |    |    |    |             ----->|    |    |    |
 |    |    |    |                   |--->|-------->|D
 |    |    |    |                   |   3|4   |    |
 |    |    |    |                   |    |    |    |
 |    |    |    |                   |    |    |<---|E
 |    |    |    |                   |(*) |    |    |
 |    |    |    |                   |===>|--->|--->|F
 |    |    |    |                   |   5|    |    |
 |    |    |    |                   |    |    |    |
 |    |    |    |                   |<===|<---|<---|G
 |    |    |    |<==================|   7|6   |    |
G|<---|<---|<===|                   |    |    |    |
 |    |    |7   |                   |    |    |    |
 |    |    |    |                   |    |    |    |
Note *: The TCP stack must hold the received out of order FPDU and
transfer it to the DDP stack only after the DDP stack is enabled at
point (E) on the responder.

           Figure 3 MPA/TCP immediate startup "Active/Active"

Initiator
     ULP C     MPA initiate negotiation, send Request frame
     ULP D     receive MPA Request + private data
     ULP E     connect DDP (post untagged buffers)
     ULP F     send DDP message
     ULP G     receive DDP message



Culley                   Expires: March 2004                [Page 16]


INTERNET-DRAFT           MPA Framing for TCP          23 January 2004



Responder
     ULP C     MPA initiate negotiation, send Request frame
     ULP D     receive MPA Request Frame + private data
     ULP E     connect DDP (post untagged buffers)
     ULP F     receive DDP message
     ULP G     send DDP message


Initiator Using the Legacy stacks
     MPA 1   ULP requests MPA to 'initiate' mode frame exchange
     MPA 2   MPA sends "MPA Request Frame" + private data
     MPA 3   MPA received "MPA Request Frame" from responder
     MPA 4   MPA sends private data to ULP
          Using the DDP/MPA stack
     MPA 5   ULP/DDP requests MPA to send DDP message
     MPA 6   MPA sends FPDU to responder
     MPA 7   MAP receives FPDU from responder, sends to DDP

Responder Using the Legacy stacks
     MPA 1   ULP requests MPA to 'initiate' mode frame exchange
     MPA 2   MPA sends "MPA Request Frame" + private data
     MPA 3   MPA received "MPA Request Frame" from initiator
     MPA 4   MPA sends private data to ULP
          Using the DDP/MPA stack
     MPA 5   MPA receives FPDU from initiator, sends to DDP
     MPA 6   ULP/DDP requests MPA to send DDP message
     MPA 7   MPA sends FPDU to initiator


   At the stack transition (point E at the responder), the
   responder's TCP stack is holding FPDU data (in this example). So
   it is necessary to pass that data (in whatever fragmented
   condition) to the DDP/MPA stack during the transition.

3.1  Why should we consider changing the draft?

   Even for TCP, active/active startup is seldom used by ULPs.  While
   it is always possible to imagine an application that can use this
   type of startup, it is also usually possible to design around that
   need.

   The author's believe that adding the protocol and implementation
   support for "active/active" startup, while intellectually
   stimulating, is not worth the time, cost, and effort for the
   potential payback.



Culley                   Expires: March 2004                [Page 17]


INTERNET-DRAFT           MPA Framing for TCP          23 January 2004



4  Adding a "rejected connection" bit

   Arkady Kanevsky submitted a comment to the reflector, quoted
   below:

        The MPA draft now defines very nicely an Initiator/Responder
        sequence. But it looks deficient for a broad set of ULPs.
        Most of the client-server ULP uses two type of Responses:
        "accept" and "reject". The MPA draft does not provide a way
        to differentiate between these 2 responses.

        Here is one example of an application use. One of the common
        way the private data is used is to negotiate RDMA Read
        credits for a connection to be used by RDDP. An Initiator
        passes in private data a requested RDMA credits. Responder
        either accepts a connection or rejects a request specifying
        how many RDMA Read credits it can support.

        Currently the Responder has 2 legal choices.
        One it can terminate a connection.
        This does not convey any information to the Initiator.

        The second choice is to generate Responder Frame even though
        RDMA Read credits requested can not be satisfied.
        This will establish connection but it can not be used as
        intended by the Initiator. Initiator can either tear down the
        established stream mode connection or use connection with
        Responder RDMA credits supported.

        This is de-facto ULP protocol since Responder Frame will
        include the RDMA Read credits it can support. On top of that
        both sides have to agree on the action they will take.

        While ULP can use a protocol over private data to
        differentiate between accept and reject, given a commonality
        of this semantic for ULPs we can use one bit from the
        Reserved area of MPA frame for the Responder frame to
        differentiate between accept and reject responses.

        Proposal:

        for Responder MPA frame the 1st Reserved bit to be used as
        accept/reject bit. 0 for accept, 1 for reject.

        The bit will be called Type (T) in figure 7 {of the MPA
        draft}.


Culley                   Expires: March 2004                [Page 18]


INTERNET-DRAFT           MPA Framing for TCP          23 January 2004



   Arkady is mostly correct in his analysis, but he may have missed
   one point; that is that the initiator has the opportunity and
   right to examine the private data in the MPA Response Frame before
   binding DDP to MPA.  It may either complete the connection setup
   by binding DDP (for an "accepted" connection), or tear the
   connection down (for a "rejected" connection).  It is also legal
   for the responder to tear the connection down immediately after
   sending a "rejected" MPA Response Frame.  In either case, no DDP
   connection is actually established until both sides have seen the
   private data in the MPA Response Frame.  In both cases the
   initiator can get a "reason" for a rejected connection.  The
   choice is up to the ULP and can be encoded into the response
   private data just as easily as in a specific bit.

        Note: it is also legal for the responder to tear down the TCP
        connection before sending a response frame, although this
        offers no opportunity to send a "rejected reason".  Again the
        choice is up to the ULP.

   Putting the accept/reject bit in a standard place would be useful
   if MPA or another standard layer needed to examine that bit for
   its own uses.  As currently defined, however, MPA must send
   private data to the ULP for examination, and depends on the ULP
   for the next step (continue or teardown).  So MPA could not do
   anything with that bit other than pass it on to the ULP.

   The author believes that defining an "accept/reject" bit is not
   necessary, that the response private data allows all the room for
   such information necessary (including more detailed reasons if the
   ULP needs them).  Adding such a bit would also require adding
   another input and output command parameter to the MPA ULP
   interface which may be insufficient for many applications anyway.
















Culley                   Expires: March 2004                [Page 19]


INTERNET-DRAFT           MPA Framing for TCP          23 January 2004



5  References

5.1  Normative References

   [RFC2026] Bradner, S., "The Internet Standards Process -- Revision
       3", BCP 9, RFC 2026, October 1996.

   [RFC793] Postel, J., "Transmission Control Protocol - DARPA
       Internet Program Protocol Specification", RFC 793, September
       1981.

5.2  Informative References

   [DDP] H. Shah et al., "Direct Data Placement over Reliable
       Transports", draft-ietf-rddp-ddp-01.txt (Work in progress),
       November 2003

   [RDMA] R. Recio et al., "RDMA Protocol Specification",
       draft-ietf-rddp-rdmap-01.txt, (Work in progress), November
       2003

   [MPA] Culley, P., "Marker PDU Aligned Framing for TCP
       Specification" draft-ietf-rddp-mpa-00.txt, October 2003.

   [Verbs] J. Hilland et al., "RDMA Protocol Verbs Specification"
       draft-hilland-rddp-verbs-v1.0.pdf, April 2003. (see
       http://www.rdmaconsortium.org/)

6  Author's Addresses

   Paul R. Culley
       Hewlett-Packard Company
       20555 SH 249
       Houston, Tx. USA 77070-2698
       Phone:  281-514-5543
       Email:  paul.culley@hp.com












Culley                   Expires: March 2004                [Page 20]


INTERNET-DRAFT           MPA Framing for TCP          23 January 2004



7  Full Copyright Statement


Copyright (C) The Internet Society (2000).  All Rights Reserved.

This document and translations of it may be copied and furnished to
others, and derivative works that comment on or otherwise explain it
or assist in its implementation may be prepared, copied, published
and distributed, in whole or in part, without restriction of any
kind, provided that the above copyright notice and this paragraph
are included on all such copies and derivative works.  However,
this document itself may not be modified in any way, such as by
removing the copyright notice or references to the Internet Society
or other Internet organizations, except as needed for the purpose
of developing Internet standards in which case the procedures
for copyrights defined in the Internet Standards process must be
followed, or as required to translate it into languages other than
English.

The limited permissions granted above are perpetual and will not be
revoked by the Internet Society or its successors or assigns.

This document and the information contained herein is provided on an
"AS IS" basis and THE INTERNET SOCIETY AND THE INTERNET ENGINEERING
TASK FORCE DISCLAIMS ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING
BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF THE INFORMATION
HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED WARRANTIES OF
MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.




















Culley                   Expires: March 2004                [Page 21]