<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE rfc [
  <!ENTITY nbsp    "&#160;">
  <!ENTITY zwsp   "&#8203;">
  <!ENTITY nbhy   "&#8209;">
  <!ENTITY wj     "&#8288;">
]>
<?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>
<!-- generated by https://github.com/cabo/kramdown-rfc2629 version 1.5.16 -->
<?rfc toc="yes"?>
<?rfc sortrefs="yes"?>
<?rfc symrefs="yes"?>
<?rfc docmapping="yes"?>
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-ietf-nfsv4-nfs-ulb-v2-06" category="std" obsoletes="" updates="" submissionType="IETF" xml:lang="en" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.11.1 -->
  <front>
    <title abbrev="NFS on RPC-Over-RDMA V2">Network File System (NFS) Upper-Layer Binding To RPC-Over-RDMA Version 2</title>
    <seriesInfo name="Internet-Draft" value="draft-ietf-nfsv4-nfs-ulb-v2-06"/>
    <author initials="C." surname="Lever" fullname="Charles Lever">
      <organization abbrev="Oracle">Oracle Corporation</organization>
      <address>
        <postal>
          <country>United States of America</country>
        </postal>
        <email>chuck.lever@oracle.com</email>
      </address>
    </author>
    <date year="2021" month="November" day="16"/>
    <area>Transport</area>
    <workgroup>Network File System Version 4</workgroup>
    <abstract>
      <t>This document specifies Upper-Layer Bindings of Network File System
(NFS) protocol versions to RPC-over-RDMA version 2.</t>
    </abstract>
    <note>
      <name>Note</name>
      <t>Discussion of this draft takes place on the <eref target="nfsv4@ietf.org">NFSv4 working group mailing
list</eref>, archived at
<eref target="https://mailarchive.ietf.org/arch/browse/nfsv4/"/>.
Working Group information is available at
<eref target="https://datatracker.ietf.org/wg/nfsv4/about/"/>.</t>
      <t>Submit suggestions and changes as pull requests at
<eref target="https://github.com/chucklever/i-d-nfs-ulb-v2"/>.
Instructions are on that page.</t>
    </note>
  </front>
  <middle>
    <section anchor="introduction" numbered="true" toc="default">
      <name>Introduction</name>
      <t>The RPC-over-RDMA version 2 transport can employ direct data
placement to convey data payloads associated with RPC transactions,
as described in <xref target="I-D.ietf-nfsv4-rpcrdma-version-two" format="default"/>.
As mandated by that document, RPC client and server implementations
using RPC-over-RDMA version 2 <bcp14>MUST</bcp14> agree in advance which
XDR data items and RPC procedures are eligible for direct data
placement (DDP).</t>
      <t>An Upper-Layer Binding specifies this agreement for one or more
versions of one RPC program. Other operational details, such as RPC
binding assignments, pairing Write chunks with result data items, and
reply size estimation, are also specified by such a Binding.</t>
      <t>This document contains material required of Upper-Layer Bindings, as
specified in Appendix A of <xref target="I-D.ietf-nfsv4-rpcrdma-version-two" format="default"/>, for
the following NFS protocol versions:</t>
      <ul spacing="normal">
        <li>NFS version 2 <xref target="RFC1094" format="default"/></li>
        <li>NFS version 3 <xref target="RFC1813" format="default"/></li>
        <li>NFS version 4.0 <xref target="RFC7530" format="default"/></li>
        <li>NFS version 4.1 <xref target="RFC8881" format="default"/></li>
        <li>NFS version 4.2 <xref target="RFC7862" format="default"/></li>
      </ul>
      <t>The current document also provides Upper-Layer Bindings for auxiliary
protocols used with NFS versions 2 and 3 (see <xref target="auxproto" format="default"/>).</t>
      <t>This document assumes the reader is already familiar with concepts
and terminology defined throughout
<xref target="I-D.ietf-nfsv4-rpcrdma-version-two" format="default"/> and the documents it references.</t>
    </section>
    <section anchor="requirements-language" numbered="true" toc="default">
      <name>Requirements Language</name>
      <t>The key words "<bcp14>MUST</bcp14>", "<bcp14>MUST NOT</bcp14>", "<bcp14>REQUIRED</bcp14>", "<bcp14>SHALL</bcp14>", "<bcp14>SHALL
NOT</bcp14>", "<bcp14>SHOULD</bcp14>", "<bcp14>SHOULD NOT</bcp14>", "<bcp14>RECOMMENDED</bcp14>", "<bcp14>NOT RECOMMENDED</bcp14>",
"<bcp14>MAY</bcp14>", and "<bcp14>OPTIONAL</bcp14>" in this document are to be interpreted as
described in BCP 14 <xref target="RFC2119" format="default"/> <xref target="RFC8174" format="default"/> when, and only when, they
appear in all capitals, as shown here.</t>
    </section>
    <section anchor="upper-layer-binding-for-nfs-versions-2-and-3" numbered="true" toc="default">
      <name>Upper-Layer Binding for NFS Versions 2 and 3</name>
      <t>The Upper-Layer Binding specification in this section applies to NFS
version 2 <xref target="RFC1094" format="default"/> and NFS version 3 <xref target="RFC1813" format="default"/>. For brevity, in
this document, a "Legacy NFS client" refers to an NFS client using
version 2 or version 3 of the NFS RPC program (100003) to communicate
with an NFS server. Likewise, a "Legacy NFS server" is an NFS server
communicating with clients using NFS version 2 or NFS version 3.</t>
      <t>The following XDR data items in NFS versions 2 and 3 are DDP-
eligible:</t>
      <ul spacing="normal">
        <li>The opaque file data argument in the NFS WRITE procedure</li>
        <li>The pathname argument in the NFS SYMLINK procedure</li>
        <li>The opaque file data result in the NFS READ procedure</li>
        <li>The pathname result in the NFS READLINK procedure</li>
      </ul>
      <t>All other argument or result data items in NFS versions 2 and 3 are
not DDP-eligible.</t>
      <t>Regardless of whether an NFS operation is considered non-idempotent,
a transport error might not indicate whether the server has processed
the arguments of the RPC Call or whether the server has accessed or
modified client memory associated with that RPC.</t>
      <section anchor="reply-size-estimation" numbered="true" toc="default">
        <name>Reply Size Estimation</name>
        <t>During the construction of each RPC Call message, a Requester is
responsible for allocating appropriate RDMA resources to receive
the corresponding Reply message. These resources must be capable of
holding the entire Reply. Therefore the Requester needs to estimate
the maximum possible size of the expected Reply message.</t>
        <ul spacing="normal">
          <li>Often, the expected Reply can fit in a limited number of RDMA
Send messages. The Requester need not provision any RDMA
resources for the Reply, relying instead on message continuation
to handle the entire Reply message.</li>
          <li>In cases where the Upper Layer Binding permits direct data
placement of the results (DDP), a Requester can provision
Write chunks to receive those results. The Requester <bcp14>MUST</bcp14> reliably
estimate the maximum size of each result receive via a Write chunk.</li>
          <li>A Requester that expects a large Reply message can provision
a Reply chunk. The Requester <bcp14>MUST</bcp14> reliably estimate the maximum
size of the payload received via the Reply chunk.</li>
          <li>If RDMA resources are not available to send a Reply, a Responder
falls back to message continuation.</li>
        </ul>
        <t>A correctly implemented Legacy NFS client thus avoids
retransmission of non-idempotent NFS requests due to improperly
estimated Reply resources.</t>
      </section>
      <section anchor="rpc-binding-considerations" numbered="true" toc="default">
        <name>RPC Binding Considerations</name>
        <t>Legacy NFS servers typically listen for clients on UDP and TCP
port 2049. Additionally, they register these ports with a local
portmapper service <xref target="RFC1833" format="default"/>.</t>
        <t>A Legacy NFS server supporting RPC-over-RDMA version 2 and
registering itself with the RPC portmapper <bcp14>MAY</bcp14> choose an arbitrary port
or <bcp14>MAY</bcp14> use the alternative well-known port number for its RPC-over-RDMA
service (see <xref target="iana-cons" format="default"/>).
The chosen port <bcp14>MAY</bcp14> be registered with the RPC portmapper
using the netids assigned in
<xref section="12" sectionFormat="of" target="I-D.ietf-nfsv4-rpcrdma-version-two" format="default"/>.</t>
      </section>
      <section anchor="transport-considerations" numbered="true" toc="default">
        <name>Transport Considerations</name>
        <section anchor="keep-alive" numbered="true" toc="default">
          <name>Keep-Alive</name>
          <t>Legacy NFS client implementations can rely on connection keep-alive
to detect when a Legacy NFS server has become unresponsive.
When an NFS server is no longer responsive, client-side keep-alive
terminates the connection, triggering reconnection and retransmission
of outstanding RPC transactions.</t>
          <t>Some RDMA transports (such as the Reliable Connected QP type on
InfiniBand) have no keep-alive mechanism. Without a disconnect or
new RPC traffic, such connections can remain alive long after an NFS
server has become unresponsive or unreachable. Once an NFS client
has consumed all available RPC-over-RDMA version 2 credits on that
transport connection, it awaits a reply indefinitely before sending
another RPC request.</t>
          <t>Legacy NFS clients <bcp14>SHOULD</bcp14> reserve one RPC-over-RDMA version 2 credit
to use for periodic server or connection health assessment. Either
peer can use this credit to drive an RPC request on an otherwise idle
connection, triggering either an affirmative server response or a
connection termination.</t>
        </section>
        <section anchor="replay-detection" numbered="true" toc="default">
          <name>Replay Detection</name>
          <t>Like NFSv4.0, Legacy NFS servers typically employ request replay
detection to reduce the risk of data and file namespace corruption
that could result when an NFS client retransmits a non-idempotent
NFS request.  A Legacy NFS server can send a cached response
when a replay is detected, rather than executing the request again.
Replay detection is not perfect, but it is usually adequate.</t>
          <t>For Legacy NFS servers, replay detection commonly utilizes heuristic
indicators such as the IP address of the NFS client, the source port
of the connection, the transaction ID of the request, and the
contents of the request's RPC and upper-layer protocol headers.
A Legacy NFS client is careful to re-use the same source port
when reconnecting so that Legacy NFS servers can better detect
RPC retransmission.</t>
          <t>However, a Legacy NFS client operating over an RDMA transport has no
control over connection source ports. It is almost certain that an
RPC request retransmitted on a new connection can never be detected
as a replay if the receiving Legacy NFS server includes the connection
source port in its replay detection heuristics.</t>
          <t>Therefore a Legacy NFS server using an RDMA transport should never
use a connection's source port as part of its NFS
request replay detection mechanism.</t>
        </section>
      </section>
    </section>
    <section anchor="auxproto" numbered="true" toc="default">
      <name>Upper-Layer Bindings for NFS Version 2 and 3 Auxiliary Protocols</name>
      <t>Storage administrators typically deploy NFS versions 2 and 3 with
several other protocols, sometimes called the "NFS auxiliary
protocols." These are distinct RPC programs that define procedures
not part of the NFS RPC program (100003). The Upper-Layer
Bindings in this section apply to:</t>
      <ul spacing="normal">
        <li>Versions 2 and 3 of the MOUNT RPC program (100005) <xref target="RFC1813" format="default"/></li>
        <li>Versions 1, 3, and 4 of the NLM RPC program (100021) <xref target="RFC1813" format="default"/></li>
        <li>Version 1 of the NSM RPC program (100024), described in Chapter 11
of <xref target="XNFS" format="default"/></li>
        <li>Versions 2 and 3 of the NFSACL RPC program (100227). The NFSACL
program does not have a public definition. This document treats
the NFSACL program as a de facto standard, as there are several
interoperating implementations.</li>
      </ul>
      <section anchor="mount-nlm-and-nsm-protocols" numbered="true" toc="default">
        <name>MOUNT, NLM, and NSM Protocols</name>
        <t>Historically, NFS/RDMA implementations have conveyed the
MOUNT, NLM, and NSM protocols via TCP. A Legacy NFS server
implementation <bcp14>MUST</bcp14> provide support for these auxiliary
protocols via TCP.</t>
        <t>Moreover, there is little benefit from transporting these
protocols via RDMA. Thus this document does not provide
an Upper-Layer binding for them.</t>
      </section>
      <section anchor="nfsacl-protocol" numbered="true" toc="default">
        <name>NFSACL Protocol</name>
        <t>Legacy NFS clients and servers convey NFSACL procedures on the same
transport connection and port as the NFS RPC program (100003).
Utilizing the same port obviates the need for a separate rpcbind
query to discover server support for this RPC program.</t>
        <t>ACLs are typically small, but even large ACLs must be encoded and
decoded to some degree before being being stored in local filesystems.
Thus no data item in this Upper-Layer Protocol is DDP-eligible.</t>
        <t>For procedures whose replies do not include an ACL object, the size
of each Reply is determined directly from the NFSACL RPC program's XDR
definition.</t>
        <t>The NFSACL protocol does not provide a mechanism to determine the size
of a received ACL in advance. When preparing for responses that include
ACLs, Legacy NFS clients estimate a maximum reply size based on limits
within their local file systems. If that estimation is inadequate, a
Responder falls back to message continuation.</t>
      </section>
    </section>
    <section anchor="upper-layer-binding-for-nfs-version-4" numbered="true" toc="default">
      <name>Upper-Layer Binding For NFS Version 4</name>
      <t>The Upper-Layer Binding specification in this section applies to
versions of the NFS RPC program defined in
NFS version 4.0 <xref target="RFC7530" format="default"/>,
NFS version 4.1 <xref target="RFC8881" format="default"/>,
and NFS version 4.2 <xref target="RFC7862" format="default"/>.</t>
      <section anchor="ddp-eligibility" numbered="true" toc="default">
        <name>DDP-Eligibility</name>
        <t>Only the following XDR data items in the COMPOUND procedure of all
NFS version 4 minor versions are DDP-eligible:</t>
        <ul spacing="normal">
          <li>The opaque data field in the WRITE4args structure</li>
          <li>The linkdata field of the NF4LNK arm in the createtype4 union</li>
          <li>The opaque data field in the READ4resok structure</li>
          <li>The linkdata field in the READLINK4resok structure</li>
        </ul>
        <section anchor="the-nfsv42-readplus-operation" numbered="true" toc="default">
          <name>The NFSv4.2 READ_PLUS operation</name>
          <t>NFS version 4.2 introduces an enhanced READ operation called
READ_PLUS <xref target="RFC7862" format="default"/>. READ_PLUS enables an NFS server to
compact returned READ data payloads. No part of a READ_PLUS
Reply is DDP-eligible.</t>
          <t>In a READ_PLUS result, returned file content appears as a list of one
or more of the following items:</t>
          <ul spacing="normal">
            <li>Regular data content, the same as the result of a traditional READ
operation</li>
            <li>Unallocated space in a file, where no data has been written, or
previously-written data has been removed via a hole-punch
operation</li>
            <li>A counted pattern</li>
          </ul>
          <t>Upon receipt of a READ_PLUS result, an NFSv4.2 client expands the
returned list into its preferred representation of the original
file content.</t>
          <t>Before receiving that result, an NFSv4.2 client is unaware of how
the NFS server has organized the file content. Thus it is not
possible to predict the size or structure of a READ_PLUS Reply
in advance. The use of direct data placement is therefore
challenging. Moreover, the usual benefits of hardware-assisted
data placement are entirely lost if the client must
parse the result of each READ I/O.</t>
          <t>Therefore this Upper Layer Binding does not make elements of an
NFSv4.2 READ_PLUS Reply DDP-eligible. Further, this Upper Layer
Binding recommends that NFS client implemenations avoid using
the READ_PLUS operation on NFS/RDMA mount points.</t>
        </section>
      </section>
      <section anchor="reply-size-estimation-1" numbered="true" toc="default">
        <name>Reply Size Estimation</name>
        <t>Within NFS version 4, there are certain variable-length result data
items whose maximum size cannot be estimated by clients reliably
because there is no protocol-specified size limit on these result
arrays. These include:</t>
        <ul spacing="normal">
          <li>The attrlist4 field</li>
          <li>Fields containing ACLs such as fattr4_acl, fattr4_dacl, and
fattr4_sacl</li>
          <li>Fields in the fs_locations4 and fs_locations_info4 data structures</li>
          <li>Fields which pertain to pNFS layout metadata, such as loc_body,
loh_body, da_addr_body, lou_body, lrf_body, fattr_layout_types,
and fs_layout_types</li>
        </ul>
        <section anchor="reply-size-estimation-for-minor-version-0" numbered="true" toc="default">
          <name>Reply Size Estimation for Minor Version 0</name>
          <t>The NFS version 4.0 protocol itself does not impose any bound on the
size of NFS Calls or Replies.</t>
          <t>Variable-length fattr4 attributes make it particularly difficult for
clients to predict the maximum size of some NFS version 4.0 Replies.
Client implementations might rely upon internal architectural limits
to constrain the reply size, but such limits are not always reliable.
When an NFS version 4.0 client cannot predict the size of a Reply,
it can rely on message continuation to enable a Reply under any
circumstances.</t>
        </section>
        <section anchor="reply-size-estimation-for-minor-version-1-and-newer" numbered="true" toc="default">
          <name>Reply Size Estimation for Minor Version 1 and Newer</name>
          <t>In NFS version 4.1 and newer minor versions, the csa_fore_chan_attrs
argument of the CREATE_SESSION operation contains a
ca_maxresponsesize field. The value in this field is
the absolute maximum size of replies generated by an NFS version 4.1
server.</t>
          <t>An NFS version 4 client can use this value when it is impossible
to estimate a reply size upper bound precisely.
In practice, objects such as ACLs, named attributes, layout bodies,
and security labels are much smaller than this maximum.</t>
        </section>
      </section>
      <section anchor="rpc-binding-considerations-1" numbered="true" toc="default">
        <name>RPC Binding Considerations</name>
        <t>NFS version 4 servers are required to listen on TCP port 2049 and
are not required to register with an rpcbind service <xref target="RFC7530" format="default"/>.
Therefore, an NFS version 4 server supporting RPC-over-RDMA version 2
<bcp14>MUST</bcp14> use the alternative well-known port number for its RPC-over-RDMA
service defined in <xref target="iana-cons" format="default"/>.</t>
      </section>
      <section anchor="nfs-compound-requests" numbered="true" toc="default">
        <name>NFS COMPOUND Requests</name>
        <section anchor="multiple-ddp-eligible-data-items" numbered="true" toc="default">
          <name>Multiple DDP-eligible Data Items</name>
          <t>An NFS version 4 COMPOUND procedure can contain more than one
operation that carries a DDP-eligible data item. An NFS version 4
client provides XDR Position values in each Read chunk to
determine which chunk is associated with which argument data item.
However, NFS version 4 server and client implementations must agree
on how to pair Write chunks with returned result data items.</t>
          <t>A "READ operation" refers to any NFS version 4 operation
with a DDP-eligible result data item in the following lists.
An NFS version 4 client applies the mechanism specified in
<xref section="4.3.2" sectionFormat="of" target="I-D.ietf-nfsv4-rpcrdma-version-two" format="default"/>
to this class of operations as follows:</t>
          <ul spacing="normal">
            <li>If an NFS version 4 client wishes all DDP-eligible items in an NFS
reply to be conveyed inline, it leaves the Write list empty.</li>
          </ul>
          <t>An NFS version 4 server acts as follows:</t>
          <ul spacing="normal">
            <li>The first READ operation <bcp14>MUST</bcp14> use the first chunk in the Write list
in an NFS version 4 COMPOUND procedure. The next READ operation uses
the next Write chunk, and so on.</li>
            <li>If an NFS version 4 client has provided a matching non-empty Write
chunk, then the corresponding READ operation <bcp14>MUST</bcp14> return its DDP-
eligible data item using that chunk.</li>
            <li>If an NFS version 4 client has provided an empty matching Write
chunk, then the corresponding READ operation <bcp14>MUST</bcp14> return all of
its result data items inline.</li>
            <li>If a READ operation returns a union arm which does not contain a
DDP-eligible result, and the NFS version 4 client has provided a
matching non-empty Write chunk, an NFS version 4 server <bcp14>MUST</bcp14>
return an empty Write chunk in that Write list position.</li>
            <li>If there are more READ operations than Write chunks, then
remaining NFS Read operations in an NFS version 4 COMPOUND that
have no matching Write chunk <bcp14>MUST</bcp14> return their results inline.</li>
          </ul>
        </section>
        <section anchor="chunk-list-cmplx" numbered="true" toc="default">
          <name>Chunk List Complexity</name>
          <t>By default, the RPC-over-RDMA version 2 protocol limits the
number of chunks or segments that may appear in Read or Write lists
(see <xref section="5.2" sectionFormat="of" target="I-D.ietf-nfsv4-rpcrdma-version-two" format="default"/>).</t>
          <t>These implementation limits are significant when Kerberos
integrity or privacy is in use <xref target="RFC7861" format="default"/>. GSS services increase the
size of credential material in RPC headers, potentially requiring the
more frequent use of less efficient Special Payload or
Continued Payload messages.</t>
          <t>NFS version 4 clients follow the prescriptions listed below when
constructing RPC-over-RDMA version 2 messages in the absence of an
explicit transport property exchange that alters these limits.
NFS version 4 servers <bcp14>MUST</bcp14> accept and process all such requests.</t>
          <ul spacing="normal">
            <li>The Read list can contain either a Call chunk, no more than one
Read chunk, or both a Call chunk and one Read chunk.</li>
            <li>The Write list can contain no more than one Write chunk.</li>
          </ul>
          <t>NFS version 4 clients wishing to send more complex chunk lists can
use transport properties to bound the complexity of NFS version 4
COMPOUNDs, limit the number of elements in scatter-gather operations,
and avoid other sources of chunk overruns at the receiving peer.</t>
        </section>
        <section anchor="nfs-version-4-compound-example" numbered="true" toc="default">
          <name>NFS Version 4 COMPOUND Example</name>
          <t>The following example shows a Write list with three Write chunks, A,
B, and C. The NFS version 4 server consumes the provided Write
chunks by writing the results of the designated operations in the
compound request (READ and READLINK) back to each chunk.</t>
          <artwork name="" type="" align="left" alt=""><![CDATA[
  Write list:

     A --> B --> C

  NFS version 4 COMPOUND request:

     PUTFH LOOKUP READ PUTFH LOOKUP READLINK PUTFH LOOKUP READ
                   |                   |                   |
                   v                   v                   v
                   A                   B                   C
]]></artwork>
          <t>If the NFS version 4 client does not want the READLINK result
returned via RDMA, it provides an empty Write chunk for buffer B to
indicate that the READLINK result must be returned inline.</t>
        </section>
      </section>
      <section anchor="nfs-callback-requests" numbered="true" toc="default">
        <name>NFS Callback Requests</name>
        <t>The NFS version 4 family of protocols supports server-initiated
callbacks to notify NFS version 4 clients of events such as recalled
delegations.</t>
        <section anchor="nfs-version-40-callback" numbered="true" toc="default">
          <name>NFS Version 4.0 Callback</name>
          <t>An NFS version 4.0 client uses the SETCLIENTID operation for advertising
the IP address, port, and netid of its NFS version 4.0 callback
service. When an NFS version 4.0 server provides a backchannel
service to an NFS version 4.0 client that uses RPC-over-RDMA version
2 for its forward channel, the server <bcp14>MUST</bcp14> advertise the backchannel
service using either the "tcp" or "tcp6" netid.</t>
          <t>Because the NFSv4.0 backchannel does not operate on RPC-over-RDMA,
this document does not specify an Upper-Layer binding
for the NFSv4.0 backchannel RPC program.</t>
        </section>
        <section anchor="nfs-version-41-callback" numbered="true" toc="default">
          <name>NFS Version 4.1 Callback</name>
          <t>In NFS version 4.1 and newer minor versions, callback operations may
appear on the same connection that is in use for NFS version 4
forward channel client requests. NFS version 4 clients and servers
<bcp14>MUST</bcp14> use the mechanisms described in
<xref section="4.5" sectionFormat="of" target="I-D.ietf-nfsv4-rpcrdma-version-two" format="default"/>
to convey backchannel operations on an RPC-over-RDMA version 2 transport.</t>
          <t>The csa_back_chan_attrs argument of the CREATE_SESSION operation
contains a ca_maxresponsesize field. The value in this field is the
absolute maximum size of backchannel replies generated by a replying
NFS version 4 client.</t>
          <t>There are no DDP-eligible data items in callback procedures defined
in NFS version 4.1 or NFS version 4.2. However, some callback
operations, such as messages that convey device ID information, can
be sizeable. A sender can use Message Continuation or a Special Payload
message in this situation.</t>
          <t>When an NFS version 4.1 client can support Special Payload Calls in
its backchannel, it reports a backchannel ca_maxrequestsize that is
larger than the connection's inline thresholds. Otherwise, an NFS
version 4 server <bcp14>MUST</bcp14> use only Simple Payload or Continued Payload
messages to convey backchannel operations.</t>
        </section>
      </section>
      <section anchor="session-cons" numbered="true" toc="default">
        <name>Session-Related Considerations</name>
        <t>The presence of an NFS version 4 session (as defined in <xref target="RFC8881" format="default"/>)
does not affect the operation of RPC-over-RDMA version 2. None of
the operations introduced to support NFS sessions (e.g., the SEQUENCE
operation) contain DDP-eligible data items. There is no need to
match the number of session slots with the available RPC-over-RDMA
version 2 credits.</t>
        <t>However, there are a few new cases where an RPC transaction can fail.
For example, a Requester might receive, in response to an RPC
request, an RDMA2_ERROR message with a rdma_err value of RDMA2_ERR_BADXDR.
These situations are not different from existing RPC errors, which an
NFS session implementation can already handle for other transport
types. Moreover, there might be no SEQUENCE result available to the
Requester to distinguish whether failure occurred before or after the
Responder executed the requested operations.</t>
        <t>When a transport error occurs (e.g., an RDMA2_ERROR type message is
received), the Requester proceeds, as usual, to match the incoming
XID value to a waiting RPC Call. The Requester terminates the RPC
transaction and reports the result status to the RPC consumer. The
Requester's session implementation then determines the session ID and
slot for the failed request and performs slot recovery to make that
slot usable again. Otherwise, that slot is rendered permanently
unavailable.</t>
        <t>When an NFS session is not present (for example, when NFS version 4.0
is in use), a transport error does not indicate whether the server
has processed the arguments of the RPC Call, or whether the server
has accessed or modified client memory associated with that RPC.</t>
      </section>
      <section anchor="transport-considerations-1" numbered="true" toc="default">
        <name>Transport Considerations</name>
        <section anchor="congestion-avoidance" numbered="true" toc="default">
          <name>Congestion Avoidance</name>
          <t><xref section="3.1" sectionFormat="of" target="RFC7530" format="default"/> states:</t>
          <ul empty="true">
            <li>
              <t>Where an NFS version 4 implementation supports operation over the
IP network protocol, the supported transport layer between NFS and
IP <bcp14>MUST</bcp14> be an IETF standardized transport protocol that is
specified to avoid network congestion; such transports include TCP
and the Stream Control Transmission Protocol (SCTP).</t>
            </li>
          </ul>
          <t><xref section="2.9.1" sectionFormat="of" target="RFC8881" format="default"/> further states:</t>
          <ul empty="true">
            <li>
              <t>Even if NFS version 4.1 is used over a non-IP network protocol, it
is <bcp14>RECOMMENDED</bcp14> that the transport support congestion control.</t>
              <t>It is permissible for a connectionless transport to be used under
NFS version 4.1; however, reliable and in-order delivery of data
combined with congestion control by the connectionless transport
is <bcp14>REQUIRED</bcp14>. As a consequence, UDP by itself <bcp14>MUST NOT</bcp14> be used as
an NFS version 4.1 transport.</t>
            </li>
          </ul>
          <t>RPC-over-RDMA version 2 utilizes only reliable, connection-oriented
transports that guarantee in-order delivery, meeting all the above
requirements for NFS version 4.0 and 4.1.
See <xref section="4.2.1" sectionFormat="of" target="I-D.ietf-nfsv4-rpcrdma-version-two" format="default"/> for more details.</t>
        </section>
        <section anchor="retransmission-and-keep-alive" numbered="true" toc="default">
          <name>Retransmission and Keep-alive</name>
          <t>NFS version 4 client implementations often rely on a transport-layer
connection keep-alive mechanism to detect when an NFS version 4 server
has become unresponsive. When an NFS server is no longer responsive,
client-side keep-alive terminates the connection, triggering
reconnection and RPC retransmission.</t>
          <t>Some RDMA transports (such as the Reliable Connected QP type on
InfiniBand) have no keep-alive mechanism. Without a disconnect or
new RPC traffic, such connections can remain alive long after an NFS
server has become unresponsive. Once an NFS client has consumed all
available RPC-over-RDMA version 2 credits on that transport
connection, it indefinitely awaits a reply before sending another RPC
request.</t>
          <t>NFS version 4 peers <bcp14>SHOULD</bcp14> reserve one RPC-over-RDMA version 2
credit for periodic server or connection health assessment.
Either peer can use this credit to drive an RPC request on an
otherwise idle connection, triggering either a quick affirmative
server response or immediate connection termination.</t>
          <t>In addition to network partition and request loss scenarios,
RPC-over-RDMA version 2 peers can terminate a connection when a
Transport header is malformed or when too many RPC-over-RDMA
messages are sent without a credit update. In such cases:</t>
          <ul spacing="normal">
            <li>If a transport error occurs (e.g., an RDMA2_ERROR type message is
received) just before the disconnect or instead of a disconnect,
the Requester <bcp14>MUST</bcp14> respond to that error as prescribed by the
specification of the RPC transport. Then the NFS version 4 rules
for handling retransmission apply.</li>
            <li>If there is a transport disconnect and the Responder has provided
no other response for a request, then only the NFS version 4 rules
for handling retransmission apply.</li>
          </ul>
        </section>
      </section>
    </section>
    <section anchor="extending-ulbs" numbered="true" toc="default">
      <name>Extending NFS Upper-Layer Bindings</name>
      <t>RPC programs such as NFS must have an Upper-Layer Binding
specification to operate on an RPC-over-RDMA version 2 transport
<xref target="I-D.ietf-nfsv4-rpcrdma-version-two" format="default"/>. Via standards action, the
Upper-Layer Binding specified in this document can be extended to
cover versions of the NFS version 4 protocol specified after NFS
version 4 minor version 2, or to cover separately published
extensions to an existing NFS version 4 minor version, as described
in <xref target="RFC8178" format="default"/>.</t>
    </section>
    <section anchor="security-considerations" numbered="true" toc="default">
      <name>Security Considerations</name>
      <t>RPC-over-RDMA version 2 supports all RPC security models, including
RPCSEC_GSS security and transport-level security <xref target="RFC7861" format="default"/>. The
choice of what Direct Data Placement mechanism to convey RPC argument
and results does not affect this since it changes only the method of
data transfer. Because the current document defines only the binding
of the NFS protocols atop RPC-over-RDMA version 2
<xref target="I-D.ietf-nfsv4-rpcrdma-version-two" format="default"/>, all relevant security
considerations are, therefore, described at that layer.</t>
    </section>
    <section anchor="iana-cons" numbered="true" toc="default">
      <name>IANA Considerations</name>
      <t>The use of direct data placement in NFS introduces a need for an
additional port number assignment for networks that share traditional
UDP and TCP port spaces with RDMA services. The DDP protocol
is such an example <xref target="RFC5041" format="default"/>.</t>
      <t>For this purpose, the current document lists a set of port number
assignments that IANA has already assigned for NFS/RDMA
in the IANA port registry,
according to the guidelines described in <xref target="RFC6335" format="default"/>.</t>
      <artwork name="" type="" align="left" alt=""><![CDATA[
  nfsrdma 20049/tcp Network File System (NFS) over RDMA
  nfsrdma 20049/udp Network File System (NFS) over RDMA
  nfsrdma 20049/sctp Network File System (NFS) over RDMA
]]></artwork>
      <t>The author requests that IANA add the current document as a reference
for the existing nfsrdma port assignments. This document does not alter
these assignments.</t>
    </section>
  </middle>
  <back>
    <references>
      <name>References</name>
      <references>
        <name>Normative References</name>
        <reference anchor="I-D.ietf-nfsv4-rpcrdma-version-two">
          <front>
            <title>RPC-over-RDMA Version 2 Protocol</title>
            <author fullname="Charles Lever">
              <organization>Oracle Corporation</organization>
            </author>
            <author fullname="David Noveck">
              <organization>NetApp</organization>
            </author>
            <date day="6" month="July" year="2021"/>
            <abstract>
              <t>   This document specifies the second version of a transport protocol
   that conveys Remote Procedure Call (RPC) messages using Remote Direct
   Memory Access (RDMA).  This version of the protocol is extensible.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-nfsv4-rpcrdma-version-two-05"/>
        </reference>
        <reference anchor="RFC7530">
          <front>
            <title>Network File System (NFS) Version 4 Protocol</title>
            <author fullname="T. Haynes" initials="T." role="editor" surname="Haynes">
              <organization/>
            </author>
            <author fullname="D. Noveck" initials="D." role="editor" surname="Noveck">
              <organization/>
            </author>
            <date month="March" year="2015"/>
            <abstract>
              <t>The Network File System (NFS) version 4 protocol is a distributed file system protocol that builds on the heritage of NFS protocol version 2 (RFC 1094) and version 3 (RFC 1813).  Unlike earlier versions, the NFS version 4 protocol supports traditional file access while integrating support for file locking and the MOUNT protocol. In addition, support for strong security (and its negotiation), COMPOUND operations, client caching, and internationalization has been added.  Of course, attention has been applied to making NFS version 4 operate well in an Internet environment.</t>
              <t>This document, together with the companion External Data Representation (XDR) description document, RFC 7531, obsoletes RFC 3530 as the definition of the NFS version 4 protocol.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7530"/>
          <seriesInfo name="DOI" value="10.17487/RFC7530"/>
        </reference>
        <reference anchor="RFC8881">
          <front>
            <title>Network File System (NFS) Version 4 Minor Version 1 Protocol</title>
            <author fullname="D. Noveck" initials="D." role="editor" surname="Noveck">
              <organization/>
            </author>
            <author fullname="C. Lever" initials="C." surname="Lever">
              <organization/>
            </author>
            <date month="August" year="2020"/>
            <abstract>
              <t>This document describes the Network File System (NFS) version 4 minor version 1, including features retained from the base protocol (NFS version 4 minor version 0, which is specified in RFC 7530) and protocol extensions made subsequently.  The later minor version has no dependencies on NFS version 4 minor version 0, and is considered a separate protocol. </t>
              <t>This document obsoletes RFC 5661.  It substantially revises the treatment of features relating to multi-server namespace, superseding the description of those features appearing in RFC 5661.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8881"/>
          <seriesInfo name="DOI" value="10.17487/RFC8881"/>
        </reference>
        <reference anchor="RFC7862">
          <front>
            <title>Network File System (NFS) Version 4 Minor Version 2 Protocol</title>
            <author fullname="T. Haynes" initials="T." surname="Haynes">
              <organization/>
            </author>
            <date month="November" year="2016"/>
            <abstract>
              <t>This document describes NFS version 4 minor version 2; it describes the protocol extensions made from NFS version 4 minor version 1. Major extensions introduced in NFS version 4 minor version 2 include the following: Server-Side Copy, Application Input/Output (I/O) Advise, Space Reservations, Sparse Files, Application Data Blocks, and Labeled NFS.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7862"/>
          <seriesInfo name="DOI" value="10.17487/RFC7862"/>
        </reference>
        <reference anchor="RFC2119">
          <front>
            <title>Key words for use in RFCs to Indicate Requirement Levels</title>
            <author fullname="S. Bradner" initials="S." surname="Bradner">
              <organization/>
            </author>
            <date month="March" year="1997"/>
            <abstract>
              <t>In many standards track documents several words are used to signify the requirements in the specification.  These words are often capitalized. This document defines these words as they should be interpreted in IETF documents.  This document specifies an Internet Best Current Practices for the Internet Community, and requests discussion and suggestions for improvements.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="2119"/>
          <seriesInfo name="DOI" value="10.17487/RFC2119"/>
        </reference>
        <reference anchor="RFC8174">
          <front>
            <title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</title>
            <author fullname="B. Leiba" initials="B." surname="Leiba">
              <organization/>
            </author>
            <date month="May" year="2017"/>
            <abstract>
              <t>RFC 2119 specifies common key words that may be used in protocol  specifications.  This document aims to reduce the ambiguity by clarifying that only UPPERCASE usage of the key words have the  defined special meanings.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="8174"/>
          <seriesInfo name="DOI" value="10.17487/RFC8174"/>
        </reference>
        <reference anchor="RFC1833">
          <front>
            <title>Binding Protocols for ONC RPC Version 2</title>
            <author fullname="R. Srinivasan" initials="R." surname="Srinivasan">
              <organization/>
            </author>
            <date month="August" year="1995"/>
            <abstract>
              <t>This document describes the binding protocols used in conjunction with the ONC Remote Procedure Call (ONC RPC Version 2) protocols. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="1833"/>
          <seriesInfo name="DOI" value="10.17487/RFC1833"/>
        </reference>
        <reference anchor="RFC7861">
          <front>
            <title>Remote Procedure Call (RPC) Security Version 3</title>
            <author fullname="A. Adamson" initials="A." surname="Adamson">
              <organization/>
            </author>
            <author fullname="N. Williams" initials="N." surname="Williams">
              <organization/>
            </author>
            <date month="November" year="2016"/>
            <abstract>
              <t>This document specifies version 3 of the Remote Procedure Call (RPC) security protocol (RPCSEC_GSS).  This protocol provides support for multi-principal authentication of client hosts and user principals to a server (constructed by generic composition), security label assertions for multi-level security and type enforcement, structured privilege assertions, and channel bindings.  This document updates RFC 5403.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7861"/>
          <seriesInfo name="DOI" value="10.17487/RFC7861"/>
        </reference>
        <reference anchor="RFC6335">
          <front>
            <title>Internet Assigned Numbers Authority (IANA) Procedures for the Management of the Service Name and Transport Protocol Port Number Registry</title>
            <author fullname="M. Cotton" initials="M." surname="Cotton">
              <organization/>
            </author>
            <author fullname="L. Eggert" initials="L." surname="Eggert">
              <organization/>
            </author>
            <author fullname="J. Touch" initials="J." surname="Touch">
              <organization/>
            </author>
            <author fullname="M. Westerlund" initials="M." surname="Westerlund">
              <organization/>
            </author>
            <author fullname="S. Cheshire" initials="S." surname="Cheshire">
              <organization/>
            </author>
            <date month="August" year="2011"/>
            <abstract>
              <t>This document defines the procedures that the Internet Assigned Numbers Authority (IANA) uses when handling assignment and other requests related to the Service Name and Transport Protocol Port Number registry.  It also discusses the rationale and principles behind these procedures and how they facilitate the long-term sustainability of the registry.</t>
              <t>This document updates IANA's procedures by obsoleting the previous UDP and TCP port assignment procedures defined in Sections 8 and 9.1 of the IANA Allocation Guidelines, and it updates the IANA service name and port assignment procedures for UDP-Lite, the Datagram Congestion Control Protocol (DCCP), and the Stream Control Transmission Protocol (SCTP).  It also updates the DNS SRV specification to clarify what a service name is and how it is registered.  This memo documents an Internet Best Current Practice.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="165"/>
          <seriesInfo name="RFC" value="6335"/>
          <seriesInfo name="DOI" value="10.17487/RFC6335"/>
        </reference>
      </references>
      <references>
        <name>Informative References</name>
        <reference anchor="RFC8178">
          <front>
            <title>Rules for NFSv4 Extensions and Minor Versions</title>
            <author fullname="D. Noveck" initials="D." surname="Noveck">
              <organization/>
            </author>
            <date month="July" year="2017"/>
            <abstract>
              <t>This document describes the rules relating to the extension of the NFSv4 family of protocols.  It covers the creation of minor versions, the addition of optional features to existing minor versions, and the correction of flaws in features already published as Proposed Standards.  The rules relating to the construction of minor versions and the interaction of minor version implementations that appear in this document supersede the minor versioning rules in RFC 5661 and other RFCs defining minor versions.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8178"/>
          <seriesInfo name="DOI" value="10.17487/RFC8178"/>
        </reference>
        <reference anchor="XNFS">
          <front>
            <title>Protocols for Interworking: XNFS, Version 3W</title>
            <author>
              <organization>The Open Group</organization>
            </author>
            <date year="1998" month="January"/>
          </front>
        </reference>
        <reference anchor="RFC1094">
          <front>
            <title>NFS: Network File System Protocol specification</title>
            <author fullname="B. Nowicki" initials="B." surname="Nowicki">
              <organization/>
            </author>
            <date month="March" year="1989"/>
            <abstract>
              <t>This RFC describes a protocol that Sun Microsystems, Inc., and others are using.  A new version of the protocol is under development, but others may benefit from the descriptions of the current protocol, and discussion of some of the design issues.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="1094"/>
          <seriesInfo name="DOI" value="10.17487/RFC1094"/>
        </reference>
        <reference anchor="RFC1813">
          <front>
            <title>NFS Version 3 Protocol Specification</title>
            <author fullname="B. Callaghan" initials="B." surname="Callaghan">
              <organization/>
            </author>
            <author fullname="B. Pawlowski" initials="B." surname="Pawlowski">
              <organization/>
            </author>
            <author fullname="P. Staubach" initials="P." surname="Staubach">
              <organization/>
            </author>
            <date month="June" year="1995"/>
            <abstract>
              <t>This paper describes the NFS version 3 protocol.  This paper is provided so that people can write compatible implementations.  This memo provides information for the Internet community.  This memo does not specify an Internet standard of any kind.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="1813"/>
          <seriesInfo name="DOI" value="10.17487/RFC1813"/>
        </reference>
        <reference anchor="RFC5041">
          <front>
            <title>Direct Data Placement over Reliable Transports</title>
            <author fullname="H. Shah" initials="H." surname="Shah">
              <organization/>
            </author>
            <author fullname="J. Pinkerton" initials="J." surname="Pinkerton">
              <organization/>
            </author>
            <author fullname="R. Recio" initials="R." surname="Recio">
              <organization/>
            </author>
            <author fullname="P. Culley" initials="P." surname="Culley">
              <organization/>
            </author>
            <date month="October" year="2007"/>
            <abstract>
              <t>The Direct Data Placement protocol provides information to Place the  incoming data directly into an upper layer protocol's receive buffer  without intermediate buffers.  This removes excess CPU and memory  utilization associated with transferring data through the  intermediate buffers.  [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="5041"/>
          <seriesInfo name="DOI" value="10.17487/RFC5041"/>
        </reference>
      </references>
    </references>
    <section numbered="false" anchor="acknowledgments" toc="default">
      <name>Acknowledgments</name>
      <t>Thanks to Tom Talpey, who contributed the text of <xref target="chunk-list-cmplx" format="default"/>.
David Noveck contributed the text of <xref target="session-cons" format="default"/> and <xref target="extending-ulbs" format="default"/>.
The author also wishes to thank Bill Baker and Greg Marsden for their
support of this work.</t>
      <t>Special thanks go to Transport Area Directors Zaheduzzaman Sarker,
NFSV4 Working Group Chairs Brian Pawlowski, and David Noveck, and
NFSV4 Working Group Secretary Thomas Haynes for their support.</t>
    </section>
  </back>
  <!-- ##markdown-source:
H4sIAC3Dk2EAA+U92XYbR3bv9RUV+iHSHAASKXosaxInFEmNeUyJHJKyPZkz
h6fQXQB62OhGeiEFK55vybfky3K3WnoBTXvyFj9YJNBddevuW11Op1OlmqzJ
7Rv9wTYPZXWn32W51dfburFr/ezDu+vn+uNmY6vpudnaSr/NijQrlvqm1FeX
x9OLe/jm6uT9kf7eVnVWFvpAmfm8svew4LtrDR/0HjtQaZkUZg07ppVZNNPM
NotpsajvD/H/0zafT+8Ppi9/rxLT2GVZbd/ouklVtqne6KZq6+bg5cuvX8I2
lTVv9E1linpTVo1C4JdV2W7Gj+LgO1TlvC5z29j6jWo3qaEf6sYU6a3JywLg
2tpabbI3+i9NmUx0DYtXdlHDT9s1/wAnWJvNBvDwV6VM26zK6o1SU6U1H+x4
Zarc1vrcwrnh07JavtEXlUkAnOOyAnBNA7DANw5X/CV8kJRt0eCZPxZZY1N9
3SCAulzoo7WtssTAM3ZtsvyNTlZtcjfLcY9/L+n9WVKulSrKag3r39s38OzZ
9GQWYbjaJFW6NtN7xsYU8IRPXb07/urLVy/lx9evX+/DebJiEa+EX+x/9Rp/
/BFIi/9qLbyzd1mVgKwyrzW8o8+KxlZIAcDQG3p64vH/6oc9etOhTdN/hKGb
ldUXG1voPyIZ6Rskzxt9MN3/+uvXgOHpFDBWN3DYRqmbVVYjKdq1LRpdb2yS
LTLA1Qi7EgJHuEIxg28Eei1oqXXD7F16vr137D1jMIqysbcf4H9KnWR10tb0
LezSEFTI2boxdwDOJjeJRUFo4Hh/gf3uD7XgRhO/aiQn/KbyrG7++owI9e9I
sxlg5flEmypZAQ1SbRr1l78+WzXNpn7z4gW+JV/N3NMv8IMX86p8qO0LWujF
85n6QXYjtGpPVgAJQDX3uM4cUNJdHjBvENF3tgrLPyxlVTMv2wbXVtftfJ0B
+tvl0tYNIQ9ECZjTFPCBNoCANs91Zf+zhe/r3i7LrFm1c+TbF8TOxM0vsmka
6QLY5awAoreJLF8JOk2jN2ZphSLrLE1BhNQXyH5VmfLjyCZ2Fy1Bn4j20Ikp
QK42ebnVaVbZpEHWM4qIR/wFHJGUxb3d0hew8TYvTYoHrMskMyirD3AY3IqX
NQzuRAEKUlsnVTaHZ7JCf/78y0L5888zdVQDZxQpLT3f8nkdu09onyTPEDTE
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
mb+7MlP/CxpHxSIJawAA

-->

</rfc>
