Internet DRAFT - draft-dnoveck-nfsv4-rpcrdma-xcharext
draft-dnoveck-nfsv4-rpcrdma-xcharext
Network File System Version 4 D. Noveck
Internet-Draft HPE
Intended status: Standards Track September 24, 2016
Expires: March 28, 2017
RPC-over-RDMA Extension to Manage Transport Properties
draft-dnoveck-nfsv4-rpcrdma-xcharext-03
Abstract
This document specifies an extension RPC-over-RDMA Version Two. The
extension enables endpoints of an RPC-over-RDMA connection to
exchange information which can be used to optimize message transfer.
Status of This Memo
This Internet-Draft is submitted in full conformance with the
provisions of BCP 78 and BCP 79.
Internet-Drafts are working documents of the Internet Engineering
Task Force (IETF). Note that other groups may also distribute
working documents as Internet-Drafts. The list of current Internet-
Drafts is at http://datatracker.ietf.org/drafts/current/.
Internet-Drafts are draft documents valid for a maximum of six months
and may be updated, replaced, or obsoleted by other documents at any
time. It is inappropriate to use Internet-Drafts as reference
material or to cite them other than as "work in progress."
This Internet-Draft will expire on March 28, 2017.
Copyright Notice
Copyright (c) 2016 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.
Noveck Expires March 28, 2017 [Page 1]
Internet-Draft RPC-over-RDMA Transport Properties September 2016
Table of Contents
1. Preliminaries . . . . . . . . . . . . . . . . . . . . . . . . 2
1.1. Requirements Language . . . . . . . . . . . . . . . . . . 2
1.2. Introduction . . . . . . . . . . . . . . . . . . . . . . 2
1.3. Role Terminology . . . . . . . . . . . . . . . . . . . . 3
2. Transport Properties . . . . . . . . . . . . . . . . . . . . 4
2.1. Property Model . . . . . . . . . . . . . . . . . . . . . 4
2.2. Transport Property Groups . . . . . . . . . . . . . . . . 5
2.3. Operations Related to Transport Properties . . . . . . . 6
3. Basic Transport Properties . . . . . . . . . . . . . . . . . 6
3.1. Receive Buffer Size . . . . . . . . . . . . . . . . . . . 8
3.2. Requester Remote Invalidation . . . . . . . . . . . . . . 9
3.3. Backward Request Support . . . . . . . . . . . . . . . . 10
4. New Operations . . . . . . . . . . . . . . . . . . . . . . . 11
4.1. ROPT_CONNPROP: Specify Properties at Connection . . . . . 12
4.2. ROPT_REQPROP: Request Modification of Properties . . . . 13
4.3. ROPT_RESPROP: Respond to Request to Modify Transport
Properties . . . . . . . . . . . . . . . . . . . . . . . 13
4.4. ROPT_UPDPROP: Update Transport Properties . . . . . . . . 15
5. XDR . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
5.1. Code Component License . . . . . . . . . . . . . . . . . 16
5.2. XDR Proper for Extension . . . . . . . . . . . . . . . . 18
6. Extensibility . . . . . . . . . . . . . . . . . . . . . . . . 19
6.1. Additional Properties . . . . . . . . . . . . . . . . . . 19
6.2. Experimental Properties . . . . . . . . . . . . . . . . . 20
7. Security Considerations . . . . . . . . . . . . . . . . . . . 21
8. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 21
9. References . . . . . . . . . . . . . . . . . . . . . . . . . 21
9.1. Normative References . . . . . . . . . . . . . . . . . . 21
9.2. Informative References . . . . . . . . . . . . . . . . . 22
Appendix A. Acknowledgments . . . . . . . . . . . . . . . . . . 22
Author's Address . . . . . . . . . . . . . . . . . . . . . . . . 22
1. Preliminaries
1.1. 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].
1.2. Introduction
This document specifies an extension to RPC-over-RDMA Version Two.
It allows each participating endpoint on a single connection to
communicate various properties of its implementation, to request
Noveck Expires March 28, 2017 [Page 2]
Internet-Draft RPC-over-RDMA Transport Properties September 2016
changes in properties of the other endpoint, and to notify the other
endpoint of changes to properties made during operation.
The extension described herein specifies OPTIONAL message header
types to implement this mechanism. The means by which the
implementation support status of these OPTIONAL types is ascertained
is described in [rpcrmdav2].
Although this document specifies the new OPTIONAL message header
types to implement these functions, the precise means by which the
presence of support for these OPTIONAL functions will be ascertained
is not described here, as would be done more appropriately by the RFC
defining a version of RPC-over-RDMA which supports protocol
extension.
This document is currently written to conform to the extension model
for RPC-over-RDMA Version Two as described in [rpcrdmav2].
1.3. Role Terminology
A number of different terms are used regarding the roles of the two
participants in an RPC-over-RMA connection. Some of these roles are
fixed for the duration of a connection while others vary from request
to request or from message to message.
The roles of the client and server are fixed for the lifetime of the
connection, with the client defined as the endpoint which initiated
the connection.
The roles of requester and responder often parallel those of client
and server, although this is not always the case. Most requests are
made in the forward direction, in which the client is the requester
and the server is the responder. However, backward-direction
requests are possible, in which case the server is the requester and
the client is the responder. As a result, clients and servers may
both act as requesters and responders.
The roles of sender and receiver change from message to message.
With regard to the types of messages described in this document, both
the client and the server can act as sender and receiver. With
regard to messages used to transfer RPC requests and replies, the
requester sends requests and receives replies while the responder
receives requests and sends replies.
Noveck Expires March 28, 2017 [Page 3]
Internet-Draft RPC-over-RDMA Transport Properties September 2016
2. Transport Properties
2.1. Property Model
A basic set of receiver and sender properties is specified in this
document. An extensible approach is used, allowing new properties to
be defined in future standards track documents.
Such properties are specified using:
o A code identifying the particular transport property being
specified.
o A nominally opaque array which contains within it the XDR encoding
of the specific property indicated by the associated code.
The following XDR types are used by operations that deal with
transport properties:
<CODE BEGINS>
typedef propid uint32;
struct propval {
propid pv_which;
opaque pv_data<>;
};
typedef propval propvalset<>;
typedef uint32 propvalsubset<>;
<CODE ENDS>
A propid specifies a particular transport property. In order to
allow easier XDR extension of the set of properties by concatenating
XDR files, specific properties are defined as const values rather
than as elements in an enum.
A propval specifies a value of a particular transport property with
the particular property identified by pv_which, while the associated
value of that property is contained within pv_data.
A pv_data which is of zero length is interpreted as indicating the
default value or the property indicated by pv_which.
While pv_data is defined as opaque within the XDR, the contents are
interpreted (except when of length zero) using the XDR typedef
Noveck Expires March 28, 2017 [Page 4]
Internet-Draft RPC-over-RDMA Transport Properties September 2016
associated with the property specified by pv_which. The receiver of
a message containing a propval MUST report an XDR error if the length
of pv_data is such that it extends beyond the bounds of the message
transferred.
In cases in which the propid specified by pv_which is understood by
the receiver, the receiver also MUST report an XDR error if either of
the following occur:
o The nominally opaque data within pv_data is not valid when
interpreted using the property-associated typedef.
o The length of pv_data is insufficient to contain the data
represented by the property-associated typedef.
Note that no error is to be reported if pv_which is unknown to the
receiver. In that case, that propval is not processed and processing
continues using the next propval, if any.
A propvalset specifies a set of transport properties. No particular
ordering of the propvals within it is imposed.
A propvalsubset identifies a subset of the properties in a previously
specified propvalset. Each bit in the mask denotes a particular
element in a previously specified propvalset. If a particular
propval is at position N in the array, then bit number N mod 32 in
word N div 32 specifies whether that particular propval is included
in the defined subset. Words beyond the last one specified are
treated as containing zero.
Propvalsubsets are useful in a number of contexts:
o In the specification of transport properties at connection, they
allow the sender to specify what subset of those are subject to
later change.
o In responding to a request to modify a set of transport
properties, they allow the responding endpoint to specify the
subsets of those properties for which the requested change has
been performed or been rejected.
2.2. Transport Property Groups
Transport properties are divided into a number of groups
o A basic set of transport properties defined in this document. See
Section 3 for the complete list.
Noveck Expires March 28, 2017 [Page 5]
Internet-Draft RPC-over-RDMA Transport Properties September 2016
o Additional transport properties defined in future standards track
documents as specified in Section 6.1.
o Experimental transport properties being explored preparatory to
being considered for standards track definition. See the
description in Section 6.2.
2.3. Operations Related to Transport Properties
There are a number of operations defined in Section 4 which are used
to communicate and manage transport properties.
Prime among these is ROPT_CONNPROP (defined in Section 4.1 which
serves as a means by which an endpoint's transport properties may be
presented to its peer, typically upon establishing a connection.
In addition, there are a set of related operations concerned with
requesting, effecting and reporting changes in transport properties:
o ROPT_REQPROP (defined in Section 4.2 which serves as a way for an
endpoint to request that a peer change the values for a set of
transport properties.
o ROPT_RESPROP (defined in Section 4.3 is used to report on the
disposition of each of the individual transport property changes
requested in a previous ROPT_REQPROP.
o ROPT_UPDPROP (defined in Section 4.4 is used to report an
unsolicited change in a transport property.
Unlike many other operation types, the above are not used to effect
transfer of RPC requests but are internal one-way information
transfers. However, a ROPT_REQPROP and the corresponding
ROPT_RESPROP do constitute an RPC-like remote call. The other
operations are not part of a remote call transaction.
3. Basic Transport Properties
Although the set of transport properties is subject to later
extension, a basic set of transport properties is defined below in
Table 1.
In that table, the columns contain the following information:
o The column labeled "property" identifies the transport property
described by the current row.
Noveck Expires March 28, 2017 [Page 6]
Internet-Draft RPC-over-RDMA Transport Properties September 2016
o The column labeled "code" specifies the propid value used to
identify this property.
o The column labeled "XDR type" gives the XDR type of the data used
to communicate the value of this property. This data type
overlays the data portion of the nominally opaque field pv_data in
a propval.
o The column labeled "default" gives the default value for the
property which is to be assumed by those who do not receive, or
are unable to interpret, information about the actual value of the
property.
o The column labeled "section" indicates the section (within this
document) that explains the semantics and use of this transport
property.
+--------------------+------+-----------+-----------------+---------+
| property | code | XDR type | default | section |
+--------------------+------+-----------+-----------------+---------+
| Receive Buffer | 1 | uint32 | 4096 | 3.1 |
| Size | | | | |
| Requester Remote | 2 | bool | false | 3.2 |
| Invalidation | | | | |
| Backward Request | 3 | enum | BKREQSUP_INLINE | 3.3 |
| Support | | bkreqsup | | |
+--------------------+------+-----------+-----------------+---------+
Table 1
Note that this table does not provide any indication regarding
whether a particular property can change or whether a change in the
value may be requested (see Section 4.2). Such matters are not
addressed by the protocol definition. An implementation may provide
information about its readiness to make changed in a particular
property using the opticonnpr_nochg field in the ROPT_CONNPROP
message.
A partner implementation can always request a change but peers MAY
reject a request to change a property for any reason.
Implementations are always free to reject such requests if they
cannot or do not wish to effect the requested change.
Either of the following will result in effective rejection requests
to change specific properties:
Noveck Expires March 28, 2017 [Page 7]
Internet-Draft RPC-over-RDMA Transport Properties September 2016
o If an endpoint does not wish to accept request to change
particular properties, it may reject such requests as described in
Section 4.3.
o If an endpoint does not support the ROPT_REQPROP operation, the
effect would be the same as if every request to change a set of
property were rejected.
With regard to unrequested changes in transport properties, it is the
responsibility of the implementation making the change to do so in a
fashion that which does not interfere with the other partner's
continued correct operation (see Section 3.1).
3.1. Receive Buffer Size
The Receive Buffer Size specifies the minimum size, in octets, of
pre-posted receive buffers. It is the responsibility of the
participant sending this value to ensure that its pre-posted receives
are at least the size specified, allowing the participant receiving
this value to send messages that are of this size.
<CODE BEGINS>
const uint32 PROP_RBSIZ = 1;
typedef uint32 prop_rbsiz;
<CODE ENDS>
The sender may use his knowledge of the receiver's buffer size to
determine when the message to be sent will fit in the preposted
receive buffers that the receiver has set up. In particular,
o Requesters may use the value to determine when it is necessary to
provide a Position-Zero read chunk when sending a request.
o Requesters may use the value to determine when it is necessary to
provide a Reply chunk when sending a request, based on the maximum
possible size of the reply.
o Responders may use the value to determine when it is necessary,
given the actual size of the reply, to actually use a Reply chunk
provided by the requester.
Because there may be pre-posted receives with buffer sizes that
reflect earlier values of the buffer size property, changing this
property poses special difficulties:
Noveck Expires March 28, 2017 [Page 8]
Internet-Draft RPC-over-RDMA Transport Properties September 2016
o When the size is being raised, the partner should not be informed
of the change until all pending receives using the older value
have been eliminated.
o The size should not be reduced until the partner is aware of the
need to reduce the size of future sends to conform to this reduced
value. To ensure this, such a change should only occur in
response to an explicit request by the other endpoint (See
Section 4.2). The participant making the request should use that
lower size as the send size limit until the request is rejected
(See Section 4.3) or an update to a size larger than the requested
value becomes effective and the requested change is no longer
pending (See Section 4.4).
3.2. Requester Remote Invalidation
The Requester Remote Invalidation property indicates that the current
endpoint, when in the role of a requester, is prepared for the
responder to use RDMA Send With Invalidate when replying to an RPC-
over-RDMA request containing non-empty chuck lists.
As RPC-over-RDMA is currently used, memory registrations exposed to
peers are not established by the server and explicit RDMA operations
are not done to satisfy backward direction requests. This makes it
unlikely that servers will present non-default values of the
PROP_REQREMINV property or that clients will take note of that value
when presented by servers.
<CODE BEGINS>
const uint32 PROP_REQREMINV = 2;
typedef bool prop_reqreminv;
<CODE ENDS>
When the Requester Remote Invalidate property is set to false, a
responder MUST use Send to convey RPC reply messages to the
requester. When the Requester Remote Invalidate property is set to
true, a responder MAY use Send With Invalidate instead of Send to
convey RPC replies to the requester.
The value of the Requester Remote Invalidate property is not likely
to change from the value reported by ROPT_INITPROP (see Section 4.2).
Noveck Expires March 28, 2017 [Page 9]
Internet-Draft RPC-over-RDMA Transport Properties September 2016
3.3. Backward Request Support
The value of this property is used to indicate a client
implementation's readiness to accept and process messages that are
part of backward-direction RPC requests.
<CODE BEGINS>
enum bkreqsup {
BKREQSUP_NONE = 0,
BKREQSUP_INLINE = 1,
BKREQSUP_GENL = 2
};
const uint32 PROP_BRS = 3;
typedef bkreqsup prop_brs;
<CODE ENDS>
Multiple levels of support are distinguished:
o The value BKREQSUP_NONE indicates that receipt of backward-
direction requests and replies is not supported.
o The value BKREQSUP_INLINE indicates that receipt of backward-
direction requests or replies is only supported using inline
messages and that use of explicit RDMA operations or other form of
Direct Data Placement for backward direction requests or responses
is not supported.
o The value BKREQSUP_GENL that receipt of backward-direction
requests or replies is supported in the same ways that forward-
direction requests or replies typically are.
When information about this property is not provided, the support
level of servers can be inferred from the backward- direction
requests that they issue, assuming that issuing a request implicitly
indicates support for receiving the corresponding reply. On this
basis, support for receiving inline replies can be assumed when
requests without read chunks, write chunks, or Reply chunks are
issued, while requests with any of these elements allow the client to
assume that general support for backward-direction replies is present
on the server.
Noveck Expires March 28, 2017 [Page 10]
Internet-Draft RPC-over-RDMA Transport Properties September 2016
4. New Operations
The proposed new operations are set forth in Table 2 below. In that
table, the columns contain the following information:
o The column labeled "operation" specifies the particular operation.
o The column labeled "code" specifies the value of opttype for this
operation.
o The column labeled "XDR type" gives the XDR type of the data
structure used to describe the information in this new message
type. This data overlays the data portion of the nominally opaque
field optinfo in an RDMA_OPTIONAL message.
o The column labeled "msg" indicates whether this operation is
followed (or not) by an RPC message payload.
o The column labeled "section" indicates the section (within this
document) that explains the semantics and use of this optional
operation.
+------------------------+------+------------------+------+---------+
| operation | code | XDR type | msg | section |
+------------------------+------+------------------+------+---------+
| Specify Properties at | 1 | optinfo_connprop | No | 4.1 |
| Connection | | | | |
| Request Property | 2 | optinfo_reqprop | No | 4.2 |
| Modification | | | | |
| Respond to | 3 | optinfo_resprop | No | 4.3 |
| Modification Request | | | | |
| Report Updated | 4 | optinfo_updprop | No | 4.4 |
| Properties | | | | |
+------------------------+------+------------------+------+---------+
Table 2
Support for all of the operations above is OPTIONAL. RPC-over-RDMA
Version Two implementations that receive an operation that is not
supported MUST respond with RDMA_ERROR message with an error code of
RDMA_ERR_INVAL_OPTION as specified in [rpcrdmav2]
The only operation support requirements are as follows:
o Implementations which send ROPT_REQPROP messages must support
ROPT_RESPROP messages.
Noveck Expires March 28, 2017 [Page 11]
Internet-Draft RPC-over-RDMA Transport Properties September 2016
o Implementations which support ROPT_RESPROP or ROPT_UPDPROP
messages must also support ROPT_CONNPROP messages.
4.1. ROPT_CONNPROP: Specify Properties at Connection
The ROPT_CONNPROP message type allows an RPC-over-RDMA participant,
whether client or server, to indicate to its partner relevant
transport properties that the partner might need to be aware of.
The message definition for this operation is as follows:
<CODE BEGINS>
const uint32 ROPT_CONNPROP= 1;
struct optinfo_connprop {
propvalset opticonnpr_start;
propvalsubset opticonnpr_nochg;
};
<CODE ENDS>
All relevant transport properties that the sender is aware of should
be included in opticonnpr_start. Since support of this request is
OPTIONAL, and since each of the properties is OPTIONAL as well, the
sender cannot assume that the receiver will necessarily take note of
these properties and so the sender should be prepared for cases in
which the partner continues to assume that the default value for a
particular property is still in effect.
Values of the subset of transport properties specified by
opticonnpr_nochg is not expected to change during the lifetime of the
connection.
Generally, a participant will send a ROPT_CONNPR message as the first
message after a connection is established. Given that fact, the
sender should make sure that the message can be received by partners
who use the default Receive Buffer Size. The connection's initial
receive buffer size is typically 1KB, but it depends on the initial
connection state of the RPC-over-RDMA version in use. See
[rpcrdmav2] for details.
Properties not included in opticonnpr_start are to be treated by the
peer endpoint as having the default value and are not allowed to
change subsequently. The peer should not request changes in such
properties.
Noveck Expires March 28, 2017 [Page 12]
Internet-Draft RPC-over-RDMA Transport Properties September 2016
Those receiving an ROPT_CONNPR may encounter properties that they do
not support or are unaware of. In such cases, these properties are
simply ignored without any error response being generated.
4.2. ROPT_REQPROP: Request Modification of Properties
The ROPT_REQPROP message type allows an RPC-over-RDMA participant,
whether client or server, to request of its partner that relevant
transport properties be changed.
The rdma_xid field allows the request to be tied to a corresponding
response of type ROPT_RESPROP (See Section 4.3.) In assigning the
value of this field, the sender does not need to avoid conflict with
xid's associated with RPC messages or with ROPT_REQPROP messages sent
by the peer endpoint.
The partner need not change the properties as requested by the sender
but if it does support the message type, it will generate a
ROPT_RESPROP message, indicating the disposition of the request.
The message definition for this operation is as follows:
<CODE BEGINS>
const uint32 ROPT_REQPROP = 2;
struct optinfo_reqprop {
propvalset optreqpr_want;
};
<CODE ENDS>
The propvalset optreqpr_want is a set of transport properties
together with the desired values requested by the sender.
4.3. ROPT_RESPROP: Respond to Request to Modify Transport Properties
The ROPT_RESPROP message type allows an RPC-over-RDMA participant to
respond to a request to change properties by its partner, indicating
how the request was dealt with.
The message definition for this operation is as follows:
Noveck Expires March 28, 2017 [Page 13]
Internet-Draft RPC-over-RDMA Transport Properties September 2016
<CODE BEGINS>
const uint32 ROPT_RESPROP = 3;
struct optinfo_resprop {
propvalsubset optrespr_done;
propvalsubset optrespr_rej;
propvalset optrespr_other;
};
<CODE ENDS>
The rdma_xid field of this message must match that used in the
ROPT_REQPROP message to which this message is responding.
The optrespr_done field indicates which of the requested transport
property changes have been effected as requested. For each such
property, the receiver is entitled to conclude that the requested
change has been made and that future transmissions may be made based
on the new value.
The optrespr_rej field indicates which of the requested transport
property changes have been rejected by the sender. This may be
because of any of the following reasons:
o The particular property specified is not known or supported by the
receiver of the ROPT_REQPROP message.
o The implementation receiving the ROPT_REQPROP message does not
support modification of this property.
o The implementation receiving the ROPT_REQPROP message has chosen
to reject the modification for another reason.
The optrespr_other field contains new values for properties where a
change is requested. The new value of the property is included and
may be a value different from the original value in effect when the
change was requested and from the requested value. This is useful
when the new value of some property is not as large as requested but
still different from the original value, indicating a partial
satisfaction of the peer's property change request.
The sender MUST NOT include propvals within optrespr_other that are
for properties other than the ones for which the corresponding
property request has requested a change. If the receiver finds such
a situation, it MUST ignore the erroneous propvals.
Noveck Expires March 28, 2017 [Page 14]
Internet-Draft RPC-over-RDMA Transport Properties September 2016
The subsets of properties specified by optrespr_done, optrespr_rej,
and included in optrespr_other MUST NOT overlap, and when ored
together, should cover the entire set of properties specified by
optreqpr_want in the corresponding request. If the receiver finds
such an overlap or mismatch, it SHOULD treat properties missing or
within the overlap as having been rejected.
4.4. ROPT_UPDPROP: Update Transport Properties
The ROPT_UPDPROP message type allows an RPC-over-RDMA participant to
notify the other participant that a change to the transport
properties has occurred. This is because the sender has decided,
independently, to modify one or more transport properties and is
notifying the receiver of these changes.
The message definition for this operation is as follows:
<CODE BEGINS>
const uint32 ROPT_UPDPROP = 4;
struct optinfo_updprop {
propvalset optupdpr_now;
};
<CODE ENDS>
optupdpr_now defines the new property values to be used.
5. XDR
This section contains an XDR [RFC4506] description of the proposed
extension.
This description is provided in a way that makes it simple to extract
into ready-to-use form. The reader can apply the following shell
script to this document to produce a machine-readable XDR description
of extension which can be combined with XDR for the base protocol to
produce an XDR that combines the base protocol with the optional
extensions.
Noveck Expires March 28, 2017 [Page 15]
Internet-Draft RPC-over-RDMA Transport Properties September 2016
<CODE BEGINS>
#!/bin/sh
grep '^ *///' | sed 's?^ /// ??' | sed 's?^ *///$??'
<CODE ENDS>
That is, if the above script is stored in a file called "extract.sh"
and this document is in a file called "ext.txt" then the reader can
do the following to extract an XDR description file for this
extension:
<CODE BEGINS>
sh extract.sh < ext.txt > charext.x
<CODE ENDS>
5.1. Code Component License
Code components extracted from this document must include the
following license text. When the extracted XDR code is combined with
other complementary XDR code which itself has an identical license,
only a single copy of the license text need be preserved.
Noveck Expires March 28, 2017 [Page 16]
Internet-Draft RPC-over-RDMA Transport Properties September 2016
<CODE BEGINS>
/// /*
/// * Copyright (c) 2010, 2016 IETF Trust and the persons
/// * identified as authors of the code. All rights reserved.
/// *
/// * The author of the code is: D. Noveck.
/// *
/// * Redistribution and use in source and binary forms, with
/// * or without modification, are permitted provided that the
/// * following conditions are met:
/// *
/// * - Redistributions of source code must retain the above
/// * copyright notice, this list of conditions and the
/// * following disclaimer.
/// *
/// * - Redistributions in binary form must reproduce the above
/// * copyright notice, this list of conditions and the
/// * following disclaimer in the documentation and/or other
/// * materials provided with the distribution.
/// *
/// * - Neither the name of Internet Society, IETF or IETF
/// * Trust, nor the names of specific contributors, may be
/// * used to endorse or promote products derived from this
/// * software without specific prior written permission.
/// *
/// * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS
/// * AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED
/// * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
/// * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
/// * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO
/// * EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
/// * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
/// * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
/// * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
/// * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
/// * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
/// * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
/// * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
/// * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
/// * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
/// */
<CODE ENDS>
Noveck Expires March 28, 2017 [Page 17]
Internet-Draft RPC-over-RDMA Transport Properties September 2016
5.2. XDR Proper for Extension
<CODE BEGINS>
///
////*
/// * Core transport property types
/// */
///typedef propid uint32;
///
///struct propval {
/// propid pv_which;
/// opaque pv_data<>;
///};
///
///typedef propval propvalset<>;
///
///typedef uint32 propvalsubset<>;
///
////*
/// * Transport property codes for basic properties
/// */
///const uint32 PROP_RBSIZ = 1;
///const uint32 PROP_REQREMINV = 2;
///const uint32 PROP_BRS = 3;
///
////*
/// * Other transport property types
/// */
///enum bkreqsup {
/// BKREQSUP_NONE = 0,
/// BKREQSUP_INLINE = 1,
/// BKREQSUP_GENL = 2
///};
///
////*
/// * Transport property typedefs
/// */
///typedef uint32 prop_bsiz;
///typedef bool prop_reqreminv;
///typedef bkreqsup prop_brs;
///
////*
/// * Optional operation codes
/// */
///const uint32 ROPT_CONNPROP = 1;
///const uint32 ROPT_REQPROP = 2;
Noveck Expires March 28, 2017 [Page 18]
Internet-Draft RPC-over-RDMA Transport Properties September 2016
///const uint32 ROPT_RESPRO = 3;
///const uint32 ROPT_UPDPROP = 4;
///
////*
/// * Optional operation message structures
/// */
///struct optinfo_connprop {
/// propvalset opticonnpr_start;
/// propvalsubset opticonnpr_nochg;
///};
///
///struct optinfo_reqprop {
/// propvalset optreqpr_want;
///
///};
///
///struct optinfo_resprop {
/// propvalsubset optrespr_done;
/// propvalsubset optrespr_rej;
/// propvalset optrespr_other;
///};
///
///struct optinfo_updprop {
/// propvalset optupdpr_now;
///};
<CODE ENDS>
6. Extensibility
6.1. Additional Properties
The set of transport properties is designed to be extensible. As a
result, once new properties are defined in standards track documents,
the operations defined in this document may reference these new
transport properties, as well as the ones described in this document.
A standards track document defining a new transport property should
include the following information paralleling that provided in this
document for the transport properties defined herein.
o The propid value used to identify this property.
o The XDR typedef specifying the form in which the property value is
communicated.
Noveck Expires March 28, 2017 [Page 19]
Internet-Draft RPC-over-RDMA Transport Properties September 2016
o A description of the transport property that is communicated by
the sender of ROPT_INITXCH and ROPT_UPDXCH and requested by the
sender of ROP_REQXCH.
o An explanation of how this knowledge could be used by the
participant receiving this information.
o Information giving rules governing possible changes of values of
this property.
The definition of transport property structures is such as to make it
easy to assign unique values. There is no requirement that a
continuous set of values be used and implementations should not rely
on all such values being small integers. A unique value should be
selected when the defining document is first published as an internet
draft. When the document becomes a standards track document working
group should insure that:
o The propids specified in the document do not conflict with those
currently assigned or in use by other pending working group
documents defining transport properties.
o The propids specified in the document do not conflict with the
range reserved for experimental use, as defined in Section 6.2.
Documents defining new properties fall into a number of categories.
o Those defining new properties and explaining (only) how they
affect use of existing message types.
o Those defining new OPTIONAL message types and new properties
applicable to the operation of those new message types.
o Those defining new OPTIONAL message types and new properties
applicable both to new and existing message types.
When additional transport properties are proposed, the review of the
associated standards track document should deal with possible
security issues raised by those new transport properties.
6.2. Experimental Properties
Given the design of the transport properties data structure, it
possible to use the operations to implement experimental, possibly
unpublished, transport properties.
Noveck Expires March 28, 2017 [Page 20]
Internet-Draft RPC-over-RDMA Transport Properties September 2016
propids in the range from 4,294,967,040 to 4,294,967,295 are reserved
for experimental use and these values should not be assigned to new
properties in standards track documents.
When values in this range are used there is no guarantee if
successful interoperation among independent implementations.
7. Security Considerations
Like other fields that appear in each RPC-over-RDMA header, property
information is sent in the clear on the fabric with no integrity
protection, making it vulnerable to man-in-the-middle attacks.
For example, if a man-in-the-middle were to change the value of the
Receive buffer size or the Requester Remote Invalidation boolean, it
could reduce connection performance or trigger loss of connection.
Repeated connection loss can impact performance or even prevent a new
connection from being established. Recourse is to deploy on a
private network or use link-layer encryption.
8. IANA Considerations
This document does not require any actions by IANA.
9. References
9.1. Normative References
[bidir] Lever, C., "Size-Limited Bi-directional Remote Procedure
Call On Remote Direct Memory Access Transports", April
2016, <http://www.ietf.org/id/
draft-ietf-nfsv4-rpcrdma-bidirection-02.txt>.
Work in progress.
[RFC2119] Bradner, S., "Key words for use in RFCs to Indicate
Requirement Levels", BCP 14, RFC 2119,
DOI 10.17487/RFC2119, March 1997,
<http://www.rfc-editor.org/info/rfc2119>.
[RFC4506] Eisler, M., Ed., "XDR: External Data Representation
Standard", STD 67, RFC 4506, DOI 10.17487/RFC4506, May
2006, <http://www.rfc-editor.org/info/rfc4506>.
Noveck Expires March 28, 2017 [Page 21]
Internet-Draft RPC-over-RDMA Transport Properties September 2016
[rfc5666bis]
Lever, C., Ed., Simpson, W., and T. Talpey, "Remote Direct
Memory Access Transport for Remote Procedure Call", May
2016, <http://www.ietf.org/id/
draft-ietf-nfsv4-rfc5666bis-07.txt>.
Work in progress.
[rpcrdmav2]
Lever, C., Ed. and D. Noveck, "RPC-over-RDMA Version Two",
June 2016, <http://www.ietf.org/id/
draft-cel-nfsv4-rpcrdma-version-two-01.txt>.
Work in progress.
9.2. Informative References
[RFC5662] Shepler, S., Ed., Eisler, M., Ed., and D. Noveck, Ed.,
"Network File System (NFS) Version 4 Minor Version 1
External Data Representation Standard (XDR) Description",
RFC 5662, DOI 10.17487/RFC5662, January 2010,
<http://www.rfc-editor.org/info/rfc5662>.
[RFC5666] Talpey, T. and B. Callaghan, "Remote Direct Memory Access
Transport for Remote Procedure Call", RFC 5666,
DOI 10.17487/RFC5666, January 2010,
<http://www.rfc-editor.org/info/rfc5666>.
Appendix A. Acknowledgments
The author gratefully acknowledges the work of Brent Callaghan and
Tom Talpey producing the original RPC-over-RDMA Version One
specification [RFC5666] and also Tom's work in helping to clarify
that specification.
The author also wishes to thank Chuck Lever for his work resurrecting
NFS support for RDMA in [rfc5666bis] and for his helpful review of
and suggestions for this document.
The extract.sh shell script and formatting conventions were first
described by the authors of the NFSv4.1 XDR specification [RFC5662].
Author's Address
Noveck Expires March 28, 2017 [Page 22]
Internet-Draft RPC-over-RDMA Transport Properties September 2016
David Noveck
Hewlett Packard Enterprise
165 Dascomb Road
Andover, MA 01810
USA
Phone: +1 781-572-8038
Email: davenoveck@gmail.com
Noveck Expires March 28, 2017 [Page 23]