<?xml version='1.0' encoding='ascii'?>
<!DOCTYPE rfc SYSTEM "rfc2629.dtd">
<?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>
<?rfc strict="yes" ?>
<?rfc toc="yes"?>
<?rfc tocdepth="2"?>
<?rfc symrefs="yes"?>
<?rfc sortrefs="yes" ?>
<?rfc compact="yes" ?>
<?rfc subcompact="no" ?>
<rfc category="std" ipr="trust200902" docName="draft-ietf-nfsv4-rfc5667bis-00" obsoletes="5667" updates="" submissionType="IETF" xml:lang="en">
  <front>
    <title abbrev="NFS Direct Data Placement">Network File System (NFS) Direct Data Placement </title>
    <author initials="C.L." surname="Lever" fullname="Charles Lever" role="editor">
      <organization abbrev="Oracle">Oracle Corporation </organization>
      <address>
        <postal>
          <street>1015 Granger Avenue</street>
          <city>Ann Arbor</city>
          <region>MI</region>
          <code>48104</code>
          <country>USA</country>
        </postal>
        <phone>+1 734 274 2396</phone>
        <email>chuck.lever@oracle.com</email>
      </address>
    </author>
    <date/>
    <area>Transport</area>
    <workgroup>Network File System Version 4</workgroup>
    <keyword>NFS-Over-RDMA</keyword>
    <abstract>
      <t>This document defines the bindings of the various Network File System (NFS) versions to the Remote Direct Memory Access (RDMA) operations supported by the RPC-over-RDMA transport protocol.  It describes the use of direct data placement by means of server-initiated RDMA operations into client-supplied buffers for implementations of NFS versions 2, 3, 4, and 4.1 over such an RDMA transport.  This document obsoletes RFC 5667.  </t>
    </abstract>
  </front>
  <middle>
    <section title="Introduction" toc="default">
      <t>The Remote Direct Memory Access (RDMA) Transport for Remote Procedure Call (RPC) <xref target="I-D.ietf-nfsv4-rfc5666bis" pageno="false" format="default"/> allows an RPC client application to post buffers in a Chunk list for specific arguments and results from an RPC call.  The RDMA transport header conveys this list of client buffer addresses to the server where the application can associate them with client data and use RDMA operations to transfer the results directly to and from the posted buffers on the client.  The client and server must agree on a consistent mapping of posted buffers to RPC.  This document details the mapping for each version of the NFS protocol <xref target="RFC1094" pageno="false" format="default"/> <xref target="RFC1813" pageno="false" format="default"/> <xref target="RFC7530" pageno="false" format="default"/> <xref target="RFC5661" pageno="false" format="default"/>.  </t>
      <section title="Requirements Language" toc="default">
        <t>The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be interpreted as described in <xref target="RFC2119" pageno="false" format="default"/>.  </t>
      </section>
      <section title="Planned Changes To This Document" toc="default">
        <t>The following changes will be made, relative to <xref target="RFC5667" pageno="false" format="default"/>: <list style="symbols"><t>References to <xref target="RFC5666" pageno="false" format="default"/> will be replaced with references to <xref target="I-D.ietf-nfsv4-rfc5666bis" pageno="false" format="default"/>.  Corrections and updates relative to new language in <xref target="I-D.ietf-nfsv4-rfc5666bis" pageno="false" format="default"/> will be introduced.  </t><t>References to obsolete RFCs will be replaced.  </t><t>The reference to a non-existant NFSv4 SYMLINK operation will be replaced with NFSv4 CREATE(NF4LNK).  </t><t>The discussion of 12KB and 36KB inline threshold will be removed.  </t><t>The discussion of NFSv4 COMPOUND handling will be completed.  </t><t>An explicit discussion of NFSv4.0 and NFSv4.1 backchannel operation will be introduced.  </t><t>An IANA Considerations section is required by IDNITS.  </t><t>Code excerpts will be modernized.  </t></list> Other minor changes and editorial corrections may also be made.  </t>
      </section>
    </section>
    <section title="Transfers from NFS Client to NFS Server" toc="default">
      <t>The RDMA Read list, in the RDMA transport header, allows an RPC client to marshal RPC call data selectively.  Large chunks of data, such as the file data of an NFS WRITE request, MAY be referenced by an RDMA Read list and be moved efficiently and directly placed by an RDMA Read operation initiated by the server.  </t>
      <t>The process of identifying these chunks for the RDMA Read list can be implemented entirely within the RPC layer.  It is transparent to the upper-level protocol, such as NFS.  For instance, the file data portion of an NFS WRITE request can be selected as an RDMA "chunk" within the eXternal Data Representation (XDR) marshaling code of RPC based on a size criterion, independently of the NFS protocol layer.  The XDR unmarshaling on the receiving system can identify the correspondence between Read chunks and protocol elements via the XDR position value encoded in the Read chunk entry.  </t>
      <t>RPC RDMA Read chunks are employed by this NFS mapping to convey specific NFS data to the server in a manner that may be directly placed.  The following sections describe this mapping for versions of the NFS protocol.  </t>
    </section>
    <section title="Transfers from NFS Server to NFS Client" toc="default">
      <t>The RDMA Write list, in the RDMA transport header, allows the client to post one or more buffers into which the server will RDMA Write designated result chunks directly.  If the client sends a null Write list, then results from the RPC call will be returned either as an inline reply, as chunks in an RDMA Read list of server-posted buffers, or in a client-posted reply buffer.  </t>
      <t>Each posted buffer in a Write list is represented as an array of memory segments.  This allows the client some flexibility in submitting discontiguous memory segments into which the server will scatter the result.  Each segment is described by a triplet consisting of the segment handle or steering tag (STag), segment length, and memory address or offset.  </t>
      <figure title="" suppress-title="false" align="left" alt="" width="" height="">
        <artwork xml:space="preserve" name="" type="" align="left" alt="" width="" height="">

&lt;CODE BEGINS&gt;

   struct xdr_rdma_segment {
      uint32 handle;    /* Registered memory handle */
      uint32 length;    /* Length of the chunk in bytes */
      uint64 offset;    /* Chunk virtual address or offset */
   };

   struct xdr_write_chunk {
      struct xdr_rdma_segment target&lt;&gt;;
   };

   struct xdr_write_list {
      struct xdr_write_chunk entry;
      struct xdr_write_list  *next;
   };

&lt;CODE ENDS&gt;

</artwork>
      </figure>
      <t>The sum of the segment lengths yields the total size of the buffer, which MUST be large enough to accept the result.  If the buffer is too small, the server MUST return an XDR encode error.  The server MUST return the result data for a posted buffer by progressively filling its segments, perhaps leaving some trailing segments unfilled or partially full if the size of the result is less than the total size of the buffer segments.  </t>
      <t>The server returns the RDMA Write list to the client with the segment length fields overwritten to indicate the amount of data RDMA written to each segment.  Results returned by direct placement MUST NOT be returned by other methods, e.g., by Read chunk list or inline.  If no result data at all is returned for the element, the server places no data in the buffer(s), but does return zeros in the segment length fields corresponding to the result.  </t>
      <t>The RDMA Write list allows the client to provide multiple result buffers -- each buffer maps to a specific result in the reply.  The NFS client and server implementations agree by specifying the mapping of results to buffers for each RPC procedure.  The following sections describe this mapping for versions of the NFS protocol.  </t>
      <t>Through the use of RDMA Write lists in NFS requests, it is not necessary to employ the RDMA Read lists in the NFS replies, as described in the RPC-over-RDMA protocol.  This enables more efficient operation, by avoiding the need for the server to expose buffers for RDMA, and also avoiding "RDMA_DONE" exchanges.  Clients MAY additionally employ RDMA Reply chunks to receive entire messages, as described in <xref target="I-D.ietf-nfsv4-rfc5666bis" pageno="false" format="default"/>.  </t>
    </section>
    <section title="NFS Versions 2 and 3 Mapping" toc="default">
      <t>A single RDMA Write list entry MAY be posted by the client to receive either the opaque file data from a READ request or the pathname from a READLINK request.  The server MUST ignore a Write list for any other NFS procedure, as well as any Write list entries beyond the first in the list.  </t>
      <t>Similarly, a single RDMA Read list entry MAY be posted by the client to supply the opaque file data for a WRITE request or the pathname for a SYMLINK request.  The server MUST ignore any Read list for other NFS procedures, as well as additional Read list entries beyond the first in the list.  </t>
      <t>Because there are no NFS version 2 or 3 requests that transfer bulk data in both directions, it is not necessary to post requests containing both Write and Read lists.  Any unneeded Read or Write lists are ignored by the server.  </t>
      <t>In the case where the outgoing request or expected incoming reply is larger than the maximum size supported on the connection, it is possible for the RPC layer to post the entire message or result in a special "RDMA_NOMSG" message type that is transferred entirely by RDMA.  This is implemented in RPC, below NFS, and therefore has no effect on the message contents.  </t>
      <t>Non-RDMA (inline) WRITE transfers MAY OPTIONALLY employ the "RDMA_MSGP" padding method described in the RPC-over-RDMA protocol, if the appropriate value for the server is known to the client.  Padding allows the opaque file data to arrive at the server in an aligned fashion, which may improve server performance.  </t>
      <t>The NFS version 2 and 3 protocols are frequently limited in practice to requests containing less than or equal to 8 kilobytes and 32 kilobytes of data, respectively.  In these cases, it is often practical to support basic operation without employing a configuration exchange as discussed in <xref target="I-D.ietf-nfsv4-rfc5666bis" pageno="false" format="default"/>.  The server MUST post buffers large enough to receive the largest possible incoming message (approximately 12 KB for NFS version 2, or 36 KB for NFS version 3, would be vastly sufficient), and the client can post buffers large enough to receive replies based on the "rsize" it is using to the server, plus a fixed overhead for the RPC and NFS headers.  Because the server MUST NOT return data in excess of this size, the client can be assured of the adequacy of its posted buffer sizes.  </t>
      <t>Flow control is handled dynamically by the RPC RDMA protocol, and write padding is OPTIONAL and therefore MAY remain unused.  </t>
      <t>Alternatively, if the server is administratively configured to values appropriate for all its clients, the same assurance of interoperability within the domain can be made.  </t>
      <t>The use of a configuration protocol with NFS v2 and v3 is therefore OPTIONAL.  Employing a configuration exchange may allow some advantage to server resource management through accurately sizing buffers, enabling the server to know exactly how many RDMA Reads may be in progress at once on the client connection, and enabling client write padding, which may be desirable for certain servers when RDMA Read is impractical.  </t>
    </section>
    <section title="NFS Version 4 Mapping" toc="default">
      <t>This specification applies to the first minor version of NFS version 4 (NFSv4.0) and any subsequent minor versions that do not override this mapping.  </t>
      <t>The Write list MUST be considered only for the COMPOUND procedure.  This procedure returns results from a sequence of operations.  Only the opaque file data from an NFS READ operation and the pathname from a READLINK operation MUST utilize entries from the Write list.  </t>
      <t>If there is no Write list, i.e., the list is null, then any READ or READLINK operations in the COMPOUND MUST return their data inline.  The NFSv4.0 client MUST ensure in this case that any result of its READ and READLINK requests will fit within its receive buffers, in order to avoid a resulting RDMA transport error upon transfer.  The server is not required to detect this.  </t>
      <t>The first entry in the Write list MUST be used by the first READ or READLINK in the COMPOUND request.  The next Write list entry is used by the next READ or READLINK, and so on.  If there are more READ or READLINK operations than Write list entries, then any remaining operations MUST return their results inline.  </t>
      <t>If a Write list entry is presented, then the corresponding READ or READLINK MUST return its data via an RDMA Write to the buffer indicated by the Write list entry.  If the Write list entry has zero RDMA segments, or if the total size of the segments is zero, then the corresponding READ or READLINK operation MUST return its result inline.  </t>
      <t>The following example shows an RDMA Write list with three posted buffers A, B, and C.  The designated operations in the compound request, READ and READLINK, consume the posted buffers by writing their results back to each buffer.  </t>
      <figure title="" suppress-title="false" align="left" alt="" width="" height="">
        <artwork xml:space="preserve" name="" type="" align="left" alt="" width="" height="">

   RDMA Write list:

      A --&gt; B --&gt; C

   Compound request:

      PUTFH LOOKUP READ PUTFH LOOKUP READLINK PUTFH LOOKUP READ
                    |                   |                   |
                    v                   v                   v
                    A                   B                   C

</artwork>
      </figure>
      <t>If the client does not want to have the READLINK result returned directly, then it provides a zero-length array of segment triplets for buffer B or sets the values in the segment triplet for buffer B to zeros so that the READLINK result MUST be returned inline.  </t>
      <t>The situation is similar for RDMA Read lists sent by the client and applies to the NFSv4.0 WRITE and SYMLINK procedures as for v3.  Additionally, inline segments too large to fit in posted buffers MAY be transferred in special "RDMA_NOMSG" messages.  </t>
      <t>Non-RDMA (inline) WRITE transfers MAY OPTIONALLY employ the "RDMA_MSGP" padding method described in the RPC-over-RDMA protocol, if the appropriate value for the server is known to the client.  Padding allows the opaque file data to arrive at the server in an aligned fashion, which may improve server performance.  In order to ensure accurate alignment for all data, it is likely that the client will restrict its use of OPTIONAL padding to COMPOUND requests containing only a single WRITE operation.  </t>
      <t>Unlike NFS versions 2 and 3, the maximum size of an NFS version 4 COMPOUND is not bounded, even when RDMA chunks are in use.  While it might appear that a configuration protocol exchange (such as the one described in <xref target="I-D.ietf-nfsv4-rfc5666bis" pageno="false" format="default"/>) would help, in fact the layering issues involved in building COMPOUNDs by NFS make such a mechanism unworkable.  </t>
      <t>However, typical NFS version 4 clients rarely issue such problematic requests.  In practice, they behave in much more predictable ways, in fact most still support the traditional rsize/wsize mount parameters.  Therefore, most NFS version 4 clients function over RPC-over-RDMA in the same way as NFS versions 2 and 3, operationally.  </t>
      <t>There are however advantages to allowing both client and server to operate with prearranged size constraints, for example, use of the sizes to better manage the server's response cache.  An extension to NFS version 4 supporting a more comprehensive exchange of upper-layer parameters is part of <xref target="RFC5661" pageno="false" format="default"/>.  </t>
      <section title="NFS Version 4 Callbacks" toc="default">
        <t>The NFS version 4 protocols support server-initiated callbacks to selected clients, in order to notify them of events such as recalled delegations, etc.  These callbacks present no particular issue to being framed over RPC-over-RDMA since such callbacks do not carry bulk data such as NFS READ or NFS WRITE.  They MAY be transmitted inline via RDMA_MSG, or if the callback message or its reply overflow the negotiated buffer sizes for a callback connection, they MAY be transferred via the RDMA_NOMSG method as described above for other exchanges.  </t>
        <t>One special case is noteworthy: in NFS version 4.1, the callback channel is optionally negotiated to be on the same connection as one used for client requests.  In this case, and because the transaction ID (XID) is present in the RPC-over-RDMA header, the client MUST ascertain whether the message is in fact an RPC REPLY, and therefore a reply to a prior request and carrying its XID, before processing it as such.  By the same token, the server MUST ascertain whether an incoming message on such a callback-eligible connection is an RPC CALL, before optionally processing the XID.  </t>
        <t>In the callback case, the XID present in the RPC-over-RDMA header will potentially have any value, which may (or may not) collide with an XID used by the client for a previous or future request.  The client and server MUST inspect the RPC component of the message to determine its potential disposition as either an RPC CALL or RPC REPLY, prior to processing this XID, and MUST NOT reject or accept it without also determining the proper context.  </t>
      </section>
    </section>
    <section title="IANA Considerations" toc="default">
      <t>NFS use of direct data placement introduces a need for an additional NFS port number assignment for networks that share traditional UDP and TCP port spaces with RDMA services.  The iWARP <xref target="RFC5041" pageno="false" format="default"/> <xref target="RFC5040" pageno="false" format="default"/> protocol is such an example (InfiniBand is not).  </t>
      <t>NFS servers for versions 2 and 3 <xref target="RFC1094" pageno="false" format="default"/> <xref target="RFC1813" pageno="false" format="default"/> traditionally listen for clients on UDP and TCP port 2049, and additionally, they register these with the portmapper and/or rpcbind <xref target="RFC1833" pageno="false" format="default"/> service.  However, <xref target="RFC7530" pageno="false" format="default"/> requires NFS servers for version 4 to listen on TCP port 2049, and they are not required to register.  </t>
      <t>An NFS version 2 or version 3 server supporting RPC-over-RDMA on such a network and registering itself with the RPC portmapper MAY choose an arbitrary port, or MAY use the alternative well-known port number for its RPC-over-RDMA service.  The chosen port MAY be registered with the RPC portmapper under the netid assigned by the requirement in <xref target="I-D.ietf-nfsv4-rfc5666bis" pageno="false" format="default"/>.  </t>
      <t>An NFS version 4 server supporting RPC-over-RDMA on such a network MUST use the alternative well-known port number for its RPC-over-RDMA service.  Clients SHOULD connect to this well-known port without consulting the RPC portmapper (as for NFSv4/TCP).  </t>
      <t>The port number assigned to an NFS service over an RPC-over-RDMA transport is available from the IANA port registry <xref target="RFC3232" pageno="false" format="default"/>.  </t>
    </section>
    <section title="Security Considerations" toc="default">
      <t>The RDMA transport for RPC <xref target="I-D.ietf-nfsv4-rfc5666bis" pageno="false" format="default"/> supports all RPC <xref target="RFC5531" pageno="false" format="default"/> security models, including RPCSEC_GSS <xref target="RFC2203" pageno="false" format="default"/> security and link- level security.  The choice of RDMA Read and RDMA Write to return RPC argument and results, respectively, does not affect this, since it only changes the method of data transfer.  Specifically, the requirements of <xref target="I-D.ietf-nfsv4-rfc5666bis" pageno="false" format="default"/> ensure that this choice does not introduce new vulnerabilities.  </t>
      <t>Because this document defines only the binding of the NFS protocols atop <xref target="I-D.ietf-nfsv4-rfc5666bis" pageno="false" format="default"/>, all relevant security considerations are therefore to be described at that layer.  </t>
    </section>
    <section title="Acknowledgments" toc="default">
      <t>The author gratefully acknowledges the work of Brent Callaghan and Tom Talpey on the original NFS Direct Data Placement specification <xref target="RFC5667" pageno="false" format="default"/>.  The author also wishes to thank Bill Baker and Greg Marsden for their support of this work.  </t>
    </section>
  </middle>
  <back>
    <references title="Normative References">
      <reference anchor="RFC1833" target="http://www.rfc-editor.org/info/rfc1833">
        <front>
          <title>Binding Protocols for ONC RPC Version 2</title>
          <author initials="R." surname="Srinivasan" fullname="R. Srinivasan">
            <organization/>
          </author>
          <date year="1995" month="August"/>
          <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="RFC2119" target="http://www.rfc-editor.org/info/rfc2119">
        <front>
          <title>Key words for use in RFCs to Indicate Requirement Levels</title>
          <author initials="S." surname="Bradner" fullname="S. Bradner">
            <organization/>
          </author>
          <date year="1997" month="March"/>
          <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="RFC2203" target="http://www.rfc-editor.org/info/rfc2203">
        <front>
          <title>RPCSEC_GSS Protocol Specification</title>
          <author initials="M." surname="Eisler" fullname="M. Eisler">
            <organization/>
          </author>
          <author initials="A." surname="Chiu" fullname="A. Chiu">
            <organization/>
          </author>
          <author initials="L." surname="Ling" fullname="L. Ling">
            <organization/>
          </author>
          <date year="1997" month="September"/>
          <abstract>
            <t>This memo describes an ONC/RPC security flavor that allows RPC protocols to access the Generic Security Services Application Programming Interface (referred to henceforth as GSS-API).  [STANDARDS-TRACK]</t>
          </abstract>
        </front>
        <seriesInfo name="RFC" value="2203"/>
        <seriesInfo name="DOI" value="10.17487/RFC2203"/>
      </reference>
      <reference anchor="RFC5531" target="http://www.rfc-editor.org/info/rfc5531">
        <front>
          <title>RPC: Remote Procedure Call Protocol Specification Version 2</title>
          <author initials="R." surname="Thurlow" fullname="R. Thurlow">
            <organization/>
          </author>
          <date year="2009" month="May"/>
          <abstract>
            <t>This document describes the Open Network Computing (ONC) Remote Procedure Call (RPC) version 2 protocol as it is currently deployed and accepted.  This document obsoletes RFC 1831.   [STANDARDS-TRACK]</t>
          </abstract>
        </front>
        <seriesInfo name="RFC" value="5531"/>
        <seriesInfo name="DOI" value="10.17487/RFC5531"/>
      </reference>
      <reference anchor="RFC5661" target="http://www.rfc-editor.org/info/rfc5661">
        <front>
          <title>Network File System (NFS) Version 4 Minor Version 1 Protocol</title>
          <author initials="S." surname="Shepler" fullname="S. Shepler" role="editor">
            <organization/>
          </author>
          <author initials="M." surname="Eisler" fullname="M. Eisler" role="editor">
            <organization/>
          </author>
          <author initials="D." surname="Noveck" fullname="D. Noveck" role="editor">
            <organization/>
          </author>
          <date year="2010" month="January"/>
          <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 3530) and protocol extensions made subsequently.  Major extensions introduced in NFS version 4 minor version 1 include Sessions, Directory Delegations, and parallel NFS (pNFS).  NFS version 4 minor version 1 has no dependencies on NFS version 4 minor version 0, and it is considered a separate protocol.  Thus, this document neither updates nor obsoletes RFC 3530.  NFS minor version 1 is deemed superior to NFS minor version 0 with no loss of functionality, and its use is preferred over version 0.  Both NFS minor versions 0 and 1 can be used simultaneously on the same network, between the same client and server.  [STANDARDS-TRACK]</t>
          </abstract>
        </front>
        <seriesInfo name="RFC" value="5661"/>
        <seriesInfo name="DOI" value="10.17487/RFC5661"/>
      </reference>
      <reference anchor="RFC7530" target="http://www.rfc-editor.org/info/rfc7530">
        <front>
          <title>Network File System (NFS) Version 4 Protocol</title>
          <author initials="T." surname="Haynes" fullname="T. Haynes" role="editor">
            <organization/>
          </author>
          <author initials="D." surname="Noveck" fullname="D. Noveck" role="editor">
            <organization/>
          </author>
          <date year="2015" month="March"/>
          <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>
    </references>
    <references title="Informative References">
      <reference anchor="I-D.ietf-nfsv4-rfc5666bis">
        <front>
          <title>Remote Direct Memory Access Transport for Remote Procedure Call, Version One</title>
          <author initials="C" surname="Lever" fullname="Chuck Lever">
            <organization/>
          </author>
          <author initials="W" surname="Simpson" fullname="William Simpson">
            <organization/>
          </author>
          <author initials="T" surname="Talpey" fullname="Tom Talpey">
            <organization/>
          </author>
          <date month="May" day="27" year="2016"/>
          <abstract>
            <t>This document specifies a protocol for conveying Remote Procedure Call (RPC) messages on physical transports capable of Remote Direct Memory Access (RDMA).  It requires no revision to application RPC protocols or the RPC protocol itself.  This document obsoletes RFC 5666.</t>
          </abstract>
        </front>
        <seriesInfo name="Internet-Draft" value="draft-ietf-nfsv4-rfc5666bis-07"/>
        <format type="TXT" target="http://www.ietf.org/internet-drafts/draft-ietf-nfsv4-rfc5666bis-07.txt"/>
        <format type="PS" target="http://www.ietf.org/internet-drafts/draft-ietf-nfsv4-rfc5666bis-07.ps"/>
        <format type="PDF" target="http://www.ietf.org/internet-drafts/draft-ietf-nfsv4-rfc5666bis-07.pdf"/>
      </reference>
      <reference anchor="RFC1094" target="http://www.rfc-editor.org/info/rfc1094">
        <front>
          <title>NFS: Network File System Protocol specification</title>
          <author initials="B." surname="Nowicki" fullname="B. Nowicki">
            <organization/>
          </author>
          <date year="1989" month="March"/>
          <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" target="http://www.rfc-editor.org/info/rfc1813">
        <front>
          <title>NFS Version 3 Protocol Specification</title>
          <author initials="B." surname="Callaghan" fullname="B. Callaghan">
            <organization/>
          </author>
          <author initials="B." surname="Pawlowski" fullname="B. Pawlowski">
            <organization/>
          </author>
          <author initials="P." surname="Staubach" fullname="P. Staubach">
            <organization/>
          </author>
          <date year="1995" month="June"/>
          <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="RFC3232" target="http://www.rfc-editor.org/info/rfc3232">
        <front>
          <title>Assigned Numbers: RFC 1700 is Replaced by an On-line Database</title>
          <author initials="J." surname="Reynolds" fullname="J. Reynolds" role="editor">
            <organization/>
          </author>
          <date year="2002" month="January"/>
          <abstract>
            <t>This memo obsoletes RFC 1700 (STD 2) "Assigned Numbers", which contained an October 1994 snapshot of assigned Internet protocol parameters.  This memo provides information for the Internet community.</t>
          </abstract>
        </front>
        <seriesInfo name="RFC" value="3232"/>
        <seriesInfo name="DOI" value="10.17487/RFC3232"/>
      </reference>
      <reference anchor="RFC5040" target="http://www.rfc-editor.org/info/rfc5040">
        <front>
          <title>A Remote Direct Memory Access Protocol Specification</title>
          <author initials="R." surname="Recio" fullname="R. Recio">
            <organization/>
          </author>
          <author initials="B." surname="Metzler" fullname="B. Metzler">
            <organization/>
          </author>
          <author initials="P." surname="Culley" fullname="P. Culley">
            <organization/>
          </author>
          <author initials="J." surname="Hilland" fullname="J. Hilland">
            <organization/>
          </author>
          <author initials="D." surname="Garcia" fullname="D. Garcia">
            <organization/>
          </author>
          <date year="2007" month="October"/>
          <abstract>
            <t>This document defines a Remote Direct Memory Access Protocol (RDMAP) that operates over the Direct Data Placement Protocol (DDP protocol).  RDMAP provides read and write services directly to applications and enables data to be transferred directly into Upper Layer Protocol (ULP) Buffers without intermediate data copies.  It also enables a kernel bypass implementation.  [STANDARDS-TRACK]</t>
          </abstract>
        </front>
        <seriesInfo name="RFC" value="5040"/>
        <seriesInfo name="DOI" value="10.17487/RFC5040"/>
      </reference>
      <reference anchor="RFC5041" target="http://www.rfc-editor.org/info/rfc5041">
        <front>
          <title>Direct Data Placement over Reliable Transports</title>
          <author initials="H." surname="Shah" fullname="H. Shah">
            <organization/>
          </author>
          <author initials="J." surname="Pinkerton" fullname="J. Pinkerton">
            <organization/>
          </author>
          <author initials="R." surname="Recio" fullname="R. Recio">
            <organization/>
          </author>
          <author initials="P." surname="Culley" fullname="P. Culley">
            <organization/>
          </author>
          <date year="2007" month="October"/>
          <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>
      <reference anchor="RFC5666" target="http://www.rfc-editor.org/info/rfc5666">
        <front>
          <title>Remote Direct Memory Access Transport for Remote Procedure Call</title>
          <author initials="T." surname="Talpey" fullname="T. Talpey">
            <organization/>
          </author>
          <author initials="B." surname="Callaghan" fullname="B. Callaghan">
            <organization/>
          </author>
          <date year="2010" month="January"/>
          <abstract>
            <t>This document describes a protocol providing Remote Direct Memory Access (RDMA) as a new transport for Remote Procedure Call (RPC).  The RDMA transport binding conveys the benefits of efficient, bulk-data transport over high-speed networks, while providing for minimal change to RPC applications and with no required revision of the application RPC protocol, or the RPC protocol itself.  [STANDARDS-TRACK]</t>
          </abstract>
        </front>
        <seriesInfo name="RFC" value="5666"/>
        <seriesInfo name="DOI" value="10.17487/RFC5666"/>
      </reference>
      <reference anchor="RFC5667" target="http://www.rfc-editor.org/info/rfc5667">
        <front>
          <title>Network File System (NFS) Direct Data Placement</title>
          <author initials="T." surname="Talpey" fullname="T. Talpey">
            <organization/>
          </author>
          <author initials="B." surname="Callaghan" fullname="B. Callaghan">
            <organization/>
          </author>
          <date year="2010" month="January"/>
          <abstract>
            <t>This document defines the bindings of the various Network File System (NFS) versions to the Remote Direct Memory Access (RDMA) operations supported by the RPC/RDMA transport protocol.  It describes the use of direct data placement by means of server-initiated RDMA operations into client-supplied buffers for implementations of NFS versions 2, 3, 4, and 4.1 over such an RDMA transport.  [STANDARDS-TRACK]</t>
          </abstract>
        </front>
        <seriesInfo name="RFC" value="5667"/>
        <seriesInfo name="DOI" value="10.17487/RFC5667"/>
      </reference>
    </references>
  </back>
</rfc>
