rfc8881v1.txt | rfc8881.txt | |||
---|---|---|---|---|
Internet Engineering Task Force (IETF) D. Noveck, Ed. | Internet Engineering Task Force (IETF) D. Noveck, Ed. | |||
Request for Comments: 8881 NetApp | Request for Comments: 8881 NetApp | |||
Obsoletes: 5661 C. Lever | Obsoletes: 5661 C. Lever | |||
Category: Standards Track ORACLE | Category: Standards Track ORACLE | |||
ISSN: 2070-1721 July 2020 | ISSN: 2070-1721 August 2020 | |||
Network File System (NFS) Version 4 Minor Version 1 Protocol | Network File System (NFS) Version 4 Minor Version 1 Protocol | |||
Abstract | Abstract | |||
This document describes the Network File System (NFS) version 4 minor | This document describes the Network File System (NFS) version 4 minor | |||
version 1, including features retained from the base protocol (NFS | version 1, including features retained from the base protocol (NFS | |||
version 4 minor version 0, which is specified in RFC 7530) and | version 4 minor version 0, which is specified in RFC 7530) and | |||
protocol extensions made subsequently. The later minor version has | protocol extensions made subsequently. The later minor version has | |||
no dependencies on NFS version 4 minor version 0, and is considered a | no dependencies on NFS version 4 minor version 0, and is considered a | |||
skipping to change at line 335 ¶ | skipping to change at line 335 ¶ | |||
simultaneous use of multiple connections between a client and server, | simultaneous use of multiple connections between a client and server, | |||
potentially to different network addresses, and Transparent State | potentially to different network addresses, and Transparent State | |||
Migration, which allows a file system to be transferred between | Migration, which allows a file system to be transferred between | |||
servers in a way that provides to the client the ability to maintain | servers in a way that provides to the client the ability to maintain | |||
its existing locking state across the transfer. | its existing locking state across the transfer. | |||
The revised description of the NFS version 4 minor version 1 | The revised description of the NFS version 4 minor version 1 | |||
(NFSv4.1) protocol presented in this update is necessary to enable | (NFSv4.1) protocol presented in this update is necessary to enable | |||
full use of these features together with other multi-server namespace | full use of these features together with other multi-server namespace | |||
features. This document is in the form of an updated description of | features. This document is in the form of an updated description of | |||
the NFSv4.1 protocol previously defined in RFC 5661 [65]. RFC 5661 | the NFSv4.1 protocol previously defined in RFC 5661 [66]. RFC 5661 | |||
is obsoleted by this document. However, the update has a limited | is obsoleted by this document. However, the update has a limited | |||
scope and is focused on enabling full use of trunking and Transparent | scope and is focused on enabling full use of trunking and Transparent | |||
State Migration. The need for these changes is discussed in | State Migration. The need for these changes is discussed in | |||
Appendix A. Appendix B describes the specific changes made to arrive | Appendix A. Appendix B describes the specific changes made to arrive | |||
at the current text. | at the current text. | |||
This limited-scope update replaces the current NFSv4.1 RFC with the | This limited-scope update replaces the current NFSv4.1 RFC with the | |||
intention of providing an authoritative and complete specification, | intention of providing an authoritative and complete specification, | |||
the motivation for which is discussed in [35], addressing the issues | the motivation for which is discussed in [36], addressing the issues | |||
within the scope of the update. However, it will not address issues | within the scope of the update. However, it will not address issues | |||
that are known but outside of this limited scope as could be expected | that are known but outside of this limited scope as could be expected | |||
by a full update of the protocol. Below are some areas that are | by a full update of the protocol. Below are some areas that are | |||
known to need addressing in a future update of the protocol: | known to need addressing in a future update of the protocol: | |||
* Work needs to be done with regard to RFC 8178 [66], which | * Work needs to be done with regard to RFC 8178 [67], which | |||
establishes NFSv4-wide versioning rules. As RFC 5661 is currently | establishes NFSv4-wide versioning rules. As RFC 5661 is currently | |||
inconsistent with that document, changes are needed in order to | inconsistent with that document, changes are needed in order to | |||
arrive at a situation in which there would be no need for RFC 8178 | arrive at a situation in which there would be no need for RFC 8178 | |||
to update the NFSv4.1 specification. | to update the NFSv4.1 specification. | |||
* Work needs to be done with regard to RFC 8434 [69], which | * Work needs to be done with regard to RFC 8434 [70], which | |||
establishes the requirements for parallel NFS (pNFS) layout types, | establishes the requirements for parallel NFS (pNFS) layout types, | |||
which are not clearly defined in RFC 5661. When that work is done | which are not clearly defined in RFC 5661. When that work is done | |||
and the resulting documents approved, the new NFSv4.1 | and the resulting documents approved, the new NFSv4.1 | |||
specification document will provide a clear set of requirements | specification document will provide a clear set of requirements | |||
for layout types and a description of the file layout type that | for layout types and a description of the file layout type that | |||
conforms to those requirements. Other layout types will have | conforms to those requirements. Other layout types will have | |||
their own specification documents that conform to those | their own specification documents that conform to those | |||
requirements as well. | requirements as well. | |||
* Work needs to be done to address many errata reports relevant to | * Work needs to be done to address many errata reports relevant to | |||
RFC 5661, other than errata report 2006 [63], which is addressed | RFC 5661, other than errata report 2006 [64], which is addressed | |||
in this document. Addressing that report was not deferrable | in this document. Addressing that report was not deferrable | |||
because of the interaction of the changes suggested there and the | because of the interaction of the changes suggested there and the | |||
newly described handling of state and session migration. | newly described handling of state and session migration. | |||
The errata reports that have been deferred and that will need to | The errata reports that have been deferred and that will need to | |||
be addressed in a later document include reports currently | be addressed in a later document include reports currently | |||
assigned a range of statuses in the errata reporting system, | assigned a range of statuses in the errata reporting system, | |||
including reports marked Accepted and those marked Hold For | including reports marked Accepted and those marked Hold For | |||
Document Update because the change was too minor to address | Document Update because the change was too minor to address | |||
immediately. | immediately. | |||
skipping to change at line 390 ¶ | skipping to change at line 390 ¶ | |||
one in state Rejected, that will need to be addressed in a later | one in state Rejected, that will need to be addressed in a later | |||
document. This will involve making changes to consensus decisions | document. This will involve making changes to consensus decisions | |||
reflected in RFC 5661, in situations in which the working group | reflected in RFC 5661, in situations in which the working group | |||
has decided that the treatment in RFC 5661 is incorrect and needs | has decided that the treatment in RFC 5661 is incorrect and needs | |||
to be revised to reflect the working group's new consensus and to | to be revised to reflect the working group's new consensus and to | |||
ensure compatibility with existing implementations that do not | ensure compatibility with existing implementations that do not | |||
follow the handling described in RFC 5661. | follow the handling described in RFC 5661. | |||
Note that it is expected that all such errata reports will remain | Note that it is expected that all such errata reports will remain | |||
relevant to implementors and the authors of an eventual | relevant to implementors and the authors of an eventual | |||
rfc5661bis, despite the fact that this document, when approved, | rfc5661bis, despite the fact that this document obsoletes RFC 5661 | |||
will obsolete RFC 5661 [65]. | [66]. | |||
* There is a need for a new approach to the description of | * There is a need for a new approach to the description of | |||
internationalization since the current internationalization | internationalization since the current internationalization | |||
section (Section 14) has never been implemented and does not meet | section (Section 14) has never been implemented and does not meet | |||
the needs of the NFSv4 protocol. Possible solutions are to create | the needs of the NFSv4 protocol. Possible solutions are to create | |||
a new internationalization section modeled on that in [67] or to | a new internationalization section modeled on that in [68] or to | |||
create a new document describing internationalization for all | create a new document describing internationalization for all | |||
NFSv4 minor versions and reference that document in the RFCs | NFSv4 minor versions and reference that document in the RFCs | |||
defining both NFSv4.0 and NFSv4.1. | defining both NFSv4.0 and NFSv4.1. | |||
* There is a need for a revised treatment of security in NFSv4.1. | * There is a need for a revised treatment of security in NFSv4.1. | |||
The issues with the existing treatment are discussed in | The issues with the existing treatment are discussed in | |||
Appendix C. | Appendix C. | |||
Until the above work is done, there will not be a consistent set of | Until the above work is done, there will not be a consistent set of | |||
documents that provides a description of the NFSv4.1 protocol, and | documents that provides a description of the NFSv4.1 protocol, and | |||
any full description would involve documents updating other documents | any full description would involve documents updating other documents | |||
within the specification. The updates applied by RFC 8434 [69] and | within the specification. The updates applied by RFC 8434 [70] and | |||
RFC 8178 [66] to RFC 5661 also apply to this specification, and will | RFC 8178 [67] to RFC 5661 also apply to this specification, and will | |||
apply to any subsequent v4.1 specification until that work is done. | apply to any subsequent v4.1 specification until that work is done. | |||
1.2. The NFS Version 4 Minor Version 1 Protocol | 1.2. The NFS Version 4 Minor Version 1 Protocol | |||
The NFS version 4 minor version 1 (NFSv4.1) protocol is the second | The NFS version 4 minor version 1 (NFSv4.1) protocol is the second | |||
minor version of the NFS version 4 (NFSv4) protocol. The first minor | minor version of the NFS version 4 (NFSv4) protocol. The first minor | |||
version, NFSv4.0, is now described in RFC 7530 [67]. It generally | version, NFSv4.0, is now described in RFC 7530 [68]. It generally | |||
follows the guidelines for minor versioning that are listed in | follows the guidelines for minor versioning that are listed in | |||
Section 10 of RFC 3530 [36]. However, it diverges from guidelines 11 | Section 10 of RFC 3530 [37]. However, it diverges from guidelines 11 | |||
("a client and server that support minor version X must support minor | ("a client and server that support minor version X must support minor | |||
versions 0 through X-1") and 12 ("no new features may be introduced | versions 0 through X-1") and 12 ("no new features may be introduced | |||
as mandatory in a minor version"). These divergences are due to the | as mandatory in a minor version"). These divergences are due to the | |||
introduction of the sessions model for managing non-idempotent | introduction of the sessions model for managing non-idempotent | |||
operations and the RECLAIM_COMPLETE operation. These two new | operations and the RECLAIM_COMPLETE operation. These two new | |||
features are infrastructural in nature and simplify implementation of | features are infrastructural in nature and simplify implementation of | |||
existing and other new features. Making them anything but REQUIRED | existing and other new features. Making them anything but REQUIRED | |||
would add undue complexity to protocol definition and implementation. | would add undue complexity to protocol definition and implementation. | |||
NFSv4.1 accordingly updates the minor versioning guidelines | NFSv4.1 accordingly updates the minor versioning guidelines | |||
(Section 2.7). | (Section 2.7). | |||
skipping to change at line 458 ¶ | skipping to change at line 458 ¶ | |||
* describe the NFSv4.0 protocol, except where needed to contrast | * describe the NFSv4.0 protocol, except where needed to contrast | |||
with NFSv4.1. | with NFSv4.1. | |||
* modify the specification of the NFSv4.0 protocol. | * modify the specification of the NFSv4.0 protocol. | |||
* clarify the NFSv4.0 protocol. | * clarify the NFSv4.0 protocol. | |||
1.5. NFSv4 Goals | 1.5. NFSv4 Goals | |||
The NFSv4 protocol is a further revision of the NFS protocol defined | The NFSv4 protocol is a further revision of the NFS protocol defined | |||
already by NFSv3 [37]. It retains the essential characteristics of | already by NFSv3 [38]. It retains the essential characteristics of | |||
previous versions: easy recovery; independence of transport | previous versions: easy recovery; independence of transport | |||
protocols, operating systems, and file systems; simplicity; and good | protocols, operating systems, and file systems; simplicity; and good | |||
performance. NFSv4 has the following goals: | performance. NFSv4 has the following goals: | |||
* Improved access and good performance on the Internet | * Improved access and good performance on the Internet | |||
The protocol is designed to transit firewalls easily, perform well | The protocol is designed to transit firewalls easily, perform well | |||
where latency is high and bandwidth is low, and scale to very | where latency is high and bandwidth is low, and scale to very | |||
large numbers of clients per server. | large numbers of clients per server. | |||
skipping to change at line 726 ¶ | skipping to change at line 726 ¶ | |||
filehandles. | filehandles. | |||
1.8.3.2. File Attributes | 1.8.3.2. File Attributes | |||
The NFSv4.1 protocol has a rich and extensible file object attribute | The NFSv4.1 protocol has a rich and extensible file object attribute | |||
structure, which is divided into REQUIRED, RECOMMENDED, and named | structure, which is divided into REQUIRED, RECOMMENDED, and named | |||
attributes (see Section 5). | attributes (see Section 5). | |||
Several (but not all) of the REQUIRED attributes are derived from the | Several (but not all) of the REQUIRED attributes are derived from the | |||
attributes of NFSv3 (see the definition of the fattr3 data type in | attributes of NFSv3 (see the definition of the fattr3 data type in | |||
[37]). An example of a REQUIRED attribute is the file object's type | [38]). An example of a REQUIRED attribute is the file object's type | |||
(Section 5.8.1.2) so that regular files can be distinguished from | (Section 5.8.1.2) so that regular files can be distinguished from | |||
directories (also known as folders in some operating environments) | directories (also known as folders in some operating environments) | |||
and other types of objects. REQUIRED attributes are discussed in | and other types of objects. REQUIRED attributes are discussed in | |||
Section 5.1. | Section 5.1. | |||
An example of three RECOMMENDED attributes are acl, sacl, and dacl. | An example of three RECOMMENDED attributes are acl, sacl, and dacl. | |||
These attributes define an Access Control List (ACL) on a file object | These attributes define an Access Control List (ACL) on a file object | |||
(Section 6). An ACL provides directory and file access control | (Section 6). An ACL provides directory and file access control | |||
beyond the model used in NFSv3. The ACL definition allows for | beyond the model used in NFSv3. The ACL definition allows for | |||
specification of specific sets of permissions for individual users | specification of specific sets of permissions for individual users | |||
skipping to change at line 876 ¶ | skipping to change at line 876 ¶ | |||
* Data retention (Section 5.13). | * Data retention (Section 5.13). | |||
* Identification of the implementation of the NFS client and server | * Identification of the implementation of the NFS client and server | |||
(Section 18.35). | (Section 18.35). | |||
* Support for notification of the availability of byte-range locks | * Support for notification of the availability of byte-range locks | |||
(see the new OPEN4_RESULT_MAY_NOTIFY_LOCK reply flag in | (see the new OPEN4_RESULT_MAY_NOTIFY_LOCK reply flag in | |||
Section 18.16 and see Section 20.11). | Section 18.16 and see Section 20.11). | |||
* In NFSv4.1, LIPKEY and SPKM-3 are not required security mechanisms | * In NFSv4.1, LIPKEY and SPKM-3 are not required security mechanisms | |||
[38]. | [39]. | |||
2. Core Infrastructure | 2. Core Infrastructure | |||
2.1. Introduction | 2.1. Introduction | |||
NFSv4.1 relies on core infrastructure common to nearly every | NFSv4.1 relies on core infrastructure common to nearly every | |||
operation. This core infrastructure is described in the remainder of | operation. This core infrastructure is described in the remainder of | |||
this section. | this section. | |||
2.2. RPC and XDR | 2.2. RPC and XDR | |||
skipping to change at line 995 ¶ | skipping to change at line 995 ¶ | |||
------------------------------------------------------------------ | ------------------------------------------------------------------ | |||
390003 krb5 1.2.840.113554.1.2.2 rpc_gss_svc_none yes yes | 390003 krb5 1.2.840.113554.1.2.2 rpc_gss_svc_none yes yes | |||
390004 krb5i 1.2.840.113554.1.2.2 rpc_gss_svc_integrity yes yes | 390004 krb5i 1.2.840.113554.1.2.2 rpc_gss_svc_integrity yes yes | |||
390005 krb5p 1.2.840.113554.1.2.2 rpc_gss_svc_privacy no yes | 390005 krb5p 1.2.840.113554.1.2.2 rpc_gss_svc_privacy no yes | |||
Note that the number and name of the pseudo flavor are presented here | Note that the number and name of the pseudo flavor are presented here | |||
as a mapping aid to the implementor. Because the NFSv4.1 protocol | as a mapping aid to the implementor. Because the NFSv4.1 protocol | |||
includes a method to negotiate security and it understands the GSS- | includes a method to negotiate security and it understands the GSS- | |||
API mechanism, the pseudo flavor is not needed. The pseudo flavor is | API mechanism, the pseudo flavor is not needed. The pseudo flavor is | |||
needed for the NFSv3 since the security negotiation is done via the | needed for the NFSv3 since the security negotiation is done via the | |||
MOUNT protocol as described in [39]. | MOUNT protocol as described in [40]. | |||
At the time NFSv4.1 was specified, the Advanced Encryption Standard | At the time NFSv4.1 was specified, the Advanced Encryption Standard | |||
(AES) with HMAC-SHA1 was a REQUIRED algorithm set for Kerberos V5. | (AES) with HMAC-SHA1 was a REQUIRED algorithm set for Kerberos V5. | |||
In contrast, when NFSv4.0 was specified, weaker algorithm sets were | In contrast, when NFSv4.0 was specified, weaker algorithm sets were | |||
REQUIRED for Kerberos V5, and were REQUIRED in the NFSv4.0 | REQUIRED for Kerberos V5, and were REQUIRED in the NFSv4.0 | |||
specification, because the Kerberos V5 specification at the time did | specification, because the Kerberos V5 specification at the time did | |||
not specify stronger algorithms. The NFSv4.1 specification does not | not specify stronger algorithms. The NFSv4.1 specification does not | |||
specify REQUIRED algorithms for Kerberos V5, and instead, the | specify REQUIRED algorithms for Kerberos V5, and instead, the | |||
implementor is expected to track the evolution of the Kerberos V5 | implementor is expected to track the evolution of the Kerberos V5 | |||
standard if and when stronger algorithms are specified. | standard if and when stronger algorithms are specified. | |||
skipping to change at line 1157 ¶ | skipping to change at line 1157 ¶ | |||
the same string. The implementor is cautioned from an approach | the same string. The implementor is cautioned from an approach | |||
that requires the string to be recorded in a local file because | that requires the string to be recorded in a local file because | |||
this precludes the use of the implementation in an environment | this precludes the use of the implementation in an environment | |||
where there is no local disk and all file access is from an | where there is no local disk and all file access is from an | |||
NFSv4.1 server. | NFSv4.1 server. | |||
* The string should be the same for each server network address that | * The string should be the same for each server network address that | |||
the client accesses. This way, if a server has multiple | the client accesses. This way, if a server has multiple | |||
interfaces, the client can trunk traffic over multiple network | interfaces, the client can trunk traffic over multiple network | |||
paths as described in Section 2.10.5. (Note: the precise opposite | paths as described in Section 2.10.5. (Note: the precise opposite | |||
was advised in the NFSv4.0 specification [36].) | was advised in the NFSv4.0 specification [37].) | |||
* The algorithm for generating the string should not assume that the | * The algorithm for generating the string should not assume that the | |||
client's network address will not change, unless the client | client's network address will not change, unless the client | |||
implementation knows it is using statically assigned network | implementation knows it is using statically assigned network | |||
addresses. This includes changes between client incarnations and | addresses. This includes changes between client incarnations and | |||
even changes while the client is still running in its current | even changes while the client is still running in its current | |||
incarnation. Thus, with dynamic address assignment, if the client | incarnation. Thus, with dynamic address assignment, if the client | |||
includes just the client's network address in the co_ownerid | includes just the client's network address in the co_ownerid | |||
string, there is a real risk that after the client gives up the | string, there is a real risk that after the client gives up the | |||
network address, another client, using a similar algorithm for | network address, another client, using a similar algorithm for | |||
skipping to change at line 1258 ¶ | skipping to change at line 1258 ¶ | |||
To facilitate upgrade from NFSv4.0 to NFSv4.1, a server may compare a | To facilitate upgrade from NFSv4.0 to NFSv4.1, a server may compare a | |||
value of data type client_owner4 in an EXCHANGE_ID with a value of | value of data type client_owner4 in an EXCHANGE_ID with a value of | |||
data type nfs_client_id4 that was established using the SETCLIENTID | data type nfs_client_id4 that was established using the SETCLIENTID | |||
operation of NFSv4.0. A server that does so will allow an upgraded | operation of NFSv4.0. A server that does so will allow an upgraded | |||
client to avoid waiting until the lease (i.e., the lease established | client to avoid waiting until the lease (i.e., the lease established | |||
by the NFSv4.0 instance client) expires. This requires that the | by the NFSv4.0 instance client) expires. This requires that the | |||
value of data type client_owner4 be constructed the same way as the | value of data type client_owner4 be constructed the same way as the | |||
value of data type nfs_client_id4. If the latter's contents included | value of data type nfs_client_id4. If the latter's contents included | |||
the server's network address (per the recommendations of the NFSv4.0 | the server's network address (per the recommendations of the NFSv4.0 | |||
specification [36]), and the NFSv4.1 client does not wish to use a | specification [37]), and the NFSv4.1 client does not wish to use a | |||
client ID that prevents trunking, it should send two EXCHANGE_ID | client ID that prevents trunking, it should send two EXCHANGE_ID | |||
operations. The first EXCHANGE_ID will have a client_owner4 equal to | operations. The first EXCHANGE_ID will have a client_owner4 equal to | |||
the nfs_client_id4. This will clear the state created by the NFSv4.0 | the nfs_client_id4. This will clear the state created by the NFSv4.0 | |||
client. The second EXCHANGE_ID will not have the server's network | client. The second EXCHANGE_ID will not have the server's network | |||
address. The state created for the second EXCHANGE_ID will not have | address. The state created for the second EXCHANGE_ID will not have | |||
to wait for lease expiration, because there will be no state to | to wait for lease expiration, because there will be no state to | |||
expire. | expire. | |||
2.4.2. Server Release of Client ID | 2.4.2. Server Release of Client ID | |||
skipping to change at line 1631 ¶ | skipping to change at line 1631 ¶ | |||
2.7. Minor Versioning | 2.7. Minor Versioning | |||
To address the requirement of an NFS protocol that can evolve as the | To address the requirement of an NFS protocol that can evolve as the | |||
need arises, the NFSv4.1 protocol contains the rules and framework to | need arises, the NFSv4.1 protocol contains the rules and framework to | |||
allow for future minor changes or versioning. | allow for future minor changes or versioning. | |||
The base assumption with respect to minor versioning is that any | The base assumption with respect to minor versioning is that any | |||
future accepted minor version will be documented in one or more | future accepted minor version will be documented in one or more | |||
Standards Track RFCs. Minor version 0 of the NFSv4 protocol is | Standards Track RFCs. Minor version 0 of the NFSv4 protocol is | |||
represented by [36], and minor version 1 is represented by this RFC. | represented by [37], and minor version 1 is represented by this RFC. | |||
The COMPOUND and CB_COMPOUND procedures support the encoding of the | The COMPOUND and CB_COMPOUND procedures support the encoding of the | |||
minor version being requested by the client. | minor version being requested by the client. | |||
The following items represent the basic rules for the development of | The following items represent the basic rules for the development of | |||
minor versions. Note that a future minor version may modify or add | minor versions. Note that a future minor version may modify or add | |||
to the following rules as part of the minor version definition. | to the following rules as part of the minor version definition. | |||
1. Procedures are not added or deleted. | 1. Procedures are not added or deleted. | |||
To maintain the general RPC model, NFSv4 minor versions will not | To maintain the general RPC model, NFSv4 minor versions will not | |||
skipping to change at line 1784 ¶ | skipping to change at line 1784 ¶ | |||
2.9. Transport Layers | 2.9. Transport Layers | |||
2.9.1. REQUIRED and RECOMMENDED Properties of Transports | 2.9.1. REQUIRED and RECOMMENDED Properties of Transports | |||
NFSv4.1 works over Remote Direct Memory Access (RDMA) and non-RDMA- | NFSv4.1 works over Remote Direct Memory Access (RDMA) and non-RDMA- | |||
based transports with the following attributes: | based transports with the following attributes: | |||
* The transport supports reliable delivery of data, which NFSv4.1 | * The transport supports reliable delivery of data, which NFSv4.1 | |||
requires but neither NFSv4.1 nor RPC has facilities for ensuring | requires but neither NFSv4.1 nor RPC has facilities for ensuring | |||
[40]. | [41]. | |||
* The transport delivers data in the order it was sent. Ordered | * The transport delivers data in the order it was sent. Ordered | |||
delivery simplifies detection of transmit errors, and simplifies | delivery simplifies detection of transmit errors, and simplifies | |||
the sending of arbitrary sized requests and responses via the | the sending of arbitrary sized requests and responses via the | |||
record marking protocol [3]. | record marking protocol [3]. | |||
Where an NFSv4.1 implementation supports operation over the IP | Where an NFSv4.1 implementation supports operation over the IP | |||
network protocol, any transport used between NFS and IP MUST be among | network protocol, any transport used between NFS and IP MUST be among | |||
the IETF-approved congestion control transport protocols. At the | the IETF-approved congestion control transport protocols. At the | |||
time this document was written, the only two transports that had the | time this document was written, the only two transports that had the | |||
skipping to change at line 1886 ¶ | skipping to change at line 1886 ¶ | |||
contents must not be blindly used when replies are sent from it, | contents must not be blindly used when replies are sent from it, | |||
and credit information appropriate to the channel must be | and credit information appropriate to the channel must be | |||
refreshed by the RPC layer. | refreshed by the RPC layer. | |||
In addition, as described in Section 2.10.6.2, while a session is | In addition, as described in Section 2.10.6.2, while a session is | |||
active, the NFSv4.1 requester MUST NOT stop waiting for a reply. | active, the NFSv4.1 requester MUST NOT stop waiting for a reply. | |||
2.9.3. Ports | 2.9.3. Ports | |||
Historically, NFSv3 servers have listened over TCP port 2049. The | Historically, NFSv3 servers have listened over TCP port 2049. The | |||
registered port 2049 [41] for the NFS protocol should be the default | registered port 2049 [42] for the NFS protocol should be the default | |||
configuration. NFSv4.1 clients SHOULD NOT use the RPC binding | configuration. NFSv4.1 clients SHOULD NOT use the RPC binding | |||
protocols as described in [42]. | protocols as described in [43]. | |||
2.10. Session | 2.10. Session | |||
NFSv4.1 clients and servers MUST support and MUST use the session | NFSv4.1 clients and servers MUST support and MUST use the session | |||
feature as described in this section. | feature as described in this section. | |||
2.10.1. Motivation and Overview | 2.10.1. Motivation and Overview | |||
Previous versions and minor versions of NFS have suffered from the | Previous versions and minor versions of NFS have suffered from the | |||
following: | following: | |||
skipping to change at line 2577 ¶ | skipping to change at line 2577 ¶ | |||
Given that well-formulated XIDs continue to be required, this raises | Given that well-formulated XIDs continue to be required, this raises | |||
the question: why do SEQUENCE and CB_SEQUENCE replies have a session | the question: why do SEQUENCE and CB_SEQUENCE replies have a session | |||
ID, slot ID, and sequence ID? Having the session ID in the reply | ID, slot ID, and sequence ID? Having the session ID in the reply | |||
means that the requester does not have to use the XID to look up the | means that the requester does not have to use the XID to look up the | |||
session ID, which would be necessary if the connection were | session ID, which would be necessary if the connection were | |||
associated with multiple sessions. Having the slot ID and sequence | associated with multiple sessions. Having the slot ID and sequence | |||
ID in the reply means that the requester does not have to use the XID | ID in the reply means that the requester does not have to use the XID | |||
to look up the slot ID and sequence ID. Furthermore, since the XID | to look up the slot ID and sequence ID. Furthermore, since the XID | |||
is only 32 bits, it is too small to guarantee the re-association of a | is only 32 bits, it is too small to guarantee the re-association of a | |||
reply with its request [43]; having session ID, slot ID, and sequence | reply with its request [44]; having session ID, slot ID, and sequence | |||
ID in the reply allows the client to validate that the reply in fact | ID in the reply allows the client to validate that the reply in fact | |||
belongs to the matched request. | belongs to the matched request. | |||
The SEQUENCE (and CB_SEQUENCE) operation also carries a | The SEQUENCE (and CB_SEQUENCE) operation also carries a | |||
"highest_slotid" value, which carries additional requester slot usage | "highest_slotid" value, which carries additional requester slot usage | |||
information. The requester MUST always indicate the slot ID | information. The requester MUST always indicate the slot ID | |||
representing the outstanding request with the highest-numbered slot | representing the outstanding request with the highest-numbered slot | |||
value. The requester should in all cases provide the most | value. The requester should in all cases provide the most | |||
conservative value possible, although it can be increased somewhat | conservative value possible, although it can be increased somewhat | |||
above the actual instantaneous usage to maintain some minimum or | above the actual instantaneous usage to maintain some minimum or | |||
skipping to change at line 2706 ¶ | skipping to change at line 2706 ¶ | |||
cache entry for the slot whenever an error is returned from SEQUENCE | cache entry for the slot whenever an error is returned from SEQUENCE | |||
or CB_SEQUENCE. | or CB_SEQUENCE. | |||
2.10.6.1.3. Optional Reply Caching | 2.10.6.1.3. Optional Reply Caching | |||
On a per-request basis, the requester can choose to direct the | On a per-request basis, the requester can choose to direct the | |||
replier to cache the reply to all operations after the first | replier to cache the reply to all operations after the first | |||
operation (SEQUENCE or CB_SEQUENCE) via the sa_cachethis or | operation (SEQUENCE or CB_SEQUENCE) via the sa_cachethis or | |||
csa_cachethis fields of the arguments to SEQUENCE or CB_SEQUENCE. | csa_cachethis fields of the arguments to SEQUENCE or CB_SEQUENCE. | |||
The reason it would not direct the replier to cache the entire reply | The reason it would not direct the replier to cache the entire reply | |||
is that the request is composed of all idempotent operations [40]. | is that the request is composed of all idempotent operations [41]. | |||
Caching the reply may offer little benefit. If the reply is too | Caching the reply may offer little benefit. If the reply is too | |||
large (see Section 2.10.6.4), it may not be cacheable anyway. Even | large (see Section 2.10.6.4), it may not be cacheable anyway. Even | |||
if the reply to idempotent request is small enough to cache, | if the reply to idempotent request is small enough to cache, | |||
unnecessarily caching the reply slows down the server and increases | unnecessarily caching the reply slows down the server and increases | |||
RPC latency. | RPC latency. | |||
Whether or not the requester requests the reply to be cached has no | Whether or not the requester requests the reply to be cached has no | |||
effect on the slot processing. If the result of SEQUENCE or | effect on the slot processing. If the result of SEQUENCE or | |||
CB_SEQUENCE is NFS4_OK, then the slot's sequence ID MUST be | CB_SEQUENCE is NFS4_OK, then the slot's sequence ID MUST be | |||
incremented by one. If a requester does not direct the replier to | incremented by one. If a requester does not direct the replier to | |||
skipping to change at line 2770 ¶ | skipping to change at line 2770 ¶ | |||
Since the replier may only cache a small amount of the information | Since the replier may only cache a small amount of the information | |||
that would be required to determine whether this is a case of a false | that would be required to determine whether this is a case of a false | |||
retry, the replier may send to the client any of the following | retry, the replier may send to the client any of the following | |||
responses: | responses: | |||
* The cached reply to the original request (if the replier has | * The cached reply to the original request (if the replier has | |||
cached it in its entirety and the users of the original request | cached it in its entirety and the users of the original request | |||
and retry match). | and retry match). | |||
* A reply that consists only of the Sequence operation with the | * A reply that consists only of the Sequence operation with the | |||
error NFS4ERR_FALSE_RETRY. | error NFS4ERR_SEQ_FALSE_RETRY. | |||
* A reply consisting of the response to Sequence with the status | * A reply consisting of the response to Sequence with the status | |||
NFS4_OK, together with the second operation as it appeared in the | NFS4_OK, together with the second operation as it appeared in the | |||
retried request with an error of NFS4ERR_RETRY_UNCACHED_REP or | retried request with an error of NFS4ERR_RETRY_UNCACHED_REP or | |||
other error as described above. | other error as described above. | |||
* A reply that consists of the response to Sequence with the status | * A reply that consists of the response to Sequence with the status | |||
NFS4_OK, together with the second operation as it appeared in the | NFS4_OK, together with the second operation as it appeared in the | |||
original request with an error of NFS4ERR_RETRY_UNCACHED_REP or | original request with an error of NFS4ERR_RETRY_UNCACHED_REP or | |||
other error as described above. | other error as described above. | |||
skipping to change at line 2792 ¶ | skipping to change at line 2792 ¶ | |||
2.10.6.1.3.1. False Retry | 2.10.6.1.3.1. False Retry | |||
If a requester sent a Sequence operation with a slot ID and sequence | If a requester sent a Sequence operation with a slot ID and sequence | |||
ID that are in the reply cache but the replier detected that the | ID that are in the reply cache but the replier detected that the | |||
retried request is not the same as the original request, including a | retried request is not the same as the original request, including a | |||
retry that has different operations or different arguments in the | retry that has different operations or different arguments in the | |||
operations from the original and a retry that uses a different | operations from the original and a retry that uses a different | |||
principal in the RPC request's credential field that translates to a | principal in the RPC request's credential field that translates to a | |||
different user, then this is a false retry. When the replier detects | different user, then this is a false retry. When the replier detects | |||
a false retry, it is permitted (but not always obligated) to return | a false retry, it is permitted (but not always obligated) to return | |||
NFS4ERR_FALSE_RETRY in response to the Sequence operation when it | NFS4ERR_SEQ_FALSE_RETRY in response to the Sequence operation when it | |||
detects a false retry. | detects a false retry. | |||
Translations of particularly privileged user values to other users | Translations of particularly privileged user values to other users | |||
due to the lack of appropriately secure credentials, as configured on | due to the lack of appropriately secure credentials, as configured on | |||
the replier, should be applied before determining whether the users | the replier, should be applied before determining whether the users | |||
are the same or different. If the replier determines the users are | are the same or different. If the replier determines the users are | |||
different between the original request and a retry, then the replier | different between the original request and a retry, then the replier | |||
MUST return NFS4ERR_FALSE_RETRY. | MUST return NFS4ERR_SEQ_FALSE_RETRY. | |||
If an operation of the retry is an illegal operation, or an operation | If an operation of the retry is an illegal operation, or an operation | |||
that was legal in a previous minor version of NFSv4 and MUST NOT be | that was legal in a previous minor version of NFSv4 and MUST NOT be | |||
supported in the current minor version (e.g., SETCLIENTID), the | supported in the current minor version (e.g., SETCLIENTID), the | |||
replier MAY return NFS4ERR_FALSE_RETRY (and MUST do so if the users | replier MAY return NFS4ERR_SEQ_FALSE_RETRY (and MUST do so if the | |||
of the original request and retry differ). Otherwise, the replier | users of the original request and retry differ). Otherwise, the | |||
MAY return NFS4ERR_OP_ILLEGAL or NFS4ERR_BADXDR or NFS4ERR_NOTSUPP as | replier MAY return NFS4ERR_OP_ILLEGAL or NFS4ERR_BADXDR or | |||
appropriate. Note that the handling is in contrast for how the | NFS4ERR_NOTSUPP as appropriate. Note that the handling is in | |||
replier deals with retries requests with no cached reply. The | contrast for how the replier deals with retries requests with no | |||
difference is due to NFS4ERR_FALSE_RETRY being a valid error for only | cached reply. The difference is due to NFS4ERR_SEQ_FALSE_RETRY being | |||
Sequence operations, whereas NFS4ERR_RETRY_UNCACHED_REP is a valid | a valid error for only Sequence operations, whereas | |||
error for all operations except illegal operations and operations | NFS4ERR_RETRY_UNCACHED_REP is a valid error for all operations except | |||
that MUST NOT be supported in the current minor version of NFSv4. | illegal operations and operations that MUST NOT be supported in the | |||
current minor version of NFSv4. | ||||
2.10.6.2. Retry and Replay of Reply | 2.10.6.2. Retry and Replay of Reply | |||
A requester MUST NOT retry a request, unless the connection it used | A requester MUST NOT retry a request, unless the connection it used | |||
to send the request disconnects. The requester can then reconnect | to send the request disconnects. The requester can then reconnect | |||
and re-send the request, or it can re-send the request over a | and re-send the request, or it can re-send the request over a | |||
different connection that is associated with the same session. | different connection that is associated with the same session. | |||
If the requester is a server wanting to re-send a callback operation | If the requester is a server wanting to re-send a callback operation | |||
over the backchannel of a session, the requester of course cannot | over the backchannel of a session, the requester of course cannot | |||
skipping to change at line 3083 ¶ | skipping to change at line 3084 ¶ | |||
view the problem is as a single transaction consisting of each | view the problem is as a single transaction consisting of each | |||
operation in the COMPOUND followed by storing the result in | operation in the COMPOUND followed by storing the result in | |||
persistent storage, then finally a transaction commit. If there is a | persistent storage, then finally a transaction commit. If there is a | |||
failure before the transaction is committed, then the server rolls | failure before the transaction is committed, then the server rolls | |||
back the transaction. If the server itself fails, then when it | back the transaction. If the server itself fails, then when it | |||
restarts, its recovery logic could roll back the transaction before | restarts, its recovery logic could roll back the transaction before | |||
starting the NFSv4.1 server. | starting the NFSv4.1 server. | |||
While the description of the implementation for atomic execution of | While the description of the implementation for atomic execution of | |||
the request and caching of the reply is beyond the scope of this | the request and caching of the reply is beyond the scope of this | |||
document, an example implementation for NFSv2 [44] is described in | document, an example implementation for NFSv2 [45] is described in | |||
[45]. | [46]. | |||
2.10.7. RDMA Considerations | 2.10.7. RDMA Considerations | |||
A complete discussion of the operation of RPC-based protocols over | A complete discussion of the operation of RPC-based protocols over | |||
RDMA transports is in [32]. A discussion of the operation of NFSv4, | RDMA transports is in [32]. A discussion of the operation of NFSv4, | |||
including NFSv4.1, over RDMA is in [33]. Where RDMA is considered, | including NFSv4.1, over RDMA is in [33]. Where RDMA is considered, | |||
this specification assumes the use of such a layering; it addresses | this specification assumes the use of such a layering; it addresses | |||
only the upper-layer issues relevant to making best use of RPC/RDMA. | only the upper-layer issues relevant to making best use of RPC/RDMA. | |||
2.10.7.1. RDMA Connection Resources | 2.10.7.1. RDMA Connection Resources | |||
skipping to change at line 3235 ¶ | skipping to change at line 3236 ¶ | |||
2.10.8.2. Backchannel RPC Security | 2.10.8.2. Backchannel RPC Security | |||
When the NFSv4.1 client establishes the backchannel, it informs the | When the NFSv4.1 client establishes the backchannel, it informs the | |||
server of the security flavors and principals to use when sending | server of the security flavors and principals to use when sending | |||
requests. If the security flavor is RPCSEC_GSS, the client expresses | requests. If the security flavor is RPCSEC_GSS, the client expresses | |||
the principal in the form of an established RPCSEC_GSS context. The | the principal in the form of an established RPCSEC_GSS context. The | |||
server is free to use any of the flavor/principal combinations the | server is free to use any of the flavor/principal combinations the | |||
client offers, but it MUST NOT use unoffered combinations. This way, | client offers, but it MUST NOT use unoffered combinations. This way, | |||
the client need not provide a target GSS principal for the | the client need not provide a target GSS principal for the | |||
backchannel as it did with NFSv4.0, nor does the server have to | backchannel as it did with NFSv4.0, nor does the server have to | |||
implement an RPCSEC_GSS initiator as it did with NFSv4.0 [36]. | implement an RPCSEC_GSS initiator as it did with NFSv4.0 [37]. | |||
The CREATE_SESSION (Section 18.36) and BACKCHANNEL_CTL | The CREATE_SESSION (Section 18.36) and BACKCHANNEL_CTL | |||
(Section 18.33) operations allow the client to specify flavor/ | (Section 18.33) operations allow the client to specify flavor/ | |||
principal combinations. | principal combinations. | |||
Also note that the SP4_SSV state protection mode (see Sections 18.35 | Also note that the SP4_SSV state protection mode (see Sections 18.35 | |||
and 2.10.8.3) has the side benefit of providing SSV-derived | and 2.10.8.3) has the side benefit of providing SSV-derived | |||
RPCSEC_GSS contexts (Section 2.10.9). | RPCSEC_GSS contexts (Section 2.10.9). | |||
2.10.8.3. Protection from Unauthorized State Changes | 2.10.8.3. Protection from Unauthorized State Changes | |||
skipping to change at line 3483 ¶ | skipping to change at line 3484 ¶ | |||
iso.org.dod.internet.private.enterprise.Michael Eisler.nfs.ssv_mech | iso.org.dod.internet.private.enterprise.Michael Eisler.nfs.ssv_mech | |||
(1.3.6.1.4.1.28882.1.1). While the SSV mechanism does not define any | (1.3.6.1.4.1.28882.1.1). While the SSV mechanism does not define any | |||
initial context tokens, the OID can be used to let servers indicate | initial context tokens, the OID can be used to let servers indicate | |||
that the SSV mechanism is acceptable whenever the client sends a | that the SSV mechanism is acceptable whenever the client sends a | |||
SECINFO or SECINFO_NO_NAME operation (see Section 2.6). | SECINFO or SECINFO_NO_NAME operation (see Section 2.6). | |||
The SSV mechanism defines four subkeys derived from the SSV value. | The SSV mechanism defines four subkeys derived from the SSV value. | |||
Each time SET_SSV is invoked, the subkeys are recalculated by the | Each time SET_SSV is invoked, the subkeys are recalculated by the | |||
client and server. The calculation of each of the four subkeys | client and server. The calculation of each of the four subkeys | |||
depends on each of the four respective ssv_subkey4 enumerated values. | depends on each of the four respective ssv_subkey4 enumerated values. | |||
The calculation uses the HMAC [51] algorithm, using the current SSV | The calculation uses the HMAC [52] algorithm, using the current SSV | |||
as the key, the one-way hash algorithm as negotiated by EXCHANGE_ID, | as the key, the one-way hash algorithm as negotiated by EXCHANGE_ID, | |||
and the input text as represented by the XDR encoded enumeration | and the input text as represented by the XDR encoded enumeration | |||
value for that subkey of data type ssv_subkey4. If the length of the | value for that subkey of data type ssv_subkey4. If the length of the | |||
output of the HMAC algorithm exceeds the length of key of the | output of the HMAC algorithm exceeds the length of key of the | |||
encryption algorithm (which is also negotiated by EXCHANGE_ID), then | encryption algorithm (which is also negotiated by EXCHANGE_ID), then | |||
the subkey MUST be truncated from the HMAC output, i.e., if the | the subkey MUST be truncated from the HMAC output, i.e., if the | |||
subkey is of N bytes long, then the first N bytes of the HMAC output | subkey is of N bytes long, then the first N bytes of the HMAC output | |||
MUST be used for the subkey. The specification of EXCHANGE_ID states | MUST be used for the subkey. The specification of EXCHANGE_ID states | |||
that the length of the output of the HMAC algorithm MUST NOT be less | that the length of the output of the HMAC algorithm MUST NOT be less | |||
than the length of subkey needed for the encryption algorithm (see | than the length of subkey needed for the encryption algorithm (see | |||
skipping to change at line 3926 ¶ | skipping to change at line 3927 ¶ | |||
1. If the client has other connections to other server network | 1. If the client has other connections to other server network | |||
addresses associated with the same session, attempt a COMPOUND | addresses associated with the same session, attempt a COMPOUND | |||
with a single operation, SEQUENCE, on each of the other | with a single operation, SEQUENCE, on each of the other | |||
connections. | connections. | |||
2. If the attempts succeed, the session is still alive, and this is | 2. If the attempts succeed, the session is still alive, and this is | |||
a strong indicator that the server's network address has moved. | a strong indicator that the server's network address has moved. | |||
The client might send an EXCHANGE_ID on the connection that | The client might send an EXCHANGE_ID on the connection that | |||
returned NFS4ERR_BADSESSION to see if there are opportunities for | returned NFS4ERR_BADSESSION to see if there are opportunities for | |||
client ID trunking (i.e., the same client ID and so_major value | client ID trunking (i.e., the same client ID and so_major_id | |||
are returned). The client might use DNS to see if the moved | value are returned). The client might use DNS to see if the | |||
network address was replaced with another, so that the | moved network address was replaced with another, so that the | |||
performance and availability benefits of session trunking can | performance and availability benefits of session trunking can | |||
continue. | continue. | |||
3. If the SEQUENCE requests fail with NFS4ERR_BADSESSION, then the | 3. If the SEQUENCE requests fail with NFS4ERR_BADSESSION, then the | |||
session no longer exists on any of the server network addresses | session no longer exists on any of the server network addresses | |||
for which the client has connections associated with that session | for which the client has connections associated with that session | |||
ID. It is possible the session is still alive and available on | ID. It is possible the session is still alive and available on | |||
other network addresses. The client sends an EXCHANGE_ID on all | other network addresses. The client sends an EXCHANGE_ID on all | |||
the connections to see if the server owner is still listening on | the connections to see if the server owner is still listening on | |||
those network addresses. If the same server owner is returned | those network addresses. If the same server owner is returned | |||
skipping to change at line 4359 ¶ | skipping to change at line 4360 ¶ | |||
}; | }; | |||
The fattr4 data type is used to represent file and directory | The fattr4 data type is used to represent file and directory | |||
attributes. | attributes. | |||
The bitmap is a counted array of 32-bit integers used to contain bit | The bitmap is a counted array of 32-bit integers used to contain bit | |||
values. The position of the integer in the array that contains bit n | values. The position of the integer in the array that contains bit n | |||
can be computed from the expression (n / 32), and its bit within that | can be computed from the expression (n / 32), and its bit within that | |||
integer is (n mod 32). | integer is (n mod 32). | |||
0 1 | 0 1 | |||
+-----------+-----------+-----------+-- | +-----------+-----------+-----------+-- | |||
| count | 31 .. 0 | 63 .. 32 | | | count | 31 .. 0 | 63 .. 32 | | |||
+-----------+-----------+-----------+-- | +-----------+-----------+-----------+-- | |||
3.3.8. change_info4 | 3.3.8. change_info4 | |||
struct change_info4 { | struct change_info4 { | |||
bool atomic; | bool atomic; | |||
changeid4 before; | changeid4 before; | |||
changeid4 after; | changeid4 after; | |||
skipping to change at line 4469 ¶ | skipping to change at line 4470 ¶ | |||
The layouttype4 data type is 32 bits in length. The range | The layouttype4 data type is 32 bits in length. The range | |||
represented by the layout type is split into three parts. Type 0x0 | represented by the layout type is split into three parts. Type 0x0 | |||
is reserved. Types within the range 0x00000001-0x7FFFFFFF are | is reserved. Types within the range 0x00000001-0x7FFFFFFF are | |||
globally unique and are assigned according to the description in | globally unique and are assigned according to the description in | |||
Section 22.5; they are maintained by IANA. Types within the range | Section 22.5; they are maintained by IANA. Types within the range | |||
0x80000000-0xFFFFFFFF are site specific and for private use only. | 0x80000000-0xFFFFFFFF are site specific and for private use only. | |||
The LAYOUT4_NFSV4_1_FILES enumeration specifies that the NFSv4.1 file | The LAYOUT4_NFSV4_1_FILES enumeration specifies that the NFSv4.1 file | |||
layout type, as defined in Section 13, is to be used. The | layout type, as defined in Section 13, is to be used. The | |||
LAYOUT4_OSD2_OBJECTS enumeration specifies that the object layout, as | LAYOUT4_OSD2_OBJECTS enumeration specifies that the object layout, as | |||
defined in [46], is to be used. Similarly, the LAYOUT4_BLOCK_VOLUME | defined in [47], is to be used. Similarly, the LAYOUT4_BLOCK_VOLUME | |||
enumeration specifies that the block/volume layout, as defined in | enumeration specifies that the block/volume layout, as defined in | |||
[47], is to be used. | [48], is to be used. | |||
3.3.14. deviceid4 | 3.3.14. deviceid4 | |||
const NFS4_DEVICEID4_SIZE = 16; | const NFS4_DEVICEID4_SIZE = 16; | |||
typedef opaque deviceid4[NFS4_DEVICEID4_SIZE]; | typedef opaque deviceid4[NFS4_DEVICEID4_SIZE]; | |||
Layout information includes device IDs that specify a storage device | Layout information includes device IDs that specify a storage device | |||
through a compact handle. Addressing and type information is | through a compact handle. Addressing and type information is | |||
obtained with the GETDEVICEINFO operation. Device IDs are not | obtained with the GETDEVICEINFO operation. Device IDs are not | |||
skipping to change at line 4684 ¶ | skipping to change at line 4685 ¶ | |||
for a file system object. The contents of the filehandle are opaque | for a file system object. The contents of the filehandle are opaque | |||
to the client. Therefore, the server is responsible for translating | to the client. Therefore, the server is responsible for translating | |||
the filehandle to an internal representation of the file system | the filehandle to an internal representation of the file system | |||
object. | object. | |||
4.1. Obtaining the First Filehandle | 4.1. Obtaining the First Filehandle | |||
The operations of the NFS protocol are defined in terms of one or | The operations of the NFS protocol are defined in terms of one or | |||
more filehandles. Therefore, the client needs a filehandle to | more filehandles. Therefore, the client needs a filehandle to | |||
initiate communication with the server. With the NFSv3 protocol (RFC | initiate communication with the server. With the NFSv3 protocol (RFC | |||
1813 [37]), there exists an ancillary protocol to obtain this first | 1813 [38]), there exists an ancillary protocol to obtain this first | |||
filehandle. The MOUNT protocol, RPC program number 100005, provides | filehandle. The MOUNT protocol, RPC program number 100005, provides | |||
the mechanism of translating a string-based file system pathname to a | the mechanism of translating a string-based file system pathname to a | |||
filehandle, which can then be used by the NFS protocols. | filehandle, which can then be used by the NFS protocols. | |||
The MOUNT protocol has deficiencies in the area of security and use | The MOUNT protocol has deficiencies in the area of security and use | |||
via firewalls. This is one reason that the use of the public | via firewalls. This is one reason that the use of the public | |||
filehandle was introduced in RFC 2054 [48] and RFC 2055 [49]. With | filehandle was introduced in RFC 2054 [49] and RFC 2055 [50]. With | |||
the use of the public filehandle in combination with the LOOKUP | the use of the public filehandle in combination with the LOOKUP | |||
operation in the NFSv3 protocol, it has been demonstrated that the | operation in the NFSv3 protocol, it has been demonstrated that the | |||
MOUNT protocol is unnecessary for viable interaction between NFS | MOUNT protocol is unnecessary for viable interaction between NFS | |||
client and server. | client and server. | |||
Therefore, the NFSv4.1 protocol will not use an ancillary protocol | Therefore, the NFSv4.1 protocol will not use an ancillary protocol | |||
for translation from string-based pathnames to a filehandle. Two | for translation from string-based pathnames to a filehandle. Two | |||
special filehandles will be used as starting points for the NFS | special filehandles will be used as starting points for the NFS | |||
client. | client. | |||
skipping to change at line 4955 ¶ | skipping to change at line 4956 ¶ | |||
Named attributes are accessed by the new OPENATTR operation, which | Named attributes are accessed by the new OPENATTR operation, which | |||
accesses a hidden directory of attributes associated with a file | accesses a hidden directory of attributes associated with a file | |||
system object. OPENATTR takes a filehandle for the object and | system object. OPENATTR takes a filehandle for the object and | |||
returns the filehandle for the attribute hierarchy. The filehandle | returns the filehandle for the attribute hierarchy. The filehandle | |||
for the named attributes is a directory object accessible by LOOKUP | for the named attributes is a directory object accessible by LOOKUP | |||
or READDIR and contains files whose names represent the named | or READDIR and contains files whose names represent the named | |||
attributes and whose data bytes are the value of the attribute. For | attributes and whose data bytes are the value of the attribute. For | |||
example: | example: | |||
+==========+===========+=================================+ | +----------+-----------+---------------------------------+ | |||
+==========+===========+=================================+ | ||||
| LOOKUP | "foo" | ; look up file | | | LOOKUP | "foo" | ; look up file | | |||
+----------+-----------+---------------------------------+ | +----------+-----------+---------------------------------+ | |||
| GETATTR | attrbits | | | | GETATTR | attrbits | | | |||
+----------+-----------+---------------------------------+ | +----------+-----------+---------------------------------+ | |||
| OPENATTR | | ; access foo's named attributes | | | OPENATTR | | ; access foo's named attributes | | |||
+----------+-----------+---------------------------------+ | +----------+-----------+---------------------------------+ | |||
| LOOKUP | "x11icon" | ; look up specific attribute | | | LOOKUP | "x11icon" | ; look up specific attribute | | |||
+----------+-----------+---------------------------------+ | +----------+-----------+---------------------------------+ | |||
| READ | 0,4096 | ; read stream of bytes | | | READ | 0,4096 | ; read stream of bytes | | |||
+----------+-----------+---------------------------------+ | +----------+-----------+---------------------------------+ | |||
skipping to change at line 5158 ¶ | skipping to change at line 5158 ¶ | |||
5.6. REQUIRED Attributes - List and Definition References | 5.6. REQUIRED Attributes - List and Definition References | |||
The list of REQUIRED attributes appears in Table 4. The meaning of | The list of REQUIRED attributes appears in Table 4. The meaning of | |||
the columns of the table are: | the columns of the table are: | |||
Name: The name of the attribute. | Name: The name of the attribute. | |||
Id: The number assigned to the attribute. In the event of conflicts | Id: The number assigned to the attribute. In the event of conflicts | |||
between the assigned number and [10], the latter is likely | between the assigned number and [10], the latter is likely | |||
authoritative, but should be resolved with Errata to this document | authoritative, but should be resolved with Errata to this document | |||
and/or [10]. See [50] for the Errata process. | and/or [10]. See [51] for the Errata process. | |||
Data Type: The XDR data type of the attribute. | Data Type: The XDR data type of the attribute. | |||
Acc: Access allowed to the attribute. R means read-only (GETATTR | Acc: Access allowed to the attribute. R means read-only (GETATTR | |||
may retrieve, SETATTR may not set). W means write-only (SETATTR | may retrieve, SETATTR may not set). W means write-only (SETATTR | |||
may set, GETATTR may not retrieve). R W means read/write (GETATTR | may set, GETATTR may not retrieve). R W means read/write (GETATTR | |||
may retrieve, SETATTR may set). | may retrieve, SETATTR may set). | |||
Defined in: The section of this specification that describes the | Defined in: The section of this specification that describes the | |||
attribute. | attribute. | |||
skipping to change at line 5210 ¶ | skipping to change at line 5210 ¶ | |||
+--------------------+----+------------+-----+------------------+ | +--------------------+----+------------+-----+------------------+ | |||
Table 4 | Table 4 | |||
5.7. RECOMMENDED Attributes - List and Definition References | 5.7. RECOMMENDED Attributes - List and Definition References | |||
The RECOMMENDED attributes are defined in Table 5. The meanings of | The RECOMMENDED attributes are defined in Table 5. The meanings of | |||
the column headers are the same as Table 4; see Section 5.6 for the | the column headers are the same as Table 4; see Section 5.6 for the | |||
meanings. | meanings. | |||
+====================+====+================+=====+==================+ | +====================+====+====================+=====+=============+ | |||
| Name | Id | Data Type | Acc | Defined in: | | | Name | Id | Data Type | Acc | Defined in: | | |||
+====================+====+================+=====+==================+ | +====================+====+====================+=====+=============+ | |||
| acl | 12 | nfsace4<> | R W | Section 6.2.1 | | | acl | 12 | nfsace4<> | R W | Section | | |||
+--------------------+----+----------------+-----+------------------+ | | | | | | 6.2.1 | | |||
| aclsupport | 13 | uint32_t | R | Section 6.2.1.2 | | +--------------------+----+--------------------+-----+-------------+ | |||
+--------------------+----+----------------+-----+------------------+ | | aclsupport | 13 | uint32_t | R | Section | | |||
| archive | 14 | bool | R W | Section 5.8.2.1 | | | | | | | 6.2.1.2 | | |||
+--------------------+----+----------------+-----+------------------+ | +--------------------+----+--------------------+-----+-------------+ | |||
| cansettime | 15 | bool | R | Section 5.8.2.2 | | | archive | 14 | bool | R W | Section | | |||
+--------------------+----+----------------+-----+------------------+ | | | | | | 5.8.2.1 | | |||
| case_insensitive | 16 | bool | R | Section 5.8.2.3 | | +--------------------+----+--------------------+-----+-------------+ | |||
+--------------------+----+----------------+-----+------------------+ | | cansettime | 15 | bool | R | Section | | |||
| case_preserving | 17 | bool | R | Section 5.8.2.4 | | | | | | | 5.8.2.2 | | |||
+--------------------+----+----------------+-----+------------------+ | +--------------------+----+--------------------+-----+-------------+ | |||
| change_policy | 60 | chg_policy4 | R | Section 5.8.2.5 | | | case_insensitive | 16 | bool | R | Section | | |||
+--------------------+----+----------------+-----+------------------+ | | | | | | 5.8.2.3 | | |||
| chown_restricted | 18 | bool | R | Section 5.8.2.6 | | +--------------------+----+--------------------+-----+-------------+ | |||
+--------------------+----+----------------+-----+------------------+ | | case_preserving | 17 | bool | R | Section | | |||
| dacl | 58 | nfsacl41 | R W | Section 6.2.2 | | | | | | | 5.8.2.4 | | |||
+--------------------+----+----------------+-----+------------------+ | +--------------------+----+--------------------+-----+-------------+ | |||
| dir_notif_delay | 56 | nfstime4 | R | Section 5.11.1 | | | change_policy | 60 | chg_policy4 | R | Section | | |||
+--------------------+----+----------------+-----+------------------+ | | | | | | 5.8.2.5 | | |||
| dirent_notif_delay | 57 | nfstime4 | R | Section 5.11.2 | | +--------------------+----+--------------------+-----+-------------+ | |||
+--------------------+----+----------------+-----+------------------+ | | chown_restricted | 18 | bool | R | Section | | |||
| fileid | 20 | uint64_t | R | Section 5.8.2.7 | | | | | | | 5.8.2.6 | | |||
+--------------------+----+----------------+-----+------------------+ | +--------------------+----+--------------------+-----+-------------+ | |||
| files_avail | 21 | uint64_t | R | Section 5.8.2.8 | | | dacl | 58 | nfsacl41 | R W | Section | | |||
+--------------------+----+----------------+-----+------------------+ | | | | | | 6.2.2 | | |||
| files_free | 22 | uint64_t | R | Section 5.8.2.9 | | +--------------------+----+--------------------+-----+-------------+ | |||
+--------------------+----+----------------+-----+------------------+ | | dir_notif_delay | 56 | nfstime4 | R | Section | | |||
| files_total | 23 | uint64_t | R | Section | | | | | | | 5.11.1 | | |||
| | | | | 5.8.2.10 | | +--------------------+----+--------------------+-----+-------------+ | |||
+--------------------+----+----------------+-----+------------------+ | | dirent_notif_delay | 57 | nfstime4 | R | Section | | |||
| fs_charset_cap | 76 | uint32_t | R | Section | | | | | | | 5.11.2 | | |||
| | | | | 5.8.2.11 | | +--------------------+----+--------------------+-----+-------------+ | |||
+--------------------+----+----------------+-----+------------------+ | | fileid | 20 | uint64_t | R | Section | | |||
| fs_layout_type | 62 | layouttype4<> | R | Section 5.12.1 | | | | | | | 5.8.2.7 | | |||
+--------------------+----+----------------+-----+------------------+ | +--------------------+----+--------------------+-----+-------------+ | |||
| fs_locations | 24 | fs_locations | R | Section | | | files_avail | 21 | uint64_t | R | Section | | |||
| | | | | 5.8.2.12 | | | | | | | 5.8.2.8 | | |||
+--------------------+----+----------------+-----+------------------+ | +--------------------+----+--------------------+-----+-------------+ | |||
| fs_locations_info | 67 | * | R | Section | | | files_free | 22 | uint64_t | R | Section | | |||
| | | | | 5.8.2.13 | | | | | | | 5.8.2.9 | | |||
+--------------------+----+----------------+-----+------------------+ | +--------------------+----+--------------------+-----+-------------+ | |||
| fs_status | 61 | fs4_status | R | Section | | | files_total | 23 | uint64_t | R | Section | | |||
| | | | | 5.8.2.14 | | | | | | | 5.8.2.10 | | |||
+--------------------+----+----------------+-----+------------------+ | +--------------------+----+--------------------+-----+-------------+ | |||
| hidden | 25 | bool | R W | Section | | | fs_charset_cap | 76 | uint32_t | R | Section | | |||
| | | | | 5.8.2.15 | | | | | | | 5.8.2.11 | | |||
+--------------------+----+----------------+-----+------------------+ | +--------------------+----+--------------------+-----+-------------+ | |||
| homogeneous | 26 | bool | R | Section | | | fs_layout_type | 62 | layouttype4<> | R | Section | | |||
| | | | | 5.8.2.16 | | | | | | | 5.12.1 | | |||
+--------------------+----+----------------+-----+------------------+ | +--------------------+----+--------------------+-----+-------------+ | |||
| layout_alignment | 66 | uint32_t | R | Section 5.12.2 | | | fs_locations | 24 | fs_locations | R | Section | | |||
+--------------------+----+----------------+-----+------------------+ | | | | | | 5.8.2.12 | | |||
| layout_blksize | 65 | uint32_t | R | Section 5.12.3 | | +--------------------+----+--------------------+-----+-------------+ | |||
+--------------------+----+----------------+-----+------------------+ | | fs_locations_info | 67 | fs_locations_info4 | R | Section | | |||
| layout_hint | 63 | layouthint4 | W | Section 5.12.4 | | | | | | | 5.8.2.13 | | |||
+--------------------+----+----------------+-----+------------------+ | +--------------------+----+--------------------+-----+-------------+ | |||
| layout_type | 64 | layouttype4<> | R | Section 5.12.5 | | | fs_status | 61 | fs4_status | R | Section | | |||
+--------------------+----+----------------+-----+------------------+ | | | | | | 5.8.2.14 | | |||
| maxfilesize | 27 | uint64_t | R | Section | | +--------------------+----+--------------------+-----+-------------+ | |||
| | | | | 5.8.2.17 | | | hidden | 25 | bool | R W | Section | | |||
+--------------------+----+----------------+-----+------------------+ | | | | | | 5.8.2.15 | | |||
| maxlink | 28 | uint32_t | R | Section | | +--------------------+----+--------------------+-----+-------------+ | |||
| | | | | 5.8.2.18 | | | homogeneous | 26 | bool | R | Section | | |||
+--------------------+----+----------------+-----+------------------+ | | | | | | 5.8.2.16 | | |||
| maxname | 29 | uint32_t | R | Section | | +--------------------+----+--------------------+-----+-------------+ | |||
| | | | | 5.8.2.19 | | | layout_alignment | 66 | uint32_t | R | Section | | |||
+--------------------+----+----------------+-----+------------------+ | | | | | | 5.12.2 | | |||
| maxread | 30 | uint64_t | R | Section | | +--------------------+----+--------------------+-----+-------------+ | |||
| | | | | 5.8.2.20 | | | layout_blksize | 65 | uint32_t | R | Section | | |||
+--------------------+----+----------------+-----+------------------+ | | | | | | 5.12.3 | | |||
| maxwrite | 31 | uint64_t | R | Section | | +--------------------+----+--------------------+-----+-------------+ | |||
| | | | | 5.8.2.21 | | | layout_hint | 63 | layouthint4 | W | Section | | |||
+--------------------+----+----------------+-----+------------------+ | | | | | | 5.12.4 | | |||
| mdsthreshold | 68 | mdsthreshold4 | R | Section 5.12.6 | | +--------------------+----+--------------------+-----+-------------+ | |||
+--------------------+----+----------------+-----+------------------+ | | layout_type | 64 | layouttype4<> | R | Section | | |||
| mimetype | 32 | utf8str_cs | R W | Section | | | | | | | 5.12.5 | | |||
| | | | | 5.8.2.22 | | +--------------------+----+--------------------+-----+-------------+ | |||
+--------------------+----+----------------+-----+------------------+ | | maxfilesize | 27 | uint64_t | R | Section | | |||
| mode | 33 | mode4 | R W | Section 6.2.4 | | | | | | | 5.8.2.17 | | |||
+--------------------+----+----------------+-----+------------------+ | +--------------------+----+--------------------+-----+-------------+ | |||
| mode_set_masked | 74 | mode_masked4 | W | Section 6.2.5 | | | maxlink | 28 | uint32_t | R | Section | | |||
+--------------------+----+----------------+-----+------------------+ | | | | | | 5.8.2.18 | | |||
| mounted_on_fileid | 55 | uint64_t | R | Section | | +--------------------+----+--------------------+-----+-------------+ | |||
| | | | | 5.8.2.23 | | | maxname | 29 | uint32_t | R | Section | | |||
+--------------------+----+----------------+-----+------------------+ | | | | | | 5.8.2.19 | | |||
| no_trunc | 34 | bool | R | Section | | +--------------------+----+--------------------+-----+-------------+ | |||
| | | | | 5.8.2.24 | | | maxread | 30 | uint64_t | R | Section | | |||
+--------------------+----+----------------+-----+------------------+ | | | | | | 5.8.2.20 | | |||
| numlinks | 35 | uint32_t | R | Section | | +--------------------+----+--------------------+-----+-------------+ | |||
| | | | | 5.8.2.25 | | | maxwrite | 31 | uint64_t | R | Section | | |||
+--------------------+----+----------------+-----+------------------+ | | | | | | 5.8.2.21 | | |||
| owner | 36 | utf8str_mixed | R W | Section | | +--------------------+----+--------------------+-----+-------------+ | |||
| | | | | 5.8.2.26 | | | mdsthreshold | 68 | mdsthreshold4 | R | Section | | |||
+--------------------+----+----------------+-----+------------------+ | | | | | | 5.12.6 | | |||
| owner_group | 37 | utf8str_mixed | R W | Section | | +--------------------+----+--------------------+-----+-------------+ | |||
| | | | | 5.8.2.27 | | | mimetype | 32 | utf8str_cs | R W | Section | | |||
+--------------------+----+----------------+-----+------------------+ | | | | | | 5.8.2.22 | | |||
| quota_avail_hard | 38 | uint64_t | R | Section | | +--------------------+----+--------------------+-----+-------------+ | |||
| | | | | 5.8.2.28 | | | mode | 33 | mode4 | R W | Section | | |||
+--------------------+----+----------------+-----+------------------+ | | | | | | 6.2.4 | | |||
| quota_avail_soft | 39 | uint64_t | R | Section | | +--------------------+----+--------------------+-----+-------------+ | |||
| | | | | 5.8.2.29 | | | mode_set_masked | 74 | mode_masked4 | W | Section | | |||
+--------------------+----+----------------+-----+------------------+ | | | | | | 6.2.5 | | |||
| quota_used | 40 | uint64_t | R | Section | | +--------------------+----+--------------------+-----+-------------+ | |||
| | | | | 5.8.2.30 | | | mounted_on_fileid | 55 | uint64_t | R | Section | | |||
+--------------------+----+----------------+-----+------------------+ | | | | | | 5.8.2.23 | | |||
| rawdev | 41 | specdata4 | R | Section | | +--------------------+----+--------------------+-----+-------------+ | |||
| | | | | 5.8.2.31 | | | no_trunc | 34 | bool | R | Section | | |||
+--------------------+----+----------------+-----+------------------+ | | | | | | 5.8.2.24 | | |||
| retentevt_get | 71 | retention_get4 | R | Section 5.13.3 | | +--------------------+----+--------------------+-----+-------------+ | |||
+--------------------+----+----------------+-----+------------------+ | | numlinks | 35 | uint32_t | R | Section | | |||
| retentevt_set | 72 | retention_set4 | W | Section 5.13.4 | | | | | | | 5.8.2.25 | | |||
+--------------------+----+----------------+-----+------------------+ | +--------------------+----+--------------------+-----+-------------+ | |||
| retention_get | 69 | retention_get4 | R | Section 5.13.1 | | | owner | 36 | utf8str_mixed | R W | Section | | |||
+--------------------+----+----------------+-----+------------------+ | | | | | | 5.8.2.26 | | |||
| retention_hold | 73 | uint64_t | R W | Section 5.13.5 | | +--------------------+----+--------------------+-----+-------------+ | |||
+--------------------+----+----------------+-----+------------------+ | | owner_group | 37 | utf8str_mixed | R W | Section | | |||
| retention_set | 70 | retention_set4 | W | Section 5.13.2 | | | | | | | 5.8.2.27 | | |||
+--------------------+----+----------------+-----+------------------+ | +--------------------+----+--------------------+-----+-------------+ | |||
| sacl | 59 | nfsacl41 | R W | Section 6.2.3 | | | quota_avail_hard | 38 | uint64_t | R | Section | | |||
+--------------------+----+----------------+-----+------------------+ | | | | | | 5.8.2.28 | | |||
| space_avail | 42 | uint64_t | R | Section | | +--------------------+----+--------------------+-----+-------------+ | |||
| | | | | 5.8.2.32 | | | quota_avail_soft | 39 | uint64_t | R | Section | | |||
+--------------------+----+----------------+-----+------------------+ | | | | | | 5.8.2.29 | | |||
| space_free | 43 | uint64_t | R | Section | | +--------------------+----+--------------------+-----+-------------+ | |||
| | | | | 5.8.2.33 | | | quota_used | 40 | uint64_t | R | Section | | |||
+--------------------+----+----------------+-----+------------------+ | | | | | | 5.8.2.30 | | |||
| space_total | 44 | uint64_t | R | Section | | +--------------------+----+--------------------+-----+-------------+ | |||
| | | | | 5.8.2.34 | | | rawdev | 41 | specdata4 | R | Section | | |||
+--------------------+----+----------------+-----+------------------+ | | | | | | 5.8.2.31 | | |||
| space_used | 45 | uint64_t | R | Section | | +--------------------+----+--------------------+-----+-------------+ | |||
| | | | | 5.8.2.35 | | | retentevt_get | 71 | retention_get4 | R | Section | | |||
+--------------------+----+----------------+-----+------------------+ | | | | | | 5.13.3 | | |||
| system | 46 | bool | R W | Section | | +--------------------+----+--------------------+-----+-------------+ | |||
| | | | | 5.8.2.36 | | | retentevt_set | 72 | retention_set4 | W | Section | | |||
+--------------------+----+----------------+-----+------------------+ | | | | | | 5.13.4 | | |||
| time_access | 47 | nfstime4 | R | Section | | +--------------------+----+--------------------+-----+-------------+ | |||
| | | | | 5.8.2.37 | | | retention_get | 69 | retention_get4 | R | Section | | |||
+--------------------+----+----------------+-----+------------------+ | | | | | | 5.13.1 | | |||
| time_access_set | 48 | settime4 | W | Section | | +--------------------+----+--------------------+-----+-------------+ | |||
| | | | | 5.8.2.38 | | | retention_hold | 73 | uint64_t | R W | Section | | |||
+--------------------+----+----------------+-----+------------------+ | | | | | | 5.13.5 | | |||
| time_backup | 49 | nfstime4 | R W | Section | | +--------------------+----+--------------------+-----+-------------+ | |||
| | | | | 5.8.2.39 | | | retention_set | 70 | retention_set4 | W | Section | | |||
+--------------------+----+----------------+-----+------------------+ | | | | | | 5.13.2 | | |||
| time_create | 50 | nfstime4 | R W | Section | | +--------------------+----+--------------------+-----+-------------+ | |||
| | | | | 5.8.2.40 | | | sacl | 59 | nfsacl41 | R W | Section | | |||
+--------------------+----+----------------+-----+------------------+ | | | | | | 6.2.3 | | |||
| time_delta | 51 | nfstime4 | R | Section | | +--------------------+----+--------------------+-----+-------------+ | |||
| | | | | 5.8.2.41 | | | space_avail | 42 | uint64_t | R | Section | | |||
+--------------------+----+----------------+-----+------------------+ | | | | | | 5.8.2.32 | | |||
| time_metadata | 52 | nfstime4 | R | Section | | +--------------------+----+--------------------+-----+-------------+ | |||
| | | | | 5.8.2.42 | | | space_free | 43 | uint64_t | R | Section | | |||
+--------------------+----+----------------+-----+------------------+ | | | | | | 5.8.2.33 | | |||
| time_modify | 53 | nfstime4 | R | Section | | +--------------------+----+--------------------+-----+-------------+ | |||
| | | | | 5.8.2.43 | | | space_total | 44 | uint64_t | R | Section | | |||
+--------------------+----+----------------+-----+------------------+ | | | | | | 5.8.2.34 | | |||
| time_modify_set | 54 | settime4 | W | Section | | +--------------------+----+--------------------+-----+-------------+ | |||
| | | | | 5.8.2.44 | | | space_used | 45 | uint64_t | R | Section | | |||
+--------------------+----+----------------+-----+------------------+ | | | | | | 5.8.2.35 | | |||
| * fs_locations_info4 | | +--------------------+----+--------------------+-----+-------------+ | |||
+-------------------------------------------------------------------+ | | system | 46 | bool | R W | Section | | |||
| | | | | 5.8.2.36 | | ||||
+--------------------+----+--------------------+-----+-------------+ | ||||
| time_access | 47 | nfstime4 | R | Section | | ||||
| | | | | 5.8.2.37 | | ||||
+--------------------+----+--------------------+-----+-------------+ | ||||
| time_access_set | 48 | settime4 | W | Section | | ||||
| | | | | 5.8.2.38 | | ||||
+--------------------+----+--------------------+-----+-------------+ | ||||
| time_backup | 49 | nfstime4 | R W | Section | | ||||
| | | | | 5.8.2.39 | | ||||
+--------------------+----+--------------------+-----+-------------+ | ||||
| time_create | 50 | nfstime4 | R W | Section | | ||||
| | | | | 5.8.2.40 | | ||||
+--------------------+----+--------------------+-----+-------------+ | ||||
| time_delta | 51 | nfstime4 | R | Section | | ||||
| | | | | 5.8.2.41 | | ||||
+--------------------+----+--------------------+-----+-------------+ | ||||
| time_metadata | 52 | nfstime4 | R | Section | | ||||
| | | | | 5.8.2.42 | | ||||
+--------------------+----+--------------------+-----+-------------+ | ||||
| time_modify | 53 | nfstime4 | R | Section | | ||||
| | | | | 5.8.2.43 | | ||||
+--------------------+----+--------------------+-----+-------------+ | ||||
| time_modify_set | 54 | settime4 | W | Section | | ||||
| | | | | 5.8.2.44 | | ||||
+--------------------+----+--------------------+-----+-------------+ | ||||
Table 5 | Table 5 | |||
5.8. Attribute Definitions | 5.8. Attribute Definitions | |||
5.8.1. Definitions of REQUIRED Attributes | 5.8.1. Definitions of REQUIRED Attributes | |||
5.8.1.1. Attribute 0: supported_attrs | 5.8.1.1. Attribute 0: supported_attrs | |||
The bit vector that would retrieve all REQUIRED and RECOMMENDED | The bit vector that would retrieve all REQUIRED and RECOMMENDED | |||
attributes that are supported for this object. The scope of this | attributes that are supported for this object. The scope of this | |||
attribute applies to all objects with a matching fsid. | attribute applies to all objects with a matching fsid. | |||
skipping to change at line 5806 ¶ | skipping to change at line 5832 ¶ | |||
5.8.2.44. Attribute 54: time_modify_set | 5.8.2.44. Attribute 54: time_modify_set | |||
Sets the time of last modification to the object. SETATTR use only. | Sets the time of last modification to the object. SETATTR use only. | |||
5.9. Interpreting owner and owner_group | 5.9. Interpreting owner and owner_group | |||
The RECOMMENDED attributes "owner" and "owner_group" (and also users | The RECOMMENDED attributes "owner" and "owner_group" (and also users | |||
and groups within the "acl" attribute) are represented in terms of a | and groups within the "acl" attribute) are represented in terms of a | |||
UTF-8 string. To avoid a representation that is tied to a particular | UTF-8 string. To avoid a representation that is tied to a particular | |||
underlying implementation at the client or server, the use of the | underlying implementation at the client or server, the use of the | |||
UTF-8 string has been chosen. Note that Section 6.1 of RFC 2624 [52] | UTF-8 string has been chosen. Note that Section 6.1 of RFC 2624 [53] | |||
provides additional rationale. It is expected that the client and | provides additional rationale. It is expected that the client and | |||
server will have their own local representation of owner and | server will have their own local representation of owner and | |||
owner_group that is used for local storage or presentation to the end | owner_group that is used for local storage or presentation to the end | |||
user. Therefore, it is expected that when these attributes are | user. Therefore, it is expected that when these attributes are | |||
transferred between the client and server, the local representation | transferred between the client and server, the local representation | |||
is translated to a syntax of the form "user@dns_domain". This will | is translated to a syntax of the form "user@dns_domain". This will | |||
allow for a client and server that do not use the same local | allow for a client and server that do not use the same local | |||
representation the ability to translate to a common syntax that can | representation the ability to translate to a common syntax that can | |||
be interpreted by both. | be interpreted by both. | |||
skipping to change at line 6799 ¶ | skipping to change at line 6825 ¶ | |||
trigger log or alarm events. Such ACEs only take effect once they | trigger log or alarm events. Such ACEs only take effect once they | |||
are applied (with this bit cleared) to newly created files and | are applied (with this bit cleared) to newly created files and | |||
directories as specified by the ACE4_FILE_INHERIT_ACE and | directories as specified by the ACE4_FILE_INHERIT_ACE and | |||
ACE4_DIRECTORY_INHERIT_ACE flags. | ACE4_DIRECTORY_INHERIT_ACE flags. | |||
If this flag is present on an ACE, but neither | If this flag is present on an ACE, but neither | |||
ACE4_DIRECTORY_INHERIT_ACE nor ACE4_FILE_INHERIT_ACE is present, | ACE4_DIRECTORY_INHERIT_ACE nor ACE4_FILE_INHERIT_ACE is present, | |||
then an operation attempting to set such an attribute SHOULD fail | then an operation attempting to set such an attribute SHOULD fail | |||
with NFS4ERR_ATTRNOTSUPP. | with NFS4ERR_ATTRNOTSUPP. | |||
ACE4_SUCCESSFUL_ACCESS_ACE_FLAG | ACE4_SUCCESSFUL_ACCESS_ACE_FLAG and ACE4_FAILED_ACCESS_ACE_FLAG | |||
ACE4_FAILED_ACCESS_ACE_FLAG | ||||
The ACE4_SUCCESSFUL_ACCESS_ACE_FLAG (SUCCESS) and | The ACE4_SUCCESSFUL_ACCESS_ACE_FLAG (SUCCESS) and | |||
ACE4_FAILED_ACCESS_ACE_FLAG (FAILED) flag bits may be set only on | ACE4_FAILED_ACCESS_ACE_FLAG (FAILED) flag bits may be set only on | |||
ACE4_SYSTEM_AUDIT_ACE_TYPE (AUDIT) and ACE4_SYSTEM_ALARM_ACE_TYPE | ACE4_SYSTEM_AUDIT_ACE_TYPE (AUDIT) and ACE4_SYSTEM_ALARM_ACE_TYPE | |||
(ALARM) ACE types. If during the processing of the file's ACL, | (ALARM) ACE types. If during the processing of the file's ACL, | |||
the server encounters an AUDIT or ALARM ACE that matches the | the server encounters an AUDIT or ALARM ACE that matches the | |||
principal attempting the OPEN, the server notes that fact, and the | principal attempting the OPEN, the server notes that fact, and the | |||
presence, if any, of the SUCCESS and FAILED flags encountered in | presence, if any, of the SUCCESS and FAILED flags encountered in | |||
the AUDIT or ALARM ACE. Once the server completes the ACL | the AUDIT or ALARM ACE. Once the server completes the ACL | |||
processing, it then notes if the operation succeeded or failed. | processing, it then notes if the operation succeeded or failed. | |||
If the operation succeeded, and if the SUCCESS flag was set for a | If the operation succeeded, and if the SUCCESS flag was set for a | |||
skipping to change at line 7573 ¶ | skipping to change at line 7597 ¶ | |||
clients should use strong security mechanisms to access the pseudo | clients should use strong security mechanisms to access the pseudo | |||
file system in order to prevent man-in-the-middle attacks. | file system in order to prevent man-in-the-middle attacks. | |||
8. State Management | 8. State Management | |||
Integrating locking into the NFS protocol necessarily causes it to be | Integrating locking into the NFS protocol necessarily causes it to be | |||
stateful. With the inclusion of such features as share reservations, | stateful. With the inclusion of such features as share reservations, | |||
file and directory delegations, recallable layouts, and support for | file and directory delegations, recallable layouts, and support for | |||
mandatory byte-range locking, the protocol becomes substantially more | mandatory byte-range locking, the protocol becomes substantially more | |||
dependent on proper management of state than the traditional | dependent on proper management of state than the traditional | |||
combination of NFS and NLM (Network Lock Manager) [53]. These | combination of NFS and NLM (Network Lock Manager) [54]. These | |||
features include expanded locking facilities, which provide some | features include expanded locking facilities, which provide some | |||
measure of inter-client exclusion, but the state also offers features | measure of inter-client exclusion, but the state also offers features | |||
not readily providable using a stateless model. There are three | not readily providable using a stateless model. There are three | |||
components to making this state manageable: | components to making this state manageable: | |||
* clear division between client and server | * clear division between client and server | |||
* ability to reliably detect inconsistency in state between client | * ability to reliably detect inconsistency in state between client | |||
and server | and server | |||
skipping to change at line 8370 ¶ | skipping to change at line 8394 ¶ | |||
requests to be processed during the grace period, it MUST determine | requests to be processed during the grace period, it MUST determine | |||
that no lock subsequently reclaimed will be rejected and that no lock | that no lock subsequently reclaimed will be rejected and that no lock | |||
subsequently reclaimed would have prevented any I/O operation | subsequently reclaimed would have prevented any I/O operation | |||
processed during the grace period. | processed during the grace period. | |||
Clients should be prepared for the return of NFS4ERR_GRACE errors for | Clients should be prepared for the return of NFS4ERR_GRACE errors for | |||
non-reclaim lock and I/O requests. In this case, the client should | non-reclaim lock and I/O requests. In this case, the client should | |||
employ a retry mechanism for the request. A delay (on the order of | employ a retry mechanism for the request. A delay (on the order of | |||
several seconds) between retries should be used to avoid overwhelming | several seconds) between retries should be used to avoid overwhelming | |||
the server. Further discussion of the general issue is included in | the server. Further discussion of the general issue is included in | |||
[54]. The client must account for the server that can perform I/O | [55]. The client must account for the server that can perform I/O | |||
and non-reclaim locking requests within the grace period as well as | and non-reclaim locking requests within the grace period as well as | |||
those that cannot do so. | those that cannot do so. | |||
A reclaim-type locking request outside the server's grace period can | A reclaim-type locking request outside the server's grace period can | |||
only succeed if the server can guarantee that no conflicting lock or | only succeed if the server can guarantee that no conflicting lock or | |||
I/O request has been granted since restart. | I/O request has been granted since restart. | |||
A server may, upon restart, establish a new value for the lease | A server may, upon restart, establish a new value for the lease | |||
period. Therefore, clients should, once a new client ID is | period. Therefore, clients should, once a new client ID is | |||
established, refetch the lease_time attribute and use it as the basis | established, refetch the lease_time attribute and use it as the basis | |||
skipping to change at line 9863 ¶ | skipping to change at line 9887 ¶ | |||
* The existence of any server-specific semantics of OPEN/CLOSE that | * The existence of any server-specific semantics of OPEN/CLOSE that | |||
would make the required handling incompatible with the prescribed | would make the required handling incompatible with the prescribed | |||
handling that the delegated client would apply (see below). | handling that the delegated client would apply (see below). | |||
There are two types of OPEN delegations: OPEN_DELEGATE_READ and | There are two types of OPEN delegations: OPEN_DELEGATE_READ and | |||
OPEN_DELEGATE_WRITE. An OPEN_DELEGATE_READ delegation allows a | OPEN_DELEGATE_WRITE. An OPEN_DELEGATE_READ delegation allows a | |||
client to handle, on its own, requests to open a file for reading | client to handle, on its own, requests to open a file for reading | |||
that do not deny OPEN4_SHARE_ACCESS_READ access to others. Multiple | that do not deny OPEN4_SHARE_ACCESS_READ access to others. Multiple | |||
OPEN_DELEGATE_READ delegations may be outstanding simultaneously and | OPEN_DELEGATE_READ delegations may be outstanding simultaneously and | |||
do not conflict. An OPEN_DELEGATE_WRITE delegation allows the client | do not conflict. An OPEN_DELEGATE_WRITE delegation allows the client | |||
to handle, on its own, all opens. Only OPEN_DELEGATE_WRITE | to handle, on its own, all opens. Only one OPEN_DELEGATE_WRITE | |||
delegation may exist for a given file at a given time, and it is | delegation may exist for a given file at a given time, and it is | |||
inconsistent with any OPEN_DELEGATE_READ delegations. | inconsistent with any OPEN_DELEGATE_READ delegations. | |||
When a client has an OPEN_DELEGATE_READ delegation, it is assured | When a client has an OPEN_DELEGATE_READ delegation, it is assured | |||
that neither the contents, the attributes (with the exception of | that neither the contents, the attributes (with the exception of | |||
time_access), nor the names of any links to the file will change | time_access), nor the names of any links to the file will change | |||
without its knowledge, so long as the delegation is held. When a | without its knowledge, so long as the delegation is held. When a | |||
client has an OPEN_DELEGATE_WRITE delegation, it may modify the file | client has an OPEN_DELEGATE_WRITE delegation, it may modify the file | |||
data locally since no other client will be accessing the file's data. | data locally since no other client will be accessing the file's data. | |||
The client holding an OPEN_DELEGATE_WRITE delegation may only locally | The client holding an OPEN_DELEGATE_WRITE delegation may only locally | |||
skipping to change at line 10212 ¶ | skipping to change at line 10236 ¶ | |||
no previous CLOSE operation has been sent to the server, a CLOSE | no previous CLOSE operation has been sent to the server, a CLOSE | |||
operation must be sent to the server. | operation must be sent to the server. | |||
* If a file has other open references at the client, then OPEN | * If a file has other open references at the client, then OPEN | |||
operations must be sent to the server. The appropriate stateids | operations must be sent to the server. The appropriate stateids | |||
will be provided by the server for subsequent use by the client | will be provided by the server for subsequent use by the client | |||
since the delegation stateid will no longer be valid. These OPEN | since the delegation stateid will no longer be valid. These OPEN | |||
requests are done with the claim type of CLAIM_DELEGATE_CUR. This | requests are done with the claim type of CLAIM_DELEGATE_CUR. This | |||
will allow the presentation of the delegation stateid so that the | will allow the presentation of the delegation stateid so that the | |||
client can establish the appropriate rights to perform the OPEN. | client can establish the appropriate rights to perform the OPEN. | |||
(see Section 18.16, which describes the OPEN operation, for | (See Section 18.16, which describes the OPEN operation, for | |||
details.) | details.) | |||
* If there are granted byte-range locks, the corresponding LOCK | * If there are granted byte-range locks, the corresponding LOCK | |||
operations need to be performed. This applies to the | operations need to be performed. This applies to the | |||
OPEN_DELEGATE_WRITE delegation case only. | OPEN_DELEGATE_WRITE delegation case only. | |||
* For an OPEN_DELEGATE_WRITE delegation, if at the time of recall | * For an OPEN_DELEGATE_WRITE delegation, if at the time of recall | |||
the file is not open for OPEN4_SHARE_ACCESS_WRITE/ | the file is not open for OPEN4_SHARE_ACCESS_WRITE/ | |||
OPEN4_SHARE_ACCESS_BOTH, all modified data for the file must be | OPEN4_SHARE_ACCESS_BOTH, all modified data for the file must be | |||
flushed to the server. If the delegation had not existed, the | flushed to the server. If the delegation had not existed, the | |||
skipping to change at line 10903 ¶ | skipping to change at line 10927 ¶ | |||
no provision is made for reclaiming directory delegations in the | no provision is made for reclaiming directory delegations in the | |||
event of client or server restart. The client can simply establish a | event of client or server restart. The client can simply establish a | |||
directory delegation in the same fashion as was done initially. | directory delegation in the same fashion as was done initially. | |||
11. Multi-Server Namespace | 11. Multi-Server Namespace | |||
NFSv4.1 supports attributes that allow a namespace to extend beyond | NFSv4.1 supports attributes that allow a namespace to extend beyond | |||
the boundaries of a single server. It is desirable that clients and | the boundaries of a single server. It is desirable that clients and | |||
servers support construction of such multi-server namespaces. Use of | servers support construction of such multi-server namespaces. Use of | |||
such multi-server namespaces is OPTIONAL; however, and for many | such multi-server namespaces is OPTIONAL; however, and for many | |||
purposes, single-server namespaces are perfectly acceptable. Use of | purposes, single-server namespaces are perfectly acceptable. The use | |||
multi-server namespaces can provide many advantages, by separating a | of multi-server namespaces can provide many advantages by separating | |||
file system's logical position in a namespace from the (possibly | a file system's logical position in a namespace from the (possibly | |||
changing) logistical and administrative considerations that result in | changing) logistical and administrative considerations that cause a | |||
particular file systems being located on particular servers via a | particular file system to be located on a particular server via a | |||
single network access path known in advance or determined using DNS. | single network access path that has to be known in advance or | |||
determined using DNS. | ||||
11.1. Terminology | 11.1. Terminology | |||
In this section as a whole (i.e., within all of Section 11), the | In this section as a whole (i.e., within all of Section 11), the | |||
phrase "client ID" always refers to the 64-bit shorthand identifier | phrase "client ID" always refers to the 64-bit shorthand identifier | |||
assigned by the server (a clientid4) and never to the structure that | assigned by the server (a clientid4) and never to the structure that | |||
the client uses to identify itself to the server (called an | the client uses to identify itself to the server (called an | |||
nfs_client_id4 or client_owner in NFSv4.0 and NFSv4.1, respectively). | nfs_client_id4 or client_owner in NFSv4.0 and NFSv4.1, respectively). | |||
The opaque identifier within those structures is referred to as a | The opaque identifier within those structures is referred to as a | |||
"client id string". | "client id string". | |||
skipping to change at line 10948 ¶ | skipping to change at line 10973 ¶ | |||
trunkable" and "session-trunkable". | trunkable" and "session-trunkable". | |||
* Trunking discovery is a process by which a client using one | * Trunking discovery is a process by which a client using one | |||
network address can obtain other addresses that are connected to | network address can obtain other addresses that are connected to | |||
the same server. Typically, it builds on a trunking detection | the same server. Typically, it builds on a trunking detection | |||
facility by providing one or more methods by which candidate | facility by providing one or more methods by which candidate | |||
addresses are made available to the client, who can then use | addresses are made available to the client, who can then use | |||
trunking detection to appropriately filter them. | trunking detection to appropriately filter them. | |||
Despite the support for trunking detection, there was no | Despite the support for trunking detection, there was no | |||
description of trunking discovery provided in RFC 5661 [65], | description of trunking discovery provided in RFC 5661 [66], | |||
making it necessary to provide those means in this document. | making it necessary to provide those means in this document. | |||
The combination of a server network address and a particular | The combination of a server network address and a particular | |||
connection type to be used by a connection is referred to as a | connection type to be used by a connection is referred to as a | |||
"server endpoint". Although using different connection types may | "server endpoint". Although using different connection types may | |||
result in different ports being used, the use of different ports by | result in different ports being used, the use of different ports by | |||
multiple connections to the same network address in such cases is not | multiple connections to the same network address in such cases is not | |||
the essence of the distinction between the two endpoints used. This | the essence of the distinction between the two endpoints used. This | |||
is in contrast to the case of port-specific endpoints, in which the | is in contrast to the case of port-specific endpoints, in which the | |||
explicit specification of port numbers within network addresses is | explicit specification of port numbers within network addresses is | |||
skipping to change at line 11078 ¶ | skipping to change at line 11103 ¶ | |||
able to use client ID trunking, but will only be able to use | able to use client ID trunking, but will only be able to use | |||
session trunking if the paths are also session-trunkable. | session trunking if the paths are also session-trunkable. | |||
* Two file system location elements are said to be session-trunkable | * Two file system location elements are said to be session-trunkable | |||
if they specify the same fs name and the location addresses are | if they specify the same fs name and the location addresses are | |||
such that the location addresses are session-trunkable. When the | such that the location addresses are session-trunkable. When the | |||
corresponding network paths are used, the client will be able to | corresponding network paths are used, the client will be able to | |||
able to use either client ID trunking or session trunking. | able to use either client ID trunking or session trunking. | |||
Discussion of the term "replica" is complicated by the fact that the | Discussion of the term "replica" is complicated by the fact that the | |||
term was used in RFC 5661 [65] with a meaning different from that | term was used in RFC 5661 [66] with a meaning different from that | |||
used in this document. In short, in [65] each replica is identified | used in this document. In short, in [66] each replica is identified | |||
by a single network access path, while in the current document, a set | by a single network access path, while in the current document, a set | |||
of network access paths that have server-trunkable network addresses | of network access paths that have server-trunkable network addresses | |||
and the same root-relative file system pathname is considered to be a | and the same root-relative file system pathname is considered to be a | |||
single replica with multiple network access paths. | single replica with multiple network access paths. | |||
Each set of server-trunkable location elements defines a set of | Each set of server-trunkable location elements defines a set of | |||
available network access paths to a particular file system. When | available network access paths to a particular file system. When | |||
there are multiple such file systems, each of which containing the | there are multiple such file systems, each of which containing the | |||
same data, these file systems are considered replicas of one another. | same data, these file systems are considered replicas of one another. | |||
Logically, such replication is symmetric, since the fs currently in | Logically, such replication is symmetric, since the fs currently in | |||
skipping to change at line 11124 ¶ | skipping to change at line 11149 ¶ | |||
(e.g., priority for use, writability, currency, etc.). | (e.g., priority for use, writability, currency, etc.). | |||
* Help the client efficiently effect as seamless a transition as | * Help the client efficiently effect as seamless a transition as | |||
possible among multiple file system instances, when and if that | possible among multiple file system instances, when and if that | |||
should be necessary. | should be necessary. | |||
* Guide the selection of the appropriate connection type to be used | * Guide the selection of the appropriate connection type to be used | |||
when establishing a connection. | when establishing a connection. | |||
Within the fs_locations_info attribute, each fs_locations_server4 | Within the fs_locations_info attribute, each fs_locations_server4 | |||
entry corresponds to a file system location entry with the fls_server | entry corresponds to a file system location entry: the fls_server | |||
field designating the server and with the location pathname within | field designates the server, and the fl_rootpath field of the | |||
the server's pseudo-fs given by the fl_rootpath field of the | encompassing fs_locations_item4 gives the location pathname within | |||
encompassing fs_locations_item4. | the server's pseudo-fs. | |||
The fs_locations attribute defined in NFSv4.0 is also a part of | The fs_locations attribute defined in NFSv4.0 is also a part of | |||
NFSv4.1. This attribute only allows specification of the file system | NFSv4.1. This attribute only allows specification of the file system | |||
locations where the data corresponding to a given file system may be | locations where the data corresponding to a given file system may be | |||
found. Servers SHOULD make this attribute available whenever | found. Servers SHOULD make this attribute available whenever | |||
fs_locations_info is supported, but client use of fs_locations_info | fs_locations_info is supported, but client use of fs_locations_info | |||
is preferable because it provides more information. | is preferable because it provides more information. | |||
Within the fs_locations attribute, each fs_location4 contains a file | Within the fs_locations attribute, each fs_location4 contains a file | |||
system location entry with the server field designating the server | system location entry with the server field designating the server | |||
skipping to change at line 11394 ¶ | skipping to change at line 11419 ¶ | |||
* The client may fetch the file system location attribute for the | * The client may fetch the file system location attribute for the | |||
file system. This will provide either the name of the server | file system. This will provide either the name of the server | |||
(which can be turned into a set of network addresses using DNS) or | (which can be turned into a set of network addresses using DNS) or | |||
a set of server-trunkable location entries. Using the latter | a set of server-trunkable location entries. Using the latter | |||
alternative, the server can provide addresses it regards as | alternative, the server can provide addresses it regards as | |||
desirable to use to access the file system in question. Although | desirable to use to access the file system in question. Although | |||
these entries can contain port numbers, these port numbers are not | these entries can contain port numbers, these port numbers are not | |||
used in determining trunking relationships. Once the candidate | used in determining trunking relationships. Once the candidate | |||
addresses have been determined and EXCHANGE_ID done to the proper | addresses have been determined and EXCHANGE_ID done to the proper | |||
server, only the value of the so_major field returned by the | server, only the value of the so_major_id field returned by the | |||
servers in question determines whether a trunking relationship | servers in question determines whether a trunking relationship | |||
actually exists. | actually exists. | |||
When the client fetches a location attribute for a file system, it | When the client fetches a location attribute for a file system, it | |||
should be noted that the client may encounter multiple entries for a | should be noted that the client may encounter multiple entries for a | |||
number of reasons, such that when it determines trunking information, | number of reasons, such that when it determines trunking information, | |||
it may have to bypass addresses not trunkable with one already known. | it may need to bypass addresses not trunkable with one already known. | |||
The server can provide location entries that include either names or | The server can provide location entries that include either names or | |||
network addresses. It might use the latter form because of DNS- | network addresses. It might use the latter form because of DNS- | |||
related security concerns or because the set of addresses to be used | related security concerns or because the set of addresses to be used | |||
might require active management by the server. | might require active management by the server. | |||
Location entries used to discover candidate addresses for use in | Location entries used to discover candidate addresses for use in | |||
trunking are subject to change, as discussed in Section 11.5.7 below. | trunking are subject to change, as discussed in Section 11.5.7 below. | |||
The client may respond to such changes by using additional addresses | The client may respond to such changes by using additional addresses | |||
once they are verified or by ceasing to use existing ones. The | once they are verified or by ceasing to use existing ones. The | |||
skipping to change at line 11435 ¶ | skipping to change at line 11460 ¶ | |||
may have to choose a connection type with no possibility of changing | may have to choose a connection type with no possibility of changing | |||
it within the scope of a single connection. | it within the scope of a single connection. | |||
The two file system location attributes differ as to the information | The two file system location attributes differ as to the information | |||
made available in this regard. The fs_locations attribute provides | made available in this regard. The fs_locations attribute provides | |||
no information to support connection type selection. As a result, | no information to support connection type selection. As a result, | |||
clients supporting multiple connection types would need to attempt to | clients supporting multiple connection types would need to attempt to | |||
establish connections using multiple connection types until the one | establish connections using multiple connection types until the one | |||
preferred by the client is successfully established. | preferred by the client is successfully established. | |||
The fs_locations_info attribute includes a flag, FSLI4TF_RDMA, which, | The fs_locations_info attribute includes the FSLI4TF_RDMA flag, which | |||
when set indicates that RPC-over-RDMA support is available using the | is convenient for a client wishing to use RDMA. When this flag is | |||
specified location entry, by "stepping up" an existing TCP connection | set, it indicates that RPC-over-RDMA support is available using the | |||
to include support for RDMA operation. This flag makes it convenient | specified location entry. A client can establish a TCP connection | |||
for a client wishing to use RDMA. When this flag is set, it can | and then convert that connection to use RDMA by using the step-up | |||
establish a TCP connection and then convert that connection to use | facility. | |||
RDMA by using the step-up facility. | ||||
Irrespective of the particular attribute used, when there is no | Irrespective of the particular attribute used, when there is no | |||
indication that a step-up operation can be performed, a client | indication that a step-up operation can be performed, a client | |||
supporting RDMA operation can establish a new RDMA connection, and it | supporting RDMA operation can establish a new RDMA connection, and it | |||
can be bound to the session already established by the TCP | can be bound to the session already established by the TCP | |||
connection, allowing the TCP connection to be dropped and the session | connection, allowing the TCP connection to be dropped and the session | |||
converted to further use in RDMA mode, if the server supports that. | converted to further use in RDMA mode, if the server supports that. | |||
11.5.4. File System Replication | 11.5.4. File System Replication | |||
skipping to change at line 11479 ¶ | skipping to change at line 11503 ¶ | |||
How the difference between replicas affects file system transitions | How the difference between replicas affects file system transitions | |||
can be represented within the fs_locations and fs_locations_info | can be represented within the fs_locations and fs_locations_info | |||
attributes, and how the client deals with file system transition | attributes, and how the client deals with file system transition | |||
issues will be discussed in detail in later sections. | issues will be discussed in detail in later sections. | |||
Although the location attributes provide some information about the | Although the location attributes provide some information about the | |||
nature of the inter-replica transition, many aspects of the semantics | nature of the inter-replica transition, many aspects of the semantics | |||
of possible asynchronous updates are not currently described by the | of possible asynchronous updates are not currently described by the | |||
protocol, which makes it necessary for clients using replication to | protocol, which makes it necessary for clients using replication to | |||
switch among replicas undergoing change to familiarize themselves | switch among replicas undergoing change to familiarize themselves | |||
with the semantics of the update approach used. Because of this lack | with the semantics of the update approach used. Due to this lack of | |||
of specificity, many applications may find the use of migration more | specificity, many applications may find the use of migration more | |||
appropriate, since, in that case, the server, when effecting the | appropriate because a server can propagate all updates made before an | |||
transition, has established a point in time such that all updates | established point in time to the new replica as part of the migration | |||
made before that can propagated to the new replica as part of the | event. | |||
migration event. | ||||
11.5.4.1. File System Trunking Presented as Replication | 11.5.4.1. File System Trunking Presented as Replication | |||
In some situations, a file system location entry may indicate a file | In some situations, a file system location entry may indicate a file | |||
system access path to be used as an alternate location, where | system access path to be used as an alternate location, where | |||
trunking, rather than replication, is to be used. The situations in | trunking, rather than replication, is to be used. The situations in | |||
which this is appropriate are limited to those in which both of the | which this is appropriate are limited to those in which both of the | |||
following are true: | following are true: | |||
* The two file system locations (i.e., the one on which the location | * The two file system locations (i.e., the one on which the location | |||
skipping to change at line 11533 ¶ | skipping to change at line 11556 ¶ | |||
system location entries with different handle, fileid, write- | system location entries with different handle, fileid, write- | |||
verifier, change, and readdir classes, indicates a serious | verifier, change, and readdir classes, indicates a serious | |||
problem. The client, if it allows transition to the file system | problem. The client, if it allows transition to the file system | |||
instance at all, must not treat any transition as a transparent | instance at all, must not treat any transition as a transparent | |||
one. The server SHOULD NOT indicate that these two entries (for | one. The server SHOULD NOT indicate that these two entries (for | |||
the same file system on the same server) belong to different | the same file system on the same server) belong to different | |||
handle, fileid, write-verifier, change, and readdir classes, | handle, fileid, write-verifier, change, and readdir classes, | |||
whether or not the two entries are shown belonging to the same | whether or not the two entries are shown belonging to the same | |||
simultaneous-use class. | simultaneous-use class. | |||
These situations were recognized by [65], even though that document | These situations were recognized by [66], even though that document | |||
made no explicit mention of trunking: | made no explicit mention of trunking: | |||
* It treated the situation that we describe as trunking as one of | * It treated the situation that we describe as trunking as one of | |||
simultaneous use of two distinct file system instances, even | simultaneous use of two distinct file system instances, even | |||
though, in the explanatory framework now used to describe the | though, in the explanatory framework now used to describe the | |||
situation, the case is one in which a single file system is | situation, the case is one in which a single file system is | |||
accessed by two different trunked addresses. | accessed by two different trunked addresses. | |||
* It treated the situation in which two paths are to be used | * It treated the situation in which two paths are to be used | |||
serially as a special sort of "transparent transition". However, | serially as a special sort of "transparent transition". However, | |||
skipping to change at line 11657 ¶ | skipping to change at line 11680 ¶ | |||
located on one server with a file system located on another server. | located on one server with a file system located on another server. | |||
When this includes the use of pure referrals, servers are provided a | When this includes the use of pure referrals, servers are provided a | |||
way of placing a file system in a location within the namespace | way of placing a file system in a location within the namespace | |||
essentially without respect to its physical location on a particular | essentially without respect to its physical location on a particular | |||
server. This allows a single server or a set of servers to present a | server. This allows a single server or a set of servers to present a | |||
multi-server namespace that encompasses file systems located on a | multi-server namespace that encompasses file systems located on a | |||
wider range of servers. Some likely uses of this facility include | wider range of servers. Some likely uses of this facility include | |||
establishment of site-wide or organization-wide namespaces, with the | establishment of site-wide or organization-wide namespaces, with the | |||
eventual possibility of combining such together into a truly global | eventual possibility of combining such together into a truly global | |||
namespace, such as the one provided by AFS (the Andrew File System) | namespace, such as the one provided by AFS (the Andrew File System) | |||
[64]. | [65]. | |||
Referrals occur when a client determines, upon first referencing a | Referrals occur when a client determines, upon first referencing a | |||
position in the current namespace, that it is part of a new file | position in the current namespace, that it is part of a new file | |||
system and that the file system is absent. When this occurs, | system and that the file system is absent. When this occurs, | |||
typically upon receiving the error NFS4ERR_MOVED, the actual location | typically upon receiving the error NFS4ERR_MOVED, the actual location | |||
or locations of the file system can be determined by fetching a | or locations of the file system can be determined by fetching a | |||
locations attribute. | locations attribute. | |||
The file system location attribute may designate a single file system | The file system location attribute may designate a single file system | |||
location or multiple file system locations, to be selected based on | location or multiple file system locations, to be selected based on | |||
skipping to change at line 11777 ¶ | skipping to change at line 11800 ¶ | |||
11.6. Trunking without File System Location Information | 11.6. Trunking without File System Location Information | |||
In situations in which a file system is accessed using two server- | In situations in which a file system is accessed using two server- | |||
trunkable addresses (as indicated by the same value of the | trunkable addresses (as indicated by the same value of the | |||
so_major_id field of the eir_server_owner field returned in response | so_major_id field of the eir_server_owner field returned in response | |||
to EXCHANGE_ID), trunked access is allowed even though there might | to EXCHANGE_ID), trunked access is allowed even though there might | |||
not be any location entries specifically indicating the use of | not be any location entries specifically indicating the use of | |||
trunking for that file system. | trunking for that file system. | |||
This situation was recognized by [65], although that document made no | This situation was recognized by [66], although that document made no | |||
explicit mention of trunking and treated the situation as one of | explicit mention of trunking and treated the situation as one of | |||
simultaneous use of two distinct file system instances. In the | simultaneous use of two distinct file system instances. In the | |||
explanatory framework now used to describe the situation, the case is | explanatory framework now used to describe the situation, the case is | |||
one in which a single file system is accessed by two different | one in which a single file system is accessed by two different | |||
trunked addresses. | trunked addresses. | |||
11.7. Users and Groups in a Multi-Server Namespace | 11.7. Users and Groups in a Multi-Server Namespace | |||
As in the case of a single-server environment (see Section 5.9), when | As in the case of a single-server environment (see Section 5.9), when | |||
an owner or group name of the form "id@domain" is assigned to a file, | an owner or group name of the form "id@domain" is assigned to a file, | |||
skipping to change at line 11896 ¶ | skipping to change at line 11919 ¶ | |||
How these are dealt with is discussed in Section 11.11. | How these are dealt with is discussed in Section 11.11. | |||
* Those in which access to the current file system instance is | * Those in which access to the current file system instance is | |||
retained, while the network path used to access that instance is | retained, while the network path used to access that instance is | |||
changed. This case is discussed in Section 11.10. | changed. This case is discussed in Section 11.10. | |||
11.10. Effecting Network Endpoint Transitions | 11.10. Effecting Network Endpoint Transitions | |||
The endpoints used to access a particular file system instance may | The endpoints used to access a particular file system instance may | |||
change in a number of ways, as listed below. In each of these cases, | change in a number of ways, as listed below. In each of these cases, | |||
the same fsid, filehandles, stateids, client IDs, and are used to | the same fsid, client IDs, filehandles, and stateids are used to | |||
continue access, with a continuity of lock state. In many cases, the | continue access, with a continuity of lock state. In many cases, the | |||
same sessions can also be used. | same sessions can also be used. | |||
The appropriate action depends on the set of replacement addresses | The appropriate action depends on the set of replacement addresses | |||
that are available for use (i.e., server endpoints that are server- | that are available for use (i.e., server endpoints that are server- | |||
trunkable with one previously being used). | trunkable with one previously being used). | |||
* When use of a particular address is to cease, and there is also | * When use of a particular address is to cease, and there is also | |||
another address currently in use that is server-trunkable with it, | another address currently in use that is server-trunkable with it, | |||
requests that would have been issued on the address whose use is | requests that would have been issued on the address whose use is | |||
skipping to change at line 11921 ¶ | skipping to change at line 11944 ¶ | |||
will be used. | will be used. | |||
* When use of a particular connection is to cease, as indicated by | * When use of a particular connection is to cease, as indicated by | |||
receiving NFS4ERR_MOVED when using that connection, but that | receiving NFS4ERR_MOVED when using that connection, but that | |||
address is still indicated as accessible according to the | address is still indicated as accessible according to the | |||
appropriate file system location entries, it is likely that | appropriate file system location entries, it is likely that | |||
requests can be issued on a new connection of a different | requests can be issued on a new connection of a different | |||
connection type once that connection is established. Since any | connection type once that connection is established. Since any | |||
two non-port-specific server endpoints that share a network | two non-port-specific server endpoints that share a network | |||
address are inherently session-trunkable, the client can use | address are inherently session-trunkable, the client can use | |||
BIND_CONN_TO_SESSION to access the existing session using the new | BIND_CONN_TO_SESSION to access the existing session with the new | |||
connection and proceed to access the file system using the new | ||||
connection. | connection. | |||
* When there are no potential replacement addresses in use, but | * When there are no potential replacement addresses in use, but | |||
there are valid addresses session-trunkable with the one whose use | there are valid addresses session-trunkable with the one whose use | |||
is to be discontinued, the client can use BIND_CONN_TO_SESSION to | is to be discontinued, the client can use BIND_CONN_TO_SESSION to | |||
access the existing session using the new address. Although the | access the existing session using the new address. Although the | |||
target session will generally be accessible, there may be rare | target session will generally be accessible, there may be rare | |||
situations in which that session is no longer accessible when an | situations in which that session is no longer accessible when an | |||
attempt is made to bind the new connection to it. In this case, | attempt is made to bind the new connection to it. In this case, | |||
the client can create a new session to enable continued access to | the client can create a new session to enable continued access to | |||
skipping to change at line 12440 ¶ | skipping to change at line 12462 ¶ | |||
11.12. Transferring State upon Migration | 11.12. Transferring State upon Migration | |||
When the transition is a result of a server-initiated decision to | When the transition is a result of a server-initiated decision to | |||
transition access, and the source and destination servers have | transition access, and the source and destination servers have | |||
implemented appropriate cooperation, it is possible to do the | implemented appropriate cooperation, it is possible to do the | |||
following: | following: | |||
* Transfer locking state from the source to the destination server | * Transfer locking state from the source to the destination server | |||
in a fashion similar to that provided by Transparent State | in a fashion similar to that provided by Transparent State | |||
Migration in NFSv4.0, as described in [68]. Server | Migration in NFSv4.0, as described in [69]. Server | |||
responsibilities are described in Section 11.14.2. | responsibilities are described in Section 11.14.2. | |||
* Transfer session state from the source to the destination server. | * Transfer session state from the source to the destination server. | |||
Server responsibilities in effecting such a transfer are described | Server responsibilities in effecting such a transfer are described | |||
in Section 11.14.3. | in Section 11.14.3. | |||
The means by which the client determines which of these transfer | The means by which the client determines which of these transfer | |||
events has occurred are described in Section 11.13. | events has occurred are described in Section 11.13. | |||
11.12.1. Transparent State Migration and pNFS | 11.12.1. Transparent State Migration and pNFS | |||
skipping to change at line 12556 ¶ | skipping to change at line 12578 ¶ | |||
interrogating a file system location attribute. This enables a | interrogating a file system location attribute. This enables a | |||
client to determine a new replica's location or a new network | client to determine a new replica's location or a new network | |||
access path. | access path. | |||
This condition continues on subsequent attempts to access the file | This condition continues on subsequent attempts to access the file | |||
system in question. The only way the client can avoid the error | system in question. The only way the client can avoid the error | |||
is to cease accessing the file system in question at its old | is to cease accessing the file system in question at its old | |||
server location and access it instead using a different address at | server location and access it instead using a different address at | |||
which it is now available. | which it is now available. | |||
* Whenever a SEQUENCE operation is sent by a client to a server | * Whenever a client sends a SEQUENCE operation to a server that | |||
which generated state held on that client which is associated with | generated state held on that client and associated with a file | |||
a file system that is no longer accessible on the server at which | system no longer accessible on that server, the response will | |||
it was previously available, the response will contain a lease- | contain the status bit SEQ4_STATUS_LEASE_MOVED, indicating that | |||
migrated indication, with the SEQ4_STATUS_LEASE_MOVED status bit | there has been a lease migration. | |||
being set. | ||||
This condition continues until the client acknowledges the | This condition continues until the client acknowledges the | |||
notification by fetching a file system location attribute for the | notification by fetching a file system location attribute for the | |||
file system whose network access path is being changed. When | file system whose network access path is being changed. When | |||
there are multiple such file systems, a location attribute for | there are multiple such file systems, a location attribute for | |||
each such file system needs to be fetched. The location attribute | each such file system needs to be fetched. The location attribute | |||
for all migrated file systems needs to be fetched in order to | for all migrated file systems needs to be fetched in order to | |||
clear the condition. Even after the condition is cleared, the | clear the condition. Even after the condition is cleared, the | |||
client needs to respond by using the location information to | client needs to respond by using the location information to | |||
access the file system at its new location to ensure that leases | access the file system at its new location to ensure that leases | |||
skipping to change at line 12683 ¶ | skipping to change at line 12704 ¶ | |||
the migration discovery process would deal with those indications. | the migration discovery process would deal with those indications. | |||
See below for details. | See below for details. | |||
* For such indications received in all other contexts, the | * For such indications received in all other contexts, the | |||
appropriate response is to initiate or otherwise provide for the | appropriate response is to initiate or otherwise provide for the | |||
execution of migration discovery for file systems associated with | execution of migration discovery for file systems associated with | |||
the server IP address returning the indication. | the server IP address returning the indication. | |||
This leaves a potential difficulty in situations in which the | This leaves a potential difficulty in situations in which the | |||
migration discovery process is near to completion but is still | migration discovery process is near to completion but is still | |||
operating. One should not ignore a LEASE_MOVED indication if the | operating. One should not ignore a SEQ4_STATUS_LEASE_MOVED | |||
migration discovery process is not able to respond to the discovery | indication if the migration discovery process is not able to respond | |||
of additional migrating file systems without additional aid. A | to the discovery of additional migrating file systems without | |||
further complexity relevant in addressing such situations is that a | additional aid. A further complexity relevant in addressing such | |||
lease-migrated indication may reflect the server's state at the time | situations is that a lease-migrated indication may reflect the | |||
the SEQUENCE operation was processed, which may be different from | server's state at the time the SEQUENCE operation was processed, | |||
that in effect at the time the response is received. Because new | which may be different from that in effect at the time the response | |||
migration events may occur at any time, and because a LEASE_MOVED | is received. Because new migration events may occur at any time, and | |||
indication may reflect the situation in effect a considerable time | because a SEQ4_STATUS_LEASE_MOVED indication may reflect the | |||
before the indication is received, special care needs to be taken to | situation in effect a considerable time before the indication is | |||
ensure that LEASE_MOVED indications are not inappropriately ignored. | received, special care needs to be taken to ensure that | |||
SEQ4_STATUS_LEASE_MOVED indications are not inappropriately ignored. | ||||
A useful approach to this issue involves the use of separate | A useful approach to this issue involves the use of separate | |||
externally-visible migration discovery states for each server. | externally-visible migration discovery states for each server. | |||
Separate values could represent the various possible states for the | Separate values could represent the various possible states for the | |||
migration discovery process for a server: | migration discovery process for a server: | |||
* Non-operation, in which migration discovery is not being | * Non-operation, in which migration discovery is not being | |||
performed. | performed. | |||
* Normal operation, in which there is an ongoing scan for migrated | * Normal operation, in which there is an ongoing scan for migrated | |||
skipping to change at line 12728 ¶ | skipping to change at line 12750 ¶ | |||
* If the fs_status attribute indicates that the file system is a | * If the fs_status attribute indicates that the file system is a | |||
migrated one (i.e., fss_absent is true, and fss_type != | migrated one (i.e., fss_absent is true, and fss_type != | |||
STATUS4_REFERRAL), then a migrated file system has been found. In | STATUS4_REFERRAL), then a migrated file system has been found. In | |||
this situation, it is likely that the fetch of the file system | this situation, it is likely that the fetch of the file system | |||
location attribute has cleared one of the file systems | location attribute has cleared one of the file systems | |||
contributing to the lease-migrated indication. | contributing to the lease-migrated indication. | |||
* In cases in which that happened, the thread cannot know whether | * In cases in which that happened, the thread cannot know whether | |||
the lease-migrated indication has been cleared, and so it enters | the lease-migrated indication has been cleared, and so it enters | |||
the completion/verification state and proceeds to issue a COMPOUND | the completion/verification state and proceeds to issue a COMPOUND | |||
to see if the LEASE_MOVED indication has been cleared. | to see if the SEQ4_STATUS_LEASE_MOVED indication has been cleared. | |||
* When the discovery process is in the completion/verification | * When the discovery process is in the completion/verification | |||
state, if other requests get a lease-migrated indication, they | state, if other requests get a lease-migrated indication, they | |||
note that it was received. Later, the existence of such | note that it was received. Later, the existence of such | |||
indications is used when the request completes, as described | indications is used when the request completes, as described | |||
below. | below. | |||
When the request used in the completion/verification state completes: | When the request used in the completion/verification state completes: | |||
* If a lease-migrated indication is returned, the discovery | * If a lease-migrated indication is returned, the discovery | |||
skipping to change at line 12756 ¶ | skipping to change at line 12778 ¶ | |||
discovery process remains in the completion/verification state. | discovery process remains in the completion/verification state. | |||
* If there have been no lease-migrated indications, the work of | * If there have been no lease-migrated indications, the work of | |||
migration discovery is considered completed, and it enters the | migration discovery is considered completed, and it enters the | |||
non-operating state. Once it enters this state, subsequent lease- | non-operating state. Once it enters this state, subsequent lease- | |||
migrated indications will trigger a new migration discovery | migrated indications will trigger a new migration discovery | |||
process. | process. | |||
It should be noted that the process described above is not guaranteed | It should be noted that the process described above is not guaranteed | |||
to terminate, as a long series of new migration events might | to terminate, as a long series of new migration events might | |||
continually delay the clearing of the LEASE_MOVED indication. To | continually delay the clearing of the SEQ4_STATUS_LEASE_MOVED | |||
prevent unnecessary lease expiration, it is appropriate for clients | indication. To prevent unnecessary lease expiration, it is | |||
to use the discovery of migrations to effect lease renewal | appropriate for clients to use the discovery of migrations to effect | |||
immediately, rather than waiting for the clearing of the LEASE_MOVED | lease renewal immediately, rather than waiting for the clearing of | |||
indication when the complete set of migrations is available. | the SEQ4_STATUS_LEASE_MOVED indication when the complete set of | |||
migrations is available. | ||||
Lease discovery needs to be provided as described above. This | Lease discovery needs to be provided as described above. This | |||
ensures that the client discovers file system migrations soon enough | ensures that the client discovers file system migrations soon enough | |||
to renew its leases on each destination server before they expire. | to renew its leases on each destination server before they expire. | |||
Non-renewal of leases can lead to loss of locking state. While the | Non-renewal of leases can lead to loss of locking state. While the | |||
consequences of such loss can be ameliorated through implementations | consequences of such loss can be ameliorated through implementations | |||
of courtesy locks, servers are under no obligation to do so, and a | of courtesy locks, servers are under no obligation to do so, and a | |||
conflicting lock request may mean that a lock is revoked | conflicting lock request may mean that a lock is revoked | |||
unexpectedly. Clients should be aware of this possibility. | unexpectedly. Clients should be aware of this possibility. | |||
skipping to change at line 12801 ¶ | skipping to change at line 12824 ¶ | |||
During the first phase of this process, the client proceeds to | During the first phase of this process, the client proceeds to | |||
examine file system location entries to find the initial network | examine file system location entries to find the initial network | |||
address it will use to continue access to the file system or its | address it will use to continue access to the file system or its | |||
replacement. For each location entry that the client examines, the | replacement. For each location entry that the client examines, the | |||
process consists of five steps: | process consists of five steps: | |||
1. Performing an EXCHANGE_ID directed at the location address. This | 1. Performing an EXCHANGE_ID directed at the location address. This | |||
operation is used to register the client owner (in the form of a | operation is used to register the client owner (in the form of a | |||
client_owner4) with the server, to obtain a client ID to be used | client_owner4) with the server, to obtain a client ID to be used | |||
subsequently to communicate with it, to obtain that client ID's | subsequently to communicate with it, to obtain that client ID's | |||
confirmation status, and to determine server_owner and scope for | confirmation status, and to determine server_owner4 and scope for | |||
the purpose of determining if the entry is trunkable with the | the purpose of determining if the entry is trunkable with the | |||
address previously being used to access the file system (i.e., | address previously being used to access the file system (i.e., | |||
that it represents another network access path to the same file | that it represents another network access path to the same file | |||
system and can share locking state with it). | system and can share locking state with it). | |||
2. Making an initial determination of whether migration has | 2. Making an initial determination of whether migration has | |||
occurred. The initial determination will be based on whether the | occurred. The initial determination will be based on whether the | |||
EXCHANGE_ID results indicate that the current location element is | EXCHANGE_ID results indicate that the current location element is | |||
server-trunkable with that used to access the file system when | server-trunkable with that used to access the file system when | |||
access was terminated by receiving NFS4ERR_MOVED. If it is, then | access was terminated by receiving NFS4ERR_MOVED. If it is, then | |||
skipping to change at line 12827 ¶ | skipping to change at line 12850 ¶ | |||
3. Obtaining access to existing session state or creating new | 3. Obtaining access to existing session state or creating new | |||
sessions. How this is done depends on the initial determination | sessions. How this is done depends on the initial determination | |||
of whether migration has occurred and can be done as described in | of whether migration has occurred and can be done as described in | |||
Section 11.13.4 below in the case of migration or as described in | Section 11.13.4 below in the case of migration or as described in | |||
Section 11.13.5 below in the case of a network address transfer | Section 11.13.5 below in the case of a network address transfer | |||
without migration. | without migration. | |||
4. Verifying the trunking relationship assumed in step 2 as | 4. Verifying the trunking relationship assumed in step 2 as | |||
discussed in Section 2.10.5.1. Although this step will generally | discussed in Section 2.10.5.1. Although this step will generally | |||
confirm the initial determination, it is possible for | confirm the initial determination, it is possible for | |||
verification to fail with the result that an initial | verification to invalidate the initial determination of network | |||
determination that a network address shift (without migration) | address shift (without migration) and instead determine that | |||
has occurred may be invalidated and migration determined to have | migration had occurred. There is no need to redo step 3 above, | |||
occurred. There is no need to redo step 3 above, since it will | since it will be possible to continue use of the session | |||
be possible to continue use of the session established already. | established already. | |||
5. Obtaining access to existing locking state and/or re-obtaining | 5. Obtaining access to existing locking state and/or re-obtaining | |||
it. How this is done depends on the final determination of | it. How this is done depends on the final determination of | |||
whether migration has occurred and can be done as described below | whether migration has occurred and can be done as described below | |||
in Section 11.13.4 in the case of migration or as described in | in Section 11.13.4 in the case of migration or as described in | |||
Section 11.13.5 in the case of a network address transfer without | Section 11.13.5 in the case of a network address transfer without | |||
migration. | migration. | |||
Once the initial address has been determined, clients are free to | Once the initial address has been determined, clients are free to | |||
apply an abbreviated process to find additional addresses trunkable | apply an abbreviated process to find additional addresses trunkable | |||
skipping to change at line 12898 ¶ | skipping to change at line 12921 ¶ | |||
it is possible that a session was transferred as well. To deal with | it is possible that a session was transferred as well. To deal with | |||
that possibility, clients can, after doing the EXCHANGE_ID, issue a | that possibility, clients can, after doing the EXCHANGE_ID, issue a | |||
BIND_CONN_TO_SESSION to connect the transferred session to a | BIND_CONN_TO_SESSION to connect the transferred session to a | |||
connection to the new server. If that fails, it is an indication | connection to the new server. If that fails, it is an indication | |||
that the session was not transferred and that a new session needs to | that the session was not transferred and that a new session needs to | |||
be created to take its place. | be created to take its place. | |||
In some situations, it is possible for a BIND_CONN_TO_SESSION to | In some situations, it is possible for a BIND_CONN_TO_SESSION to | |||
succeed without session migration having occurred. If state merger | succeed without session migration having occurred. If state merger | |||
has taken place, then the associated client ID may have already had a | has taken place, then the associated client ID may have already had a | |||
set of existing sessions, with it being possible that the sessionid | set of existing sessions, with it being possible that the session ID | |||
of a given session is the same as one that might have been migrated. | of a given session is the same as one that might have been migrated. | |||
In that event, a BIND_CONN_TO_SESSION might succeed, even though | In that event, a BIND_CONN_TO_SESSION might succeed, even though | |||
there could have been no migration of the session with that | there could have been no migration of the session with that session | |||
sessionid. In such cases, the client will receive sequence errors | ID. In such cases, the client will receive sequence errors when the | |||
when the slot sequence values used are not appropriate on the new | slot sequence values used are not appropriate on the new session. | |||
session. When this occurs, the client can create a new a session and | When this occurs, the client can create a new a session and cease | |||
cease using the existing one. | using the existing one. | |||
Once the client has determined the initial migration status, and | Once the client has determined the initial migration status, and | |||
determined that there was a shift to a new server, it needs to re- | determined that there was a shift to a new server, it needs to re- | |||
establish its locking state, if possible. To enable this to happen | establish its locking state, if possible. To enable this to happen | |||
without loss of the guarantees normally provided by locking, the | without loss of the guarantees normally provided by locking, the | |||
destination server needs to implement a per-fs grace period in all | destination server needs to implement a per-fs grace period in all | |||
cases in which lock state was lost, including those in which | cases in which lock state was lost, including those in which | |||
Transparent State Migration was not implemented. Each client for | Transparent State Migration was not implemented. Each client for | |||
which there was a transfer of locking state to the new server will | which there was a transfer of locking state to the new server will | |||
have the duration of the grace period to reclaim its locks, from the | have the duration of the grace period to reclaim its locks, from the | |||
skipping to change at line 13066 ¶ | skipping to change at line 13089 ¶ | |||
* The type of the lock, such as open, byte-range lock, delegation, | * The type of the lock, such as open, byte-range lock, delegation, | |||
or layout. | or layout. | |||
* For locks such as opens and byte-range locks, there will be | * For locks such as opens and byte-range locks, there will be | |||
information about the owner(s) of the lock. | information about the owner(s) of the lock. | |||
* For recallable/revocable lock types, the current recall status | * For recallable/revocable lock types, the current recall status | |||
needs to be included. | needs to be included. | |||
* For each lock type, there will be type-specific information, such | * For each lock type, there will be associated type-specific | |||
as share and deny modes for opens and type and byte ranges for | information. For opens, this will include share and deny mode | |||
byte-range locks and layouts. | while for byte-range locks and layouts, there will be a type and a | |||
byte-range. | ||||
Such information will most probably be organized by client id string | Such information will most probably be organized by client id string | |||
on the destination server so that it can be used to provide | on the destination server so that it can be used to provide | |||
appropriate context to each client when it makes itself known to the | appropriate context to each client when it makes itself known to the | |||
client. Issues connected with a client impersonating another by | client. Issues connected with a client impersonating another by | |||
presenting another client's client id string can be addressed using | presenting another client's client id string can be addressed using | |||
NFSv4.1 state protection features, as described in Section 21. | NFSv4.1 state protection features, as described in Section 21. | |||
A further server responsibility concerns locks that are revoked or | A further server responsibility concerns locks that are revoked or | |||
otherwise lost during the process of file system migration. Because | otherwise lost during the process of file system migration. Because | |||
skipping to change at line 13112 ¶ | skipping to change at line 13136 ¶ | |||
granted until the client does a RECLAIM_COMPLETE, after reclaiming | granted until the client does a RECLAIM_COMPLETE, after reclaiming | |||
the locks it had, with the exception of reclaims denied because | the locks it had, with the exception of reclaims denied because | |||
they were attempts to reclaim locks that had been lost. | they were attempts to reclaim locks that had been lost. | |||
* Implement Transparent State Migration, except for the lock with | * Implement Transparent State Migration, except for the lock with | |||
the conflicting stateid. In this case, the client will be aware | the conflicting stateid. In this case, the client will be aware | |||
of a lost lock (through the SEQ4_STATUS flags) and be allowed to | of a lost lock (through the SEQ4_STATUS flags) and be allowed to | |||
reclaim it. | reclaim it. | |||
When transferring state between the source and destination, the | When transferring state between the source and destination, the | |||
issues discussed in Section 7.2 of [68] must still be attended to. | issues discussed in Section 7.2 of [69] must still be attended to. | |||
In this case, the use of NFS4ERR_DELAY may still be necessary in | In this case, the use of NFS4ERR_DELAY may still be necessary in | |||
NFSv4.1, as it was in NFSv4.0, to prevent locking state changing | NFSv4.1, as it was in NFSv4.0, to prevent locking state changing | |||
while it is being transferred. See Section 15.1.1.3 for information | while it is being transferred. See Section 15.1.1.3 for information | |||
about appropriate client retry approaches in the event that | about appropriate client retry approaches in the event that | |||
NFS4ERR_DELAY is returned. | NFS4ERR_DELAY is returned. | |||
There are a number of important differences in the NFS4.1 context: | There are a number of important differences in the NFS4.1 context: | |||
* The absence of RELEASE_LOCKOWNER means that the one case in which | * The absence of RELEASE_LOCKOWNER means that the one case in which | |||
an operation could not be deferred by use of NFS4ERR_DELAY no | an operation could not be deferred by use of NFS4ERR_DELAY no | |||
longer exists. | longer exists. | |||
* Sequencing of operations is no longer done using owner-based | * Sequencing of operations is no longer done using owner-based | |||
operation sequences numbers. Instead, sequencing is session- | operation sequences numbers. Instead, sequencing is session- | |||
based. | based. | |||
As a result, when sessions are not transferred, the techniques | As a result, when sessions are not transferred, the techniques | |||
discussed in Section 7.2 of [68] are adequate and will not be further | discussed in Section 7.2 of [69] are adequate and will not be further | |||
discussed. | discussed. | |||
11.14.3. Server Responsibilities in Effecting Session Transfer | 11.14.3. Server Responsibilities in Effecting Session Transfer | |||
The basic responsibility of the source server in effecting session | The basic responsibility of the source server in effecting session | |||
transfer is to make available to the destination server a description | transfer is to make available to the destination server a description | |||
of the current state of each slot with the session, including the | of the current state of each slot with the session, including the | |||
following: | following: | |||
* The last sequence value received for that slot. | * The last sequence value received for that slot. | |||
skipping to change at line 13238 ¶ | skipping to change at line 13262 ¶ | |||
* Avoid enforcing any sequencing semantics for a particular slot | * Avoid enforcing any sequencing semantics for a particular slot | |||
until the client has established the starting sequence for that | until the client has established the starting sequence for that | |||
slot on the destination server. | slot on the destination server. | |||
* For each slot, avoid returning a cached reply returning | * For each slot, avoid returning a cached reply returning | |||
NFS4ERR_DELAY or NFS4ERR_MOVED until the client has established | NFS4ERR_DELAY or NFS4ERR_MOVED until the client has established | |||
the starting sequence for that slot on the destination server. | the starting sequence for that slot on the destination server. | |||
* Until the client has established the starting sequence for a | * Until the client has established the starting sequence for a | |||
particular slot on the destination server, avoid reporting | particular slot on the destination server, avoid reporting | |||
NFS4ERR_SEQ_MISORDERED or returning a cached reply returning | NFS4ERR_SEQ_MISORDERED or returning a cached reply that contains | |||
NFS4ERR_DELAY or NFS4ERR_MOVED, where the reply consists solely of | either NFS4ERR_DELAY or NFS4ERR_MOVED and consists solely of a | |||
a series of operations where the response is NFS4_OK until the | series of operations where the response is NFS4_OK until the final | |||
final error. | error. | |||
Because of the considerations mentioned above, including the rules | Because of the considerations mentioned above, including the rules | |||
for the handling of NFS4ERR_DELAY included in Section 15.1.1.3, the | for the handling of NFS4ERR_DELAY included in Section 15.1.1.3, the | |||
destination server can respond appropriately to SEQUENCE operations | destination server can respond appropriately to SEQUENCE operations | |||
received from the client by adopting the three policies listed below: | received from the client by adopting the three policies listed below: | |||
* Not responding with NFS4ERR_SEQ_MISORDERED for the initial request | * Not responding with NFS4ERR_SEQ_MISORDERED for the initial request | |||
on a slot within a transferred session because the destination | on a slot within a transferred session because the destination | |||
server cannot be aware of requests made by the client after the | server cannot be aware of requests made by the client after the | |||
server handoff but before the client became aware of the shift. | server handoff but before the client became aware of the shift. | |||
skipping to change at line 13911 ¶ | skipping to change at line 13935 ¶ | |||
by the server in any number of ways, including specification by the | by the server in any number of ways, including specification by the | |||
administrator or by current protocols for transferring data among | administrator or by current protocols for transferring data among | |||
replicas and protocols not yet developed. NFSv4.1 only defines how | replicas and protocols not yet developed. NFSv4.1 only defines how | |||
this information is presented by the server to the client. | this information is presented by the server to the client. | |||
11.17.1. The fs_locations_server4 Structure | 11.17.1. The fs_locations_server4 Structure | |||
The fs_locations_server4 structure consists of the following items in | The fs_locations_server4 structure consists of the following items in | |||
addition to the fls_server field, which specifies a network address | addition to the fls_server field, which specifies a network address | |||
or set of addresses to be used to access the specified file system. | or set of addresses to be used to access the specified file system. | |||
Note that both of these items (i.e., fls_currency and flinfo) specify | Note that both of these items (i.e., fls_currency and fls_info) | |||
attributes of the file system replica and should not be different | specify attributes of the file system replica and should not be | |||
when there are multiple fs_locations_server4 structures, each | different when there are multiple fs_locations_server4 structures, | |||
specifying a network path to the chosen replica, for the same | each specifying a network path to the chosen replica, for the same | |||
replica. | replica. | |||
When these values are different in two fs_locations_server4 | When these values are different in two fs_locations_server4 | |||
structures, a client has no basis for choosing one over the other and | structures, a client has no basis for choosing one over the other and | |||
is best off simply ignoring both entries, whether these entries apply | is best off simply ignoring both entries, whether these entries apply | |||
to migration replication or referral. When there are more than two | to migration replication or referral. When there are more than two | |||
such entries, majority voting can be used to exclude a single | such entries, majority voting can be used to exclude a single | |||
erroneous entry from consideration. In the case in which trunking | erroneous entry from consideration. In the case in which trunking | |||
information is provided for a replica currently being accessed, the | information is provided for a replica currently being accessed, the | |||
additional trunked addresses can be ignored while access continues on | additional trunked addresses can be ignored while access continues on | |||
skipping to change at line 13977 ¶ | skipping to change at line 14001 ¶ | |||
representing the same data, are such that 8 bits provide a quite | representing the same data, are such that 8 bits provide a quite | |||
acceptable range of values. Even where there might be more than | acceptable range of values. Even where there might be more than | |||
256 such file system instances, having more than 256 distinct | 256 such file system instances, having more than 256 distinct | |||
classes or priorities is unlikely. | classes or priorities is unlikely. | |||
* Explicit definition of the various specific data items within XDR | * Explicit definition of the various specific data items within XDR | |||
would limit expandability in that any extension within would | would limit expandability in that any extension within would | |||
require yet another attribute, leading to specification and | require yet another attribute, leading to specification and | |||
implementation clumsiness. In the context of the NFSv4 extension | implementation clumsiness. In the context of the NFSv4 extension | |||
model in effect at the time fs_locations_info was designed (i.e., | model in effect at the time fs_locations_info was designed (i.e., | |||
that which is described in RFC 5661 [65]), this would necessitate | that which is described in RFC 5661 [66]), this would necessitate | |||
a new minor version to effect any Standards Track extension to the | a new minor version to effect any Standards Track extension to the | |||
data in fls_info. | data in fls_info. | |||
The set of fls_info data is subject to expansion in a future minor | The set of fls_info data is subject to expansion in a future minor | |||
version or in a Standards Track RFC within the context of a single | version or in a Standards Track RFC within the context of a single | |||
minor version. The server SHOULD NOT send and the client MUST NOT | minor version. The server SHOULD NOT send and the client MUST NOT | |||
use indices within the fls_info array or flag bits that are not | use indices within the fls_info array or flag bits that are not | |||
defined in Standards Track RFCs. | defined in Standards Track RFCs. | |||
In light of the new extension model defined in RFC 8178 [66] and the | In light of the new extension model defined in RFC 8178 [67] and the | |||
fact that the individual items within fls_info are not explicitly | fact that the individual items within fls_info are not explicitly | |||
referenced in the XDR, the following practices should be followed | referenced in the XDR, the following practices should be followed | |||
when extending or otherwise changing the structure of the data | when extending or otherwise changing the structure of the data | |||
returned in fls_info within the scope of a single minor version: | returned in fls_info within the scope of a single minor version: | |||
* All extensions need to be described by Standards Track documents. | * All extensions need to be described by Standards Track documents. | |||
There is no need for such documents to be marked as updating RFC | There is no need for such documents to be marked as updating RFC | |||
5661 [65] or this document. | 5661 [66] or this document. | |||
* It needs to be made clear whether the information in any added | * It needs to be made clear whether the information in any added | |||
data items applies to the replica specified by the entry or to the | data items applies to the replica specified by the entry or to the | |||
specific network paths specified in the entry. | specific network paths specified in the entry. | |||
* There needs to be a reliable way defined to determine whether the | * There needs to be a reliable way defined to determine whether the | |||
server is aware of the extension. This may be based on the length | server is aware of the extension. This may be based on the length | |||
field of the fls_info array, but it is more flexible to provide | field of the fls_info array, but it is more flexible to provide | |||
fs-scope or server-scope attributes to indicate what extensions | fs-scope or server-scope attributes to indicate what extensions | |||
are provided. | are provided. | |||
skipping to change at line 14680 ¶ | skipping to change at line 14704 ¶ | |||
12.2.5. Storage Protocol | 12.2.5. Storage Protocol | |||
As noted in Figure 1, the storage protocol is the method used by the | As noted in Figure 1, the storage protocol is the method used by the | |||
client to store and retrieve data directly from the storage devices. | client to store and retrieve data directly from the storage devices. | |||
The NFSv4.1 pNFS feature has been structured to allow for a variety | The NFSv4.1 pNFS feature has been structured to allow for a variety | |||
of storage protocols to be defined and used. One example storage | of storage protocols to be defined and used. One example storage | |||
protocol is NFSv4.1 itself (as documented in Section 13). Other | protocol is NFSv4.1 itself (as documented in Section 13). Other | |||
options for the storage protocol are described elsewhere and include: | options for the storage protocol are described elsewhere and include: | |||
* Block/volume protocols such as Internet SCSI (iSCSI) [55] and FCP | * Block/volume protocols such as Internet SCSI (iSCSI) [56] and FCP | |||
[56]. The block/volume protocol support can be independent of the | [57]. The block/volume protocol support can be independent of the | |||
addressing structure of the block/volume protocol used, allowing | addressing structure of the block/volume protocol used, allowing | |||
more than one protocol to access the same file data and enabling | more than one protocol to access the same file data and enabling | |||
extensibility to other block/volume protocols. See [47] for a | extensibility to other block/volume protocols. See [48] for a | |||
layout specification that allows pNFS to use block/volume storage | layout specification that allows pNFS to use block/volume storage | |||
protocols. | protocols. | |||
* Object protocols such as OSD over iSCSI or Fibre Channel [57]. | * Object protocols such as OSD over iSCSI or Fibre Channel [58]. | |||
See [46] for a layout specification that allows pNFS to use object | See [47] for a layout specification that allows pNFS to use object | |||
storage protocols. | storage protocols. | |||
It is possible that various storage protocols are available to both | It is possible that various storage protocols are available to both | |||
client and server and it may be possible that a client and server do | client and server and it may be possible that a client and server do | |||
not have a matching storage protocol available to them. Because of | not have a matching storage protocol available to them. Because of | |||
this, the pNFS server MUST support normal NFSv4.1 access to any file | this, the pNFS server MUST support normal NFSv4.1 access to any file | |||
accessible by the pNFS feature; this will allow for continued | accessible by the pNFS feature; this will allow for continued | |||
interoperability between an NFSv4.1 client and server. | interoperability between an NFSv4.1 client and server. | |||
12.2.6. Control Protocol | 12.2.6. Control Protocol | |||
skipping to change at line 14716 ¶ | skipping to change at line 14740 ¶ | |||
state required by the storage devices to perform client access | state required by the storage devices to perform client access | |||
control, and, depending on the storage protocol, the enforcement of | control, and, depending on the storage protocol, the enforcement of | |||
authentication and authorization so that restrictions that would be | authentication and authorization so that restrictions that would be | |||
enforced by the metadata server are also enforced by the storage | enforced by the metadata server are also enforced by the storage | |||
device. | device. | |||
A particular control protocol is not REQUIRED by NFSv4.1 but | A particular control protocol is not REQUIRED by NFSv4.1 but | |||
requirements are placed on the control protocol for maintaining | requirements are placed on the control protocol for maintaining | |||
attributes like modify time, the change attribute, and the end-of- | attributes like modify time, the change attribute, and the end-of- | |||
file (EOF) position. Note that if pNFS is layered over a clustered, | file (EOF) position. Note that if pNFS is layered over a clustered, | |||
parallel file system (e.g., PVFS [58]), the mechanisms that enable | parallel file system (e.g., PVFS [59]), the mechanisms that enable | |||
clustering and parallelism in that file system can be considered the | clustering and parallelism in that file system can be considered the | |||
control protocol. | control protocol. | |||
12.2.7. Layout Types | 12.2.7. Layout Types | |||
A layout describes the mapping of a file's data to the storage | A layout describes the mapping of a file's data to the storage | |||
devices that hold the data. A layout is said to belong to a specific | devices that hold the data. A layout is said to belong to a specific | |||
layout type (data type layouttype4, see Section 3.3.13). The layout | layout type (data type layouttype4, see Section 3.3.13). The layout | |||
type allows for variants to handle different storage protocols, such | type allows for variants to handle different storage protocols, such | |||
as those associated with block/volume [47], object [46], and file | as those associated with block/volume [48], object [47], and file | |||
(Section 13) layout types. A metadata server, along with its control | (Section 13) layout types. A metadata server, along with its control | |||
protocol, MUST support at least one layout type. A private sub-range | protocol, MUST support at least one layout type. A private sub-range | |||
of the layout type namespace is also defined. Values from the | of the layout type namespace is also defined. Values from the | |||
private layout type range MAY be used for internal testing or | private layout type range MAY be used for internal testing or | |||
experimentation (see Section 3.3.13). | experimentation (see Section 3.3.13). | |||
As an example, the organization of the file layout type could be an | As an example, the organization of the file layout type could be an | |||
array of tuples (e.g., device ID, filehandle), along with a | array of tuples (e.g., device ID, filehandle), along with a | |||
definition of how the data is stored across the devices (e.g., | definition of how the data is stored across the devices (e.g., | |||
striping). A block/volume layout might be an array of tuples that | striping). A block/volume layout might be an array of tuples that | |||
skipping to change at line 14950 ¶ | skipping to change at line 14974 ¶ | |||
file for which a layout is held does not necessarily conflict with | file for which a layout is held does not necessarily conflict with | |||
the holding of the layout that describes the file being modified. | the holding of the layout that describes the file being modified. | |||
Therefore, it is the requirement of the storage protocol or layout | Therefore, it is the requirement of the storage protocol or layout | |||
type that determines the necessary behavior. For example, block/ | type that determines the necessary behavior. For example, block/ | |||
volume layout types require that the layout's iomode agree with the | volume layout types require that the layout's iomode agree with the | |||
type of I/O being performed. | type of I/O being performed. | |||
Depending upon the layout type and storage protocol in use, storage | Depending upon the layout type and storage protocol in use, storage | |||
device access permissions may be granted by LAYOUTGET and may be | device access permissions may be granted by LAYOUTGET and may be | |||
encoded within the type-specific layout. For an example of storage | encoded within the type-specific layout. For an example of storage | |||
device access permissions, see an object-based protocol such as [57]. | device access permissions, see an object-based protocol such as [58]. | |||
If access permissions are encoded within the layout, the metadata | If access permissions are encoded within the layout, the metadata | |||
server SHOULD recall the layout when those permissions become invalid | server SHOULD recall the layout when those permissions become invalid | |||
for any reason -- for example, when a file becomes unwritable or | for any reason -- for example, when a file becomes unwritable or | |||
inaccessible to a client. Note, clients are still required to | inaccessible to a client. Note, clients are still required to | |||
perform the appropriate OPEN, LOCK, and ACCESS operations as | perform the appropriate OPEN, LOCK, and ACCESS operations as | |||
described above. The degree to which it is possible for the client | described above. The degree to which it is possible for the client | |||
to circumvent these operations and the consequences of doing so must | to circumvent these operations and the consequences of doing so must | |||
be clearly specified by the individual layout type specifications. | be clearly specified by the individual layout type specifications. | |||
In addition, these specifications must be clear about the | In addition, these specifications must be clear about the | |||
requirements and non-requirements for the checking performed by the | requirements and non-requirements for the checking performed by the | |||
skipping to change at line 16044 ¶ | skipping to change at line 16068 ¶ | |||
pNFS configuration. Such layout types SHOULD NOT be used when | pNFS configuration. Such layout types SHOULD NOT be used when | |||
client-only access checks do not provide sufficient assurance that | client-only access checks do not provide sufficient assurance that | |||
NFSv4.1 access control is being applied correctly. (This is not a | NFSv4.1 access control is being applied correctly. (This is not a | |||
problem for the file layout type described in Section 13 because the | problem for the file layout type described in Section 13 because the | |||
storage access protocol for LAYOUT4_NFSV4_1_FILES is NFSv4.1, and | storage access protocol for LAYOUT4_NFSV4_1_FILES is NFSv4.1, and | |||
thus the security model for storage device access via | thus the security model for storage device access via | |||
LAYOUT4_NFSv4_1_FILES is the same as that of the metadata server.) | LAYOUT4_NFSv4_1_FILES is the same as that of the metadata server.) | |||
For handling of access control specific to a layout, the reader | For handling of access control specific to a layout, the reader | |||
should examine the layout specification, such as the NFSv4.1/ | should examine the layout specification, such as the NFSv4.1/ | |||
file-based layout (Section 13) of this document, the blocks layout | file-based layout (Section 13) of this document, the blocks layout | |||
[47], and objects layout [46]. | [48], and objects layout [47]. | |||
13. NFSv4.1 as a Storage Protocol in pNFS: the File Layout Type | 13. NFSv4.1 as a Storage Protocol in pNFS: the File Layout Type | |||
This section describes the semantics and format of NFSv4.1 file-based | This section describes the semantics and format of NFSv4.1 file-based | |||
layouts for pNFS. NFSv4.1 file-based layouts use the | layouts for pNFS. NFSv4.1 file-based layouts use the | |||
LAYOUT4_NFSV4_1_FILES layout type. The LAYOUT4_NFSV4_1_FILES type | LAYOUT4_NFSV4_1_FILES layout type. The LAYOUT4_NFSV4_1_FILES type | |||
defines striping data across multiple NFSv4.1 data servers. | defines striping data across multiple NFSv4.1 data servers. | |||
13.1. Client ID and Session Considerations | 13.1. Client ID and Session Considerations | |||
skipping to change at line 17846 ¶ | skipping to change at line 17870 ¶ | |||
full information about the state of the session on the source | full information about the state of the session on the source | |||
makes it impossible to process the request immediately. | makes it impossible to process the request immediately. | |||
In such cases, returning the error NFS4ERR_DELAY allows necessary | In such cases, returning the error NFS4ERR_DELAY allows necessary | |||
preparatory operations to proceed without holding up requester | preparatory operations to proceed without holding up requester | |||
resources such as a session slot. After delaying for period of time, | resources such as a session slot. After delaying for period of time, | |||
the client can then re-send the operation in question, often as part | the client can then re-send the operation in question, often as part | |||
of a nearly identical request. Because of the need to avoid spurious | of a nearly identical request. Because of the need to avoid spurious | |||
reissues of non-idempotent operations and to avoid acting in response | reissues of non-idempotent operations and to avoid acting in response | |||
to NFS4ERR_DELAY errors returned on responses returned from the | to NFS4ERR_DELAY errors returned on responses returned from the | |||
replier's replay cache, integration with the session-provided replay | replier's reply cache, integration with the session-provided reply | |||
cache is necessary. There are a number of cases to deal with, each | cache is necessary. There are a number of cases to deal with, each | |||
of which requires different sorts of handling by the requester and | of which requires different sorts of handling by the requester and | |||
replier: | replier: | |||
* If NFS4ERR_DELAY is returned on a SEQUENCE operation, the request | * If NFS4ERR_DELAY is returned on a SEQUENCE operation, the request | |||
is retried in full with the SEQUENCE operation containing the same | is retried in full with the SEQUENCE operation containing the same | |||
slot and sequence values. In this case, the replier MUST avoid | slot and sequence values. In this case, the replier MUST avoid | |||
returning a response containing NFS4ERR_DELAY as the response to | returning a response containing NFS4ERR_DELAY as the response to | |||
SEQUENCE solely on the basis of its presence in the replay cache. | SEQUENCE solely because an earlier instance of the same request | |||
If the replier did this, the retries would not be effective as | returned that error and it was stored in the reply cache. If the | |||
there would be no opportunity for the replier to see whether the | replier did this, the retries would not be effective as there | |||
would be no opportunity for the replier to see whether the | ||||
condition that generated the NFS4ERR_DELAY had been rectified | condition that generated the NFS4ERR_DELAY had been rectified | |||
during the interim between the original request and the retry. | during the interim between the original request and the retry. | |||
* If NFS4ERR_DELAY is returned on an operation other than SEQUENCE | * If NFS4ERR_DELAY is returned on an operation other than SEQUENCE | |||
that validly appears as the first operation of a request, the | that validly appears as the first operation of a request, the | |||
handling is similar. The request can be retried in full without | handling is similar. The request can be retried in full without | |||
modification. In this case as well, the replier MUST avoid | modification. In this case as well, the replier MUST avoid | |||
returning a response containing NFS4ERR_DELAY as the response to | returning a response containing NFS4ERR_DELAY as the response to | |||
an initial operation of a request solely on the basis of its | an initial operation of a request solely on the basis of its | |||
presence in the replay cache. If the replier did this, the | presence in the reply cache. If the replier did this, the retries | |||
retries would not be effective as there would be no opportunity | would not be effective as there would be no opportunity for the | |||
for the replier to see whether the condition that generated the | replier to see whether the condition that generated the | |||
NFS4ERR_DELAY had been rectified during the interim between the | NFS4ERR_DELAY had been rectified during the interim between the | |||
original request and the retry. | original request and the retry. | |||
* If NFS4ERR_DELAY is returned on an operation other than the first | * If NFS4ERR_DELAY is returned on an operation other than the first | |||
in the request, the request when retried MUST contain a SEQUENCE | in the request, the request when retried MUST contain a SEQUENCE | |||
operation that is different than the original one, with either the | operation that is different than the original one, with either the | |||
bin id or the sequence value different from that in the original | slot ID or the sequence value different from that in the original | |||
request. Because requesters do this, there is no need for the | request. Because requesters do this, there is no need for the | |||
replier to take special care to avoid returning an NFS4ERR_DELAY | replier to take special care to avoid returning an NFS4ERR_DELAY | |||
error obtained from the replay cache. When no non-idempotent | error obtained from the reply cache. When no non-idempotent | |||
operations have been processed before the NFS4ERR_DELAY was | operations have been processed before the NFS4ERR_DELAY was | |||
returned, the requester should retry the request in full, with the | returned, the requester should retry the request in full, with the | |||
only difference from the original request being the modification | only difference from the original request being the modification | |||
to the slot ID or sequence value in the reissued SEQUENCE | to the slot ID or sequence value in the reissued SEQUENCE | |||
operation. | operation. | |||
* When NFS4ERR_DELAY is returned on an operation other than the | * When NFS4ERR_DELAY is returned on an operation other than the | |||
first within a request and there has been a non-idempotent | first within a request and there has been a non-idempotent | |||
operation processed before the NFS4ERR_DELAY was returned, | operation processed before the NFS4ERR_DELAY was returned, | |||
reissuing the request as is normally done would incorrectly cause | reissuing the request as is normally done would incorrectly cause | |||
skipping to change at line 18115 ¶ | skipping to change at line 18140 ¶ | |||
feature. | feature. | |||
15.1.4.1. NFS4ERR_BADTYPE (Error Code 10007) | 15.1.4.1. NFS4ERR_BADTYPE (Error Code 10007) | |||
An attempt was made to create an object with an inappropriate type | An attempt was made to create an object with an inappropriate type | |||
specified to CREATE. This may be because the type is undefined, | specified to CREATE. This may be because the type is undefined, | |||
because the type is not supported by the server, or because the type | because the type is not supported by the server, or because the type | |||
is not intended to be created by CREATE (such as a regular file or | is not intended to be created by CREATE (such as a regular file or | |||
named attribute, for which OPEN is used to do the file creation). | named attribute, for which OPEN is used to do the file creation). | |||
15.1.4.2. NFS4ERR_DQUOT (Error Code 19) | 15.1.4.2. NFS4ERR_DQUOT (Error Code 69) | |||
Resource (quota) hard limit exceeded. The user's resource limit on | Resource (quota) hard limit exceeded. The user's resource limit on | |||
the server has been exceeded. | the server has been exceeded. | |||
15.1.4.3. NFS4ERR_EXIST (Error Code 17) | 15.1.4.3. NFS4ERR_EXIST (Error Code 17) | |||
A file of the specified target name (when creating, renaming, or | A file of the specified target name (when creating, renaming, or | |||
linking) already exists. | linking) already exists. | |||
15.1.4.4. NFS4ERR_FBIG (Error Code 27) | 15.1.4.4. NFS4ERR_FBIG (Error Code 27) | |||
skipping to change at line 21261 ¶ | skipping to change at line 21286 ¶ | |||
* When a client executes a regular file, it has to read the file | * When a client executes a regular file, it has to read the file | |||
from the server. Strictly speaking, the server should not allow | from the server. Strictly speaking, the server should not allow | |||
the client to read a file being executed unless the user has read | the client to read a file being executed unless the user has read | |||
permissions on the file. Requiring explicit read permissions on | permissions on the file. Requiring explicit read permissions on | |||
executable files in order to access them over NFS is not going to | executable files in order to access them over NFS is not going to | |||
be acceptable to some users and storage administrators. | be acceptable to some users and storage administrators. | |||
Historically, NFS servers have allowed a user to READ a file if | Historically, NFS servers have allowed a user to READ a file if | |||
the user has execute access to the file. | the user has execute access to the file. | |||
As a practical example, the UNIX specification [59] states that an | As a practical example, the UNIX specification [60] states that an | |||
implementation claiming conformance to UNIX may indicate in the | implementation claiming conformance to UNIX may indicate in the | |||
access() programming interface's result that a privileged user has | access() programming interface's result that a privileged user has | |||
execute rights, even if no execute permission bits are set on the | execute rights, even if no execute permission bits are set on the | |||
regular file's attributes. It is possible to claim conformance to | regular file's attributes. It is possible to claim conformance to | |||
the UNIX specification and instead not indicate execute rights in | the UNIX specification and instead not indicate execute rights in | |||
that situation, which is true for some operating environments. | that situation, which is true for some operating environments. | |||
Suppose the operating environments of the client and server are | Suppose the operating environments of the client and server are | |||
implementing the access() semantics for privileged users differently, | implementing the access() semantics for privileged users differently, | |||
and the ACCESS operation implementations of the client and server | and the ACCESS operation implementations of the client and server | |||
follow their respective access() semantics. This can cause undesired | follow their respective access() semantics. This can cause undesired | |||
skipping to change at line 23715 ¶ | skipping to change at line 23740 ¶ | |||
18.20.3. DESCRIPTION | 18.20.3. DESCRIPTION | |||
This operation replaces the current filehandle with the filehandle | This operation replaces the current filehandle with the filehandle | |||
that represents the public filehandle of the server's namespace. | that represents the public filehandle of the server's namespace. | |||
This filehandle may be different from the "root" filehandle that may | This filehandle may be different from the "root" filehandle that may | |||
be associated with some other directory on the server. | be associated with some other directory on the server. | |||
PUTPUBFH also clears the current stateid. | PUTPUBFH also clears the current stateid. | |||
The public filehandle represents the concepts embodied in RFC 2054 | The public filehandle represents the concepts embodied in RFC 2054 | |||
[48], RFC 2055 [49], and RFC 2224 [60]. The intent for NFSv4.1 is | [49], RFC 2055 [50], and RFC 2224 [61]. The intent for NFSv4.1 is | |||
that the public filehandle (represented by the PUTPUBFH operation) be | that the public filehandle (represented by the PUTPUBFH operation) be | |||
used as a method of providing WebNFS server compatibility with NFSv3. | used as a method of providing WebNFS server compatibility with NFSv3. | |||
The public filehandle and the root filehandle (represented by the | The public filehandle and the root filehandle (represented by the | |||
PUTROOTFH operation) SHOULD be equivalent. If the public and root | PUTROOTFH operation) SHOULD be equivalent. If the public and root | |||
filehandles are not equivalent, then the directory corresponding to | filehandles are not equivalent, then the directory corresponding to | |||
the public filehandle MUST be a descendant of the directory | the public filehandle MUST be a descendant of the directory | |||
corresponding to the root filehandle. | corresponding to the root filehandle. | |||
See Section 16.2.3.1.1 for more details on the current filehandle. | See Section 16.2.3.1.1 for more details on the current filehandle. | |||
skipping to change at line 23737 ¶ | skipping to change at line 23762 ¶ | |||
See Section 16.2.3.1.2 for more details on the current stateid. | See Section 16.2.3.1.2 for more details on the current stateid. | |||
18.20.4. IMPLEMENTATION | 18.20.4. IMPLEMENTATION | |||
This operation is used in an NFS request to set the context for file | This operation is used in an NFS request to set the context for file | |||
accessing operations that follow in the same COMPOUND request. | accessing operations that follow in the same COMPOUND request. | |||
With the NFSv3 public filehandle, the client is able to specify | With the NFSv3 public filehandle, the client is able to specify | |||
whether the pathname provided in the LOOKUP should be evaluated as | whether the pathname provided in the LOOKUP should be evaluated as | |||
either an absolute path relative to the server's root or relative to | either an absolute path relative to the server's root or relative to | |||
the public filehandle. RFC 2224 [60] contains further discussion of | the public filehandle. RFC 2224 [61] contains further discussion of | |||
the functionality. With NFSv4.1, that type of specification is not | the functionality. With NFSv4.1, that type of specification is not | |||
directly available in the LOOKUP operation. The reason for this is | directly available in the LOOKUP operation. The reason for this is | |||
because the component separators needed to specify absolute vs. | because the component separators needed to specify absolute vs. | |||
relative are not allowed in NFSv4. Therefore, the client is | relative are not allowed in NFSv4. Therefore, the client is | |||
responsible for constructing its request such that the use of either | responsible for constructing its request such that the use of either | |||
PUTROOTFH or PUTPUBFH signifies absolute or relative evaluation of an | PUTROOTFH or PUTPUBFH signifies absolute or relative evaluation of an | |||
NFS URL, respectively. | NFS URL, respectively. | |||
Note that there are warnings mentioned in RFC 2224 [60] with respect | Note that there are warnings mentioned in RFC 2224 [61] with respect | |||
to the use of absolute evaluation and the restrictions the server may | to the use of absolute evaluation and the restrictions the server may | |||
place on that evaluation with respect to how much of its namespace | place on that evaluation with respect to how much of its namespace | |||
has been made available. These same warnings apply to NFSv4.1. It | has been made available. These same warnings apply to NFSv4.1. It | |||
is likely, therefore, that because of server implementation details, | is likely, therefore, that because of server implementation details, | |||
an NFSv3 absolute public filehandle look up may behave differently | an NFSv3 absolute public filehandle look up may behave differently | |||
than an NFSv4.1 absolute resolution. | than an NFSv4.1 absolute resolution. | |||
There is a form of security negotiation as described in RFC 2755 [61] | There is a form of security negotiation as described in RFC 2755 [62] | |||
that uses the public filehandle and an overloading of the pathname. | that uses the public filehandle and an overloading of the pathname. | |||
This method is not available with NFSv4.1 as filehandles are not | This method is not available with NFSv4.1 as filehandles are not | |||
overloaded with special meaning and therefore do not provide the same | overloaded with special meaning and therefore do not provide the same | |||
framework as NFSv3. Clients should therefore use the security | framework as NFSv3. Clients should therefore use the security | |||
negotiation mechanisms described in Section 2.6. | negotiation mechanisms described in Section 2.6. | |||
18.21. Operation 24: PUTROOTFH - Set Root Filehandle | 18.21. Operation 24: PUTROOTFH - Set Root Filehandle | |||
18.21.1. ARGUMENTS | 18.21.1. ARGUMENTS | |||
skipping to change at line 25073 ¶ | skipping to change at line 25098 ¶ | |||
struct gss_cb_handles4 { | struct gss_cb_handles4 { | |||
rpc_gss_svc_t gcbp_service; /* RFC 2203 */ | rpc_gss_svc_t gcbp_service; /* RFC 2203 */ | |||
gsshandle4_t gcbp_handle_from_server; | gsshandle4_t gcbp_handle_from_server; | |||
gsshandle4_t gcbp_handle_from_client; | gsshandle4_t gcbp_handle_from_client; | |||
}; | }; | |||
union callback_sec_parms4 switch (uint32_t cb_secflavor) { | union callback_sec_parms4 switch (uint32_t cb_secflavor) { | |||
case AUTH_NONE: | case AUTH_NONE: | |||
void; | void; | |||
case AUTH_SYS: | case AUTH_SYS: | |||
authsys_parms cbsp_sys_cred; /* RFC 1831 */ | authsys_parms cbsp_sys_cred; /* RFC 5531 */ | |||
case RPCSEC_GSS: | case RPCSEC_GSS: | |||
gss_cb_handles4 cbsp_gss_handles; | gss_cb_handles4 cbsp_gss_handles; | |||
}; | }; | |||
struct BACKCHANNEL_CTL4args { | struct BACKCHANNEL_CTL4args { | |||
uint32_t bca_cb_program; | uint32_t bca_cb_program; | |||
callback_sec_parms4 bca_sec_parms<>; | callback_sec_parms4 bca_sec_parms<>; | |||
}; | }; | |||
18.33.2. RESULT | 18.33.2. RESULT | |||
skipping to change at line 25354 ¶ | skipping to change at line 25379 ¶ | |||
case NFS4_OK: | case NFS4_OK: | |||
EXCHANGE_ID4resok eir_resok4; | EXCHANGE_ID4resok eir_resok4; | |||
default: | default: | |||
void; | void; | |||
}; | }; | |||
18.35.3. DESCRIPTION | 18.35.3. DESCRIPTION | |||
The client uses the EXCHANGE_ID operation to register a particular | The client uses the EXCHANGE_ID operation to register a particular | |||
client_owner with the server. However, when the client_owner has | instance of that client with the server, as represented by a | |||
already been registered by other means (e.g., Transparent State | client_owner4. However, when the client_owner4 has already been | |||
Migration), the client may still use EXCHANGE_ID to obtain the client | registered by other means (e.g., Transparent State Migration), the | |||
ID assigned previously. | client may still use EXCHANGE_ID to obtain the client ID assigned | |||
previously. | ||||
The client ID returned from this operation will be associated with | The client ID returned from this operation will be associated with | |||
the connection on which the EXCHANGE_ID is received and will serve as | the connection on which the EXCHANGE_ID is received and will serve as | |||
a parent object for sessions created by the client on this connection | a parent object for sessions created by the client on this connection | |||
or to which the connection is bound. As a result of using those | or to which the connection is bound. As a result of using those | |||
sessions to make requests involving the creation of state, that state | sessions to make requests involving the creation of state, that state | |||
will become associated with the client ID returned. | will become associated with the client ID returned. | |||
In situations in which the registration of the client_owner has not | In situations in which the registration of the client_owner has not | |||
occurred previously, the client ID must first be used, along with the | occurred previously, the client ID must first be used, along with the | |||
skipping to change at line 25505 ¶ | skipping to change at line 25531 ¶ | |||
derived from the SSV, and the derivation is via the hash | derived from the SSV, and the derivation is via the hash | |||
algorithm. The selection of an encryption algorithm with a | algorithm. The selection of an encryption algorithm with a | |||
key length that exceeded the length of the output of the | key length that exceeded the length of the output of the | |||
hash algorithm would require padding, and thus weaken the | hash algorithm would require padding, and thus weaken the | |||
use of the encryption algorithm. | use of the encryption algorithm. | |||
o hash length SHOULD be <= SSV length. This is because the | o hash length SHOULD be <= SSV length. This is because the | |||
SSV is a key used to derive subkeys via an HMAC, and it is | SSV is a key used to derive subkeys via an HMAC, and it is | |||
recommended that the key used as input to an HMAC be at | recommended that the key used as input to an HMAC be at | |||
least as long as the length of the HMAC's hash algorithm's | least as long as the length of the HMAC's hash algorithm's | |||
output (see Section 3 of [51]). | output (see Section 3 of [52]). | |||
o key length SHOULD be <= SSV length. This is a transitive | o key length SHOULD be <= SSV length. This is a transitive | |||
result of the above two invariants. | result of the above two invariants. | |||
o key length SHOULD be >= hash length / 2. This is because | o key length SHOULD be >= hash length / 2. This is because | |||
the subkey derivation is via an HMAC and it is recommended | the subkey derivation is via an HMAC and it is recommended | |||
that if the HMAC has to be truncated, it should not be | that if the HMAC has to be truncated, it should not be | |||
truncated to less than half the hash length (see Section 4 | truncated to less than half the hash length (see Section 4 | |||
of RFC 2104 [51]). | of RFC 2104 [52]). | |||
- Number of concurrent versions of the SSV the client and server | - Number of concurrent versions of the SSV the client and server | |||
will support (see Section 2.10.9). This property is | will support (see Section 2.10.9). This property is | |||
represented by spi_window in the EXCHANGE_ID results. The | represented by spi_window in the EXCHANGE_ID results. The | |||
property may be updated by subsequent EXCHANGE_ID operations. | property may be updated by subsequent EXCHANGE_ID operations. | |||
* The client's implementation ID as represented by the | * The client's implementation ID as represented by the | |||
eia_client_impl_id field of the arguments. The property may be | eia_client_impl_id field of the arguments. The property may be | |||
updated by subsequent EXCHANGE_ID requests. | updated by subsequent EXCHANGE_ID requests. | |||
skipping to change at line 25613 ¶ | skipping to change at line 25639 ¶ | |||
it. If an update to the client ID changes the value of | it. If an update to the client ID changes the value of | |||
EXCHGID4_FLAG_BIND_PRINC_STATEID's client ID property, the effect | EXCHGID4_FLAG_BIND_PRINC_STATEID's client ID property, the effect | |||
applies only to new stateids. Existing stateids (and all stateids | applies only to new stateids. Existing stateids (and all stateids | |||
with the same "other" field) that were created with stateid to | with the same "other" field) that were created with stateid to | |||
principal binding in force will continue to have binding in force. | principal binding in force will continue to have binding in force. | |||
Existing stateids (and all stateids with the same "other" field) that | Existing stateids (and all stateids with the same "other" field) that | |||
were created with stateid to principal not in force will continue to | were created with stateid to principal not in force will continue to | |||
have binding not in force. | have binding not in force. | |||
The EXCHGID4_FLAG_USE_NON_PNFS, EXCHGID4_FLAG_USE_PNFS_MDS, and | The EXCHGID4_FLAG_USE_NON_PNFS, EXCHGID4_FLAG_USE_PNFS_MDS, and | |||
EXCHGID4_FLAG_USE_PNFS_DS bits are described in Section 2.10.2.2 and | EXCHGID4_FLAG_USE_PNFS_DS bits are described in Section 13.1 and | |||
convey roles the client ID is to be used for in a pNFS environment. | convey roles the client ID is to be used for in a pNFS environment. | |||
The server MUST set one of the acceptable combinations of these bits | The server MUST set one of the acceptable combinations of these bits | |||
(roles) in eir_flags, as specified in that section. Note that the | (roles) in eir_flags, as specified in that section. Note that the | |||
same client owner/server owner pair can have multiple roles. | same client owner/server owner pair can have multiple roles. | |||
Multiple roles can be associated with the same client ID or with | Multiple roles can be associated with the same client ID or with | |||
different client IDs. Thus, if a client sends EXCHANGE_ID from the | different client IDs. Thus, if a client sends EXCHANGE_ID from the | |||
same client owner to the same server owner multiple times, but | same client owner to the same server owner multiple times, but | |||
specifies different pNFS roles each time, the server might return | specifies different pNFS roles each time, the server might return | |||
different client IDs. Given that different pNFS roles might have | different client IDs. Given that different pNFS roles might have | |||
different client IDs, the client may ask for different properties for | different client IDs, the client may ask for different properties for | |||
skipping to change at line 26240 ¶ | skipping to change at line 26266 ¶ | |||
is currently in non-RDMA mode but has the capability to operate | is currently in non-RDMA mode but has the capability to operate | |||
in RDMA mode, then the client is requesting that the server | in RDMA mode, then the client is requesting that the server | |||
"step up" to RDMA mode on the connection. If the server | "step up" to RDMA mode on the connection. If the server | |||
agrees, it sets CREATE_SESSION4_FLAG_CONN_RDMA in the result | agrees, it sets CREATE_SESSION4_FLAG_CONN_RDMA in the result | |||
field csr_flags. If CREATE_SESSION4_FLAG_CONN_RDMA is not set | field csr_flags. If CREATE_SESSION4_FLAG_CONN_RDMA is not set | |||
in csa_flags, then CREATE_SESSION4_FLAG_CONN_RDMA MUST NOT be | in csa_flags, then CREATE_SESSION4_FLAG_CONN_RDMA MUST NOT be | |||
set in csr_flags. Note that once the server agrees to step up, | set in csr_flags. Note that once the server agrees to step up, | |||
it and the client MUST exchange all future traffic on the | it and the client MUST exchange all future traffic on the | |||
connection with RPC RDMA framing and not Record Marking ([32]). | connection with RPC RDMA framing and not Record Marking ([32]). | |||
csa_fore_chan_attrs, csa_fore_chan_attrs: The csa_fore_chan_attrs | csa_fore_chan_attrs, csa_back_chan_attrs: The csa_fore_chan_attrs | |||
and csa_back_chan_attrs fields apply to attributes of the fore | and csa_back_chan_attrs fields apply to attributes of the fore | |||
channel (which conveys requests originating from the client to the | channel (which conveys requests originating from the client to the | |||
server), and the backchannel (the channel that conveys callback | server), and the backchannel (the channel that conveys callback | |||
requests originating from the server to the client), respectively. | requests originating from the server to the client), respectively. | |||
The results are in corresponding structures called | The results are in corresponding structures called | |||
csr_fore_chan_attrs and csr_back_chan_attrs. The results | csr_fore_chan_attrs and csr_back_chan_attrs. The results | |||
establish attributes for each channel, and on all subsequent use | establish attributes for each channel, and on all subsequent use | |||
of each channel of the session. Each structure has the following | of each channel of the session. Each structure has the following | |||
fields: | fields: | |||
skipping to change at line 27230 ¶ | skipping to change at line 27256 ¶ | |||
expansive recovery of file system objects if the metadata server does | expansive recovery of file system objects if the metadata server does | |||
not get a positive indication from all clients holding a | not get a positive indication from all clients holding a | |||
LAYOUTIOMODE4_RW layout that they have successfully completed all | LAYOUTIOMODE4_RW layout that they have successfully completed all | |||
their writes. Sending a LAYOUTCOMMIT (if required) and then | their writes. Sending a LAYOUTCOMMIT (if required) and then | |||
following with LAYOUTRETURN can provide such an indication and allow | following with LAYOUTRETURN can provide such an indication and allow | |||
for graceful and efficient recovery. | for graceful and efficient recovery. | |||
If loca_reclaim is TRUE, the metadata server is free to either | If loca_reclaim is TRUE, the metadata server is free to either | |||
examine or ignore the value in the field loca_stateid. The metadata | examine or ignore the value in the field loca_stateid. The metadata | |||
server implementation might or might not encode in its layout stateid | server implementation might or might not encode in its layout stateid | |||
information that allows the metadate server to perform a consistency | information that allows the metadata server to perform a consistency | |||
check on the LAYOUTCOMMIT request. | check on the LAYOUTCOMMIT request. | |||
18.43. Operation 50: LAYOUTGET - Get Layout Information | 18.43. Operation 50: LAYOUTGET - Get Layout Information | |||
18.43.1. ARGUMENT | 18.43.1. ARGUMENT | |||
struct LAYOUTGET4args { | struct LAYOUTGET4args { | |||
/* CURRENT_FH: file */ | /* CURRENT_FH: file */ | |||
bool loga_signal_layout_avail; | bool loga_signal_layout_avail; | |||
layouttype4 loga_layout_type; | layouttype4 loga_layout_type; | |||
skipping to change at line 28279 ¶ | skipping to change at line 28305 ¶ | |||
This operation is used to update the SSV for a client ID. Before | This operation is used to update the SSV for a client ID. Before | |||
SET_SSV is called the first time on a client ID, the SSV is zero. | SET_SSV is called the first time on a client ID, the SSV is zero. | |||
The SSV is the key used for the SSV GSS mechanism (Section 2.10.9) | The SSV is the key used for the SSV GSS mechanism (Section 2.10.9) | |||
SET_SSV MUST be preceded by a SEQUENCE operation in the same | SET_SSV MUST be preceded by a SEQUENCE operation in the same | |||
COMPOUND. It MUST NOT be used if the client did not opt for SP4_SSV | COMPOUND. It MUST NOT be used if the client did not opt for SP4_SSV | |||
state protection when the client ID was created (see Section 18.35); | state protection when the client ID was created (see Section 18.35); | |||
the server returns NFS4ERR_INVAL in that case. | the server returns NFS4ERR_INVAL in that case. | |||
The field ssa_digest is computed as the output of the HMAC (RFC 2104 | The field ssa_digest is computed as the output of the HMAC (RFC 2104 | |||
[51]) using the subkey derived from the SSV4_SUBKEY_MIC_I2T and | [52]) using the subkey derived from the SSV4_SUBKEY_MIC_I2T and | |||
current SSV as the key (see Section 2.10.9 for a description of | current SSV as the key (see Section 2.10.9 for a description of | |||
subkeys), and an XDR encoded value of data type ssa_digest_input4. | subkeys), and an XDR encoded value of data type ssa_digest_input4. | |||
The field sdi_seqargs is equal to the arguments of the SEQUENCE | The field sdi_seqargs is equal to the arguments of the SEQUENCE | |||
operation for the COMPOUND procedure that SET_SSV is within. | operation for the COMPOUND procedure that SET_SSV is within. | |||
The argument ssa_ssv is XORed with the current SSV to produce the new | The argument ssa_ssv is XORed with the current SSV to produce the new | |||
SSV. The argument ssa_ssv SHOULD be generated randomly. | SSV. The argument ssa_ssv SHOULD be generated randomly. | |||
In the response, ssr_digest is the output of the HMAC using the | In the response, ssr_digest is the output of the HMAC using the | |||
subkey derived from SSV4_SUBKEY_MIC_T2I and new SSV as the key, and | subkey derived from SSV4_SUBKEY_MIC_T2I and new SSV as the key, and | |||
skipping to change at line 28599 ¶ | skipping to change at line 28625 ¶ | |||
DESTROY_CLIENTID allows a server to immediately reclaim the resources | DESTROY_CLIENTID allows a server to immediately reclaim the resources | |||
consumed by an unused client ID, and also to forget that it ever | consumed by an unused client ID, and also to forget that it ever | |||
generated the client ID. By forgetting that it ever generated the | generated the client ID. By forgetting that it ever generated the | |||
client ID, the server can safely reuse the client ID on a future | client ID, the server can safely reuse the client ID on a future | |||
EXCHANGE_ID operation. | EXCHANGE_ID operation. | |||
18.51. Operation 58: RECLAIM_COMPLETE - Indicates Reclaims Finished | 18.51. Operation 58: RECLAIM_COMPLETE - Indicates Reclaims Finished | |||
18.51.1. ARGUMENT | 18.51.1. ARGUMENT | |||
<CODE BEGINS> | ||||
struct RECLAIM_COMPLETE4args { | struct RECLAIM_COMPLETE4args { | |||
/* | /* | |||
* If rca_one_fs TRUE, | * If rca_one_fs TRUE, | |||
* | * | |||
* CURRENT_FH: object in | * CURRENT_FH: object in | |||
* file system reclaim is | * file system reclaim is | |||
* complete for. | * complete for. | |||
*/ | */ | |||
bool rca_one_fs; | bool rca_one_fs; | |||
}; | }; | |||
<CODE ENDS> | ||||
18.51.2. RESULTS | 18.51.2. RESULTS | |||
<CODE BEGINS> | ||||
struct RECLAIM_COMPLETE4res { | struct RECLAIM_COMPLETE4res { | |||
nfsstat4 rcr_status; | nfsstat4 rcr_status; | |||
}; | }; | |||
<CODE ENDS> | ||||
18.51.3. DESCRIPTION | 18.51.3. DESCRIPTION | |||
A RECLAIM_COMPLETE operation is used to indicate that the client has | A RECLAIM_COMPLETE operation is used to indicate that the client has | |||
reclaimed all of the locking state that it will recover using | reclaimed all of the locking state that it will recover using | |||
reclaim, when it is recovering state due to either a server restart | reclaim, when it is recovering state due to either a server restart | |||
or the migration of a file system to another server. There are two | or the migration of a file system to another server. There are two | |||
types of RECLAIM_COMPLETE operations: | types of RECLAIM_COMPLETE operations: | |||
* When rca_one_fs is FALSE, a global RECLAIM_COMPLETE is being done. | * When rca_one_fs is FALSE, a global RECLAIM_COMPLETE is being done. | |||
skipping to change at line 28680 ¶ | skipping to change at line 28702 ¶ | |||
These two may be done in any order as long as all necessary lock | These two may be done in any order as long as all necessary lock | |||
reclaims have been done before issuing either of them. | reclaims have been done before issuing either of them. | |||
Any locks not reclaimed at the point at which RECLAIM_COMPLETE is | Any locks not reclaimed at the point at which RECLAIM_COMPLETE is | |||
done become non-reclaimable. The client MUST NOT attempt to reclaim | done become non-reclaimable. The client MUST NOT attempt to reclaim | |||
them, either during the current server instance or in any subsequent | them, either during the current server instance or in any subsequent | |||
server instance, or on another server to which responsibility for | server instance, or on another server to which responsibility for | |||
that file system is transferred. If the client were to do so, it | that file system is transferred. If the client were to do so, it | |||
would be violating the protocol by representing itself as owning | would be violating the protocol by representing itself as owning | |||
locks that it does not own, and so has no right to reclaim. See | locks that it does not own, and so has no right to reclaim. See | |||
Section 8.4.3 of [65] for a discussion of edge conditions related to | Section 8.4.3 of [66] for a discussion of edge conditions related to | |||
lock reclaim. | lock reclaim. | |||
By sending a RECLAIM_COMPLETE, the client indicates readiness to | By sending a RECLAIM_COMPLETE, the client indicates readiness to | |||
proceed to do normal non-reclaim locking operations. The client | proceed to do normal non-reclaim locking operations. The client | |||
should be aware that such operations may temporarily result in | should be aware that such operations may temporarily result in | |||
NFS4ERR_GRACE errors until the server is ready to terminate its grace | NFS4ERR_GRACE errors until the server is ready to terminate its grace | |||
period. | period. | |||
18.51.4. IMPLEMENTATION | 18.51.4. IMPLEMENTATION | |||
skipping to change at line 29550 ¶ | skipping to change at line 29572 ¶ | |||
The client is to return OPEN_DELEGATE_WRITE delegations on regular | The client is to return OPEN_DELEGATE_WRITE delegations on regular | |||
file objects. | file objects. | |||
RCA4_TYPE_MASK_DIR_DLG | RCA4_TYPE_MASK_DIR_DLG | |||
The client is to return directory delegations. | The client is to return directory delegations. | |||
RCA4_TYPE_MASK_FILE_LAYOUT | RCA4_TYPE_MASK_FILE_LAYOUT | |||
The client is to return layouts of type LAYOUT4_NFSV4_1_FILES. | The client is to return layouts of type LAYOUT4_NFSV4_1_FILES. | |||
RCA4_TYPE_MASK_BLK_LAYOUT | RCA4_TYPE_MASK_BLK_LAYOUT | |||
See [47] for a description. | See [48] for a description. | |||
RCA4_TYPE_MASK_OBJ_LAYOUT_MIN to RCA4_TYPE_MASK_OBJ_LAYOUT_MAX | RCA4_TYPE_MASK_OBJ_LAYOUT_MIN to RCA4_TYPE_MASK_OBJ_LAYOUT_MAX | |||
See [46] for a description. | See [47] for a description. | |||
RCA4_TYPE_MASK_OTHER_LAYOUT_MIN to RCA4_TYPE_MASK_OTHER_LAYOUT_MAX | RCA4_TYPE_MASK_OTHER_LAYOUT_MIN to RCA4_TYPE_MASK_OTHER_LAYOUT_MAX | |||
This range is reserved for telling the client to recall layouts of | This range is reserved for telling the client to recall layouts of | |||
experimental or site-specific layout types (see Section 3.3.13). | experimental or site-specific layout types (see Section 3.3.13). | |||
When a bit is set in the type mask that corresponds to an undefined | When a bit is set in the type mask that corresponds to an undefined | |||
type of recallable object, NFS4ERR_INVAL MUST be returned. When a | type of recallable object, NFS4ERR_INVAL MUST be returned. When a | |||
bit is set that corresponds to a defined type of object but the | bit is set that corresponds to a defined type of object but the | |||
client does not support an object of the type, NFS4ERR_INVAL MUST NOT | client does not support an object of the type, NFS4ERR_INVAL MUST NOT | |||
be returned. Future minor versions of NFSv4 may expand the set of | be returned. Future minor versions of NFSv4 may expand the set of | |||
skipping to change at line 30240 ¶ | skipping to change at line 30262 ¶ | |||
Similar considerations apply if the threat to be avoided is the | Similar considerations apply if the threat to be avoided is the | |||
redirection of client traffic to inappropriate (i.e., poorly | redirection of client traffic to inappropriate (i.e., poorly | |||
performing) servers. In both cases, there is no reason for the | performing) servers. In both cases, there is no reason for the | |||
information returned to depend on the identity of the client | information returned to depend on the identity of the client | |||
principal requesting it, while the validity of the server | principal requesting it, while the validity of the server | |||
information, which has the capability to affect all client | information, which has the capability to affect all client | |||
principals, is of considerable importance. | principals, is of considerable importance. | |||
22. IANA Considerations | 22. IANA Considerations | |||
This section uses terms that are defined in [62]. | This section uses terms that are defined in [63]. | |||
22.1. IANA Actions | 22.1. IANA Actions | |||
This update does not require any modification of, or additions to, | This update does not require any modification of, or additions to, | |||
registry entries or registry rules associated with NFSv4.1. However, | registry entries or registry rules associated with NFSv4.1. However, | |||
since this document obsoletes RFC 8881, IANA has updated all registry | since this document obsoletes RFC 5661, IANA has updated all registry | |||
entries and registry rules references that point to RFC 5661 to point | entries and registry rules references that point to RFC 5661 to point | |||
to this document instead. | to this document instead. | |||
Previous actions by IANA related to NFSv4.1 are listed in the | Previous actions by IANA related to NFSv4.1 are listed in the | |||
remaining subsections of Section 22. | remaining subsections of Section 22. | |||
22.2. Named Attribute Definitions | 22.2. Named Attribute Definitions | |||
IANA created a registry called the "NFSv4 Named Attribute Definitions | IANA created a registry called the "NFSv4 Named Attribute Definitions | |||
Registry". | Registry". | |||
skipping to change at line 30274 ¶ | skipping to change at line 30296 ¶ | |||
attributes as needed, they are encouraged to register the attributes | attributes as needed, they are encouraged to register the attributes | |||
with IANA. | with IANA. | |||
Such registered named attributes are presumed to apply to all minor | Such registered named attributes are presumed to apply to all minor | |||
versions of NFSv4, including those defined subsequently to the | versions of NFSv4, including those defined subsequently to the | |||
registration. If the named attribute is intended to be limited to | registration. If the named attribute is intended to be limited to | |||
specific minor versions, this will be clearly stated in the | specific minor versions, this will be clearly stated in the | |||
registry's assignment. | registry's assignment. | |||
All assignments to the registry are made on a First Come First Served | All assignments to the registry are made on a First Come First Served | |||
basis, per Section 4.1 of [62]. The policy for each assignment is | basis, per Section 4.4 of [63]. The policy for each assignment is | |||
Specification Required, per Section 4.1 of [62]. | Specification Required, per Section 4.6 of [63]. | |||
Under the NFSv4.1 specification, the name of a named attribute can in | Under the NFSv4.1 specification, the name of a named attribute can in | |||
theory be up to 2^(32) - 1 bytes in length, but in practice NFSv4.1 | theory be up to 2^(32) - 1 bytes in length, but in practice NFSv4.1 | |||
clients and servers will be unable to handle a string that long. | clients and servers will be unable to handle a string that long. | |||
IANA should reject any assignment request with a named attribute that | IANA should reject any assignment request with a named attribute that | |||
exceeds 128 UTF-8 characters. To give the IESG the flexibility to | exceeds 128 UTF-8 characters. To give the IESG the flexibility to | |||
set up bases of assignment of Experimental Use and Standards Action, | set up bases of assignment of Experimental Use and Standards Action, | |||
the prefixes of "EXPE" and "STDS" are Reserved. The named attribute | the prefixes of "EXPE" and "STDS" are Reserved. The named attribute | |||
with a zero-length name is Reserved. | with a zero-length name is Reserved. | |||
skipping to change at line 30334 ¶ | skipping to change at line 30356 ¶ | |||
The potential exists for new notification types to be added to the | The potential exists for new notification types to be added to the | |||
CB_NOTIFY_DEVICEID operation (see Section 20.12). This can be done | CB_NOTIFY_DEVICEID operation (see Section 20.12). This can be done | |||
via changes to the operations that register notifications, or by | via changes to the operations that register notifications, or by | |||
adding new operations to NFSv4. This requires a new minor version of | adding new operations to NFSv4. This requires a new minor version of | |||
NFSv4, and requires a Standards Track document from the IETF. | NFSv4, and requires a Standards Track document from the IETF. | |||
Another way to add a notification is to specify a new layout type | Another way to add a notification is to specify a new layout type | |||
(see Section 22.5). | (see Section 22.5). | |||
Hence, all assignments to the registry are made on a Standards Action | Hence, all assignments to the registry are made on a Standards Action | |||
basis per Section 4.1 of [62], with Expert Review required. | basis per Section 4.6 of [63], with Expert Review required. | |||
The registry is a list of assignments, each containing five fields | The registry is a list of assignments, each containing five fields | |||
per assignment. | per assignment. | |||
1. The name of the notification type. This name must have the | 1. The name of the notification type. This name must have the | |||
prefix "NOTIFY_DEVICEID4_". This name must be unique. | prefix "NOTIFY_DEVICEID4_". This name must be unique. | |||
2. The value of the notification. IANA will assign this number, and | 2. The value of the notification. IANA will assign this number, and | |||
the request from the registrant will use TBD1 instead of an | the request from the registrant will use TBD1 instead of an | |||
actual value. IANA MUST use a whole number that can be no higher | actual value. IANA MUST use a whole number that can be no higher | |||
skipping to change at line 30405 ¶ | skipping to change at line 30427 ¶ | |||
The potential exists for new object types to be added to the | The potential exists for new object types to be added to the | |||
CB_RECALL_ANY operation (see Section 20.6). This can be done via | CB_RECALL_ANY operation (see Section 20.6). This can be done via | |||
changes to the operations that add recallable types, or by adding new | changes to the operations that add recallable types, or by adding new | |||
operations to NFSv4. This requires a new minor version of NFSv4, and | operations to NFSv4. This requires a new minor version of NFSv4, and | |||
requires a Standards Track document from IETF. Another way to add a | requires a Standards Track document from IETF. Another way to add a | |||
new recallable object is to specify a new layout type (see | new recallable object is to specify a new layout type (see | |||
Section 22.5). | Section 22.5). | |||
All assignments to the registry are made on a Standards Action basis | All assignments to the registry are made on a Standards Action basis | |||
per Section 4.1 of [62], with Expert Review required. | per Section 4.9 of [63], with Expert Review required. | |||
Recallable object types are 32-bit unsigned numbers. There are no | Recallable object types are 32-bit unsigned numbers. There are no | |||
Reserved values. Values in the range 12 through 15, inclusive, are | Reserved values. Values in the range 12 through 15, inclusive, are | |||
designated for Private Use. | designated for Private Use. | |||
The registry is a list of assignments, each containing five fields | The registry is a list of assignments, each containing five fields | |||
per assignment. | per assignment. | |||
1. The name of the recallable object type. This name must have the | 1. The name of the recallable object type. This name must have the | |||
prefix "RCA4_TYPE_MASK_". The name must be unique. | prefix "RCA4_TYPE_MASK_". The name must be unique. | |||
skipping to change at line 30607 ¶ | skipping to change at line 30629 ¶ | |||
access-control models are preserved. That is, if a metadata | access-control models are preserved. That is, if a metadata | |||
server would restrict a READ or WRITE operation, how would | server would restrict a READ or WRITE operation, how would | |||
pNFS via the layout similarly restrict a corresponding input | pNFS via the layout similarly restrict a corresponding input | |||
or output operation? | or output operation? | |||
3. The author documents the new layout specification as an Internet- | 3. The author documents the new layout specification as an Internet- | |||
Draft. | Draft. | |||
4. The author submits the Internet-Draft for review through the IETF | 4. The author submits the Internet-Draft for review through the IETF | |||
standards process as defined in "The Internet Standards Process-- | standards process as defined in "The Internet Standards Process-- | |||
Revision 3" (BCP 9). The new layout specification will be | Revision 3" (BCP 9 [35]). The new layout specification will be | |||
submitted for eventual publication as a Standards Track RFC. | submitted for eventual publication as a Standards Track RFC. | |||
5. The layout specification progresses through the IETF standards | 5. The layout specification progresses through the IETF standards | |||
process. | process. | |||
22.6. Path Variable Definitions | 22.6. Path Variable Definitions | |||
This section deals with the IANA considerations associated with the | This section deals with the IANA considerations associated with the | |||
variable substitution feature for location names as described in | variable substitution feature for location names as described in | |||
Section 11.17.3. As described there, variables subject to | Section 11.17.3. As described there, variables subject to | |||
skipping to change at line 30896 ¶ | skipping to change at line 30918 ¶ | |||
1003.1, 2004 Edition, HTML Version", ISBN 1931624232, | 1003.1, 2004 Edition, HTML Version", ISBN 1931624232, | |||
2004, <https://www.opengroup.org>. | 2004, <https://www.opengroup.org>. | |||
[25] Schaad, J., Kaliski, B., and R. Housley, "Additional | [25] Schaad, J., Kaliski, B., and R. Housley, "Additional | |||
Algorithms and Identifiers for RSA Cryptography for use in | Algorithms and Identifiers for RSA Cryptography for use in | |||
the Internet X.509 Public Key Infrastructure Certificate | the Internet X.509 Public Key Infrastructure Certificate | |||
and Certificate Revocation List (CRL) Profile", RFC 4055, | and Certificate Revocation List (CRL) Profile", RFC 4055, | |||
DOI 10.17487/RFC4055, June 2005, | DOI 10.17487/RFC4055, June 2005, | |||
<https://www.rfc-editor.org/info/rfc4055>. | <https://www.rfc-editor.org/info/rfc4055>. | |||
[26] National Institute of Standards and Technology, | [26] National Institute of Standards and Technology, "Computer | |||
"Cryptographic Algorithm Object Registration", November | Security Objects Register", May 2016, | |||
2007, | <https://csrc.nist.gov/projects/computer-security-objects- | |||
<http://csrc.nist.gov/groups/ST/crypto_apps_infra/csor/ | register/algorithm-registration>. | |||
algorithms.html>. | ||||
[27] Adamson, A. and N. Williams, "Remote Procedure Call (RPC) | [27] Adamson, A. and N. Williams, "Remote Procedure Call (RPC) | |||
Security Version 3", RFC 7861, DOI 10.17487/RFC7861, | Security Version 3", RFC 7861, DOI 10.17487/RFC7861, | |||
November 2016, <https://www.rfc-editor.org/info/rfc7861>. | November 2016, <https://www.rfc-editor.org/info/rfc7861>. | |||
[28] Neuman, C., Yu, T., Hartman, S., and K. Raeburn, "The | [28] Neuman, C., Yu, T., Hartman, S., and K. Raeburn, "The | |||
Kerberos Network Authentication Service (V5)", RFC 4120, | Kerberos Network Authentication Service (V5)", RFC 4120, | |||
DOI 10.17487/RFC4120, July 2005, | DOI 10.17487/RFC4120, July 2005, | |||
<https://www.rfc-editor.org/info/rfc4120>. | <https://www.rfc-editor.org/info/rfc4120>. | |||
skipping to change at line 30940 ¶ | skipping to change at line 30961 ¶ | |||
[33] Lever, C., "Network File System (NFS) Upper-Layer Binding | [33] Lever, C., "Network File System (NFS) Upper-Layer Binding | |||
to RPC-over-RDMA Version 1", RFC 8267, | to RPC-over-RDMA Version 1", RFC 8267, | |||
DOI 10.17487/RFC8267, October 2017, | DOI 10.17487/RFC8267, October 2017, | |||
<https://www.rfc-editor.org/info/rfc8267>. | <https://www.rfc-editor.org/info/rfc8267>. | |||
[34] Hoffman, P. and P. McManus, "DNS Queries over HTTPS | [34] Hoffman, P. and P. McManus, "DNS Queries over HTTPS | |||
(DoH)", RFC 8484, DOI 10.17487/RFC8484, October 2018, | (DoH)", RFC 8484, DOI 10.17487/RFC8484, October 2018, | |||
<https://www.rfc-editor.org/info/rfc8484>. | <https://www.rfc-editor.org/info/rfc8484>. | |||
[35] Bradner, S., "The Internet Standards Process -- Revision | ||||
3", BCP 9, RFC 2026, October 1996. | ||||
Kolkman, O., Bradner, S., and S. Turner, "Characterization | ||||
of Proposed Standards", BCP 9, RFC 7127, January 2014. | ||||
Dusseault, L. and R. Sparks, "Guidance on Interoperation | ||||
and Implementation Reports for Advancement to Draft | ||||
Standard", BCP 9, RFC 5657, September 2009. | ||||
Housley, R., Crocker, D., and E. Burger, "Reducing the | ||||
Standards Track to Two Maturity Levels", BCP 9, RFC 6410, | ||||
October 2011. | ||||
Resnick, P., "Retirement of the "Internet Official | ||||
Protocol Standards" Summary Document", BCP 9, RFC 7100, | ||||
December 2013. | ||||
Dawkins, S., "Increasing the Number of Area Directors in | ||||
an IETF Area", BCP 9, RFC 7475, March 2015. | ||||
<https://www.rfc-editor.org/info/bcp9> | ||||
23.2. Informative References | 23.2. Informative References | |||
[35] Roach, A., "Process for Handling Non-Major Revisions to | [36] Roach, A., "Process for Handling Non-Major Revisions to | |||
Existing RFCs", Work in Progress, Internet-Draft, draft- | Existing RFCs", Work in Progress, Internet-Draft, draft- | |||
roach-bis-documents-00, 7 May 2019, | roach-bis-documents-00, 7 May 2019, | |||
<https://tools.ietf.org/html/draft-roach-bis-documents- | <https://tools.ietf.org/html/draft-roach-bis-documents- | |||
00>. | 00>. | |||
[36] Shepler, S., Callaghan, B., Robinson, D., Thurlow, R., | [37] Shepler, S., Callaghan, B., Robinson, D., Thurlow, R., | |||
Beame, C., Eisler, M., and D. Noveck, "Network File System | Beame, C., Eisler, M., and D. Noveck, "Network File System | |||
(NFS) version 4 Protocol", RFC 3530, DOI 10.17487/RFC3530, | (NFS) version 4 Protocol", RFC 3530, DOI 10.17487/RFC3530, | |||
April 2003, <https://www.rfc-editor.org/info/rfc3530>. | April 2003, <https://www.rfc-editor.org/info/rfc3530>. | |||
[37] Callaghan, B., Pawlowski, B., and P. Staubach, "NFS | [38] Callaghan, B., Pawlowski, B., and P. Staubach, "NFS | |||
Version 3 Protocol Specification", RFC 1813, | Version 3 Protocol Specification", RFC 1813, | |||
DOI 10.17487/RFC1813, June 1995, | DOI 10.17487/RFC1813, June 1995, | |||
<https://www.rfc-editor.org/info/rfc1813>. | <https://www.rfc-editor.org/info/rfc1813>. | |||
[38] Eisler, M., "LIPKEY - A Low Infrastructure Public Key | [39] Eisler, M., "LIPKEY - A Low Infrastructure Public Key | |||
Mechanism Using SPKM", RFC 2847, DOI 10.17487/RFC2847, | Mechanism Using SPKM", RFC 2847, DOI 10.17487/RFC2847, | |||
June 2000, <https://www.rfc-editor.org/info/rfc2847>. | June 2000, <https://www.rfc-editor.org/info/rfc2847>. | |||
[39] Eisler, M., "NFS Version 2 and Version 3 Security Issues | [40] Eisler, M., "NFS Version 2 and Version 3 Security Issues | |||
and the NFS Protocol's Use of RPCSEC_GSS and Kerberos V5", | and the NFS Protocol's Use of RPCSEC_GSS and Kerberos V5", | |||
RFC 2623, DOI 10.17487/RFC2623, June 1999, | RFC 2623, DOI 10.17487/RFC2623, June 1999, | |||
<https://www.rfc-editor.org/info/rfc2623>. | <https://www.rfc-editor.org/info/rfc2623>. | |||
[40] Juszczak, C., "Improving the Performance and Correctness | [41] Juszczak, C., "Improving the Performance and Correctness | |||
of an NFS Server", USENIX Conference Proceedings, June | of an NFS Server", USENIX Conference Proceedings, June | |||
1990. | 1990. | |||
[41] Reynolds, J., Ed., "Assigned Numbers: RFC 1700 is Replaced | [42] Reynolds, J., Ed., "Assigned Numbers: RFC 1700 is Replaced | |||
by an On-line Database", RFC 3232, DOI 10.17487/RFC3232, | by an On-line Database", RFC 3232, DOI 10.17487/RFC3232, | |||
January 2002, <https://www.rfc-editor.org/info/rfc3232>. | January 2002, <https://www.rfc-editor.org/info/rfc3232>. | |||
[42] Srinivasan, R., "Binding Protocols for ONC RPC Version 2", | [43] Srinivasan, R., "Binding Protocols for ONC RPC Version 2", | |||
RFC 1833, DOI 10.17487/RFC1833, August 1995, | RFC 1833, DOI 10.17487/RFC1833, August 1995, | |||
<https://www.rfc-editor.org/info/rfc1833>. | <https://www.rfc-editor.org/info/rfc1833>. | |||
[43] Werme, R., "RPC XID Issues", USENIX Conference | [44] Werme, R., "RPC XID Issues", USENIX Conference | |||
Proceedings, February 1996. | Proceedings, February 1996. | |||
[44] Nowicki, B., "NFS: Network File System Protocol | [45] Nowicki, B., "NFS: Network File System Protocol | |||
specification", RFC 1094, DOI 10.17487/RFC1094, March | specification", RFC 1094, DOI 10.17487/RFC1094, March | |||
1989, <https://www.rfc-editor.org/info/rfc1094>. | 1989, <https://www.rfc-editor.org/info/rfc1094>. | |||
[45] Bhide, A., Elnozahy, E. N., and S. P. Morgan, "A Highly | [46] Bhide, A., Elnozahy, E. N., and S. P. Morgan, "A Highly | |||
Available Network Server", USENIX Conference Proceedings, | Available Network Server", USENIX Conference Proceedings, | |||
January 1991. | January 1991. | |||
[46] Halevy, B., Welch, B., and J. Zelenka, "Object-Based | [47] Halevy, B., Welch, B., and J. Zelenka, "Object-Based | |||
Parallel NFS (pNFS) Operations", RFC 5664, | Parallel NFS (pNFS) Operations", RFC 5664, | |||
DOI 10.17487/RFC5664, January 2010, | DOI 10.17487/RFC5664, January 2010, | |||
<https://www.rfc-editor.org/info/rfc5664>. | <https://www.rfc-editor.org/info/rfc5664>. | |||
[47] Black, D., Fridella, S., and J. Glasgow, "Parallel NFS | [48] Black, D., Fridella, S., and J. Glasgow, "Parallel NFS | |||
(pNFS) Block/Volume Layout", RFC 5663, | (pNFS) Block/Volume Layout", RFC 5663, | |||
DOI 10.17487/RFC5663, January 2010, | DOI 10.17487/RFC5663, January 2010, | |||
<https://www.rfc-editor.org/info/rfc5663>. | <https://www.rfc-editor.org/info/rfc5663>. | |||
[48] Callaghan, B., "WebNFS Client Specification", RFC 2054, | [49] Callaghan, B., "WebNFS Client Specification", RFC 2054, | |||
DOI 10.17487/RFC2054, October 1996, | DOI 10.17487/RFC2054, October 1996, | |||
<https://www.rfc-editor.org/info/rfc2054>. | <https://www.rfc-editor.org/info/rfc2054>. | |||
[49] Callaghan, B., "WebNFS Server Specification", RFC 2055, | [50] Callaghan, B., "WebNFS Server Specification", RFC 2055, | |||
DOI 10.17487/RFC2055, October 1996, | DOI 10.17487/RFC2055, October 1996, | |||
<https://www.rfc-editor.org/info/rfc2055>. | <https://www.rfc-editor.org/info/rfc2055>. | |||
[50] IESG, "IESG Processing of RFC Errata for the IETF Stream", | [51] IESG, "IESG Processing of RFC Errata for the IETF Stream", | |||
July 2008, | July 2008, | |||
<https://www.ietf.org/about/groups/iesg/statements/ | <https://www.ietf.org/about/groups/iesg/statements/ | |||
processing-rfc-errata/>. | processing-rfc-errata/>. | |||
[51] Krawczyk, H., Bellare, M., and R. Canetti, "HMAC: Keyed- | [52] Krawczyk, H., Bellare, M., and R. Canetti, "HMAC: Keyed- | |||
Hashing for Message Authentication", RFC 2104, | Hashing for Message Authentication", RFC 2104, | |||
DOI 10.17487/RFC2104, February 1997, | DOI 10.17487/RFC2104, February 1997, | |||
<https://www.rfc-editor.org/info/rfc2104>. | <https://www.rfc-editor.org/info/rfc2104>. | |||
[52] Shepler, S., "NFS Version 4 Design Considerations", | [53] Shepler, S., "NFS Version 4 Design Considerations", | |||
RFC 2624, DOI 10.17487/RFC2624, June 1999, | RFC 2624, DOI 10.17487/RFC2624, June 1999, | |||
<https://www.rfc-editor.org/info/rfc2624>. | <https://www.rfc-editor.org/info/rfc2624>. | |||
[53] The Open Group, "Protocols for Interworking: XNFS, Version | [54] The Open Group, "Protocols for Interworking: XNFS, Version | |||
3W", ISBN 1-85912-184-5, February 1998. | 3W", ISBN 1-85912-184-5, February 1998. | |||
[54] Floyd, S. and V. Jacobson, "The Synchronization of | [55] Floyd, S. and V. Jacobson, "The Synchronization of | |||
Periodic Routing Messages", IEEE/ACM Transactions on | Periodic Routing Messages", IEEE/ACM Transactions on | |||
Networking, 2(2), pp. 122-136, April 1994. | Networking, 2(2), pp. 122-136, April 1994. | |||
[55] Satran, J., Meth, K., Sapuntzakis, C., Chadalapaka, M., | [56] Chadalapaka, M., Satran, J., Meth, K., and D. Black, | |||
and E. Zeidner, "Internet Small Computer Systems Interface | "Internet Small Computer System Interface (iSCSI) Protocol | |||
(iSCSI)", RFC 3720, DOI 10.17487/RFC3720, April 2004, | (Consolidated)", RFC 7143, DOI 10.17487/RFC7143, April | |||
<https://www.rfc-editor.org/info/rfc3720>. | 2014, <https://www.rfc-editor.org/info/rfc7143>. | |||
[56] Snively, R., "Fibre Channel Protocol for SCSI, 2nd Version | [57] Snively, R., "Fibre Channel Protocol for SCSI, 2nd Version | |||
(FCP-2)", ANSI/INCITS, 350-2003, October 2003. | (FCP-2)", ANSI/INCITS, 350-2003, October 2003. | |||
[57] Weber, R.O., "Object-Based Storage Device Commands (OSD)", | [58] Weber, R.O., "Object-Based Storage Device Commands (OSD)", | |||
ANSI/INCITS, 400-2004, July 2004, | ANSI/INCITS, 400-2004, July 2004, | |||
<http://www.t10.org/ftp/t10/drafts/osd/osd-r10.pdf>. | <https://www.t10.org/drafts.htm>. | |||
[58] Carns, P. H., Ligon III, W. B., Ross, R. B., and R. | [59] Carns, P. H., Ligon III, W. B., Ross, R. B., and R. | |||
Thakur, "PVFS: A Parallel File System for Linux | Thakur, "PVFS: A Parallel File System for Linux | |||
Clusters.", Proceedings of the 4th Annual Linux Showcase | Clusters.", Proceedings of the 4th Annual Linux Showcase | |||
and Conference, 2000. | and Conference, 2000. | |||
[59] The Open Group, "The Open Group Base Specifications Issue | [60] The Open Group, "The Open Group Base Specifications Issue | |||
6, IEEE Std 1003.1, 2004 Edition", 2004, | 6, IEEE Std 1003.1, 2004 Edition", 2004, | |||
<https://www.opengroup.org>. | <https://www.opengroup.org>. | |||
[60] Callaghan, B., "NFS URL Scheme", RFC 2224, | [61] Callaghan, B., "NFS URL Scheme", RFC 2224, | |||
DOI 10.17487/RFC2224, October 1997, | DOI 10.17487/RFC2224, October 1997, | |||
<https://www.rfc-editor.org/info/rfc2224>. | <https://www.rfc-editor.org/info/rfc2224>. | |||
[61] Chiu, A., Eisler, M., and B. Callaghan, "Security | [62] Chiu, A., Eisler, M., and B. Callaghan, "Security | |||
Negotiation for WebNFS", RFC 2755, DOI 10.17487/RFC2755, | Negotiation for WebNFS", RFC 2755, DOI 10.17487/RFC2755, | |||
January 2000, <https://www.rfc-editor.org/info/rfc2755>. | January 2000, <https://www.rfc-editor.org/info/rfc2755>. | |||
[62] Narten, T. and H. Alvestrand, "Guidelines for Writing an | [63] Cotton, M., Leiba, B., and T. Narten, "Guidelines for | |||
IANA Considerations Section in RFCs", RFC 5226, | Writing an IANA Considerations Section in RFCs", BCP 26, | |||
DOI 10.17487/RFC5226, May 2008, | RFC 8126, DOI 10.17487/RFC8126, June 2017, | |||
<https://www.rfc-editor.org/info/rfc5226>. | <https://www.rfc-editor.org/info/rfc8126>. | |||
[63] RFC Errata, Erratum ID 2006, RFC 5661, | [64] RFC Errata, Erratum ID 2006, RFC 5661, | |||
<https://www.rfc-editor.org/errata/eid2006>. | <https://www.rfc-editor.org/errata/eid2006>. | |||
[64] Spasojevic, M. and M. Satayanarayanan, "An Empirical Study | [65] Spasojevic, M. and M. Satayanarayanan, "An Empirical Study | |||
of a Wide-Area Distributed File System", May 1996, | of a Wide-Area Distributed File System", ACM Transactions | |||
<https://www.cs.cmu.edu/~satya/docdir/spasojevic-tocs-afs- | on Computer Systems, Vol. 14, No. 2, pp. 200-222, | |||
measurement-1996.pdf>. | DOI 10.1145/227695.227698, May 1996, | |||
<https://doi.org/10.1145/227695.227698>. | ||||
[65] Shepler, S., Ed., Eisler, M., Ed., and D. Noveck, Ed., | [66] Shepler, S., Ed., Eisler, M., Ed., and D. Noveck, Ed., | |||
"Network File System (NFS) Version 4 Minor Version 1 | "Network File System (NFS) Version 4 Minor Version 1 | |||
Protocol", RFC 5661, DOI 10.17487/RFC5661, January 2010, | Protocol", RFC 5661, DOI 10.17487/RFC5661, January 2010, | |||
<https://www.rfc-editor.org/info/rfc5661>. | <https://www.rfc-editor.org/info/rfc5661>. | |||
[66] Noveck, D., "Rules for NFSv4 Extensions and Minor | [67] Noveck, D., "Rules for NFSv4 Extensions and Minor | |||
Versions", RFC 8178, DOI 10.17487/RFC8178, July 2017, | Versions", RFC 8178, DOI 10.17487/RFC8178, July 2017, | |||
<https://www.rfc-editor.org/info/rfc8178>. | <https://www.rfc-editor.org/info/rfc8178>. | |||
[67] Haynes, T., Ed. and D. Noveck, Ed., "Network File System | [68] Haynes, T., Ed. and D. Noveck, Ed., "Network File System | |||
(NFS) Version 4 Protocol", RFC 7530, DOI 10.17487/RFC7530, | (NFS) Version 4 Protocol", RFC 7530, DOI 10.17487/RFC7530, | |||
March 2015, <https://www.rfc-editor.org/info/rfc7530>. | March 2015, <https://www.rfc-editor.org/info/rfc7530>. | |||
[68] Noveck, D., Ed., Shivam, P., Lever, C., and B. Baker, | [69] Noveck, D., Ed., Shivam, P., Lever, C., and B. Baker, | |||
"NFSv4.0 Migration: Specification Update", RFC 7931, | "NFSv4.0 Migration: Specification Update", RFC 7931, | |||
DOI 10.17487/RFC7931, July 2016, | DOI 10.17487/RFC7931, July 2016, | |||
<https://www.rfc-editor.org/info/rfc7931>. | <https://www.rfc-editor.org/info/rfc7931>. | |||
[69] Haynes, T., "Requirements for Parallel NFS (pNFS) Layout | [70] Haynes, T., "Requirements for Parallel NFS (pNFS) Layout | |||
Types", RFC 8434, DOI 10.17487/RFC8434, August 2018, | Types", RFC 8434, DOI 10.17487/RFC8434, August 2018, | |||
<https://www.rfc-editor.org/info/rfc8434>. | <https://www.rfc-editor.org/info/rfc8434>. | |||
[70] Farrell, S. and H. Tschofenig, "Pervasive Monitoring Is an | [71] Farrell, S. and H. Tschofenig, "Pervasive Monitoring Is an | |||
Attack", BCP 188, RFC 7258, DOI 10.17487/RFC7258, May | Attack", BCP 188, RFC 7258, DOI 10.17487/RFC7258, May | |||
2014, <https://www.rfc-editor.org/info/rfc7258>. | 2014, <https://www.rfc-editor.org/info/rfc7258>. | |||
[71] Rescorla, E. and B. Korver, "Guidelines for Writing RFC | [72] Rescorla, E. and B. Korver, "Guidelines for Writing RFC | |||
Text on Security Considerations", BCP 72, RFC 3552, | Text on Security Considerations", BCP 72, RFC 3552, | |||
DOI 10.17487/RFC3552, July 2003, | DOI 10.17487/RFC3552, July 2003, | |||
<https://www.rfc-editor.org/info/rfc3552>. | <https://www.rfc-editor.org/info/rfc3552>. | |||
Appendix A. The Need for This Update | Appendix A. The Need for This Update | |||
This document includes an explanation of how clients and servers are | This document includes an explanation of how clients and servers are | |||
to determine the particular network access paths to be used to access | to determine the particular network access paths to be used to access | |||
a file system. This includes descriptions of how to handle changes | a file system. This includes descriptions of how to handle changes | |||
to the specific replica to be used or to the set of addresses to be | to the specific replica to be used or to the set of addresses to be | |||
used to access it, and how to deal transparently with transfers of | used to access it, and how to deal transparently with transfers of | |||
responsibility that need to be made. This includes cases in which | responsibility that need to be made. This includes cases in which | |||
there is a shift between one replica and another and those in which | there is a shift between one replica and another and those in which | |||
different network access paths are used to access the same replica. | different network access paths are used to access the same replica. | |||
As a result of the following problems in RFC 5661 [65], it was | As a result of the following problems in RFC 5661 [66], it was | |||
necessary to provide the specific updates that are made by this | necessary to provide the specific updates that are made by this | |||
document. These updates are described in Appendix B. | document. These updates are described in Appendix B. | |||
* RFC 5661 [65], while it dealt with situations in which various | * RFC 5661 [66], while it dealt with situations in which various | |||
forms of clustering allowed coordination of the state assigned by | forms of clustering allowed coordination of the state assigned by | |||
cooperating servers to be used, made no provisions for Transparent | cooperating servers to be used, made no provisions for Transparent | |||
State Migration. Within NFSv4.0, Transparent State Migration was | State Migration. Within NFSv4.0, Transparent State Migration was | |||
first explained clearly in RFC 7530 [67] and corrected and | first explained clearly in RFC 7530 [68] and corrected and | |||
clarified by RFC 7931 [68]. No corresponding explanation for | clarified by RFC 7931 [69]. No corresponding explanation for | |||
NFSv4.1 had been provided. | NFSv4.1 had been provided. | |||
* Although NFSv4.1 provided a clear definition of how trunking | * Although NFSv4.1 provided a clear definition of how trunking | |||
detection was to be done, there was no clear specification of how | detection was to be done, there was no clear specification of how | |||
trunking discovery was to be done, despite the fact that the | trunking discovery was to be done, despite the fact that the | |||
specification clearly indicated that this information could be | specification clearly indicated that this information could be | |||
made available via the file system location attributes. | made available via the file system location attributes. | |||
* Because the existence of multiple network access paths to the same | * Because the existence of multiple network access paths to the same | |||
file system was dealt with as if there were multiple replicas, | file system was dealt with as if there were multiple replicas, | |||
skipping to change at line 31145 ¶ | skipping to change at line 31190 ¶ | |||
the addresses used to access a particular file system instance. | the addresses used to access a particular file system instance. | |||
As a result, in situations in which both migration and trunking | As a result, in situations in which both migration and trunking | |||
configuration changes were involved, neither of these could be | configuration changes were involved, neither of these could be | |||
clearly dealt with, and the relationship between these two | clearly dealt with, and the relationship between these two | |||
features was not seriously addressed. | features was not seriously addressed. | |||
* Because use of two network access paths to the same file system | * Because use of two network access paths to the same file system | |||
instance (i.e., trunking) was often treated as if two replicas | instance (i.e., trunking) was often treated as if two replicas | |||
were involved, it was considered that two replicas were being used | were involved, it was considered that two replicas were being used | |||
simultaneously. As a result, the treatment of replicas being used | simultaneously. As a result, the treatment of replicas being used | |||
simultaneously in RFC 5661 [65] was not clear, as it covered the | simultaneously in RFC 5661 [66] was not clear, as it covered the | |||
two distinct cases of a single file system instance being accessed | two distinct cases of a single file system instance being accessed | |||
by two different network access paths and two replicas being | by two different network access paths and two replicas being | |||
accessed simultaneously, with the limitations of the latter case | accessed simultaneously, with the limitations of the latter case | |||
not being clearly laid out. | not being clearly laid out. | |||
The majority of the consequences of these issues are dealt with by | The majority of the consequences of these issues are dealt with by | |||
presenting in Section 11 a replacement for Section 11 of RFC 5661 | presenting in Section 11 a replacement for Section 11 of RFC 5661 | |||
[65]. This replacement modifies existing subsections within that | [66]. This replacement modifies existing subsections within that | |||
section and adds new ones as described in Appendix B.1. Also, some | section and adds new ones as described in Appendix B.1. Also, some | |||
existing sections were deleted. These changes were made in order to | existing sections were deleted. These changes were made in order to | |||
do the following: | do the following: | |||
* Reorganize the description so that the case of two network access | * Reorganize the description so that the case of two network access | |||
paths to the same file system instance is distinguished clearly | paths to the same file system instance is distinguished clearly | |||
from the case of two different replicas since, in the former case, | from the case of two different replicas since, in the former case, | |||
locking state is shared and there also can be sharing of session | locking state is shared and there also can be sharing of session | |||
state. | state. | |||
* Provide a clear statement regarding the desirability of | * Provide a clear statement regarding the desirability of | |||
transparent transfer of state between replicas together with a | transparent transfer of state between replicas together with a | |||
recommendation that either transparent transfer or a single-fs | recommendation that either transparent transfer or a single-fs | |||
grace period be provided. | grace period be provided. | |||
* Specifically delineate how a client is to handle such transfers, | * Specifically delineate how a client is to handle such transfers, | |||
taking into account the differences from the treatment in [68] | taking into account the differences from the treatment in [69] | |||
made necessary by the major protocol changes to NFSv4.1. | made necessary by the major protocol changes to NFSv4.1. | |||
* Discuss the relationship between transparent state transfer and | * Discuss the relationship between transparent state transfer and | |||
Parallel NFS (pNFS). | Parallel NFS (pNFS). | |||
* Clarify the fs_locations_info attribute in order to specify which | * Clarify the fs_locations_info attribute in order to specify which | |||
portions of the provided information apply to a specific network | portions of the provided information apply to a specific network | |||
access path and which apply to the replica that the path is used | access path and which apply to the replica that the path is used | |||
to access. | to access. | |||
In addition, other sections of RFC 5661 [65] were updated to correct | In addition, other sections of RFC 5661 [66] were updated to correct | |||
the consequences of the incorrect assumptions underlying the | the consequences of the incorrect assumptions underlying the | |||
treatment of multi-server namespace issues. These are described in | treatment of multi-server namespace issues. These are described in | |||
Appendices B.2 through B.4. | Appendices B.2 through B.4. | |||
* A revised introductory section regarding multi-server namespace | * A revised introductory section regarding multi-server namespace | |||
facilities is provided. | facilities is provided. | |||
* A more realistic treatment of server scope is provided. This | * A more realistic treatment of server scope is provided. This | |||
treatment reflects the more limited coordination of locking state | treatment reflects the more limited coordination of locking state | |||
adopted by servers actually sharing a common server scope. | adopted by servers actually sharing a common server scope. | |||
skipping to change at line 31213 ¶ | skipping to change at line 31258 ¶ | |||
situations that would arise in dealing with Transparent State | situations that would arise in dealing with Transparent State | |||
Migration, or because some types of reclaim issues were not | Migration, or because some types of reclaim issues were not | |||
adequately dealt with in the context of fs-specific grace periods. | adequately dealt with in the context of fs-specific grace periods. | |||
For details, see Appendix B.2. | For details, see Appendix B.2. | |||
Appendix B. Changes in This Update | Appendix B. Changes in This Update | |||
B.1. Revisions Made to Section 11 of RFC 5661 | B.1. Revisions Made to Section 11 of RFC 5661 | |||
A number of areas have been revised or extended, in many cases | A number of areas have been revised or extended, in many cases | |||
replacing subsections within Section 11 of RFC 5661 [65]: | replacing subsections within Section 11 of RFC 5661 [66]: | |||
* New introductory material, including a terminology section, | * New introductory material, including a terminology section, | |||
replaces the material in RFC 5661 [65], ranging from the start of | replaces the material in RFC 5661 [66], ranging from the start of | |||
the original Section 11 up to and including Section 11.1. The new | the original Section 11 up to and including Section 11.1. The new | |||
material starts at the beginning of Section 11 and continues | material starts at the beginning of Section 11 and continues | |||
through 11.2. | through 11.2. | |||
* A significant reorganization of the material in Sections 11.4 and | * A significant reorganization of the material in Sections 11.4 and | |||
11.5 of RFC 5661 [65] was necessary. The reasons for the | 11.5 of RFC 5661 [66] was necessary. The reasons for the | |||
reorganization of these sections into a single section with | reorganization of these sections into a single section with | |||
multiple subsections are discussed in Appendix B.1.1 below. This | multiple subsections are discussed in Appendix B.1.1 below. This | |||
replacement appears as Section 11.5. | replacement appears as Section 11.5. | |||
New material relating to the handling of the file system location | New material relating to the handling of the file system location | |||
attributes is contained in Sections 11.5.1 and 11.5.7. | attributes is contained in Sections 11.5.1 and 11.5.7. | |||
* A new section describing requirements for user and group handling | * A new section describing requirements for user and group handling | |||
within a multi-server namespace has been added as Section 11.7. | within a multi-server namespace has been added as Section 11.7. | |||
* A major replacement for Section 11.7 of RFC 5661 [65], entitled | * A major replacement for Section 11.7 of RFC 5661 [66], entitled | |||
"Effecting File System Transitions", appears as Sections 11.9 | "Effecting File System Transitions", appears as Sections 11.9 | |||
through 11.14. The reasons for the reorganization of this section | through 11.14. The reasons for the reorganization of this section | |||
into multiple sections are discussed in Appendix B.1.2. | into multiple sections are discussed in Appendix B.1.2. | |||
* A replacement for Section 11.10 of RFC 5661 [65], entitled "The | * A replacement for Section 11.10 of RFC 5661 [66], entitled "The | |||
Attribute fs_locations_info", appears as Section 11.17, with | Attribute fs_locations_info", appears as Section 11.17, with | |||
Appendix B.1.3 describing the differences between the new section | Appendix B.1.3 describing the differences between the new section | |||
and the treatment within [65]. A revised treatment was necessary | and the treatment within [66]. A revised treatment was necessary | |||
because the original treatment did not make clear how the added | because the original treatment did not make clear how the added | |||
attribute information relates to the case of trunked paths to the | attribute information relates to the case of trunked paths to the | |||
same replica. These issues were not addressed in RFC 5661 [65] | same replica. These issues were not addressed in RFC 5661 [66] | |||
where the concepts of a replica and a network path used to access | where the concepts of a replica and a network path used to access | |||
a replica were not clearly distinguished. | a replica were not clearly distinguished. | |||
B.1.1. Reorganization of Sections 11.4 and 11.5 of RFC 5661 | B.1.1. Reorganization of Sections 11.4 and 11.5 of RFC 5661 | |||
Previously, issues related to the fact that multiple location entries | Previously, issues related to the fact that multiple location entries | |||
directed the client to the same file system instance were dealt with | directed the client to the same file system instance were dealt with | |||
in Section 11.5 of RFC 5661 [65]. Because of the new treatment of | in Section 11.5 of RFC 5661 [66]. Because of the new treatment of | |||
trunking, these issues now belong within Section 11.5. | trunking, these issues now belong within Section 11.5. | |||
In this new section, trunking is covered in Section 11.5.2 together | In this new section, trunking is covered in Section 11.5.2 together | |||
with the other uses of file system location information described in | with the other uses of file system location information described in | |||
Sections 11.5.3 through 11.5.6. | Sections 11.5.3 through 11.5.6. | |||
As a result, Section 11.5, which replaces Section 11.4 of RFC 5661 | As a result, Section 11.5, which replaces Section 11.4 of RFC 5661 | |||
[65], is substantially different than the section it replaces in that | [66], is substantially different than the section it replaces in that | |||
some original sections have been replaced by corresponding sections | some original sections have been replaced by corresponding sections | |||
as described below, while new sections have been added: | as described below, while new sections have been added: | |||
* The material in Section 11.5, exclusive of subsections, replaces | * The material in Section 11.5, exclusive of subsections, replaces | |||
the material in Section 11.4 of RFC 5661 [65] exclusive of | the material in Section 11.4 of RFC 5661 [66] exclusive of | |||
subsections. | subsections. | |||
* Section 11.5.1 is the new first subsection of the overall section. | * Section 11.5.1 is the new first subsection of the overall section. | |||
* Section 11.5.2 is the new second subsection of the overall | * Section 11.5.2 is the new second subsection of the overall | |||
section. | section. | |||
* Each of the Sections 11.5.4, 11.5.5, and 11.5.6 replaces (in | * Each of the Sections 11.5.4, 11.5.5, and 11.5.6 replaces (in | |||
order) one of the corresponding Sections 11.4.1, 11.4.2, and | order) one of the corresponding Sections 11.4.1, 11.4.2, and | |||
11.4.3 of RFC 5661 [65]. 11.4.4, and 11.4.5. | 11.4.3 of RFC 5661 [66]. | |||
* Section 11.5.7 is the new final subsection of the overall section. | * Section 11.5.7 is the new final subsection of the overall section. | |||
B.1.2. Reorganization of Material Dealing with File System Transitions | B.1.2. Reorganization of Material Dealing with File System Transitions | |||
The material relating to file system transition, previously contained | The material relating to file system transition, previously contained | |||
in Section 11.7 of RFC 5661 [65] has been reorganized and augmented | in Section 11.7 of RFC 5661 [66] has been reorganized and augmented | |||
as described below: | as described below: | |||
* Because there can be a shift of the network access paths used to | * Because there can be a shift of the network access paths used to | |||
access a file system instance without any shift between replicas, | access a file system instance without any shift between replicas, | |||
a new Section 11.9 distinguishes between those cases in which | a new Section 11.9 distinguishes between those cases in which | |||
there is a shift between distinct replicas and those involving a | there is a shift between distinct replicas and those involving a | |||
shift in network access paths with no shift between replicas. | shift in network access paths with no shift between replicas. | |||
As a result, the new Section 11.10 deals with network address | As a result, the new Section 11.10 deals with network address | |||
transitions, while the bulk of the original Section 11.7 of RFC | transitions, while the bulk of the original Section 11.7 of RFC | |||
5661 [65] has been extensively modified as reflected in | 5661 [66] has been extensively modified as reflected in | |||
Section 11.11, which is now limited to cases in which there is a | Section 11.11, which is now limited to cases in which there is a | |||
shift between two different sets of replicas. | shift between two different sets of replicas. | |||
* The additional Section 11.12 discusses the case in which a shift | * The additional Section 11.12 discusses the case in which a shift | |||
to a different replica is made and state is transferred to allow | to a different replica is made and state is transferred to allow | |||
the client the ability to have continued access to its accumulated | the client the ability to have continued access to its accumulated | |||
locking state on the new server. | locking state on the new server. | |||
* The additional Section 11.13 discusses the client's response to | * The additional Section 11.13 discusses the client's response to | |||
access transitions, how it determines whether migration has | access transitions, how it determines whether migration has | |||
occurred, and how it gets access to any transferred locking and | occurred, and how it gets access to any transferred locking and | |||
session state. | session state. | |||
* The additional Section 11.14 discusses the responsibilities of the | * The additional Section 11.14 discusses the responsibilities of the | |||
source and destination servers when transferring locking and | source and destination servers when transferring locking and | |||
session state. | session state. | |||
This reorganization has caused a renumbering of the sections within | This reorganization has caused a renumbering of the sections within | |||
Section 11 of [65] as described below: | Section 11 of [66] as described below: | |||
* The new Sections 11.9 and 11.10 have resulted in the renumbering | * The new Sections 11.9 and 11.10 have resulted in the renumbering | |||
of existing sections with these numbers. | of existing sections with these numbers. | |||
* Section 11.7 of [65] has been substantially modified and appears | * Section 11.7 of [66] has been substantially modified and appears | |||
as Section 11.11. The necessary modifications reflect the fact | as Section 11.11. The necessary modifications reflect the fact | |||
that this section only deals with transitions between replicas, | that this section only deals with transitions between replicas, | |||
while transitions between network addresses are dealt with in | while transitions between network addresses are dealt with in | |||
other sections. Details of the reorganization are described later | other sections. Details of the reorganization are described later | |||
in this section. | in this section. | |||
* Sections 11.12, 11.13, and 11.14 have been added. | * Sections 11.12, 11.13, and 11.14 have been added. | |||
* Consequently, Sections 11.8, 11.9, 11.10, and 11.11 in [65] now | * Consequently, Sections 11.8, 11.9, 11.10, and 11.11 in [66] now | |||
appear as Sections 11.15, 11.16, 11.17, and 11.18, respectively. | appear as Sections 11.15, 11.16, 11.17, and 11.18, respectively. | |||
As part of this general reorganization, Section 11.7 of RFC 5661 [65] | As part of this general reorganization, Section 11.7 of RFC 5661 [66] | |||
has been modified as described below: | has been modified as described below: | |||
* Sections 11.7 and 11.7.1 of RFC 5661 [65] have been replaced by | * Sections 11.7 and 11.7.1 of RFC 5661 [66] have been replaced by | |||
Sections 11.11 and 11.11.1, respectively. | Sections 11.11 and 11.11.1, respectively. | |||
* Section 11.7.2 of RFC 5661 (and included subsections) has been | * Section 11.7.2 of RFC 5661 (and included subsections) has been | |||
deleted. | deleted. | |||
* Sections 11.7.3, 11.7.4, 11.7.5, 11.7.5.1, and 11.7.6 of RFC 5661 | * Sections 11.7.3, 11.7.4, 11.7.5, 11.7.5.1, and 11.7.6 of RFC 5661 | |||
[65] have been replaced by Sections 11.11.2, 11.11.3, 11.11.4, | [66] have been replaced by Sections 11.11.2, 11.11.3, 11.11.4, | |||
11.11.4.1, and 11.11.5 respectively in this document. | 11.11.4.1, and 11.11.5 respectively in this document. | |||
* Section 11.7.7 of RFC 5661 [65] has been replaced by | * Section 11.7.7 of RFC 5661 [66] has been replaced by | |||
Section 11.11.9. This subsection has been moved to the end of the | Section 11.11.9. This subsection has been moved to the end of the | |||
section dealing with file system transitions. | section dealing with file system transitions. | |||
* Sections 11.7.8, 11.7.9, and 11.7.10 of RFC 5661 [65] have been | * Sections 11.7.8, 11.7.9, and 11.7.10 of RFC 5661 [66] have been | |||
replaced by Sections 11.11.6, 11.11.7, and 11.11.8 respectively in | replaced by Sections 11.11.6, 11.11.7, and 11.11.8 respectively in | |||
this document. | this document. | |||
B.1.3. Updates to the Treatment of fs_locations_info | B.1.3. Updates to the Treatment of fs_locations_info | |||
Various elements of the fs_locations_info attribute contain | Various elements of the fs_locations_info attribute contain | |||
information that applies to either a specific file system replica or | information that applies to either a specific file system replica or | |||
to a network path or set of network paths used to access such a | to a network path or set of network paths used to access such a | |||
replica. The original treatment of fs_locations_info (Section 11.10 | replica. The original treatment of fs_locations_info (Section 11.10 | |||
of RFC 5661 [65]) did not clearly distinguish these cases, in part | of RFC 5661 [66]) did not clearly distinguish these cases, in part | |||
because the document did not clearly distinguish replicas from the | because the document did not clearly distinguish replicas from the | |||
paths used to access them. | paths used to access them. | |||
In addition, special clarification has been provided with regard to | In addition, special clarification has been provided with regard to | |||
the following fields: | the following fields: | |||
* With regard to the handling of FSLI4GF_GOING, it was clarified | * With regard to the handling of FSLI4GF_GOING, it was clarified | |||
that this only applies to the unavailability of a replica rather | that this only applies to the unavailability of a replica rather | |||
than to a path to access a replica. | than to a path to access a replica. | |||
* In describing the appropriate value for a server to use for | * In describing the appropriate value for a server to use for | |||
fli_valid_for, it was clarified that there is no need for the | fli_valid_for, it was clarified that there is no need for the | |||
client to frequently fetch the fs_locations_info value to be | client to frequently fetch the fs_locations_info value to be | |||
prepared for shifts in trunking patterns. | prepared for shifts in trunking patterns. | |||
* Clarification of the rules for extensions to the fls_info has been | * Clarification of the rules for extensions to the fls_info has been | |||
provided. The original treatment reflected the extension model | provided. The original treatment reflected the extension model | |||
that was in effect at the time RFC 5661 [65] was written, but has | that was in effect at the time RFC 5661 [66] was written, but has | |||
been updated in accordance with the extension model described in | been updated in accordance with the extension model described in | |||
RFC 8178 [66]. | RFC 8178 [67]. | |||
B.2. Revisions Made to Operations in RFC 5661 | B.2. Revisions Made to Operations in RFC 5661 | |||
Descriptions have been revised to address issues that arose in | Descriptions have been revised to address issues that arose in | |||
effecting necessary changes to multi-server namespace features. | effecting necessary changes to multi-server namespace features. | |||
* The treatment of EXCHANGE_ID (Section 18.35 of RFC 5661 [65]) | * The treatment of EXCHANGE_ID (Section 18.35 of RFC 5661 [66]) | |||
assumed that client IDs cannot be created/confirmed other than by | assumed that client IDs cannot be created/confirmed other than by | |||
the EXCHANGE_ID and CREATE_SESSION operations. Also, the | the EXCHANGE_ID and CREATE_SESSION operations. Also, the | |||
necessary use of EXCHANGE_ID in recovery from migration and | necessary use of EXCHANGE_ID in recovery from migration and | |||
related situations was not clearly addressed. A revised treatment | related situations was not clearly addressed. A revised treatment | |||
of EXCHANGE_ID was necessary, and it appears in Section 18.35, | of EXCHANGE_ID was necessary, and it appears in Section 18.35, | |||
while the specific differences between it and the treatment within | while the specific differences between it and the treatment within | |||
[65] are explained in Appendix B.2.1 below. | [66] are explained in Appendix B.2.1 below. | |||
* The treatment of RECLAIM_COMPLETE in Section 18.51 of RFC 5661 | * The treatment of RECLAIM_COMPLETE in Section 18.51 of RFC 5661 | |||
[65] was not sufficiently clear about the purpose and use of the | [66] was not sufficiently clear about the purpose and use of the | |||
rca_one_fs and how the server was to deal with inappropriate | rca_one_fs and how the server was to deal with inappropriate | |||
values of this argument. Because the resulting confusion raised | values of this argument. Because the resulting confusion raised | |||
interoperability issues, a new treatment of RECLAIM_COMPLETE was | interoperability issues, a new treatment of RECLAIM_COMPLETE was | |||
necessary, and it appears in Section 18.51, while the specific | necessary, and it appears in Section 18.51, while the specific | |||
differences between it and the treatment within RFC 5661 [65] are | differences between it and the treatment within RFC 5661 [66] are | |||
discussed in Appendix B.2.2 below. In addition, the definitions | discussed in Appendix B.2.2 below. In addition, the definitions | |||
of the reclaim-related errors have received an updated treatment | of the reclaim-related errors have received an updated treatment | |||
in Section 15.1.9 to reflect the fact that there are multiple | in Section 15.1.9 to reflect the fact that there are multiple | |||
contexts for lock reclaim operations. | contexts for lock reclaim operations. | |||
B.2.1. Revision of Treatment of EXCHANGE_ID | B.2.1. Revision of Treatment of EXCHANGE_ID | |||
There was a number of issues in the original treatment of EXCHANGE_ID | There was a number of issues in the original treatment of EXCHANGE_ID | |||
in RFC 5661 [65] that caused problems for Transparent State Migration | in RFC 5661 [66] that caused problems for Transparent State Migration | |||
and for the transfer of access between different network access paths | and for the transfer of access between different network access paths | |||
to the same file system instance. | to the same file system instance. | |||
These issues arose from the fact that this treatment was written: | These issues arose from the fact that this treatment was written: | |||
* Assuming that a client ID can only become known to a server by | * Assuming that a client ID can only become known to a server by | |||
having been created by executing an EXCHANGE_ID, with confirmation | having been created by executing an EXCHANGE_ID, with confirmation | |||
of the ID only possible by execution of a CREATE_SESSION. | of the ID only possible by execution of a CREATE_SESSION. | |||
* Considering the interactions between a client and a server only | * Considering the interactions between a client and a server only | |||
occurring on a single network address. | occurring on a single network address. | |||
As these assumptions have become invalid in the context of | As these assumptions have become invalid in the context of | |||
Transparent State Migration and active use of trunking, the treatment | Transparent State Migration and active use of trunking, the treatment | |||
has been modified in several respects: | has been modified in several respects: | |||
* It had been assumed that an EXCHANGE_ID executed when the server | * It had been assumed that an EXCHANGE_ID executed when the server | |||
is already aware of a given client instance must be either | was already aware that a given client instance was either updating | |||
updating associated parameters (e.g., with respect to callbacks) | associated parameters (e.g., with respect to callbacks) or dealing | |||
or a lingering retransmission to deal with a previously lost | with a previously lost reply by retransmitting. As a result, any | |||
reply. As result, any slot sequence returned by that operation | slot sequence returned by that operation would be of no use. The | |||
would be of no use. The original treatment went so far as to say | original treatment went so far as to say that it "MUST NOT" be | |||
that it "MUST NOT" be used, although this usage was not in accord | used, although this usage was not in accord with [1]. This | |||
with [1]. This created a difficulty when an EXCHANGE_ID is done | created a difficulty when an EXCHANGE_ID is done after Transparent | |||
after Transparent State Migration since that slot sequence would | State Migration since that slot sequence would need to be used in | |||
need to be used in a subsequent CREATE_SESSION. | a subsequent CREATE_SESSION. | |||
In the updated treatment, CREATE_SESSION is a way that client IDs | In the updated treatment, CREATE_SESSION is a way that client IDs | |||
are confirmed, but it is understood that other ways are possible. | are confirmed, but it is understood that other ways are possible. | |||
The slot sequence can be used as needed, and cases in which it | The slot sequence can be used as needed, and cases in which it | |||
would be of no use are appropriately noted. | would be of no use are appropriately noted. | |||
* It had been assumed that the only functions of EXCHANGE_ID were to | * It had been assumed that the only functions of EXCHANGE_ID were to | |||
inform the server of the client, to create the client ID, and to | inform the server of the client, to create the client ID, and to | |||
communicate it to the client. When multiple simultaneous | communicate it to the client. When multiple simultaneous | |||
connections are involved, as often happens when trunking, that | connections are involved, as often happens when trunking, that | |||
treatment was inadequate in that it ignored the role of | treatment was inadequate in that it ignored the role of | |||
EXCHANGE_ID in associating the client ID with the connection on | EXCHANGE_ID in associating the client ID with the connection on | |||
which it was done, so that it could be used by a subsequent | which it was done, so that it could be used by a subsequent | |||
CREATE_SESSSION whose parameters do not include an explicit client | CREATE_SESSION whose parameters do not include an explicit client | |||
ID. | ID. | |||
The new treatment explicitly discusses the role of EXCHANGE_ID in | The new treatment explicitly discusses the role of EXCHANGE_ID in | |||
associating the client ID with the connection so it can be used by | associating the client ID with the connection so it can be used by | |||
CREATE_SESSION and in associating a connection with an existing | CREATE_SESSION and in associating a connection with an existing | |||
session. | session. | |||
The new treatment can be found in Section 18.35 above. It supersedes | The new treatment can be found in Section 18.35 above. It supersedes | |||
the treatment in Section 18.35 of RFC 5661 [65]. | the treatment in Section 18.35 of RFC 5661 [66]. | |||
B.2.2. Revision of Treatment of RECLAIM_COMPLETE | B.2.2. Revision of Treatment of RECLAIM_COMPLETE | |||
The following changes were made to the treatment of RECLAIM_COMPLETE | The following changes were made to the treatment of RECLAIM_COMPLETE | |||
in RFC 5661 [65] to arrive at the treatment in Section 18.51: | in RFC 5661 [66] to arrive at the treatment in Section 18.51: | |||
* In a number of places, the text was made more explicit about the | * In a number of places, the text was made more explicit about the | |||
purpose of rca_one_fs and its connection to file system migration. | purpose of rca_one_fs and its connection to file system migration. | |||
* There is a discussion of situations in which particular forms of | * There is a discussion of situations in which particular forms of | |||
RECLAIM_COMPLETE would need to be done. | RECLAIM_COMPLETE would need to be done. | |||
* There is a discussion of interoperability issues between | * There is a discussion of interoperability issues between | |||
implementations that may have arisen due to the lack of clarity of | implementations that may have arisen due to the lack of clarity of | |||
the previous treatment of RECLAIM_COMPLETE. | the previous treatment of RECLAIM_COMPLETE. | |||
B.3. Revisions Made to Error Definitions in RFC 5661 | B.3. Revisions Made to Error Definitions in RFC 5661 | |||
The new handling of various situations required revisions to some | The new handling of various situations required revisions to some | |||
existing error definitions: | existing error definitions: | |||
* Because of the need to appropriately address trunking-related | * Because of the need to appropriately address trunking-related | |||
issues, some uses of the term "replica" in RFC 5661 [65] became | issues, some uses of the term "replica" in RFC 5661 [66] became | |||
problematic because a shift in network access paths was considered | problematic because a shift in network access paths was considered | |||
to be a shift to a different replica. As a result, the original | to be a shift to a different replica. As a result, the original | |||
definition of NFS4ERR_MOVED (in Section 15.1.2.4 of RFC 5661 [65]) | definition of NFS4ERR_MOVED (in Section 15.1.2.4 of RFC 5661 [66]) | |||
was updated to reflect the different handling of unavailability of | was updated to reflect the different handling of unavailability of | |||
a particular fs via a specific network address. | a particular fs via a specific network address. | |||
Since such a situation is no longer considered to constitute | Since such a situation is no longer considered to constitute | |||
unavailability of a file system instance, the description has been | unavailability of a file system instance, the description has been | |||
changed, even though the set of circumstances in which it is to be | changed, even though the set of circumstances in which it is to be | |||
returned remains the same. The new paragraph explicitly | returned remains the same. The new paragraph explicitly | |||
recognizes that a different network address might be used, while | recognizes that a different network address might be used, while | |||
the previous description, misleadingly, treated this as a shift | the previous description, misleadingly, treated this as a shift | |||
between two replicas while only a single file system instance | between two replicas while only a single file system instance | |||
might be involved. The updated description appears in | might be involved. The updated description appears in | |||
Section 15.1.2.4. | Section 15.1.2.4. | |||
* Because of the need to accommodate the use of fs-specific grace | * Because of the need to accommodate the use of fs-specific grace | |||
periods, it was necessary to clarify some of the definitions of | periods, it was necessary to clarify some of the definitions of | |||
reclaim-related errors in Section 15 of RFC 5661 [65] so that the | reclaim-related errors in Section 15 of RFC 5661 [66] so that the | |||
text applies properly to reclaims for all types of grace periods. | text applies properly to reclaims for all types of grace periods. | |||
The updated descriptions appear within Section 15.1.9. | The updated descriptions appear within Section 15.1.9. | |||
* Because of the need to provide the clarifications in errata report | * Because of the need to provide the clarifications in errata report | |||
2006 [63] and to adapt these to properly explain the interaction | 2006 [64] and to adapt these to properly explain the interaction | |||
of NFS4ERR_DELAY with the replay cache, a revised description of | of NFS4ERR_DELAY with the reply cache, a revised description of | |||
NFS4ERR_DELAY appears in Section 15.1.1.3. This errata report, | NFS4ERR_DELAY appears in Section 15.1.1.3. This errata report, | |||
unlike many other RFC 5661 errata reports, is addressed in this | unlike many other RFC 5661 errata reports, is addressed in this | |||
document because of the extensive use of NFS4ERR_DELAY in | document because of the extensive use of NFS4ERR_DELAY in | |||
connection with state migration and session migration. | connection with state migration and session migration. | |||
B.4. Other Revisions Made to RFC 5661 | B.4. Other Revisions Made to RFC 5661 | |||
Besides the major reworking of Section 11 of RFC 5661 [65] and the | Besides the major reworking of Section 11 of RFC 5661 [66] and the | |||
associated revisions to existing operations and errors, there were a | associated revisions to existing operations and errors, there were a | |||
number of related changes that were necessary: | number of related changes that were necessary: | |||
* The summary in Section 1.7.3.3 of RFC 5661 [65] was revised to | * The summary in Section 1.7.3.3 of RFC 5661 [66] was revised to | |||
reflect the changes made to Section 11 above. The updated summary | reflect the changes made to Section 11 above. The updated summary | |||
appears as Section 1.8.3.3 above. | appears as Section 1.8.3.3 above. | |||
* The discussion of server scope in Section 2.10.4 of RFC 5661 [65] | * The discussion of server scope in Section 2.10.4 of RFC 5661 [66] | |||
was replaced since it appeared to require a level of inter-server | was replaced since it appeared to require a level of inter-server | |||
coordination incompatible with its basic function of avoiding the | coordination incompatible with its basic function of avoiding the | |||
need for a globally uniform means of assigning server_owner | need for a globally uniform means of assigning server_owner | |||
values. A revised treatment appears in Section 2.10.4. | values. A revised treatment appears in Section 2.10.4. | |||
* The discussion of trunking in Section 2.10.5 of RFC 5661 [65] was | * The discussion of trunking in Section 2.10.5 of RFC 5661 [66] was | |||
revised to more clearly explain the multiple types of trunking | revised to more clearly explain the multiple types of trunking | |||
support and how the client can be made aware of the existing | support and how the client can be made aware of the existing | |||
trunking configuration. In addition, while the last paragraph | trunking configuration. In addition, while the last paragraph | |||
(exclusive of subsections) of that section dealing with | (exclusive of subsections) of that section dealing with | |||
server_owner changes was literally true, it had been a source of | server_owner changes was literally true, it had been a source of | |||
confusion. Since the original paragraph could be read as | confusion. Since the original paragraph could be read as | |||
suggesting that such changes be handled nondisruptively, the issue | suggesting that such changes be handled nondisruptively, the issue | |||
was clarified in the revised Section 2.10.5. | was clarified in the revised Section 2.10.5. | |||
Appendix C. Security Issues That Need to Be Addressed | Appendix C. Security Issues That Need to Be Addressed | |||
The following issues in the treatment of security within the NFSv4.1 | The following issues in the treatment of security within the NFSv4.1 | |||
specification need to be addressed: | specification need to be addressed: | |||
* The Security Considerations Section of RFC 5661 [65] was not | * The Security Considerations Section of RFC 5661 [66] was not | |||
written in accordance with RFC 3552 (BCP 72) [71]. Of particular | written in accordance with RFC 3552 (BCP 72) [72]. Of particular | |||
concern was the fact that the section did not contain a threat | concern was the fact that the section did not contain a threat | |||
analysis. | analysis. | |||
* Initial analysis of the existing security issues with NFSv4.1 has | * Initial analysis of the existing security issues with NFSv4.1 has | |||
made it likely that a revised Security Considerations section for | made it likely that a revised Security Considerations section for | |||
the existing protocol (one containing a threat analysis) would be | the existing protocol (one containing a threat analysis) would be | |||
likely to conclude that NFSv4.1 does not meet the goal of secure | likely to conclude that NFSv4.1 does not meet the goal of secure | |||
use on the Internet. | use on the Internet. | |||
The Security Considerations section of this document (Section 21) has | The Security Considerations section of this document (Section 21) has | |||
skipping to change at line 31574 ¶ | skipping to change at line 31619 ¶ | |||
creates need to be addressed. Addressing this issue must not be | creates need to be addressed. Addressing this issue must not be | |||
limited to the questions of whether the designation of this as | limited to the questions of whether the designation of this as | |||
OPTIONAL was justified and whether it should be changed. | OPTIONAL was justified and whether it should be changed. | |||
In any event, it may not be possible at this point to correct the | In any event, it may not be possible at this point to correct the | |||
security problems created by continued use of AUTH_SYS simply by | security problems created by continued use of AUTH_SYS simply by | |||
revising this designation. | revising this designation. | |||
* The lack of attention within the protocol to the possibility of | * The lack of attention within the protocol to the possibility of | |||
pervasive monitoring attacks such as those described in RFC 7258 | pervasive monitoring attacks such as those described in RFC 7258 | |||
[70] (also BCP 188). | [71] (also BCP 188). | |||
In that connection, the use of CREATE_SESSION without privacy | In that connection, the use of CREATE_SESSION without privacy | |||
protection needs to be addressed as it exposes the session ID to | protection needs to be addressed as it exposes the session ID to | |||
view by an attacker. This is worrisome as this is precisely the | view by an attacker. This is worrisome as this is precisely the | |||
type of protocol artifact alluded to in RFC 7258, which can enable | type of protocol artifact alluded to in RFC 7258, which can enable | |||
further mischief on the part of the attacker as it enables denial- | further mischief on the part of the attacker as it enables denial- | |||
of-service attacks that can be executed effectively with only a | of-service attacks that can be executed effectively with only a | |||
single, normally low-value, credential, even when RPCSEC_GSS | single, normally low-value, credential, even when RPCSEC_GSS | |||
authentication is in use. | authentication is in use. | |||
End of changes. 205 change blocks. | ||||
475 lines changed or deleted | 520 lines changed or added | |||
This html diff was produced by rfcdiff 1.48. The latest version is available from http://tools.ietf.org/tools/rfcdiff/ |