Internet DRAFT - draft-culley-mpa-issueresponses
draft-culley-mpa-issueresponses
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]