Network File System Version 4Internet Engineering Task Force (IETF) C. LeverInternet-DraftRequest for Comments: 8167 OracleIntended status:Category: Standards TrackMarch 8, 2017 Expires: September 9,June 2017Bi-directionalISSN: 2070-1721 Bidirectional Remote Procedure CallOnon RPC-over-RDMA Transportsdraft-ietf-nfsv4-rpcrdma-bidirection-08Abstract Minor versions of Network File System (NFS) version 4 newer than minor version 0 work best when Remote Procedure Call (RPC) transports can send RPC transactions in both directions on the same connection. This document describes how RPC transport endpoints capable of Remote Direct Memory Access (RDMA) convey RPCs in both directions on a single connection.Requirements Language 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 [RFC2119].Status of This Memo ThisInternet-Draftissubmitted in full conformance with the provisions of BCP 78 and BCP 79. Internet-Drafts are working documentsan Internet Standards Track document. This document is a product of the Internet Engineering Task Force (IETF).Note that other groups may also distribute working documents as Internet-Drafts. The listIt represents the consensus ofcurrent Internet- Drafts is at http://datatracker.ietf.org/drafts/current/. Internet-Drafts are draft documents validthe IETF community. It has received public review and has been approved fora maximumpublication by the Internet Engineering Steering Group (IESG). Further information on Internet Standards is available in Section 2 of RFC 7841. Information about the current status ofsix monthsthis document, any errata, and how to provide feedback on it may beupdated, replaced, or obsoleted by other documentsobtained atany time. It is inappropriate to use Internet-Drafts as reference material or to cite them other than as "work in progress." This Internet-Draft will expire on September 9, 2017.http://www.rfc-editor.org/info/rfc8167. Copyright Notice Copyright (c) 2017 IETF Trust and the persons identified as the document authors. All rights reserved. This document is subject to BCP 78 and the IETF Trust's Legal Provisions Relating to IETF Documents (http://trustee.ietf.org/license-info) in effect on the date of publication of this document. Please review these documents carefully, as they describe your rights and restrictions with respect to this document. Code Components extracted from this document must include Simplified BSD License text as described in Section 4.e of the Trust Legal Provisions and are provided without warranty as described in the Simplified BSD License. Table of Contents 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 2 2. Understanding RPC Direction . . . . . . . . . . . . . . . . . 3 3. Immediate UsesOf Bi-Directionalof Bidirectional RPC-over-RDMA . . . . . . . . 5 4. Flow Control . . . . . . . . . . . . . . . . . . . . . . . . 6 5. SendingAndand Receiving OperationsIn Thein the Reverse Direction . . 8 6. In the Absence of SupportFor Reverse Directionfor Reverse-Direction Operation . . 11 7. ConsiderationsFor Upper Layer Bindingsfor ULBs . . . . . . . . . . .12. . . . . . . . 11 8. Security Considerations . . . . . . . . . . . . . . . . . . . 12 9. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 12 10. Normative References . . . . . . . . . . . . . . . . . . . . 12Appendix A.Acknowledgements . . . . . . . . . . . . . . . . . . . . . . . . 13 Author's Address . . . . . . . . . . . . . . . . . . . . . . . . 13 1. Introduction RPC-over-RDMA transports, introduced in[I-D.ietf-nfsv4-rfc5666bis],[RFC8166], efficiently convey Remote Procedure Call (RPC) transactions(RPCs)on transport layers capable of Remote Direct Memory Access (RDMA). The purpose of this document is to enable concurrent operation in both directions on a single transport connection using RPC-over-RDMA protocol versions that do not have specific facilities forreverse directionreverse-direction operation.Reverse directionReverse-direction RPC transactions are necessary for the operation of version 4.1 of the Network File System (NFS), and in particular, of Parallel NFS (pNFS) [RFC5661], though anyUpper LayerUpper-Layer Protocol (ULP) implementation may make use of them. AnUpper LayerUpper-Layer Binding (ULB) for NFS version 4.x callback operation is additionally required (see Section7),7) but is not provided in this document. For example, using the approach described herein, RPC transactions can be conveyed in both directions on the same RPC-over-RDMAVersion Oneversion 1 connection without changes to the RPC-over-RDMAVersion Oneversion 1 protocol. This document does not update the protocol specified in[I-D.ietf-nfsv4-rfc5666bis].[RFC8166]. The remainder of this document assumes familiarity with the terminology and concepts contained in[I-D.ietf-nfsv4-rfc5666bis],[RFC8166], especially Sections 2 and 3. The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be interpreted as described in BCP 14 [RFC2119] [RFC8174] when, and only when, they appear in all capitals, as shown here. 2. Understanding RPC Direction The Open Network Computing Remote Procedure Call (ONC RPC) protocol as described in [RFC5531] is architected as a message-passing protocol between one server and one or more clients. ONC RPC transactions are made up of two types of messages. A CALL message, or "Call", requests work. A Call is designated by the value CALL in the message's msg_type field. An arbitrary unique value is placed in the message'sXIDTransaction ID (XID) field. A host that originates a Call is referred to in this document as a"Requester.""Requester". A REPLY message, or "Reply", reports the results of work requested by a Call. A Reply is designated by the value REPLY in the message's msg_type field. The value contained in the message's XID field is copied from the Call whose results are being returned. A host that emits a Reply is referred to as a"Responder.""Responder". Typically, a Call results in a corresponding Reply. A Reply is never sent without a corresponding Call. RPC-over-RDMA is a connection-oriented RPC transport. In all cases, when a connection-oriented transport is used, ONC RPC client endpoints are responsible for initiating transport connections, while ONC RPC service endpoints passively await incoming connection requests. RPC direction on connectionless RPC transports is not addressed in this document. 2.1. Forward Direction Traditionally, an ONC RPC client acts as a Requester, while an ONC RPC service acts as a Responder. This form of message passing is referred to as"forward direction""forward-direction" operation. 2.2. Reverse Direction The ONC RPC specification [RFC5531] does not forbid passing messages in the other direction. An ONC RPC service endpoint can act as a Requester, in whichcasecase, an ONC RPC client endpoint acts as a Responder. This form of message passing is referred to as"reverse"reverse- direction" operation. Duringreverse directionreverse-direction operation, the ONC RPC client is responsible for establishing transport connections, even thoughONCRPCCallsCall messages come from the ONC RPC server. ONC RPC clients and servers are optimized to perform and scale well while handling traffic in the forwarddirection,direction and might not be prepared to handle operation in the reverse direction. Not until NFS version 4.1 [RFC5661] has there been a strong need to handlereversereverse- direction operation. 2.3.Bi-directionalBidirectional Operation A pair of connected RPC endpoints may choose to use onlyforwardforward- direction or onlyreverse directionreverse-direction operations on a particulartransport.transport connection. Or, these endpoints may send Calls in both directions concurrently on the sametransport. "Bi-directionaltransport connection. "Bidirectional operation" occurs when both transport endpoints act as a Requester and a Responder at the same time.Bi-directionalityBidirectionality is an extension of RPC transport connection sharing. Two RPC endpoints wish to exchange independent RPC messages over a shared connection, but in opposite directions. These messages may or may not be related to the same workloads or RPC Programs. 2.4. XID Values Section 9 of [RFC5531] introduces the ONC RPC transaction identifier, or "XID" for short. The value of an XID is interpreted in the context of the message's msg_type field. o The XID of a Call is arbitrary but is unique among outstanding Calls from that Requester. o The XID of a Reply always matches that of the initiating Call. When receiving a Reply, a Requester matches the XID value in the Reply with a Call it previously sent. 2.4.1. XID Generation Duringbi-directionalbidirectional operation,forwardforward- andreverse directionreverse-direction XIDs are typically generated on distinct hosts by possibly different algorithms. There is noco-ordinationcoordination betweenforwardforward- andreversereverse- direction XID generation. Therefore, aforward directionforward-direction Requester MAY use the same XID value at the same time as areverse directionreverse-direction Requester on the same transport connection. Though such concurrent requests use the same XID value, they represent distinct ONC RPC transactions. 3. Immediate UsesOf Bi-Directionalof Bidirectional RPC-over-RDMA 3.1. NFSversionVersion 4.0 Callback Operation An NFS version 4.0 client employs a traditional ONC RPC client to send NFS requests to an NFS version 4.0 server's traditional ONC RPC service [RFC7530]. NFS version 4.0 requests flow in the forward direction on a connection established by the client. This connection is referred to as a "forechannel" connection. An NFS version 4.x "delegation" is simply a promise made by a server that it will notify a client before another client or program running on the server is allowed access to a file. With this guarantee, that client can operate as sole accessor of the file. In particular, it can manage the file's data and metadata caches aggressively. To administer file delegations, NFS version 4.0 introduces the use of callback operations, or "callbacks", in Section 10.2 of [RFC7530]. An NFS version 4.0 server sets up aforward directionforward-direction ONC RPC client, and an NFS version 4.0 client sets up aforward directionforward-direction ONC RPC service. Callbacks flow in the forward direction on a connection established between the server's callbackclient,client and the client's callback service. This connection is distinct from connections being used asforechannels,forechannels and is referred to as a "backchannelconnection."connection". When an RDMA transport is used as a forechannel, an NFS version 4.0 client typically provides a TCP-based callback service. The client's SETCLIENTID operation advertises the callback service endpoint with a "tcp" or "tcp6" netid. The server then connects to this service using a TCP socket. NFS version 4.0 implementations can function without a backchannel in place. In this case, the NFS server does not grant file delegations. This might result in a negative performance effect, but correctness is not affected. 3.2. NFSversionVersion 4.1 Callback Operation NFS version 4.1 supports file delegation in a similar fashion to NFS version4.0,4.0 and extends the callback mechanism to manage pNFS layouts, as discussed in Section 12 of [RFC5661]. NFS version 4.1 transport connections are initiated by NFS version 4.1 clients.ThereforeTherefore, NFS version 4.1 servers send callbacks to clients in the reverse direction on connections established by NFS version 4.1 clients. NFS version 4.1 clients and servers indicate to their peers that a backchannel capability is available on a given transport connection in the arguments and results of the NFS CREATE_SESSION or BIND_CONN_TO_SESSION operations. NFS version 4.1 clients may establish distinct transport connections for forechannel and backchannel operation, or they may combine forechannel and backchannel operation on one transport connection usingbi-directionalbidirectional operation. Without areverse directionreverse-direction RPC-over-RDMA capability, an NFS version 4.1 client additionally connects using a transport withreversereverse- direction capability to use as a backchannel. Opening an independent TCP socket is the only choice for an NFS version 4.1 backchannel connection in this case. Implementations often find it more convenient to use a single combined transport(i.e.(i.e., a transport that is capable ofbi- directionalbidirectional operation). This simplifies connection establishment and recovery during network partitions or when one endpoint restarts. This can also enable better scaling by using fewer transport connections to perform the same work. As with NFS version 4.0, if a backchannel is not in use, an NFS version 4.1 server does not grant delegations. Because NFS version 4.1 relies on callbacks to manage pNFS layout state, pNFS operation is not possible without a backchannel. 4. Flow Control For an RDMA Send operation to work properly, the receiving peer has to have already posted areceiveReceive buffer in which to accept the incoming message. If a receiver hasn't posted enough buffers to accommodate each incoming Send operation, the receiving RDMA provider is allowed to terminate the RDMA connection. RPC-over-RDMA transport protocols provide built-in send flow control to prevent overrunning the number of pre-postedreceiveReceive buffers on a connection's receive endpoint using a "credit grant" mechanism. The use of credits in RPC-over-RDMAVersion Oneversion 1 is described in Section3.33.3.1 of[I-D.ietf-nfsv4-rfc5666bis].[RFC8166]. 4.1.Reverse-directionReverse-Direction Credits RPC-over-RDMA credits work the same way in the reverse direction as they do in the forward direction. However,forward directionforward-direction credits andreverse directionreverse-direction credits on the same connection are accounted separately. Direction-independent credit accounting prevents head- of-line blocking in one direction from impacting operation in the other direction. Theforward directionforward-direction credit value retains the same meaning whether or not there arereverse directionreverse-direction resources associated with an RPC- over-RDMA transport connection. This is the number of RPC requests theforward direction responderforward-direction Responder (the ONC RPC server) is prepared to receive concurrently. Thereverse directionreverse-direction credit value is the number of RPC requests thereverse direction responderreverse-direction Responder (the ONC RPC client) is prepared to receive concurrently. Thereverse directionreverse-direction credit value MAY be different than theforward directionforward-direction credit value. Duringbi-directionalbidirectional operation, each receiver has to decide whether an incoming message contains a credit request (the receiver is acting as aresponder)Responder) or a credit grant (the receiver is acting as a requester) and apply the credit value accordingly. When message direction is not fully determined by context (e.g., suggested by the definition of the RPC-over-RDMA version that is in use) or by an accompanying RPC message payload with a call direction field, it is not possible for the receiver to tell with certainty whether the header credit value is a request or grant. In such cases, the receiver MUST ignore the header's credit value. 4.2. Inline ThresholdsForwardForward- andreverse directionreverse-direction operation on the same connection share the samereceiveReceive buffers.ThereforeTherefore, the inline threshold values for the forward direction and the reverse direction are the same. The call inline threshold for the reverse direction is the same as the reply inline threshold for the forward direction, and vice versa. For more information, see Section 3.3.2 of[I-D.ietf-nfsv4-rfc5666bis].[RFC8166]. 4.3. Managing Receive Buffers An RPC-over-RDMA transport endpoint postsreceiveReceive buffers before it can receive and process incoming RPC-over-RDMA messages. If a sender transmits a message for a receiverwhichthat has no postedreceiveReceive buffer, the RDMA provider is allowed to drop the RDMA connection. 4.3.1. Client Receive BuffersTypicallyTypically, an RPC-over-RDMA Requester posts only as manyreceiveReceive buffers as there are outstanding RPC Calls.ATherefore, a client endpoint withoutreverse directionreverse-direction supportmight thereforemight, attimestimes, have no availablereceiveReceive buffers. To receive incomingreverse directionreverse-direction Calls, an RPC-over-RDMA client endpoint posts enough additionalreceiveReceive buffers to match its advertisedreverse directionreverse-direction credit value. Each outstandingforwardforward- direction RPC requires an additionalreceiveReceive buffer above this minimum. When an RDMA transport connection is lost, all activereceiveReceive buffers are flushed and are no longer available to receive incoming messages. When a fresh transport connection is established, a client endpointre-postsposts areceiveReceive buffer to handle the Reply for each retransmittedforward directionforward-direction Call, anda full set of receiveit posts enough Receive buffers to handlereverse directionreverse-direction Calls. 4.3.2. Server Receive Buffers Aforward directionforward-direction RPC-over-RDMA service endpoint posts as manyreceiveReceive buffers as it expects incomingforward directionforward-direction Calls. That is, it posts no fewer buffers than the number of credits granted in the rdma_credit field offorward directionforward-direction RPC replies. To receive incomingreverse directionreverse-direction replies, an RPC-over-RDMA server endpoint posts enough additionalreceiveReceive buffers to handle replies for eachreverse directionreverse-direction Call it sends. When the existing transport connection is lost, all activereceiveReceive buffers are flushed and are no longer available to receive incoming messages. When a fresh transport connection is established, a server endpointre-postsposts areceiveReceive buffer to handle the Reply for each retransmittedreverse directionreverse-direction Call, anda full set of receiveit posts enough Receive buffersfor receiving forward directionto handle incoming forward-direction Calls. 5. SendingAndand Receiving OperationsIn Thein the Reverse Direction The operation of RPC-over-RDMA transports in the forward direction is defined in [RFC5531] and[I-D.ietf-nfsv4-rfc5666bis].[RFC8166]. In this section, a mechanism forreverse directionreverse-direction operation on RPC-over-RDMA is defined.ReverseReverse- direction operation used in combination withforwardforward-direction operation enablesbi-directionalbidirectional communication on a commonRPC-over-RDMARPC-over- RDMA transport connection. Certain fields in the RPC-over-RDMA header have a fixed position in all versions of RPC-over-RDMA. The normative specification of these fields is contained in Section 4 of[I-D.ietf-nfsv4-rfc5666bis].[RFC8166]. 5.1. SendingAa CallIn Thein the Reverse Direction To form areverse directionreverse-direction RPC-over-RDMA Call message, an ONC RPC service endpoint constructs an RPC-over-RDMA header containing a fresh RPC XID in the rdma_xid field (see Section 2.4 for full requirements). The rdma_vers field MUST contain the same value inreversereverse- andforward directionforward-direction Call messages on the same connection. The number of requestedreverse directionreverse-direction credits is placed in the rdma_credit field (see Section 4). Whether presented inline or as a separate chunk, the ONC RPC Call header MUST start with the same XID value that is present in the RPC- over-RDMA header, and the RPC header's msg_type field MUST contain the value CALL. 5.2. SendingAa ReplyIn Thein the Reverse Direction To form areverse directionreverse-direction RPC-over-RDMA Reply message, an ONC RPC client endpoint constructs an RPC-over-RDMA header containing a copy of the matching ONC RPC Call's RPC XID in the rdma_xid field (see Section 2.4 for full requirements). The rdma_vers field MUST contain the same value in areversereverse- direction Reply message as in the matching Call message. The number of grantedreverse directionreverse-direction credits is placed in the rdma_credit field (see Section 4). Whether presented inline or as a separate chunk, the ONC RPC Reply header MUST start with the same XID value that is present in the RPC- over-RDMA header, and the RPC header's msg_type field MUST contain the value REPLY. 5.3. Using ChunksIn Reverse Directionin Reverse-Direction Operations A "chunk" refers to aDDP-eligibleportion of a message's Payload stream that is DDP-eligible and that is placed directly in the receiver's memory by the transport. Chunk data may be moved by an explicit RDMA operation, for example. Chunks are defined in Section 3.4.4 andDDP-eligibilityDDP- eligibility is covered in Section 6.1 of[I-D.ietf-nfsv4-rfc5666bis].[RFC8166]. Chunks MAY be used in the reverse direction. They operate the same way as in the forward direction. An implementation might support onlyUpper Layer ProtocolsULPs that have no DDP-eligible data items. SuchUpper Layer ProtocolsULPs may use only small messages, or they may have a native mechanism for restricting the size ofreverse directionreverse-direction RPC messages, obviating the need to handle Long Messages in the reverse direction. When there is noUpper Layer ProtocolULP requirement for chunks in the reverse direction, implementers can choose not to provide support for chunks in the reverse direction. This avoids the complexity of adding support for performing RDMA Reads and Writes in the reverse direction. When chunks are not implemented, RPC messages in the reverse direction are always sent using a Shortmessage, and thereforeMessage; therefore, they can be no larger than what can be sent inline (that is, without chunks). Sending an inline message larger than the inline threshold can result in loss of connection. If areverse directionreverse-direction requester provides a non-empty chunk list to aresponderResponder that does not support chunks, theresponderResponder MUST reply with an RDMA_ERROR message with rdma_err field set to ERR_CHUNK. 5.4.Reverse DirectionReverse-Direction Retransmission In rare cases, an ONC RPC service cannot complete an RPC transaction and then send a reply. This can be because the transport connection was lost, because the Call or Reply message was dropped, or because theUpper Layer consumerULP delayed or dropped the ONC RPC request. Typically, the Requester sends the RPC transaction again, reusing the same RPC XID. This is known as an "RPC retransmission". In the forward direction, the Requester is the ONC RPC client. The client is always responsible for establishing a transport connection before sending again. Withreverse directionreverse-direction operation, the Requester is the ONC RPC server. Because an ONC RPC server does not establish transport connections with clients, it cannot retransmit if there is no transport connection. It is forced to wait for the ONC RPC client to re-establish a transport connection before it can retransmit ONC RPC transactions in the reverse direction. If the ONC RPC client peer has no work to do, it can be some time before it re-establishes a transport connection. A waitingreversereverse- direction ONC RPC Call may time out to avoid waiting indefinitely for a connection to be established.Therefore forward directionTherefore, forward-direction Requesters SHOULD maintain a transport connection as long as there is the possibility that the connection peer can sendreverse directionreverse-direction requests. For example, while an NFS version 4.1 client has open delegated files or active pNFS layouts, it maintains one or more transport connections to enable the NFS server to perform callback operations. 6. In the Absence of SupportFor Reverse Directionfor Reverse-Direction Operation An RPC-over-RDMA transport endpoint might not supportreversereverse- direction operation (and thus it does not supportbi-directionalbidirectional operation). There might be no mechanism in the transport implementation to do so. Or in an implementation that can support operation in the reverse direction, theUpper Layer Protocol consumerULP might not yet have configured or enabled the transport to handlereverse directionreverse-direction traffic. If an endpoint is not prepared to receive an incomingreversereverse- direction message, loss of the RDMA connection might result.ThusThus, denial of service could result if a sender continues to sendreversereverse- direction messages after every transport reconnect to an endpoint that is not prepared to receive them. When dealing with the possibility that the remote peer has notransport leveltransport-level support forreverse directionreverse-direction operation, theUpper Layer ProtocolULP becomes responsible for informing peers whenreverse directionreverse-direction operation is supported.OtherwiseOtherwise, even a simplereverse directionreverse-direction RPC NULL procedure from a peer could result in a lost connection. Therefore,an Upper Layer Protocol consumera ULP MUST NOT performreverse directionreverse-direction ONC RPC operations until the peerconsumerhas indicated it is prepared to handle them. A description ofUpper Layer ProtocolULP mechanisms used for this indication is outside the scope of this document. For example, an NFS version 4.1 server does not send backchannel messages to an NFS version 4.1 client before the NFS version 4.1 client has sent a CREATE_SESSION or a BIND_CONN_TO_SESSION operation. As long as an NFS version 4.1 client has prepared appropriate resources to receivereverse directionreverse-direction operations before sending one of these NFS operations, denial of service is avoided. 7. ConsiderationsFor Upper Layer Bindings An Upper Layer Protocolfor ULBs A ULP that operates on RPC-over-RDMA transports may have procedures that include DDP-eligible data items.DDP- eligibilityDDP-eligibility is specified in anUpper Layer Binding.Upper-Layer Binding (ULB). Direction of operation does not obviate the need for DDP-eligibility statements. Reverse-direction-only operation requires the client endpoint to establish a fresh connection. TheUpper Layer BindingULB can specify appropriate RPC binding parameters for such connections.Bi-directionalBidirectional operation occurs on an already-established connection. Specification of RPC binding parameters is usually not necessary in this case. Forbi-directionalbidirectional operation, other considerations may apply when distinct RPC Programs share an RPC-over-RDMA transport connection concurrently. Consult Section 6 of[I-D.ietf-nfsv4-rfc5666bis][RFC8166] for details about what else may be contained inan Upper Layer Binding.a ULB. 8. Security Considerations RPC security is handled in the RPC layer, which is above the transport layer where RPC-over-RDMA operates.Reverse directionReverse-direction operations make use of an authentication mechanism and credentials that are independent offorward directionforward-direction operation but otherwise operate in the same fashion as outlined in Section 8.2 of[I-D.ietf-nfsv4-rfc5666bis].[RFC8166]. 9. IANA Considerations This document does not requireactions by IANA.any IANA actions. 10. Normative References[I-D.ietf-nfsv4-rfc5666bis] Lever, C., Simpson, W., and T. Talpey, "Remote Direct Memory Access Transport for Remote Procedure Call, Version One", draft-ietf-nfsv4-rfc5666bis-10 (work in progress), February 2017.[RFC2119] Bradner, S., "Key words for use in RFCs to Indicate Requirement Levels", BCP 14, RFC 2119, DOI 10.17487/RFC2119, March1997.1997, <http://www.rfc-editor.org/info/rfc2119>. [RFC5531] Thurlow, R., "RPC: Remote Procedure Call Protocol Specification Version 2", RFC 5531, DOI 10.17487/RFC5531, May2009.2009, <http://www.rfc-editor.org/info/rfc5531>. [RFC5661] Shepler, S., Ed., Eisler, M., Ed., and D. Noveck, Ed., "Network File System (NFS) Version 4 Minor Version 1 Protocol", RFC 5661, DOI 10.17487/RFC5661, January2010.2010, <http://www.rfc-editor.org/info/rfc5661>. [RFC7530] Haynes,T.T., Ed. and D. Noveck, Ed., "Network File System (NFS) Version 4 Protocol", RFC 7530, DOI 10.17487/RFC7530, March2015. Appendix A.2015, <http://www.rfc-editor.org/info/rfc7530>. [RFC8166] Lever, C., Ed., Simpson, W., and T. Talpey, "Remote Direct Memory Access Transport for Remote Procedure Call Version 1", RFC 8166, DOI 10.17487/RFC8166, June 2017, <http://www.rfc-editor.org/info/rfc8166>. [RFC8174] Leiba, B., "Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words", BCP 14, RFC 8174, DOI 10.17487/RFC8174, May 2017, <http://www.rfc-editor.org/info/rfc8174>. Acknowledgements Tom Talpey was an indispensable resource, in addition to creating the foundation upon which this work is based.OurThe author's warmest regards go to him for his help and support. Dave Noveck provided excellent review, constructive suggestions, and navigational guidance throughout the process of drafting this document. Dai Ngo was a solid partner and collaborator. Together we constructed and tested independent prototypes of the changes described in this document. The author wishes to thank Bill Baker and Greg Marsden for their unwavering support of this work. In addition, the author gratefully acknowledges the expert contributions of Karen Deitke, Chunli Zhang, Mahesh Siddheshwar, Steve Wise, and Tom Tucker. Special thanks go to Transport Area Director Spencer Dawkins,nfsv4NFSV4 Working Group Chair anddocument shepherdDocument Shepherd Spencer Shepler, andnfsv4NFSV4 Working Group Secretary Tom Haynes for their support. Author's Address Charles Lever Oracle Corporation 1015 Granger Avenue Ann Arbor, MI 48104USAUnited States of America Phone: +1 248 816 6463 Email: chuck.lever@oracle.com