| draft-ietf-nfsv4-rfc3010bis-04.txt | | draft-ietf-nfsv4-rfc3010bis-05.txt | |
| | | | |
| NFS version 4 Working Group S. Shepler | | NFS version 4 Working Group S. Shepler | |
| INTERNET-DRAFT Sun Microsystems, Inc. | | INTERNET-DRAFT Sun Microsystems, Inc. | |
| Obsoletes: 3010 C. Beame | | Obsoletes: 3010 C. Beame | |
|
| Document: draft-ietf-nfsv4-rfc3010bis-04.txt Hummingbird Ltd. | | Document: draft-ietf-nfsv4-rfc3010bis-05.txt Hummingbird Ltd. | |
| B. Callaghan | | B. Callaghan | |
| Sun Microsystems, Inc. | | Sun Microsystems, Inc. | |
| M. Eisler | | M. Eisler | |
| Network Appliance, Inc. | | Network Appliance, Inc. | |
| D. Noveck | | D. Noveck | |
| Network Appliance, Inc. | | Network Appliance, Inc. | |
| D. Robinson | | D. Robinson | |
| Sun Microsystems, Inc. | | Sun Microsystems, Inc. | |
| R. Thurlow | | R. Thurlow | |
| Sun Microsystems, Inc. | | Sun Microsystems, Inc. | |
|
| October 2002 | | November 2002 | |
| | | | |
| NFS version 4 Protocol | | NFS version 4 Protocol | |
| | | | |
| Status of this Memo | | Status of this Memo | |
| | | | |
| This document is an Internet-Draft and is in full conformance with | | This document is an Internet-Draft and is in full conformance with | |
| all provisions of Section 10 of RFC2026. | | all provisions of Section 10 of RFC2026. | |
| | | | |
| Internet-Drafts are working documents of the Internet Engineering | | Internet-Drafts are working documents of the Internet Engineering | |
| Task Force (IETF), its areas, and its working groups. Note that | | Task Force (IETF), its areas, and its working groups. Note that | |
| | | | |
| skipping to change at page 2, line 5 | | skipping to change at page 2, line 5 | |
| http://www.ietf.org/ietf/1id-abstracts.txt | | http://www.ietf.org/ietf/1id-abstracts.txt | |
| | | | |
| The list of Internet-Draft Shadow Directories can be accessed at | | The list of Internet-Draft Shadow Directories can be accessed at | |
| http://www.ietf.org/shadow.html. | | http://www.ietf.org/shadow.html. | |
| | | | |
| Abstract | | Abstract | |
| | | | |
| This document replaces [RFC3010] as the definition of the NFS version | | This document replaces [RFC3010] as the definition of the NFS version | |
| 4 protocol. | | 4 protocol. | |
| | | | |
|
| Draft Specification NFS version 4 Protocol October 2002 | | Draft Specification NFS version 4 Protocol November 2002 | |
| | | | |
| NFS version 4 is a distributed filesystem protocol which owes | | NFS version 4 is a distributed filesystem protocol which owes | |
| heritage to NFS protocol versions 2 [RFC1094] and 3 [RFC1813]. | | heritage to NFS protocol versions 2 [RFC1094] and 3 [RFC1813]. | |
| Unlike earlier versions, the NFS version 4 protocol supports | | Unlike earlier versions, the NFS version 4 protocol supports | |
| traditional file access while integrating support for file locking | | traditional file access while integrating support for file locking | |
| and the mount protocol. In addition, support for strong security | | and the mount protocol. In addition, support for strong security | |
| (and its negotiation), compound operations, client caching, and | | (and its negotiation), compound operations, client caching, and | |
| internationalization have been added. Of course, attention has been | | internationalization have been added. Of course, attention has been | |
| applied to making NFS version 4 operate well in an Internet | | applied to making NFS version 4 operate well in an Internet | |
| environment. | | environment. | |
| | | | |
| skipping to change at page 3, line 5 | | skipping to change at page 3, line 5 | |
| Copyright | | Copyright | |
| | | | |
| Copyright (C) The Internet Society (2000-2002). All Rights Reserved. | | Copyright (C) The Internet Society (2000-2002). All Rights Reserved. | |
| | | | |
| Key Words | | Key Words | |
| | | | |
| The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", | | The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", | |
| "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this | | "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this | |
| document are to be interpreted as described in [RFC2119]. | | document are to be interpreted as described in [RFC2119]. | |
| | | | |
|
| Draft Specification NFS version 4 Protocol October 2002 | | Draft Specification NFS version 4 Protocol November 2002 | |
| | | | |
| Table of Contents | | Table of Contents | |
| | | | |
|
| 1. Changes since RFC3010 . . . . . . . . . . . . . . . . . . . . 7 | | 1. Changes since RFC3010 . . . . . . . . . . . . . . . . . . . . 8 | |
| 1.1. Introduction . . . . . . . . . . . . . . . . . . . . . . . 8 | | 1.1. Introduction . . . . . . . . . . . . . . . . . . . . . . . 9 | |
| 1.2. Inconsistencies of this Document with Section 18 . . . . . 8 | | 1.2. Inconsistencies of this Document with Section 18 . . . . . 9 | |
| 1.3. Overview of NFS version 4 Features . . . . . . . . . . . . 9 | | 1.3. Overview of NFS version 4 Features . . . . . . . . . . . 10 | |
| 1.3.1. RPC and Security . . . . . . . . . . . . . . . . . . . . 9 | | 1.3.1. RPC and Security . . . . . . . . . . . . . . . . . . . 10 | |
| 1.3.2. Procedure and Operation Structure . . . . . . . . . . . . 9 | | 1.3.2. Procedure and Operation Structure . . . . . . . . . . . 10 | |
| 1.3.3. Filesystem Model . . . . . . . . . . . . . . . . . . . 10 | | 1.3.3. Filesystem Model . . . . . . . . . . . . . . . . . . . 11 | |
| 1.3.3.1. Filehandle Types . . . . . . . . . . . . . . . . . . 10 | | 1.3.3.1. Filehandle Types . . . . . . . . . . . . . . . . . . 11 | |
| 1.3.3.2. Attribute Types . . . . . . . . . . . . . . . . . . . 11 | | 1.3.3.2. Attribute Types . . . . . . . . . . . . . . . . . . . 12 | |
| 1.3.3.3. Filesystem Replication and Migration . . . . . . . . 11 | | 1.3.3.3. Filesystem Replication and Migration . . . . . . . . 12 | |
| 1.3.4. OPEN and CLOSE . . . . . . . . . . . . . . . . . . . . 12 | | 1.3.4. OPEN and CLOSE . . . . . . . . . . . . . . . . . . . . 13 | |
| 1.3.5. File locking . . . . . . . . . . . . . . . . . . . . . 12 | | 1.3.5. File locking . . . . . . . . . . . . . . . . . . . . . 13 | |
| 1.3.6. Client Caching and Delegation . . . . . . . . . . . . . 12 | | 1.3.6. Client Caching and Delegation . . . . . . . . . . . . . 13 | |
| 1.4. General Definitions . . . . . . . . . . . . . . . . . . . 13 | | 1.4. General Definitions . . . . . . . . . . . . . . . . . . . 14 | |
| 2. Protocol Data Types . . . . . . . . . . . . . . . . . . . . 15 | | 2. Protocol Data Types . . . . . . . . . . . . . . . . . . . . 16 | |
| 2.1. Basic Data Types . . . . . . . . . . . . . . . . . . . . 15 | | 2.1. Basic Data Types . . . . . . . . . . . . . . . . . . . . 16 | |
| 2.2. Structured Data Types . . . . . . . . . . . . . . . . . . 16 | | 2.2. Structured Data Types . . . . . . . . . . . . . . . . . . 17 | |
| 3. RPC and Security Flavor . . . . . . . . . . . . . . . . . . 22 | | 3. RPC and Security Flavor . . . . . . . . . . . . . . . . . . 23 | |
| 3.1. Ports and Transports . . . . . . . . . . . . . . . . . . 22 | | 3.1. Ports and Transports . . . . . . . . . . . . . . . . . . 23 | |
| 3.1.1. Client Retransmission Behavior . . . . . . . . . . . . 22 | | 3.1.1. Client Retransmission Behavior . . . . . . . . . . . . 24 | |
| 3.2. Security Flavors . . . . . . . . . . . . . . . . . . . . 23 | | 3.2. Security Flavors . . . . . . . . . . . . . . . . . . . . 24 | |
| 3.2.1. Security mechanisms for NFS version 4 . . . . . . . . . 23 | | 3.2.1. Security mechanisms for NFS version 4 . . . . . . . . . 24 | |
| 3.2.1.1. Kerberos V5 as a security triple . . . . . . . . . . 23 | | 3.2.1.1. Kerberos V5 as a security triple . . . . . . . . . . 25 | |
| 3.2.1.2. LIPKEY as a security triple . . . . . . . . . . . . . 24 | | 3.2.1.2. LIPKEY as a security triple . . . . . . . . . . . . . 25 | |
| 3.2.1.3. SPKM-3 as a security triple . . . . . . . . . . . . . 25 | | 3.2.1.3. SPKM-3 as a security triple . . . . . . . . . . . . . 26 | |
| 3.3. Security Negotiation . . . . . . . . . . . . . . . . . . 25 | | 3.3. Security Negotiation . . . . . . . . . . . . . . . . . . 27 | |
| 3.3.1. SECINFO . . . . . . . . . . . . . . . . . . . . . . . . 25 | | 3.3.1. SECINFO . . . . . . . . . . . . . . . . . . . . . . . . 27 | |
| 3.3.2. Security Error . . . . . . . . . . . . . . . . . . . . 26 | | 3.3.2. Security Error . . . . . . . . . . . . . . . . . . . . 27 | |
| 3.4. Callback RPC Authentication . . . . . . . . . . . . . . . 26 | | 3.4. Callback RPC Authentication . . . . . . . . . . . . . . . 28 | |
| 4. Filehandles . . . . . . . . . . . . . . . . . . . . . . . . 28 | | 4. Filehandles . . . . . . . . . . . . . . . . . . . . . . . . 30 | |
| 4.1. Obtaining the First Filehandle . . . . . . . . . . . . . 28 | | 4.1. Obtaining the First Filehandle . . . . . . . . . . . . . 30 | |
| 4.1.1. Root Filehandle . . . . . . . . . . . . . . . . . . . . 28 | | 4.1.1. Root Filehandle . . . . . . . . . . . . . . . . . . . . 30 | |
| 4.1.2. Public Filehandle . . . . . . . . . . . . . . . . . . . 28 | | 4.1.2. Public Filehandle . . . . . . . . . . . . . . . . . . . 30 | |
| 4.2. Filehandle Types . . . . . . . . . . . . . . . . . . . . 29 | | 4.2. Filehandle Types . . . . . . . . . . . . . . . . . . . . 31 | |
| 4.2.1. General Properties of a Filehandle . . . . . . . . . . 29 | | 4.2.1. General Properties of a Filehandle . . . . . . . . . . 31 | |
| 4.2.2. Persistent Filehandle . . . . . . . . . . . . . . . . . 30 | | 4.2.2. Persistent Filehandle . . . . . . . . . . . . . . . . . 32 | |
| 4.2.3. Volatile Filehandle . . . . . . . . . . . . . . . . . . 30 | | 4.2.3. Volatile Filehandle . . . . . . . . . . . . . . . . . . 32 | |
| 4.2.4. One Method of Constructing a Volatile Filehandle . . . 31 | | 4.2.4. One Method of Constructing a Volatile Filehandle . . . 33 | |
| 4.3. Client Recovery from Filehandle Expiration . . . . . . . 32 | | 4.3. Client Recovery from Filehandle Expiration . . . . . . . 34 | |
| 5. File Attributes . . . . . . . . . . . . . . . . . . . . . . 34 | | 5. File Attributes . . . . . . . . . . . . . . . . . . . . . . 36 | |
| 5.1. Mandatory Attributes . . . . . . . . . . . . . . . . . . 35 | | 5.1. Mandatory Attributes . . . . . . . . . . . . . . . . . . 37 | |
| 5.2. Recommended Attributes . . . . . . . . . . . . . . . . . 35 | | 5.2. Recommended Attributes . . . . . . . . . . . . . . . . . 37 | |
| 5.3. Named Attributes . . . . . . . . . . . . . . . . . . . . 35 | | 5.3. Named Attributes . . . . . . . . . . . . . . . . . . . . 37 | |
| 5.4. Classification of Attributes . . . . . . . . . . . . . . 36 | | 5.4. Classification of Attributes . . . . . . . . . . . . . . 38 | |
| 5.5. Mandatory Attributes - Definitions . . . . . . . . . . . 38 | | 5.5. Mandatory Attributes - Definitions . . . . . . . . . . . 40 | |
| 5.6. Recommended Attributes - Definitions . . . . . . . . . . 40 | | 5.6. Recommended Attributes - Definitions . . . . . . . . . . 42 | |
| 5.7. Time Access . . . . . . . . . . . . . . . . . . . . . . . 45 | | 5.7. Time Access . . . . . . . . . . . . . . . . . . . . . . . 47 | |
| 5.8. Interpreting owner and owner_group . . . . . . . . . . . 45 | | 5.8. Interpreting owner and owner_group . . . . . . . . . . . 47 | |
| 5.9. Character Case Attributes . . . . . . . . . . . . . . . . 47 | | 5.9. Character Case Attributes . . . . . . . . . . . . . . . . 49 | |
| 5.10. Quota Attributes . . . . . . . . . . . . . . . . . . . . 47 | | 5.10. Quota Attributes . . . . . . . . . . . . . . . . . . . . 49 | |
| | | | |
|
| Draft Specification NFS version 4 Protocol October 2002 | | Draft Specification NFS version 4 Protocol November 2002 | |
| | | | |
|
| 5.11. Access Control Lists . . . . . . . . . . . . . . . . . . 48 | | 5.11. Access Control Lists . . . . . . . . . . . . . . . . . . 50 | |
| 5.11.1. ACE type . . . . . . . . . . . . . . . . . . . . . . . 49 | | 5.11.1. ACE type . . . . . . . . . . . . . . . . . . . . . . . 51 | |
| 5.11.2. ACE Access Mask . . . . . . . . . . . . . . . . . . . 50 | | 5.11.2. ACE Access Mask . . . . . . . . . . . . . . . . . . . 52 | |
| 5.11.3. ACE flag . . . . . . . . . . . . . . . . . . . . . . . 52 | | 5.11.3. ACE flag . . . . . . . . . . . . . . . . . . . . . . . 54 | |
| 5.11.4. ACE who . . . . . . . . . . . . . . . . . . . . . . . 53 | | 5.11.4. ACE who . . . . . . . . . . . . . . . . . . . . . . . 56 | |
| 5.11.5. Mode Attribute . . . . . . . . . . . . . . . . . . . . 54 | | 5.11.5. Mode Attribute . . . . . . . . . . . . . . . . . . . . 56 | |
| 5.11.6. Mode and ACL Attribute . . . . . . . . . . . . . . . . 55 | | 5.11.6. Mode and ACL Attribute . . . . . . . . . . . . . . . . 57 | |
| 5.11.7. mounted_on_fileid . . . . . . . . . . . . . . . . . . 55 | | 5.11.7. mounted_on_fileid . . . . . . . . . . . . . . . . . . 57 | |
| 6. Filesystem Migration and Replication . . . . . . . . . . . 57 | | 6. Filesystem Migration and Replication . . . . . . . . . . . 59 | |
| 6.1. Replication . . . . . . . . . . . . . . . . . . . . . . . 57 | | 6.1. Replication . . . . . . . . . . . . . . . . . . . . . . . 59 | |
| 6.2. Migration . . . . . . . . . . . . . . . . . . . . . . . . 57 | | 6.2. Migration . . . . . . . . . . . . . . . . . . . . . . . . 59 | |
| 6.3. Interpretation of the fs_locations Attribute . . . . . . 58 | | 6.3. Interpretation of the fs_locations Attribute . . . . . . 60 | |
| 6.4. Filehandle Recovery for Migration or Replication . . . . 59 | | 6.4. Filehandle Recovery for Migration or Replication . . . . 61 | |
| 7. NFS Server Name Space . . . . . . . . . . . . . . . . . . . 60 | | 7. NFS Server Name Space . . . . . . . . . . . . . . . . . . . 62 | |
| 7.1. Server Exports . . . . . . . . . . . . . . . . . . . . . 60 | | 7.1. Server Exports . . . . . . . . . . . . . . . . . . . . . 62 | |
| 7.2. Browsing Exports . . . . . . . . . . . . . . . . . . . . 60 | | 7.2. Browsing Exports . . . . . . . . . . . . . . . . . . . . 62 | |
| 7.3. Server Pseudo Filesystem . . . . . . . . . . . . . . . . 60 | | 7.3. Server Pseudo Filesystem . . . . . . . . . . . . . . . . 62 | |
| 7.4. Multiple Roots . . . . . . . . . . . . . . . . . . . . . 61 | | 7.4. Multiple Roots . . . . . . . . . . . . . . . . . . . . . 63 | |
| 7.5. Filehandle Volatility . . . . . . . . . . . . . . . . . . 61 | | 7.5. Filehandle Volatility . . . . . . . . . . . . . . . . . . 63 | |
| 7.6. Exported Root . . . . . . . . . . . . . . . . . . . . . . 61 | | 7.6. Exported Root . . . . . . . . . . . . . . . . . . . . . . 63 | |
| 7.7. Mount Point Crossing . . . . . . . . . . . . . . . . . . 62 | | 7.7. Mount Point Crossing . . . . . . . . . . . . . . . . . . 64 | |
| 7.8. Security Policy and Name Space Presentation . . . . . . . 62 | | 7.8. Security Policy and Name Space Presentation . . . . . . . 64 | |
| 8. File Locking and Share Reservations . . . . . . . . . . . . 64 | | 8. File Locking and Share Reservations . . . . . . . . . . . . 66 | |
| 8.1. Locking . . . . . . . . . . . . . . . . . . . . . . . . . 64 | | 8.1. Locking . . . . . . . . . . . . . . . . . . . . . . . . . 66 | |
| 8.1.1. Client ID . . . . . . . . . . . . . . . . . . . . . . . 64 | | 8.1.1. Client ID . . . . . . . . . . . . . . . . . . . . . . . 66 | |
| 8.1.2. Server Release of Clientid . . . . . . . . . . . . . . 67 | | 8.1.2. Server Release of Clientid . . . . . . . . . . . . . . 69 | |
| 8.1.3. lock_owner and stateid Definition . . . . . . . . . . . 68 | | 8.1.3. lock_owner and stateid Definition . . . . . . . . . . . 70 | |
| 8.1.4. Use of the stateid and Locking . . . . . . . . . . . . 69 | | 8.1.4. Use of the stateid and Locking . . . . . . . . . . . . 71 | |
| 8.1.5. Sequencing of Lock Requests . . . . . . . . . . . . . . 71 | | 8.1.5. Sequencing of Lock Requests . . . . . . . . . . . . . . 73 | |
| 8.1.6. Recovery from Replayed Requests . . . . . . . . . . . . 72 | | 8.1.6. Recovery from Replayed Requests . . . . . . . . . . . . 74 | |
| 8.1.7. Releasing lock_owner State . . . . . . . . . . . . . . 73 | | 8.1.7. Releasing lock_owner State . . . . . . . . . . . . . . 75 | |
| 8.1.8. Use of Open Confirmation . . . . . . . . . . . . . . . 73 | | 8.1.8. Use of Open Confirmation . . . . . . . . . . . . . . . 75 | |
| 8.2. Lock Ranges . . . . . . . . . . . . . . . . . . . . . . . 74 | | 8.2. Lock Ranges . . . . . . . . . . . . . . . . . . . . . . . 76 | |
| 8.3. Upgrading and Downgrading Locks . . . . . . . . . . . . . 74 | | 8.3. Upgrading and Downgrading Locks . . . . . . . . . . . . . 76 | |
| 8.4. Blocking Locks . . . . . . . . . . . . . . . . . . . . . 75 | | 8.4. Blocking Locks . . . . . . . . . . . . . . . . . . . . . 77 | |
| 8.5. Lease Renewal . . . . . . . . . . . . . . . . . . . . . . 75 | | 8.5. Lease Renewal . . . . . . . . . . . . . . . . . . . . . . 77 | |
| 8.6. Crash Recovery . . . . . . . . . . . . . . . . . . . . . 76 | | 8.6. Crash Recovery . . . . . . . . . . . . . . . . . . . . . 78 | |
| 8.6.1. Client Failure and Recovery . . . . . . . . . . . . . . 77 | | 8.6.1. Client Failure and Recovery . . . . . . . . . . . . . . 79 | |
| 8.6.2. Server Failure and Recovery . . . . . . . . . . . . . . 77 | | 8.6.2. Server Failure and Recovery . . . . . . . . . . . . . . 79 | |
| 8.6.3. Network Partitions and Recovery . . . . . . . . . . . . 79 | | 8.6.3. Network Partitions and Recovery . . . . . . . . . . . . 81 | |
| 8.7. Recovery from a Lock Request Timeout or Abort . . . . . . 82 | | 8.7. Recovery from a Lock Request Timeout or Abort . . . . . . 84 | |
| 8.8. Server Revocation of Locks . . . . . . . . . . . . . . . 83 | | 8.8. Server Revocation of Locks . . . . . . . . . . . . . . . 85 | |
| 8.9. Share Reservations . . . . . . . . . . . . . . . . . . . 84 | | 8.9. Share Reservations . . . . . . . . . . . . . . . . . . . 86 | |
| 8.10. OPEN/CLOSE Operations . . . . . . . . . . . . . . . . . 84 | | 8.10. OPEN/CLOSE Operations . . . . . . . . . . . . . . . . . 86 | |
| 8.10.1. Close and Retention of State Information . . . . . . . 85 | | 8.10.1. Close and Retention of State Information . . . . . . . 87 | |
| 8.11. Open Upgrade and Downgrade . . . . . . . . . . . . . . . 86 | | 8.11. Open Upgrade and Downgrade . . . . . . . . . . . . . . . 88 | |
| 8.12. Short and Long Leases . . . . . . . . . . . . . . . . . 86 | | 8.12. Short and Long Leases . . . . . . . . . . . . . . . . . 88 | |
| 8.13. Clocks, Propagation Delay, and Calculating Lease | | 8.13. Clocks, Propagation Delay, and Calculating Lease | |
|
| Expiration . . . . . . . . . . . . . . . . . . . . . . . 87 | | Expiration . . . . . . . . . . . . . . . . . . . . . . . 89 | |
| 8.14. Migration, Replication and State . . . . . . . . . . . . 87 | | 8.14. Migration, Replication and State . . . . . . . . . . . . 89 | |
| 8.14.1. Migration and State . . . . . . . . . . . . . . . . . 88 | | 8.14.1. Migration and State . . . . . . . . . . . . . . . . . 90 | |
| 8.14.2. Replication and State . . . . . . . . . . . . . . . . 88 | | 8.14.2. Replication and State . . . . . . . . . . . . . . . . 90 | |
| | | | |
|
| Draft Specification NFS version 4 Protocol October 2002 | | Draft Specification NFS version 4 Protocol November 2002 | |
| | | | |
|
| 8.14.3. Notification of Migrated Lease . . . . . . . . . . . . 89 | | 8.14.3. Notification of Migrated Lease . . . . . . . . . . . . 91 | |
| 8.14.4. Migration and the Lease_time Attribute . . . . . . . . 89 | | 8.14.4. Migration and the Lease_time Attribute . . . . . . . . 91 | |
| 9. Client-Side Caching . . . . . . . . . . . . . . . . . . . . 91 | | 9. Client-Side Caching . . . . . . . . . . . . . . . . . . . . 93 | |
| 9.1. Performance Challenges for Client-Side Caching . . . . . 91 | | 9.1. Performance Challenges for Client-Side Caching . . . . . 93 | |
| 9.2. Delegation and Callbacks . . . . . . . . . . . . . . . . 92 | | 9.2. Delegation and Callbacks . . . . . . . . . . . . . . . . 94 | |
| 9.2.1. Delegation Recovery . . . . . . . . . . . . . . . . . . 93 | | 9.2.1. Delegation Recovery . . . . . . . . . . . . . . . . . . 95 | |
| 9.3. Data Caching . . . . . . . . . . . . . . . . . . . . . . 95 | | 9.3. Data Caching . . . . . . . . . . . . . . . . . . . . . . 97 | |
| 9.3.1. Data Caching and OPENs . . . . . . . . . . . . . . . . 95 | | 9.3.1. Data Caching and OPENs . . . . . . . . . . . . . . . . 97 | |
| 9.3.2. Data Caching and File Locking . . . . . . . . . . . . . 96 | | 9.3.2. Data Caching and File Locking . . . . . . . . . . . . . 98 | |
| 9.3.3. Data Caching and Mandatory File Locking . . . . . . . . 98 | | 9.3.3. Data Caching and Mandatory File Locking . . . . . . . . 100 | |
| 9.3.4. Data Caching and File Identity . . . . . . . . . . . . 98 | | 9.3.4. Data Caching and File Identity . . . . . . . . . . . . 100 | |
| 9.4. Open Delegation . . . . . . . . . . . . . . . . . . . . . 99 | | 9.4. Open Delegation . . . . . . . . . . . . . . . . . . . . . 101 | |
| 9.4.1. Open Delegation and Data Caching . . . . . . . . . . . 102 | | 9.4.1. Open Delegation and Data Caching . . . . . . . . . . . 104 | |
| 9.4.2. Open Delegation and File Locks . . . . . . . . . . . . 103 | | 9.4.2. Open Delegation and File Locks . . . . . . . . . . . . 105 | |
| 9.4.3. Handling of CB_GETATTR . . . . . . . . . . . . . . . . 103 | | 9.4.3. Handling of CB_GETATTR . . . . . . . . . . . . . . . . 105 | |
| 9.4.4. Recall of Open Delegation . . . . . . . . . . . . . . . 106 | | 9.4.4. Recall of Open Delegation . . . . . . . . . . . . . . . 108 | |
| 9.4.5. Clients that Fail to Honor Delegation Recalls . . . . . 108 | | 9.4.5. Clients that Fail to Honor Delegation Recalls . . . . . 110 | |
| 9.4.6. Delegation Revocation . . . . . . . . . . . . . . . . . 108 | | 9.4.6. Delegation Revocation . . . . . . . . . . . . . . . . . 110 | |
| 9.5. Data Caching and Revocation . . . . . . . . . . . . . . . 109 | | 9.5. Data Caching and Revocation . . . . . . . . . . . . . . . 111 | |
| 9.5.1. Revocation Recovery for Write Open Delegation . . . . . 109 | | 9.5.1. Revocation Recovery for Write Open Delegation . . . . . 111 | |
| 9.6. Attribute Caching . . . . . . . . . . . . . . . . . . . . 110 | | 9.6. Attribute Caching . . . . . . . . . . . . . . . . . . . . 112 | |
| 9.7. Data and Metadata Caching and Memory Mapped Files . . . . 112 | | 9.7. Data and Metadata Caching and Memory Mapped Files . . . . 114 | |
| 9.8. Name Caching . . . . . . . . . . . . . . . . . . . . . . 114 | | 9.8. Name Caching . . . . . . . . . . . . . . . . . . . . . . 116 | |
| 9.9. Directory Caching . . . . . . . . . . . . . . . . . . . . 115 | | 9.9. Directory Caching . . . . . . . . . . . . . . . . . . . . 117 | |
| 10. Minor Versioning . . . . . . . . . . . . . . . . . . . . . 117 | | 10. Minor Versioning . . . . . . . . . . . . . . . . . . . . . 119 | |
| 11. Internationalization . . . . . . . . . . . . . . . . . . . 120 | | 11. Internationalization . . . . . . . . . . . . . . . . . . . 122 | |
| 11.1. Universal Versus Local Character Sets . . . . . . . . . 120 | | 11.1. Stringprep profile for the utf8str_cs type . . . . . . . 123 | |
| 11.2. Overview of Universal Character Set Standards . . . . . 121 | | 11.1.1. Intended applicability of the nfs4_cs_prep profile . . 123 | |
| 11.3. Difficulties with UCS-4, UCS-2, Unicode . . . . . . . . 122 | | 11.1.2. Character repertoire of nfs4_cs_prep . . . . . . . . . 123 | |
| 11.4. UTF-8 and its solutions . . . . . . . . . . . . . . . . 122 | | 11.1.3. Mapping used by nfs4_cs_prep . . . . . . . . . . . . . 123 | |
| 11.5. Normalization . . . . . . . . . . . . . . . . . . . . . 123 | | 11.1.4. Normalization used by nfs4_cs_prep . . . . . . . . . . 124 | |
| 11.6. UTF-8 Related Errors . . . . . . . . . . . . . . . . . . 123 | | 11.1.5. Prohibited output for nfs4_cs_prep . . . . . . . . . . 124 | |
| 12. Error Definitions . . . . . . . . . . . . . . . . . . . . 125 | | 11.1.6. Bidirectional output for nfs4_cs_prep . . . . . . . . 124 | |
| 13. NFS version 4 Requests . . . . . . . . . . . . . . . . . . 131 | | 11.2. Stringprep profile for the utf8str_cis type . . . . . . 124 | |
| 13.1. Compound Procedure . . . . . . . . . . . . . . . . . . . 131 | | 11.2.1. Intended applicability of the nfs4_cis_prep profile . 124 | |
| 13.2. Evaluation of a Compound Request . . . . . . . . . . . . 132 | | 11.2.2. Character repertoire of nfs4_cis_prep . . . . . . . . 124 | |
| 13.3. Synchronous Modifying Operations . . . . . . . . . . . . 132 | | 11.2.3. Mapping used by nfs4_cis_prep . . . . . . . . . . . . 124 | |
| 13.4. Operation Values . . . . . . . . . . . . . . . . . . . . 133 | | 11.2.4. Normalization used by nfs4_cis_prep . . . . . . . . . 125 | |
| 14. NFS version 4 Procedures . . . . . . . . . . . . . . . . . 134 | | 11.2.5. Prohibited output for nfs4_cis_prep . . . . . . . . . 125 | |
| 14.1. Procedure 0: NULL - No Operation . . . . . . . . . . . . 134 | | 11.2.6. Bidirectional output for nfs4_cis_prep . . . . . . . . 125 | |
| 14.2. Procedure 1: COMPOUND - Compound Operations . . . . . . 135 | | 11.3. Stringprep profile for the utf8str_mixed type . . . . . 125 | |
| 14.2.1. Operation 3: ACCESS - Check Access Rights . . . . . . 138 | | 11.3.1. Intended applicability of the nfs4_mixed_prep profile 125 | |
| 14.2.2. Operation 4: CLOSE - Close File . . . . . . . . . . . 141 | | 11.3.2. Character repertoire of nfs4_mixed_prep . . . . . . . 125 | |
| 14.2.3. Operation 5: COMMIT - Commit Cached Data . . . . . . . 143 | | 11.3.3. Mapping used by nfs4_cis_prep . . . . . . . . . . . . 125 | |
| 14.2.4. Operation 6: CREATE - Create a Non-Regular File Object 146 | | 11.3.4. Normalization used by nfs4_mixed_prep . . . . . . . . 126 | |
| 14.2.5. Operation 7: DELEGPURGE - Purge Delegations Awaiting | | 11.3.5. Prohibited output for nfs4_mixed_prep . . . . . . . . 126 | |
| Recovery . . . . . . . . . . . . . . . . . . . . . . . 149 | | 11.3.6. Bidirectional output for nfs4_mixed_prep . . . . . . . 126 | |
| 14.2.6. Operation 8: DELEGRETURN - Return Delegation . . . . . 151 | | 11.4. UTF-8 Related Errors . . . . . . . . . . . . . . . . . . 126 | |
| 14.2.7. Operation 9: GETATTR - Get Attributes . . . . . . . . 152 | | 12. Error Definitions . . . . . . . . . . . . . . . . . . . . 127 | |
| 14.2.8. Operation 10: GETFH - Get Current Filehandle . . . . . 154 | | 13. NFS version 4 Requests . . . . . . . . . . . . . . . . . . 133 | |
| 14.2.9. Operation 11: LINK - Create Link to a File . . . . . . 156 | | 13.1. Compound Procedure . . . . . . . . . . . . . . . . . . . 133 | |
| 14.2.10. Operation 12: LOCK - Create Lock . . . . . . . . . . 158 | | 13.2. Evaluation of a Compound Request . . . . . . . . . . . . 134 | |
| | | | |
|
| Draft Specification NFS version 4 Protocol October 2002 | | Draft Specification NFS version 4 Protocol November 2002 | |
| | | | |
|
| 14.2.11. Operation 13: LOCKT - Test For Lock . . . . . . . . . 162 | | 13.3. Synchronous Modifying Operations . . . . . . . . . . . . 134 | |
| 14.2.12. Operation 14: LOCKU - Unlock File . . . . . . . . . . 164 | | 13.4. Operation Values . . . . . . . . . . . . . . . . . . . . 135 | |
| 14.2.13. Operation 15: LOOKUP - Lookup Filename . . . . . . . 166 | | 14. NFS version 4 Procedures . . . . . . . . . . . . . . . . . 136 | |
| 14.2.14. Operation 16: LOOKUPP - Lookup Parent Directory . . . 169 | | 14.1. Procedure 0: NULL - No Operation . . . . . . . . . . . . 136 | |
| | | 14.2. Procedure 1: COMPOUND - Compound Operations . . . . . . 137 | |
| | | 14.2.1. Operation 3: ACCESS - Check Access Rights . . . . . . 140 | |
| | | 14.2.2. Operation 4: CLOSE - Close File . . . . . . . . . . . 143 | |
| | | 14.2.3. Operation 5: COMMIT - Commit Cached Data . . . . . . . 145 | |
| | | 14.2.4. Operation 6: CREATE - Create a Non-Regular File Object 148 | |
| | | 14.2.5. Operation 7: DELEGPURGE - Purge Delegations Awaiting | |
| | | Recovery . . . . . . . . . . . . . . . . . . . . . . . 151 | |
| | | 14.2.6. Operation 8: DELEGRETURN - Return Delegation . . . . . 153 | |
| | | 14.2.7. Operation 9: GETATTR - Get Attributes . . . . . . . . 154 | |
| | | 14.2.8. Operation 10: GETFH - Get Current Filehandle . . . . . 156 | |
| | | 14.2.9. Operation 11: LINK - Create Link to a File . . . . . . 158 | |
| | | 14.2.10. Operation 12: LOCK - Create Lock . . . . . . . . . . 160 | |
| | | 14.2.11. Operation 13: LOCKT - Test For Lock . . . . . . . . . 164 | |
| | | 14.2.12. Operation 14: LOCKU - Unlock File . . . . . . . . . . 166 | |
| | | 14.2.13. Operation 15: LOOKUP - Lookup Filename . . . . . . . 168 | |
| | | 14.2.14. Operation 16: LOOKUPP - Lookup Parent Directory . . . 171 | |
| 14.2.15. Operation 17: NVERIFY - Verify Difference in | | 14.2.15. Operation 17: NVERIFY - Verify Difference in | |
|
| Attributes . . . . . . . . . . . . . . . . . . . . . 170 | | Attributes . . . . . . . . . . . . . . . . . . . . . 172 | |
| 14.2.16. Operation 18: OPEN - Open a Regular File . . . . . . 172 | | 14.2.16. Operation 18: OPEN - Open a Regular File . . . . . . 174 | |
| 14.2.17. Operation 19: OPENATTR - Open Named Attribute | | 14.2.17. Operation 19: OPENATTR - Open Named Attribute | |
|
| Directory . . . . . . . . . . . . . . . . . . . . . . 182 | | Directory . . . . . . . . . . . . . . . . . . . . . . 184 | |
| 14.2.18. Operation 20: OPEN_CONFIRM - Confirm Open . . . . . . 184 | | 14.2.18. Operation 20: OPEN_CONFIRM - Confirm Open . . . . . . 186 | |
| 14.2.19. Operation 21: OPEN_DOWNGRADE - Reduce Open File Access 187 | | 14.2.19. Operation 21: OPEN_DOWNGRADE - Reduce Open File Access 189 | |
| 14.2.20. Operation 22: PUTFH - Set Current Filehandle . . . . 189 | | 14.2.20. Operation 22: PUTFH - Set Current Filehandle . . . . 191 | |
| 14.2.21. Operation 23: PUTPUBFH - Set Public Filehandle . . . 190 | | 14.2.21. Operation 23: PUTPUBFH - Set Public Filehandle . . . 192 | |
| 14.2.22. Operation 24: PUTROOTFH - Set Root Filehandle . . . . 192 | | 14.2.22. Operation 24: PUTROOTFH - Set Root Filehandle . . . . 194 | |
| 14.2.23. Operation 25: READ - Read from File . . . . . . . . . 193 | | 14.2.23. Operation 25: READ - Read from File . . . . . . . . . 195 | |
| 14.2.24. Operation 26: READDIR - Read Directory . . . . . . . 196 | | 14.2.24. Operation 26: READDIR - Read Directory . . . . . . . 198 | |
| 14.2.25. Operation 27: READLINK - Read Symbolic Link . . . . . 200 | | 14.2.25. Operation 27: READLINK - Read Symbolic Link . . . . . 202 | |
| 14.2.26. Operation 28: REMOVE - Remove Filesystem Object . . . 202 | | 14.2.26. Operation 28: REMOVE - Remove Filesystem Object . . . 204 | |
| 14.2.27. Operation 29: RENAME - Rename Directory Entry . . . . 205 | | 14.2.27. Operation 29: RENAME - Rename Directory Entry . . . . 207 | |
| 14.2.28. Operation 30: RENEW - Renew a Lease . . . . . . . . . 208 | | 14.2.28. Operation 30: RENEW - Renew a Lease . . . . . . . . . 210 | |
| 14.2.29. Operation 31: RESTOREFH - Restore Saved Filehandle . 210 | | 14.2.29. Operation 31: RESTOREFH - Restore Saved Filehandle . 212 | |
| 14.2.30. Operation 32: SAVEFH - Save Current Filehandle . . . 212 | | 14.2.30. Operation 32: SAVEFH - Save Current Filehandle . . . 214 | |
| 14.2.31. Operation 33: SECINFO - Obtain Available Security . . 213 | | 14.2.31. Operation 33: SECINFO - Obtain Available Security . . 215 | |
| 14.2.32. Operation 34: SETATTR - Set Attributes . . . . . . . 217 | | 14.2.32. Operation 34: SETATTR - Set Attributes . . . . . . . 219 | |
| 14.2.33. Operation 35: SETCLIENTID - Negotiate Clientid . . . 220 | | 14.2.33. Operation 35: SETCLIENTID - Negotiate Clientid . . . 222 | |
| 14.2.34. Operation 36: SETCLIENTID_CONFIRM - Confirm Clientid 224 | | 14.2.34. Operation 36: SETCLIENTID_CONFIRM - Confirm Clientid 226 | |
| 14.2.35. Operation 37: VERIFY - Verify Same Attributes . . . . 228 | | 14.2.35. Operation 37: VERIFY - Verify Same Attributes . . . . 230 | |
| 14.2.36. Operation 38: WRITE - Write to File . . . . . . . . . 230 | | 14.2.36. Operation 38: WRITE - Write to File . . . . . . . . . 232 | |
| 14.2.37. Operation 39: RELEASE_LOCKOWNER - Release Lockowner | | 14.2.37. Operation 39: RELEASE_LOCKOWNER - Release Lockowner | |
|
| State . . . . . . . . . . . . . . . . . . . . . . . . 235 | | State . . . . . . . . . . . . . . . . . . . . . . . . 237 | |
| 14.2.38. Operation 10044: ILLEGAL - Illegal operation . . . . 237 | | 14.2.38. Operation 10044: ILLEGAL - Illegal operation . . . . 239 | |
| 15. NFS version 4 Callback Procedures . . . . . . . . . . . . 238 | | 15. NFS version 4 Callback Procedures . . . . . . . . . . . . 240 | |
| 15.1. Procedure 0: CB_NULL - No Operation . . . . . . . . . . 238 | | 15.1. Procedure 0: CB_NULL - No Operation . . . . . . . . . . 240 | |
| 15.2. Procedure 1: CB_COMPOUND - Compound Operations . . . . . 239 | | 15.2. Procedure 1: CB_COMPOUND - Compound Operations . . . . . 241 | |
| 15.2.1. Operation 3: CB_GETATTR - Get Attributes . . . . . . . 241 | | 15.2.1. Operation 3: CB_GETATTR - Get Attributes . . . . . . . 243 | |
| 15.2.2. Operation 4: CB_RECALL - Recall an Open Delegation . . 243 | | 15.2.2. Operation 4: CB_RECALL - Recall an Open Delegation . . 245 | |
| | | | |
| | | Draft Specification NFS version 4 Protocol November 2002 | |
| | | | |
| 15.2.3. Operation 10044: CB_ILLEGAL - Illegal Callback | | 15.2.3. Operation 10044: CB_ILLEGAL - Illegal Callback | |
|
| Operation . . . . . . . . . . . . . . . . . . . . . . 245 | | Operation . . . . . . . . . . . . . . . . . . . . . . 247 | |
| 16. Security Considerations . . . . . . . . . . . . . . . . . 246 | | 16. Security Considerations . . . . . . . . . . . . . . . . . 248 | |
| 17. IANA Considerations . . . . . . . . . . . . . . . . . . . 247 | | 17. IANA Considerations . . . . . . . . . . . . . . . . . . . 250 | |
| 17.1. Named Attribute Definition . . . . . . . . . . . . . . . 247 | | 17.1. Named Attribute Definition . . . . . . . . . . . . . . . 250 | |
| 17.2. ONC RPC Network Identifiers (netids) . . . . . . . . . . 247 | | 17.2. ONC RPC Network Identifiers (netids) . . . . . . . . . . 250 | |
| 18. RPC definition file . . . . . . . . . . . . . . . . . . . 248 | | 18. RPC definition file . . . . . . . . . . . . . . . . . . . 252 | |
| 19. Normative References . . . . . . . . . . . . . . . . . . . 280 | | 19. Normative References . . . . . . . . . . . . . . . . . . . 284 | |
| 20. Informative References . . . . . . . . . . . . . . . . . . 281 | | 20. Informative References . . . . . . . . . . . . . . . . . . 285 | |
| 21. Authors . . . . . . . . . . . . . . . . . . . . . . . . . 285 | | 21. Authors . . . . . . . . . . . . . . . . . . . . . . . . . 289 | |
| 21.1. Editor's Address . . . . . . . . . . . . . . . . . . . . 285 | | 21.1. Editor's Address . . . . . . . . . . . . . . . . . . . . 289 | |
| 21.2. Authors' Addresses . . . . . . . . . . . . . . . . . . . 285 | | 21.2. Authors' Addresses . . . . . . . . . . . . . . . . . . . 289 | |
| 21.3. Acknowledgements . . . . . . . . . . . . . . . . . . . . 286 | | 21.3. Acknowledgements . . . . . . . . . . . . . . . . . . . . 290 | |
| 22. Full Copyright Statement . . . . . . . . . . . . . . . . . 287 | | 22. Full Copyright Statement . . . . . . . . . . . . . . . . . 291 | |
| | | | |
|
| Draft Specification NFS version 4 Protocol October 2002 | | Draft Specification NFS version 4 Protocol November 2002 | |
| | | | |
| 1. Changes since RFC3010 | | 1. Changes since RFC3010 | |
| | | | |
| This definition of the NFS version 4 protocol replaces or obsoletes | | This definition of the NFS version 4 protocol replaces or obsoletes | |
| the definition present in [RFC3010]. While portions of the two | | the definition present in [RFC3010]. While portions of the two | |
| documents have remained the same, there have been substantive changes | | documents have remained the same, there have been substantive changes | |
| in others. The changes made between [RFC3010] and this document | | in others. The changes made between [RFC3010] and this document | |
| represent implementation experience and further review of the | | represent implementation experience and further review of the | |
| protocol. While some modifications were made for ease of | | protocol. While some modifications were made for ease of | |
| implementation or clarification, most updates represent errors or | | implementation or clarification, most updates represent errors or | |
| | | | |
| skipping to change at page 8, line 5 | | skipping to change at page 9, line 5 | |
| server that a lock_owner4 will no longer be used by the client. | | server that a lock_owner4 will no longer be used by the client. | |
| | | | |
| o RENEW operation changes to identify the client correctly and | | o RENEW operation changes to identify the client correctly and | |
| allow for additional error returns. | | allow for additional error returns. | |
| | | | |
| o Verify error return possibilities for all operations. | | o Verify error return possibilities for all operations. | |
| | | | |
| o Remove use of the pathname4 data type from LOOKUP and OPEN in | | o Remove use of the pathname4 data type from LOOKUP and OPEN in | |
| favor of having the client construct a sequence of LOOKUP | | favor of having the client construct a sequence of LOOKUP | |
| | | | |
|
| Draft Specification NFS version 4 Protocol October 2002 | | Draft Specification NFS version 4 Protocol November 2002 | |
| | | | |
| operations to acheive the same effect. | | operations to acheive the same effect. | |
| | | | |
|
| | | o Clarification of the internationalization issues and adoption of | |
| | | the new stringprep profile framework. | |
| | | | |
| 1.1. Introduction | | 1.1. Introduction | |
| | | | |
| The NFS version 4 protocol is a further revision of the NFS protocol | | The NFS version 4 protocol is a further revision of the NFS protocol | |
| defined already by versions 2 [RFC1094] and 3 [RFC1813]. It retains | | defined already by versions 2 [RFC1094] and 3 [RFC1813]. It retains | |
| the essential characteristics of previous versions: design for easy | | the essential characteristics of previous versions: design for easy | |
| recovery, independent of transport protocols, operating systems and | | recovery, independent of transport protocols, operating systems and | |
| filesystems, simplicity, and good performance. The NFS version 4 | | filesystems, simplicity, and good performance. The NFS version 4 | |
| revision has the following goals: | | revision has the following goals: | |
| | | | |
| o Improved access and good performance on the Internet. | | o Improved access and good performance on the Internet. | |
| | | | |
| skipping to change at page 8, line 50 | | skipping to change at page 10, line 4 | |
| The protocol is designed to accept standard extensions that do | | The protocol is designed to accept standard extensions that do | |
| not compromise backward compatibility. | | not compromise backward compatibility. | |
| | | | |
| 1.2. Inconsistencies of this Document with Section 18 | | 1.2. Inconsistencies of this Document with Section 18 | |
| | | | |
| Section 18, RPC Definition File, contains the definitions in XDR | | Section 18, RPC Definition File, contains the definitions in XDR | |
| description language of the constructs used by the protocol. Prior | | description language of the constructs used by the protocol. Prior | |
| to Section 18, several of the constructs are reproduced for purposes | | to Section 18, several of the constructs are reproduced for purposes | |
| of explanation. The reader is warned of the possibility of errors in | | of explanation. The reader is warned of the possibility of errors in | |
| the reproduced constructs outside of Section 18. For any part of the | | the reproduced constructs outside of Section 18. For any part of the | |
|
| | | | |
| | | Draft Specification NFS version 4 Protocol November 2002 | |
| | | | |
| document that is inconsistent with Section 18, Section 18 is to be | | document that is inconsistent with Section 18, Section 18 is to be | |
| considered authoritative. | | considered authoritative. | |
| | | | |
|
| Draft Specification NFS version 4 Protocol October 2002 | | | |
| | | | |
| 1.3. Overview of NFS version 4 Features | | 1.3. Overview of NFS version 4 Features | |
| | | | |
| To provide a reasonable context for the reader, the major features of | | To provide a reasonable context for the reader, the major features of | |
| NFS version 4 protocol will be reviewed in brief. This will be done | | NFS version 4 protocol will be reviewed in brief. This will be done | |
| to provide an appropriate context for both the reader who is familiar | | to provide an appropriate context for both the reader who is familiar | |
| with the previous versions of the NFS protocol and the reader that is | | with the previous versions of the NFS protocol and the reader that is | |
| new to the NFS protocols. For the reader new to the NFS protocols, | | new to the NFS protocols. For the reader new to the NFS protocols, | |
| there is still a fundamental knowledge that is expected. The reader | | there is still a fundamental knowledge that is expected. The reader | |
| should be familiar with the XDR and RPC protocols as described in | | should be familiar with the XDR and RPC protocols as described in | |
| [RFC1831] and [RFC1832]. A basic knowledge of filesystems and | | [RFC1831] and [RFC1832]. A basic knowledge of filesystems and | |
| | | | |
| skipping to change at page 9, line 53 | | skipping to change at page 11, line 4 | |
| 1.3.2. Procedure and Operation Structure | | 1.3.2. Procedure and Operation Structure | |
| | | | |
| A significant departure from the previous versions of the NFS | | A significant departure from the previous versions of the NFS | |
| protocol is the introduction of the COMPOUND procedure. For the NFS | | protocol is the introduction of the COMPOUND procedure. For the NFS | |
| version 4 protocol, there are two RPC procedures, NULL and COMPOUND. | | version 4 protocol, there are two RPC procedures, NULL and COMPOUND. | |
| The COMPOUND procedure is defined in terms of operations and these | | The COMPOUND procedure is defined in terms of operations and these | |
| operations correspond more closely to the traditional NFS procedures. | | operations correspond more closely to the traditional NFS procedures. | |
| With the use of the COMPOUND procedure, the client is able to build | | With the use of the COMPOUND procedure, the client is able to build | |
| simple or complex requests. These COMPOUND requests allow for a | | simple or complex requests. These COMPOUND requests allow for a | |
| reduction in the number of RPCs needed for logical filesystem | | reduction in the number of RPCs needed for logical filesystem | |
|
| | | | |
| | | Draft Specification NFS version 4 Protocol November 2002 | |
| | | | |
| operations. For example, without previous contact with a server a | | operations. For example, without previous contact with a server a | |
| client will be able to read data from a file in one request by | | client will be able to read data from a file in one request by | |
| combining LOOKUP, OPEN, and READ operations in a single COMPOUND RPC. | | combining LOOKUP, OPEN, and READ operations in a single COMPOUND RPC. | |
| With previous versions of the NFS protocol, this type of single | | With previous versions of the NFS protocol, this type of single | |
|
| | | | |
| Draft Specification NFS version 4 Protocol October 2002 | | | |
| | | | |
| request was not possible. | | request was not possible. | |
| | | | |
| The model used for COMPOUND is very simple. There is no logical OR | | The model used for COMPOUND is very simple. There is no logical OR | |
| or ANDing of operations. The operations combined within a COMPOUND | | or ANDing of operations. The operations combined within a COMPOUND | |
| request are evaluated in order by the server. Once an operation | | request are evaluated in order by the server. Once an operation | |
| returns a failing result, the evaluation ends and the results of all | | returns a failing result, the evaluation ends and the results of all | |
| evaluated operations are returned to the client. | | evaluated operations are returned to the client. | |
| | | | |
| The NFS version 4 protocol continues to have the client refer to a | | The NFS version 4 protocol continues to have the client refer to a | |
| file or directory at the server by a "filehandle". The COMPOUND | | file or directory at the server by a "filehandle". The COMPOUND | |
| | | | |
| skipping to change at page 10, line 53 | | skipping to change at page 12, line 4 | |
| | | | |
| In previous versions of the NFS protocol, the filehandle provided by | | In previous versions of the NFS protocol, the filehandle provided by | |
| the server was guaranteed to be valid or persistent for the lifetime | | the server was guaranteed to be valid or persistent for the lifetime | |
| of the filesystem object to which it referred. For some server | | of the filesystem object to which it referred. For some server | |
| implementations, this persistence requirement has been difficult to | | implementations, this persistence requirement has been difficult to | |
| meet. For the NFS version 4 protocol, this requirement has been | | meet. For the NFS version 4 protocol, this requirement has been | |
| relaxed by introducing another type of filehandle, volatile. With | | relaxed by introducing another type of filehandle, volatile. With | |
| persistent and volatile filehandle types, the server implementation | | persistent and volatile filehandle types, the server implementation | |
| can match the abilities of the filesystem at the server along with | | can match the abilities of the filesystem at the server along with | |
| the operating environment. The client will have knowledge of the | | the operating environment. The client will have knowledge of the | |
|
| | | | |
| | | Draft Specification NFS version 4 Protocol November 2002 | |
| | | | |
| type of filehandle being provided by the server and can be prepared | | type of filehandle being provided by the server and can be prepared | |
| to deal with the semantics of each. | | to deal with the semantics of each. | |
| | | | |
|
| Draft Specification NFS version 4 Protocol October 2002 | | | |
| | | | |
| 1.3.3.2. Attribute Types | | 1.3.3.2. Attribute Types | |
| | | | |
| The NFS version 4 protocol introduces three classes of filesystem or | | The NFS version 4 protocol introduces three classes of filesystem or | |
| file attributes. Like the additional filehandle type, the | | file attributes. Like the additional filehandle type, the | |
| classification of file attributes has been done to ease server | | classification of file attributes has been done to ease server | |
| implementations along with extending the overall functionality of the | | implementations along with extending the overall functionality of the | |
| NFS protocol. This attribute model is structured to be extensible | | NFS protocol. This attribute model is structured to be extensible | |
| such that new attributes can be introduced in minor revisions of the | | such that new attributes can be introduced in minor revisions of the | |
| protocol without requiring significant rework. | | protocol without requiring significant rework. | |
| | | | |
| | | | |
| skipping to change at page 11, line 54 | | skipping to change at page 13, line 4 | |
| | | | |
| With the use of a special file attribute, the ability to migrate or | | With the use of a special file attribute, the ability to migrate or | |
| replicate server filesystems is enabled within the protocol. The | | replicate server filesystems is enabled within the protocol. The | |
| filesystem locations attribute provides a method for the client to | | filesystem locations attribute provides a method for the client to | |
| probe the server about the location of a filesystem. In the event of | | probe the server about the location of a filesystem. In the event of | |
| a migration of a filesystem, the client will receive an error when | | a migration of a filesystem, the client will receive an error when | |
| operating on the filesystem and it can then query as to the new file | | operating on the filesystem and it can then query as to the new file | |
| system location. Similar steps are used for replication, the client | | system location. Similar steps are used for replication, the client | |
| is able to query the server for the multiple available locations of a | | is able to query the server for the multiple available locations of a | |
| particular filesystem. From this information, the client can use its | | particular filesystem. From this information, the client can use its | |
|
| own policies to access the appropriate filesystem location. | | | |
| | | | |
|
| Draft Specification NFS version 4 Protocol October 2002 | | Draft Specification NFS version 4 Protocol November 2002 | |
| | | | |
| | | own policies to access the appropriate filesystem location. | |
| | | | |
| 1.3.4. OPEN and CLOSE | | 1.3.4. OPEN and CLOSE | |
| | | | |
| The NFS version 4 protocol introduces OPEN and CLOSE operations. The | | The NFS version 4 protocol introduces OPEN and CLOSE operations. The | |
| OPEN operation provides a single point where file lookup, creation, | | OPEN operation provides a single point where file lookup, creation, | |
| and share semantics can be combined. The CLOSE operation also | | and share semantics can be combined. The CLOSE operation also | |
| provides for the release of state accumulated by OPEN. | | provides for the release of state accumulated by OPEN. | |
| | | | |
| 1.3.5. File locking | | 1.3.5. File locking | |
| | | | |
| | | | |
| skipping to change at page 12, line 54 | | skipping to change at page 14, line 4 | |
| | | | |
| The major addition to NFS version 4 in the area of caching is the | | The major addition to NFS version 4 in the area of caching is the | |
| ability of the server to delegate certain responsibilities to the | | ability of the server to delegate certain responsibilities to the | |
| client. When the server grants a delegation for a file to a client, | | client. When the server grants a delegation for a file to a client, | |
| the client is guaranteed certain semantics with respect to the | | the client is guaranteed certain semantics with respect to the | |
| sharing of that file with other clients. At OPEN, the server may | | sharing of that file with other clients. At OPEN, the server may | |
| provide the client either a read or write delegation for the file. | | provide the client either a read or write delegation for the file. | |
| If the client is granted a read delegation, it is assured that no | | If the client is granted a read delegation, it is assured that no | |
| other client has the ability to write to the file for the duration of | | other client has the ability to write to the file for the duration of | |
| the delegation. If the client is granted a write delegation, the | | the delegation. If the client is granted a write delegation, the | |
|
| | | | |
| | | Draft Specification NFS version 4 Protocol November 2002 | |
| | | | |
| client is assured that no other client has read or write access to | | client is assured that no other client has read or write access to | |
| the file. | | the file. | |
| | | | |
|
| Draft Specification NFS version 4 Protocol October 2002 | | | |
| | | | |
| Delegations can be recalled by the server. If another client | | Delegations can be recalled by the server. If another client | |
| requests access to the file in such a way that the access conflicts | | requests access to the file in such a way that the access conflicts | |
| with the granted delegation, the server is able to notify the initial | | with the granted delegation, the server is able to notify the initial | |
| client and recall the delegation. This requires that a callback path | | client and recall the delegation. This requires that a callback path | |
| exist between the server and client. If this callback path does not | | exist between the server and client. If this callback path does not | |
| exist, then delegations can not be granted. The essence of a | | exist, then delegations can not be granted. The essence of a | |
| delegation is that it allows the client to locally service operations | | delegation is that it allows the client to locally service operations | |
| such as OPEN, CLOSE, LOCK, LOCKU, READ, WRITE without immediate | | such as OPEN, CLOSE, LOCK, LOCKU, READ, WRITE without immediate | |
| interaction with the server. | | interaction with the server. | |
| | | | |
| | | | |
| skipping to change at page 13, line 55 | | skipping to change at page 15, line 5 | |
| | | | |
| All leases granted by a server have the same fixed | | All leases granted by a server have the same fixed | |
| interval. Note that the fixed interval was chosen to | | interval. Note that the fixed interval was chosen to | |
| alleviate the expense a server would have in maintaining | | alleviate the expense a server would have in maintaining | |
| state about variable length leases across server failures. | | state about variable length leases across server failures. | |
| | | | |
| Lock The term "lock" is used to refer to both record (byte- | | Lock The term "lock" is used to refer to both record (byte- | |
| range) locks as well as share reservations unless | | range) locks as well as share reservations unless | |
| specifically stated otherwise. | | specifically stated otherwise. | |
| | | | |
|
| | | Draft Specification NFS version 4 Protocol November 2002 | |
| | | | |
| Server The "Server" is the entity responsible for coordinating | | Server The "Server" is the entity responsible for coordinating | |
| client access to a set of filesystems. | | client access to a set of filesystems. | |
| | | | |
|
| Draft Specification NFS version 4 Protocol October 2002 | | | |
| | | | |
| Stable Storage | | Stable Storage | |
| NFS version 4 servers must be able to recover without data | | NFS version 4 servers must be able to recover without data | |
| loss from multiple power failures (including cascading | | loss from multiple power failures (including cascading | |
| power failures, that is, several power failures in quick | | power failures, that is, several power failures in quick | |
| succession), operating system failures, and hardware | | succession), operating system failures, and hardware | |
| failure of components other than the storage medium itself | | failure of components other than the storage medium itself | |
| (for example, disk, nonvolatile RAM). | | (for example, disk, nonvolatile RAM). | |
| | | | |
| Some examples of stable storage that are allowable for an | | Some examples of stable storage that are allowable for an | |
| NFS server include: | | NFS server include: | |
| | | | |
| skipping to change at page 15, line 5 | | skipping to change at page 16, line 5 | |
| defines the open and locking state provided by the server | | defines the open and locking state provided by the server | |
| for a specific open or lock owner for a specific file. | | for a specific open or lock owner for a specific file. | |
| | | | |
| Stateids composed of all bits 0 or all bits 1 have special | | Stateids composed of all bits 0 or all bits 1 have special | |
| meaning and are reserved values. | | meaning and are reserved values. | |
| | | | |
| Verifier A 64-bit quantity generated by the client that the server | | Verifier A 64-bit quantity generated by the client that the server | |
| can use to determine if the client has restarted and lost | | can use to determine if the client has restarted and lost | |
| all previous lock state. | | all previous lock state. | |
| | | | |
|
| Draft Specification NFS version 4 Protocol October 2002 | | Draft Specification NFS version 4 Protocol November 2002 | |
| | | | |
| 2. Protocol Data Types | | 2. Protocol Data Types | |
| | | | |
| The syntax and semantics to describe the data types of the NFS | | The syntax and semantics to describe the data types of the NFS | |
| version 4 protocol are defined in the XDR [RFC1832] and RPC [RFC1831] | | version 4 protocol are defined in the XDR [RFC1832] and RPC [RFC1831] | |
| documents. The next sections build upon the XDR data types to define | | documents. The next sections build upon the XDR data types to define | |
| types and structures specific to this protocol. | | types and structures specific to this protocol. | |
| | | | |
| 2.1. Basic Data Types | | 2.1. Basic Data Types | |
| | | | |
| Data Type Definition | | Data Type Definition | |
|
| _____________________________________________________________________ | | ____________________________________________________________________ | |
| int32_t typedef int int32_t; | | int32_t typedef int int32_t; | |
| | | | |
| uint32_t typedef unsigned int uint32_t; | | uint32_t typedef unsigned int uint32_t; | |
| | | | |
| int64_t typedef hyper int64_t; | | int64_t typedef hyper int64_t; | |
| | | | |
| uint64_t typedef unsigned hyper uint64_t; | | uint64_t typedef unsigned hyper uint64_t; | |
| | | | |
| attrlist4 typedef opaque attrlist4<>; | | attrlist4 typedef opaque attrlist4<>; | |
| Used for file/directory attributes | | Used for file/directory attributes | |
| | | | |
| bitmap4 typedef uint32_t bitmap4<>; | | bitmap4 typedef uint32_t bitmap4<>; | |
| Used in attribute array encoding. | | Used in attribute array encoding. | |
| | | | |
| changeid4 typedef uint64_t changeid4; | | changeid4 typedef uint64_t changeid4; | |
| Used in definition of change_info | | Used in definition of change_info | |
| | | | |
| clientid4 typedef uint64_t clientid4; | | clientid4 typedef uint64_t clientid4; | |
| Shorthand reference to client identification | | Shorthand reference to client identification | |
| | | | |
|
| component4 typedef utf8string component4; | | component4 typedef utf8str_cs component4; | |
| Represents path name components | | Represents path name components | |
| | | | |
| count4 typedef uint32_t count4; | | count4 typedef uint32_t count4; | |
| Various count parameters (READ, WRITE, COMMIT) | | Various count parameters (READ, WRITE, COMMIT) | |
| | | | |
| length4 typedef uint64_t length4; | | length4 typedef uint64_t length4; | |
| Describes LOCK lengths | | Describes LOCK lengths | |
| | | | |
|
| linktext4 typedef utf8string linktext4; | | linktext4 typedef utf8str_cs linktext4; | |
| Symbolic link contents | | Symbolic link contents | |
| | | | |
| mode4 typedef uint32_t mode4; | | mode4 typedef uint32_t mode4; | |
| Mode attribute data type | | Mode attribute data type | |
| | | | |
| nfs_cookie4 typedef uint64_t nfs_cookie4; | | nfs_cookie4 typedef uint64_t nfs_cookie4; | |
| Opaque cookie value for READDIR | | Opaque cookie value for READDIR | |
| | | | |
| nfs_fh4 typedef opaque nfs_fh4<NFS4_FHSIZE>; | | nfs_fh4 typedef opaque nfs_fh4<NFS4_FHSIZE>; | |
| Filehandle definition; NFS4_FHSIZE is defined as 128 | | Filehandle definition; NFS4_FHSIZE is defined as 128 | |
| | | | |
|
| Draft Specification NFS version 4 Protocol October 2002 | | Draft Specification NFS version 4 Protocol November 2002 | |
| | | | |
| nfs_ftype4 enum nfs_ftype4; | | nfs_ftype4 enum nfs_ftype4; | |
| Various defined file types | | Various defined file types | |
| | | | |
| nfsstat4 enum nfsstat4; | | nfsstat4 enum nfsstat4; | |
| Return value for operations | | Return value for operations | |
| | | | |
| offset4 typedef uint64_t offset4; | | offset4 typedef uint64_t offset4; | |
|
| Various offset designations (READ, WRITE, LOCK, COMMIT) | | Various offset designations (READ, WRITE, | |
| | | LOCK, COMMIT) | |
| | | | |
| pathname4 typedef component4 pathname4<>; | | pathname4 typedef component4 pathname4<>; | |
| Represents path name for LOOKUP, OPEN and others | | Represents path name for LOOKUP, OPEN and others | |
| | | | |
| qop4 typedef uint32_t qop4; | | qop4 typedef uint32_t qop4; | |
| Quality of protection designation in SECINFO | | Quality of protection designation in SECINFO | |
| | | | |
| sec_oid4 typedef opaque sec_oid4<>; | | sec_oid4 typedef opaque sec_oid4<>; | |
| Security Object Identifier | | Security Object Identifier | |
| The sec_oid4 data type is not really opaque. | | The sec_oid4 data type is not really opaque. | |
| Instead contains an ASN.1 OBJECT IDENTIFIER as used | | Instead contains an ASN.1 OBJECT IDENTIFIER as used | |
| by GSS-API in the mech_type argument to | | by GSS-API in the mech_type argument to | |
| GSS_Init_sec_context. See [RFC2743] for details. | | GSS_Init_sec_context. See [RFC2743] for details. | |
| | | | |
| seqid4 typedef uint32_t seqid4; | | seqid4 typedef uint32_t seqid4; | |
| Sequence identifier used for file locking | | Sequence identifier used for file locking | |
| | | | |
| utf8string typedef opaque utf8string<>; | | utf8string typedef opaque utf8string<>; | |
| UTF-8 encoding for strings | | UTF-8 encoding for strings | |
| | | | |
|
| | | utf8str_cis typedef opaque utf8str_cis<>; | |
| | | Case-insensitive UTF-8 string | |
| | | | |
| | | utf8str_cs typedef opaque utf8str_cs<>; | |
| | | Case-sensitive UTF-8 string | |
| | | | |
| | | utf8str_mixed typedef opaque utf8str_mixed<>; | |
| | | UTF-8 strings with a case sensitive prefix and | |
| | | a case insensitive suffix. | |
| | | | |
| verifier4 typedef opaque verifier4[NFS4_VERIFIER_SIZE]; | | verifier4 typedef opaque verifier4[NFS4_VERIFIER_SIZE]; | |
|
| Verifier used for various operations (COMMIT, CREATE, | | Verifier used for various operations (COMMIT, | |
| OPEN, READDIR, SETCLIENTID, SETCLIENTID_CONFIRM, WRITE) | | CREATE, OPEN, READDIR, SETCLIENTID, | |
| NFS4_VERIFIER_SIZE is defined as 8. | | SETCLIENTID_CONFIRM, WRITE) NFS4_VERIFIER_SIZE is | |
| | | defined as 8. | |
| | | | |
| 2.2. Structured Data Types | | 2.2. Structured Data Types | |
| | | | |
| nfstime4 | | nfstime4 | |
| struct nfstime4 { | | struct nfstime4 { | |
|
| | | | |
| | | Draft Specification NFS version 4 Protocol November 2002 | |
| | | | |
| int64_t seconds; | | int64_t seconds; | |
| uint32_t nseconds; | | uint32_t nseconds; | |
| } | | } | |
| | | | |
| The nfstime4 structure gives the number of seconds and | | The nfstime4 structure gives the number of seconds and | |
| nanoseconds since midnight or 0 hour January 1, 1970 Coordinated | | nanoseconds since midnight or 0 hour January 1, 1970 Coordinated | |
| Universal Time (UTC). Values greater than zero for the seconds | | Universal Time (UTC). Values greater than zero for the seconds | |
| field denote dates after the 0 hour January 1, 1970. Values | | field denote dates after the 0 hour January 1, 1970. Values | |
| less than zero for the seconds field denote dates before the 0 | | less than zero for the seconds field denote dates before the 0 | |
| hour January 1, 1970. In both cases, the nseconds field is to | | hour January 1, 1970. In both cases, the nseconds field is to | |
| be added to the seconds field for the final time representation. | | be added to the seconds field for the final time representation. | |
| For example, if the time to be represented is one-half second | | For example, if the time to be represented is one-half second | |
|
| | | | |
| Draft Specification NFS version 4 Protocol October 2002 | | | |
| | | | |
| before 0 hour January 1, 1970, the seconds field would have a | | before 0 hour January 1, 1970, the seconds field would have a | |
| value of negative one (-1) and the nseconds fields would have a | | value of negative one (-1) and the nseconds fields would have a | |
| value of one-half second (500000000). Values greater than | | value of one-half second (500000000). Values greater than | |
| 999,999,999 for nseconds are considered invalid. | | 999,999,999 for nseconds are considered invalid. | |
| | | | |
| This data type is used to pass time and date information. A | | This data type is used to pass time and date information. A | |
| server converts to and from its local representation of time | | server converts to and from its local representation of time | |
| when processing time values, preserving as much accuracy as | | when processing time values, preserving as much accuracy as | |
| possible. If the precision of timestamps stored for a filesystem | | possible. If the precision of timestamps stored for a filesystem | |
| object is less than defined, loss of precision can occur. An | | object is less than defined, loss of precision can occur. An | |
| | | | |
| skipping to change at page 17, line 44 | | skipping to change at page 19, line 4 | |
| }; | | }; | |
| | | | |
| The above definitions are used as the attribute definitions to | | The above definitions are used as the attribute definitions to | |
| set time values. If set_it is SET_TO_SERVER_TIME4, then the | | set time values. If set_it is SET_TO_SERVER_TIME4, then the | |
| server uses its local representation of time for the time value. | | server uses its local representation of time for the time value. | |
| | | | |
| specdata4 | | specdata4 | |
| | | | |
| struct specdata4 { | | struct specdata4 { | |
| uint32_t specdata1; /* major device number */ | | uint32_t specdata1; /* major device number */ | |
|
| | | | |
| | | Draft Specification NFS version 4 Protocol November 2002 | |
| | | | |
| uint32_t specdata2; /* minor device number */ | | uint32_t specdata2; /* minor device number */ | |
| }; | | }; | |
| | | | |
| This data type represents additional information for the device | | This data type represents additional information for the device | |
| file types NF4CHR and NF4BLK. | | file types NF4CHR and NF4BLK. | |
| | | | |
| fsid4 | | fsid4 | |
| | | | |
| struct fsid4 { | | struct fsid4 { | |
| uint64_t major; | | uint64_t major; | |
| uint64_t minor; | | uint64_t minor; | |
|
| | | | |
| Draft Specification NFS version 4 Protocol October 2002 | | | |
| | | | |
| }; | | }; | |
| | | | |
| This type is the filesystem identifier that is used as a | | This type is the filesystem identifier that is used as a | |
| mandatory attribute. | | mandatory attribute. | |
| | | | |
| fs_location4 | | fs_location4 | |
| | | | |
| struct fs_location4 { | | struct fs_location4 { | |
|
| utf8string server<>; | | utf8str_cis server<>; | |
| pathname4 rootpath; | | pathname4 rootpath; | |
| }; | | }; | |
| | | | |
| fs_locations4 | | fs_locations4 | |
| | | | |
| struct fs_locations4 { | | struct fs_locations4 { | |
| pathname4 fs_root; | | pathname4 fs_root; | |
| fs_location4 locations<>; | | fs_location4 locations<>; | |
| }; | | }; | |
| | | | |
| | | | |
| skipping to change at page 18, line 45 | | skipping to change at page 20, line 5 | |
| }; | | }; | |
| | | | |
| The fattr4 structure is used to represent file and directory | | The fattr4 structure is used to represent file and directory | |
| attributes. | | attributes. | |
| | | | |
| The bitmap is a counted array of 32 bit integers used to contain | | The bitmap is a counted array of 32 bit integers used to contain | |
| bit values. The position of the integer in the array that | | bit values. The position of the integer in the array that | |
| contains bit n can be computed from the expression (n / 32) and | | contains bit n can be computed from the expression (n / 32) and | |
| its bit within that integer is (n mod 32). | | its bit within that integer is (n mod 32). | |
| | | | |
|
| | | Draft Specification NFS version 4 Protocol November 2002 | |
| | | | |
| 0 1 | | 0 1 | |
| +-----------+-----------+-----------+-- | | +-----------+-----------+-----------+-- | |
| | count | 31 .. 0 | 63 .. 32 | | | | count | 31 .. 0 | 63 .. 32 | | |
| +-----------+-----------+-----------+-- | | +-----------+-----------+-----------+-- | |
| | | | |
| change_info4 | | change_info4 | |
| | | | |
| struct change_info4 { | | struct change_info4 { | |
| bool atomic; | | bool atomic; | |
| changeid4 before; | | changeid4 before; | |
|
| | | | |
| Draft Specification NFS version 4 Protocol October 2002 | | | |
| | | | |
| changeid4 after; | | changeid4 after; | |
| }; | | }; | |
| | | | |
| This structure is used with the CREATE, LINK, REMOVE, RENAME | | This structure is used with the CREATE, LINK, REMOVE, RENAME | |
| operations to let the client know the value of the change | | operations to let the client know the value of the change | |
| attribute for the directory in which the target filesystem | | attribute for the directory in which the target filesystem | |
| object resides. | | object resides. | |
| | | | |
| clientaddr4 | | clientaddr4 | |
| | | | |
| | | | |
| skipping to change at page 19, line 47 | | skipping to change at page 21, line 4 | |
| Assuming big-endian ordering, h1, h2, h3, and h4, are | | Assuming big-endian ordering, h1, h2, h3, and h4, are | |
| respectively, the first through fourth octets each converted to | | respectively, the first through fourth octets each converted to | |
| ASCII-decimal. Assuming big-endian ordering, p1 and p2 are, | | ASCII-decimal. Assuming big-endian ordering, p1 and p2 are, | |
| respectively, the first and second octets each converted to | | respectively, the first and second octets each converted to | |
| ASCII-decimal. For example, if a host, in big-endian order, has | | ASCII-decimal. For example, if a host, in big-endian order, has | |
| an address of 0x0A010307 and there is a service listening on, in | | an address of 0x0A010307 and there is a service listening on, in | |
| big endian order, port 0x020F (decimal 527), then complete | | big endian order, port 0x020F (decimal 527), then complete | |
| universal address is "10.1.3.7.2.15". | | universal address is "10.1.3.7.2.15". | |
| | | | |
| For TCP over IPv4 the value of r_netid is the string "tcp". For | | For TCP over IPv4 the value of r_netid is the string "tcp". For | |
|
| | | | |
| | | Draft Specification NFS version 4 Protocol November 2002 | |
| | | | |
| UDP over IPv4 the value of r_netid is the string "udp". | | UDP over IPv4 the value of r_netid is the string "udp". | |
| | | | |
|
| For TCP over IPv4 and for UDP over IPv6, the format of r_addr is | | For TCP over IPv6 and for UDP over IPv6, the format of r_addr is | |
| the US-ASCII string: | | the US-ASCII string: | |
| | | | |
| x1:x2:x3:x4:x5:x6:x7:x8.p1.p2 | | x1:x2:x3:x4:x5:x6:x7:x8.p1.p2 | |
| | | | |
| The suffix "p1.p2" is the service port, and is computed the same | | The suffix "p1.p2" is the service port, and is computed the same | |
| way as with universal addresses for TCP and UDP over IPv4. The | | way as with universal addresses for TCP and UDP over IPv4. The | |
| prefix, "x1:x2:x3:x4:x5:x6:x7:x8", is the standard textual form | | prefix, "x1:x2:x3:x4:x5:x6:x7:x8", is the standard textual form | |
| for representing an IPv6 address as defined in Section 2.2 of | | for representing an IPv6 address as defined in Section 2.2 of | |
|
| | | | |
| Draft Specification NFS version 4 Protocol October 2002 | | | |
| | | | |
| [RFC1884]. Additionally, the two alternative forms specified in | | [RFC1884]. Additionally, the two alternative forms specified in | |
| Section 2.2 of [RFC1884] are also acceptable. | | Section 2.2 of [RFC1884] are also acceptable. | |
| | | | |
| For TCP over IPv6 the value of r_netid is the string "tcp6". | | For TCP over IPv6 the value of r_netid is the string "tcp6". | |
| For UDP over IPv6 the value of r_netid is the string "udp6". | | For UDP over IPv6 the value of r_netid is the string "udp6". | |
| | | | |
| cb_client4 | | cb_client4 | |
| | | | |
| struct cb_client4 { | | struct cb_client4 { | |
| unsigned int cb_program; | | unsigned int cb_program; | |
| | | | |
| skipping to change at page 20, line 44 | | skipping to change at page 22, line 5 | |
| open_owner4 | | open_owner4 | |
| | | | |
| struct open_owner4 { | | struct open_owner4 { | |
| clientid4 clientid; | | clientid4 clientid; | |
| opaque owner<NFS4_OPAQUE_LIMIT>; | | opaque owner<NFS4_OPAQUE_LIMIT>; | |
| }; | | }; | |
| | | | |
| This structure is used to identify the owner of open state. | | This structure is used to identify the owner of open state. | |
| NFS4_OPAQUE_LIMIT is defined as 1024. | | NFS4_OPAQUE_LIMIT is defined as 1024. | |
| | | | |
|
| | | Draft Specification NFS version 4 Protocol November 2002 | |
| | | | |
| lock_owner4 | | lock_owner4 | |
| | | | |
| struct lock_owner4 { | | struct lock_owner4 { | |
| clientid4 clientid; | | clientid4 clientid; | |
| opaque owner<NFS4_OPAQUE_LIMIT>; | | opaque owner<NFS4_OPAQUE_LIMIT>; | |
| }; | | }; | |
| | | | |
| This structure is used to identify the owner of file locking | | This structure is used to identify the owner of file locking | |
| state. NFS4_OPAQUE_LIMIT is defined as 1024. | | state. NFS4_OPAQUE_LIMIT is defined as 1024. | |
| | | | |
|
| Draft Specification NFS version 4 Protocol October 2002 | | | |
| | | | |
| open_to_lock_owner4 | | open_to_lock_owner4 | |
| | | | |
| struct open_to_lock_owner4 { | | struct open_to_lock_owner4 { | |
| seqid4 open_seqid; | | seqid4 open_seqid; | |
| stateid4 open_stateid; | | stateid4 open_stateid; | |
| seqid4 lock_seqid; | | seqid4 lock_seqid; | |
| lock_owner4 lock_owner; | | lock_owner4 lock_owner; | |
| }; | | }; | |
| | | | |
| This structure is used for the first LOCK operation done for an | | This structure is used for the first LOCK operation done for an | |
| | | | |
| skipping to change at page 22, line 5 | | skipping to change at page 23, line 5 | |
| | | | |
| This structure is used for the various state sharing mechanisms | | This structure is used for the various state sharing mechanisms | |
| between the client and server. For the client, this data | | between the client and server. For the client, this data | |
| structure is read-only. The starting value of the seqid field | | structure is read-only. The starting value of the seqid field | |
| is undefined. The server is required to increment the seqid | | is undefined. The server is required to increment the seqid | |
| field monotonically at each transition of the stateid. This is | | field monotonically at each transition of the stateid. This is | |
| important since the client will inspect the seqid in OPEN | | important since the client will inspect the seqid in OPEN | |
| stateids to determine the order of OPEN processing done by the | | stateids to determine the order of OPEN processing done by the | |
| server. | | server. | |
| | | | |
|
| Draft Specification NFS version 4 Protocol October 2002 | | Draft Specification NFS version 4 Protocol November 2002 | |
| | | | |
| 3. RPC and Security Flavor | | 3. RPC and Security Flavor | |
| | | | |
| The NFS version 4 protocol is a Remote Procedure Call (RPC) | | The NFS version 4 protocol is a Remote Procedure Call (RPC) | |
| application that uses RPC version 2 and the corresponding eXternal | | application that uses RPC version 2 and the corresponding eXternal | |
| Data Representation (XDR) as defined in [RFC1831] and [RFC1832]. The | | Data Representation (XDR) as defined in [RFC1831] and [RFC1832]. The | |
| RPCSEC_GSS security flavor as defined in [RFC2203] MUST be used as | | RPCSEC_GSS security flavor as defined in [RFC2203] MUST be used as | |
| the mechanism to deliver stronger security for the NFS version 4 | | the mechanism to deliver stronger security for the NFS version 4 | |
| protocol. | | protocol. | |
| | | | |
| 3.1. Ports and Transports | | 3.1. Ports and Transports | |
| | | | |
| Historically, NFS version 2 and version 3 servers have resided on | | Historically, NFS version 2 and version 3 servers have resided on | |
| port 2049. The registered port 2049 [RFC1700] for the NFS protocol | | port 2049. The registered port 2049 [RFC1700] for the NFS protocol | |
| should be the default configuration. Using the registered port for | | should be the default configuration. Using the registered port for | |
| NFS services means the NFS client will not need to use the RPC | | NFS services means the NFS client will not need to use the RPC | |
| binding protocols as described in [RFC1833]; this will allow NFS to | | binding protocols as described in [RFC1833]; this will allow NFS to | |
| transit firewalls. | | transit firewalls. | |
| | | | |
| Where an NFS version 4 implementation supports operation over the IP | | Where an NFS version 4 implementation supports operation over the IP | |
|
| network protocol, the supported transports between NFS and IP must be | | network protocol, the supported transports between NFS and IP MUST be | |
| among the IETF-approved congestion control transport protocols, which | | among the IETF-approved congestion control transport protocols, which | |
| include TCP and SCTP. To enhance the possibilities for | | include TCP and SCTP. To enhance the possibilities for | |
|
| interoperability, an NFS version 4 implementation SHOULD support | | interoperability, an NFS version 4 implementation MUST support | |
| operation over the TCP transport protocol. | | operation over the TCP transport protocol, at least until such time | |
| | | as a standards track RFC revises this requirement to use a different | |
| | | IETF-approved congestion control transport protocol. | |
| | | | |
| If TCP is used as the transport, the client and server SHOULD use | | If TCP is used as the transport, the client and server SHOULD use | |
| persistent connections. This will prevent the weakening of TCP's | | persistent connections. This will prevent the weakening of TCP's | |
| congestion control via short lived connections and will improve | | congestion control via short lived connections and will improve | |
| performance for the WAN environment by eliminating the need for SYN | | performance for the WAN environment by eliminating the need for SYN | |
| handshakes. | | handshakes. | |
| | | | |
|
| | | As noted in the Security Considerations section, the authentication | |
| | | model for NFS version 4 has moved from machine-based to principal- | |
| | | based. However, this modification of the authentication model does | |
| | | not imply a technical requirement to move the TCP connection | |
| | | management model from whole machine-based to one based on a per user | |
| | | model. In particular, NFS over TCP client implementations have | |
| | | traditionally multiplexed traffic for multiple users over a common | |
| | | TCP connection between an NFS client and server. This has been true, | |
| | | regardless whether the NFS client is using AUTH_SYS, AUTH_DH, | |
| | | RPCSEC_GSS or any other flavor. Similarly, NFS over TCP server | |
| | | implementations have assumed such a model and thus scale the | |
| | | implementation of TCP connection management in proportion to the | |
| | | number of expected client machines. It is intended that NFS version 4 | |
| | | will not modify this connection management model. NFS version 4 | |
| | | clients that violate this assumption can expect scaling issues on the | |
| | | server and hence reduced service. | |
| | | | |
| Note that for various timers, the client and server should avoid | | Note that for various timers, the client and server should avoid | |
| inadvertent synchronization of those timers. For further discussion | | inadvertent synchronization of those timers. For further discussion | |
|
| | | | |
| | | Draft Specification NFS version 4 Protocol November 2002 | |
| | | | |
| of the general issue refer to [Floyd]. | | of the general issue refer to [Floyd]. | |
| | | | |
| 3.1.1. Client Retransmission Behavior | | 3.1.1. Client Retransmission Behavior | |
| | | | |
| When processing a request received over a reliable transport such as | | When processing a request received over a reliable transport such as | |
| TCP, the NFS version 4 server MUST NOT silently drop the request, | | TCP, the NFS version 4 server MUST NOT silently drop the request, | |
| except if the transport connection has been broken. Given such a | | except if the transport connection has been broken. Given such a | |
| contract between NFS version 4 clients and servers, clients MUST NOT | | contract between NFS version 4 clients and servers, clients MUST NOT | |
| retry a request unless one or both of the following are true: | | retry a request unless one or both of the following are true: | |
| | | | |
| o The transport connection has been broken | | o The transport connection has been broken | |
| | | | |
| o The procedure being retried is the NULL procedure | | o The procedure being retried is the NULL procedure | |
| | | | |
| Since reliable transports, such as TCP, do not always synchronously | | Since reliable transports, such as TCP, do not always synchronously | |
| inform a peer when the other peer has broken the connection (for | | inform a peer when the other peer has broken the connection (for | |
| example, when an NFS server reboots), so the NFS version 4 client may | | example, when an NFS server reboots), so the NFS version 4 client may | |
|
| | | | |
| Draft Specification NFS version 4 Protocol October 2002 | | | |
| | | | |
| want to actively "probe" the connection to see if has been broken. | | want to actively "probe" the connection to see if has been broken. | |
| Use of the NULL procedure is one recommended way to do so. So, when | | Use of the NULL procedure is one recommended way to do so. So, when | |
| a client experiences a remote procedure call timeout (of some | | a client experiences a remote procedure call timeout (of some | |
| arbitrary implementation specific amount), rather than retrying the | | arbitrary implementation specific amount), rather than retrying the | |
| remote procedure call, it could instead issue a NULL procedure call | | remote procedure call, it could instead issue a NULL procedure call | |
| to the server. If the server has died, the transport connection break | | to the server. If the server has died, the transport connection break | |
| will eventually be indicated to the NFS version 4 client. The client | | will eventually be indicated to the NFS version 4 client. The client | |
| can then reconnect, and then retry the original request. If the NULL | | can then reconnect, and then retry the original request. If the NULL | |
| procedure call gets a response, the connection has not broken. The | | procedure call gets a response, the connection has not broken. The | |
| client can decide to wait longer for the original request's response, | | client can decide to wait longer for the original request's response, | |
| | | | |
| skipping to change at page 23, line 39 | | skipping to change at page 25, line 4 | |
| uses the functionality of GSS-API [RFC2743]. This allows for the use | | uses the functionality of GSS-API [RFC2743]. This allows for the use | |
| of various security mechanisms by the RPC layer without the | | of various security mechanisms by the RPC layer without the | |
| additional implementation overhead of adding RPC security flavors. | | additional implementation overhead of adding RPC security flavors. | |
| For NFS version 4, the RPCSEC_GSS security flavor MUST be used to | | For NFS version 4, the RPCSEC_GSS security flavor MUST be used to | |
| enable the mandatory security mechanism. Other flavors, such as, | | enable the mandatory security mechanism. Other flavors, such as, | |
| AUTH_NONE, AUTH_SYS, and AUTH_DH MAY be implemented as well. | | AUTH_NONE, AUTH_SYS, and AUTH_DH MAY be implemented as well. | |
| | | | |
| 3.2.1. Security mechanisms for NFS version 4 | | 3.2.1. Security mechanisms for NFS version 4 | |
| | | | |
| The use of RPCSEC_GSS requires selection of: mechanism, quality of | | The use of RPCSEC_GSS requires selection of: mechanism, quality of | |
|
| | | | |
| | | Draft Specification NFS version 4 Protocol November 2002 | |
| | | | |
| protection, and service (authentication, integrity, privacy). The | | protection, and service (authentication, integrity, privacy). The | |
| remainder of this document will refer to these three parameters of | | remainder of this document will refer to these three parameters of | |
| the RPCSEC_GSS security as the security triple. | | the RPCSEC_GSS security as the security triple. | |
| | | | |
| 3.2.1.1. Kerberos V5 as a security triple | | 3.2.1.1. Kerberos V5 as a security triple | |
| | | | |
| The Kerberos V5 GSS-API mechanism as described in [RFC1964] MUST be | | The Kerberos V5 GSS-API mechanism as described in [RFC1964] MUST be | |
| implemented and provide the following security triples. | | implemented and provide the following security triples. | |
| | | | |
| column descriptions: | | column descriptions: | |
| | | | |
| 1 == number of pseudo flavor | | 1 == number of pseudo flavor | |
| 2 == name of pseudo flavor | | 2 == name of pseudo flavor | |
| 3 == mechanism's OID | | 3 == mechanism's OID | |
| 4 == mechanism's algorithm(s) | | 4 == mechanism's algorithm(s) | |
| 5 == RPCSEC_GSS service | | 5 == RPCSEC_GSS service | |
| | | | |
| 1 2 3 4 5 | | 1 2 3 4 5 | |
| ----------------------------------------------------------------------- | | ----------------------------------------------------------------------- | |
|
| | | | |
| Draft Specification NFS version 4 Protocol October 2002 | | | |
| | | | |
| 390003 krb5 1.2.840.113554.1.2.2 DES MAC MD5 rpc_gss_svc_none | | 390003 krb5 1.2.840.113554.1.2.2 DES MAC MD5 rpc_gss_svc_none | |
| 390004 krb5i 1.2.840.113554.1.2.2 DES MAC MD5 rpc_gss_svc_integrity | | 390004 krb5i 1.2.840.113554.1.2.2 DES MAC MD5 rpc_gss_svc_integrity | |
| 390005 krb5p 1.2.840.113554.1.2.2 DES MAC MD5 rpc_gss_svc_privacy | | 390005 krb5p 1.2.840.113554.1.2.2 DES MAC MD5 rpc_gss_svc_privacy | |
| for integrity, | | for integrity, | |
| and 56 bit DES | | and 56 bit DES | |
| for privacy. | | for privacy. | |
| | | | |
| Note that the pseudo flavor is presented here as a mapping aid to the | | Note that the pseudo flavor is presented here as a mapping aid to the | |
| implementor. Because this NFS protocol includes a method to | | implementor. Because this NFS protocol includes a method to | |
| negotiate security and it understands the GSS-API mechanism, the | | negotiate security and it understands the GSS-API mechanism, the | |
| pseudo flavor is not needed. The pseudo flavor is needed for NFS | | pseudo flavor is not needed. The pseudo flavor is needed for NFS | |
| version 3 since the security negotiation is done via the MOUNT | | version 3 since the security negotiation is done via the MOUNT | |
| protocol. | | protocol. | |
| | | | |
| For a discussion of NFS' use of RPCSEC_GSS and Kerberos V5, please | | For a discussion of NFS' use of RPCSEC_GSS and Kerberos V5, please | |
| see [RFC2623]. | | see [RFC2623]. | |
| | | | |
|
| | | Users and implementors are warned that 56 bit DES is no longer | |
| | | considered state of the art in terms of resistance to brute force | |
| | | attacks. Once a revision to [RFC1964] is available that adds support | |
| | | for AES, implementors are urged to incorporate AES into their NFSv4 | |
| | | over Kerberos V5 protocol stacks, and users are similarly urged to | |
| | | migrate to the use of AES. | |
| | | | |
| 3.2.1.2. LIPKEY as a security triple | | 3.2.1.2. LIPKEY as a security triple | |
| | | | |
| The LIPKEY GSS-API mechanism as described in [RFC2847] MUST be | | The LIPKEY GSS-API mechanism as described in [RFC2847] MUST be | |
| implemented and provide the following security triples. The | | implemented and provide the following security triples. The | |
| definition of the columns matches the previous subsection "Kerberos | | definition of the columns matches the previous subsection "Kerberos | |
| V5 as security triple" | | V5 as security triple" | |
| | | | |
| 1 2 3 4 5 | | 1 2 3 4 5 | |
|
| | | | |
| | | Draft Specification NFS version 4 Protocol November 2002 | |
| | | | |
| ----------------------------------------------------------------------- | | ----------------------------------------------------------------------- | |
| 390006 lipkey 1.3.6.1.5.5.9 negotiated rpc_gss_svc_none | | 390006 lipkey 1.3.6.1.5.5.9 negotiated rpc_gss_svc_none | |
| 390007 lipkey-i 1.3.6.1.5.5.9 negotiated rpc_gss_svc_integrity | | 390007 lipkey-i 1.3.6.1.5.5.9 negotiated rpc_gss_svc_integrity | |
| 390008 lipkey-p 1.3.6.1.5.5.9 negotiated rpc_gss_svc_privacy | | 390008 lipkey-p 1.3.6.1.5.5.9 negotiated rpc_gss_svc_privacy | |
| | | | |
| The mechanism algorithm is listed as "negotiated". This is because | | The mechanism algorithm is listed as "negotiated". This is because | |
| LIPKEY is layered on SPKM-3 and in SPKM-3 [RFC2847] the | | LIPKEY is layered on SPKM-3 and in SPKM-3 [RFC2847] the | |
| confidentiality and integrity algorithms are negotiated. Since | | confidentiality and integrity algorithms are negotiated. Since | |
| SPKM-3 specifies HMAC-MD5 for integrity as MANDATORY, 128 bit | | SPKM-3 specifies HMAC-MD5 for integrity as MANDATORY, 128 bit | |
| cast5CBC for confidentiality for privacy as MANDATORY, and further | | cast5CBC for confidentiality for privacy as MANDATORY, and further | |
| | | | |
| skipping to change at page 25, line 5 | | skipping to change at page 26, line 34 | |
| LIPKEY's GSS_Wrap() and GSS_GetMIC() by RPCSEC_GSS will use a quality | | LIPKEY's GSS_Wrap() and GSS_GetMIC() by RPCSEC_GSS will use a quality | |
| of protection value of 0 (zero). See section 5.2 of [RFC2025] for an | | of protection value of 0 (zero). See section 5.2 of [RFC2025] for an | |
| explanation. | | explanation. | |
| | | | |
| LIPKEY uses SPKM-3 to create a secure channel in which to pass a user | | LIPKEY uses SPKM-3 to create a secure channel in which to pass a user | |
| name and password from the client to the server. Once the user name | | name and password from the client to the server. Once the user name | |
| and password have been accepted by the server, calls to the LIPKEY | | and password have been accepted by the server, calls to the LIPKEY | |
| context are redirected to the SPKM-3 context. See [RFC2847] for more | | context are redirected to the SPKM-3 context. See [RFC2847] for more | |
| details. | | details. | |
| | | | |
|
| Draft Specification NFS version 4 Protocol October 2002 | | | |
| | | | |
| 3.2.1.3. SPKM-3 as a security triple | | 3.2.1.3. SPKM-3 as a security triple | |
| | | | |
| The SPKM-3 GSS-API mechanism as described in [RFC2847] MUST be | | The SPKM-3 GSS-API mechanism as described in [RFC2847] MUST be | |
| implemented and provide the following security triples. The | | implemented and provide the following security triples. The | |
| definition of the columns matches the previous subsection "Kerberos | | definition of the columns matches the previous subsection "Kerberos | |
| V5 as security triple". | | V5 as security triple". | |
| | | | |
| 1 2 3 4 5 | | 1 2 3 4 5 | |
| ----------------------------------------------------------------------- | | ----------------------------------------------------------------------- | |
| 390009 spkm3 1.3.6.1.5.5.1.3 negotiated rpc_gss_svc_none | | 390009 spkm3 1.3.6.1.5.5.1.3 negotiated rpc_gss_svc_none | |
| | | | |
| skipping to change at page 25, line 31 | | skipping to change at page 27, line 4 | |
| "negotiated", see the previous section "LIPKEY as a security triple." | | "negotiated", see the previous section "LIPKEY as a security triple." | |
| | | | |
| Because SPKM-3 negotiates the algorithms, subsequent calls to SPKM- | | Because SPKM-3 negotiates the algorithms, subsequent calls to SPKM- | |
| 3's GSS_Wrap() and GSS_GetMIC() by RPCSEC_GSS will use a quality of | | 3's GSS_Wrap() and GSS_GetMIC() by RPCSEC_GSS will use a quality of | |
| protection value of 0 (zero). See section 5.2 of [RFC2025] for an | | protection value of 0 (zero). See section 5.2 of [RFC2025] for an | |
| explanation. | | explanation. | |
| | | | |
| Even though LIPKEY is layered over SPKM-3, SPKM-3 is specified as a | | Even though LIPKEY is layered over SPKM-3, SPKM-3 is specified as a | |
| mandatory set of triples to handle the situations where the initiator | | mandatory set of triples to handle the situations where the initiator | |
| (the client) is anonymous or where the initiator has its own | | (the client) is anonymous or where the initiator has its own | |
|
| | | | |
| | | Draft Specification NFS version 4 Protocol November 2002 | |
| | | | |
| certificate. If the initiator is anonymous, there will not be a user | | certificate. If the initiator is anonymous, there will not be a user | |
| name and password to send to the target (the server). If the | | name and password to send to the target (the server). If the | |
| initiator has its own certificate, then using passwords is | | initiator has its own certificate, then using passwords is | |
| superfluous. | | superfluous. | |
| | | | |
| 3.3. Security Negotiation | | 3.3. Security Negotiation | |
| | | | |
| With the NFS version 4 server potentially offering multiple security | | With the NFS version 4 server potentially offering multiple security | |
| mechanisms, the client needs a method to determine or negotiate which | | mechanisms, the client needs a method to determine or negotiate which | |
| mechanism is to be used for its communication with the server. The | | mechanism is to be used for its communication with the server. The | |
| | | | |
| skipping to change at page 26, line 4 | | skipping to change at page 27, line 33 | |
| a secure channel to eliminate the possibility of a third party | | a secure channel to eliminate the possibility of a third party | |
| intercepting the negotiation sequence and forcing the client and | | intercepting the negotiation sequence and forcing the client and | |
| server to choose a lower level of security than required or desired. | | server to choose a lower level of security than required or desired. | |
| See the section "Security Considerations" for further discussion. | | See the section "Security Considerations" for further discussion. | |
| | | | |
| 3.3.1. SECINFO | | 3.3.1. SECINFO | |
| | | | |
| The new SECINFO operation will allow the client to determine, on a | | The new SECINFO operation will allow the client to determine, on a | |
| per filehandle basis, what security triple is to be used for server | | per filehandle basis, what security triple is to be used for server | |
| access. In general, the client will not have to use the SECINFO | | access. In general, the client will not have to use the SECINFO | |
|
| | | | |
| Draft Specification NFS version 4 Protocol October 2002 | | | |
| | | | |
| operation except during initial communication with the server or when | | operation except during initial communication with the server or when | |
| the client crosses policy boundaries at the server. It is possible | | the client crosses policy boundaries at the server. It is possible | |
| that the server's policies change during the client's interaction | | that the server's policies change during the client's interaction | |
| therefore forcing the client to negotiate a new security triple. | | therefore forcing the client to negotiate a new security triple. | |
| | | | |
| 3.3.2. Security Error | | 3.3.2. Security Error | |
| | | | |
| Based on the assumption that each NFS version 4 client and server | | Based on the assumption that each NFS version 4 client and server | |
| must support a minimum set of security (i.e. LIPKEY, SPKM-3, and | | must support a minimum set of security (i.e. LIPKEY, SPKM-3, and | |
| Kerberos-V5 all under RPCSEC_GSS), the NFS client will start its | | Kerberos-V5 all under RPCSEC_GSS), the NFS client will start its | |
| | | | |
| skipping to change at page 26, line 28 | | skipping to change at page 28, line 5 | |
| triples. During communication with the server, the client may | | triples. During communication with the server, the client may | |
| receive an NFS error of NFS4ERR_WRONGSEC. This error allows the | | receive an NFS error of NFS4ERR_WRONGSEC. This error allows the | |
| server to notify the client that the security triple currently being | | server to notify the client that the security triple currently being | |
| used is not appropriate for access to the server's filesystem | | used is not appropriate for access to the server's filesystem | |
| resources. The client is then responsible for determining what | | resources. The client is then responsible for determining what | |
| security triples are available at the server and choose one which is | | security triples are available at the server and choose one which is | |
| appropriate for the client. See the section for the "SECINFO" | | appropriate for the client. See the section for the "SECINFO" | |
| operation for further discussion of how the client will respond to | | operation for further discussion of how the client will respond to | |
| the NFS4ERR_WRONGSEC error and use SECINFO. | | the NFS4ERR_WRONGSEC error and use SECINFO. | |
| | | | |
|
| | | Draft Specification NFS version 4 Protocol November 2002 | |
| | | | |
| 3.4. Callback RPC Authentication | | 3.4. Callback RPC Authentication | |
| | | | |
| Except as noted elsewhere in this section, the callback RPC | | Except as noted elsewhere in this section, the callback RPC | |
| (described later) MUST mutually authenticate the NFS server to the | | (described later) MUST mutually authenticate the NFS server to the | |
| principal that acquired the clientid (also described later), using | | principal that acquired the clientid (also described later), using | |
| the security flavor the original SETCLIENTID operation used. | | the security flavor the original SETCLIENTID operation used. | |
| | | | |
| For AUTH_NONE, there are no principals, so this is a non-issue. | | For AUTH_NONE, there are no principals, so this is a non-issue. | |
| | | | |
| AUTH_SYS has no notions of mutual authentication or a server | | AUTH_SYS has no notions of mutual authentication or a server | |
| | | | |
| skipping to change at page 27, line 4 | | skipping to change at page 28, line 36 | |
| server host and directory services domain in which it lives such as a | | server host and directory services domain in which it lives such as a | |
| Network Information System domain or a DNS domain. | | Network Information System domain or a DNS domain. | |
| | | | |
| Because LIPKEY is layered over SPKM-3, it is permissible for the | | Because LIPKEY is layered over SPKM-3, it is permissible for the | |
| server to use SPKM-3 and not LIPKEY for the callback even if the | | server to use SPKM-3 and not LIPKEY for the callback even if the | |
| client used LIPKEY for SETCLIENTID. | | client used LIPKEY for SETCLIENTID. | |
| | | | |
| Regardless of what security mechanism under RPCSEC_GSS is being used, | | Regardless of what security mechanism under RPCSEC_GSS is being used, | |
| the NFS server, MUST identify itself in GSS-API via a | | the NFS server, MUST identify itself in GSS-API via a | |
| GSS_C_NT_HOSTBASED_SERVICE name type. GSS_C_NT_HOSTBASED_SERVICE | | GSS_C_NT_HOSTBASED_SERVICE name type. GSS_C_NT_HOSTBASED_SERVICE | |
|
| | | | |
| Draft Specification NFS version 4 Protocol October 2002 | | | |
| | | | |
| names are of the form: | | names are of the form: | |
| | | | |
| service@hostname | | service@hostname | |
| | | | |
| For NFS, the "service" element is | | For NFS, the "service" element is | |
| | | | |
| nfs | | nfs | |
| | | | |
| Implementations of security mechanisms will convert nfs@hostname to | | Implementations of security mechanisms will convert nfs@hostname to | |
| various different forms. For Kerberos V5 and LIPKEY, the following | | various different forms. For Kerberos V5 and LIPKEY, the following | |
| form is RECOMMENDED: | | form is RECOMMENDED: | |
| | | | |
| nfs/hostname | | nfs/hostname | |
| | | | |
| For Kerberos V5, nfs/hostname would be a server principal in the | | For Kerberos V5, nfs/hostname would be a server principal in the | |
|
| Kerberos Key Distribution Center database. For LIPKEY, this would be | | Kerberos Key Distribution Center database. This is the same | |
| the username passed to the target (the NFS version 4 client that | | principal the client acquired a GSS-API context for when it issued | |
| receives the callback). | | the SETCLIENTID operation, therefore, the realm name for the server | |
| | | principal must be the same for the callback as it was for the | |
| | | SETCLIENTID. | |
| | | | |
| | | For LIPKEY, this would be the username passed to the target (the NFS | |
| | | version 4 client that receives the callback). | |
| | | | |
| | | Draft Specification NFS version 4 Protocol November 2002 | |
| | | | |
| It should be noted that LIPKEY may not work for callbacks, since the | | It should be noted that LIPKEY may not work for callbacks, since the | |
| LIPKEY client uses a user id/password. If the NFS client receiving | | LIPKEY client uses a user id/password. If the NFS client receiving | |
| the callback can authenticate the NFS server's user name/password | | the callback can authenticate the NFS server's user name/password | |
| pair, and if the user that the NFS server is authenticating to has a | | pair, and if the user that the NFS server is authenticating to has a | |
| public key certificate, then it works. | | public key certificate, then it works. | |
| | | | |
| In situations where the NFS client uses LIPKEY and uses a per-host | | In situations where the NFS client uses LIPKEY and uses a per-host | |
| principal for the SETCLIENTID operation, instead of using LIPKEY for | | principal for the SETCLIENTID operation, instead of using LIPKEY for | |
| SETCLIENTID, it is RECOMMENDED that SPKM-3 with mutual authentication | | SETCLIENTID, it is RECOMMENDED that SPKM-3 with mutual authentication | |
| | | | |
| skipping to change at page 28, line 5 | | skipping to change at page 30, line 5 | |
| requirements beyond a certificate for the target, and the | | requirements beyond a certificate for the target, and the | |
| expectation is that existing password infrastructure can be | | expectation is that existing password infrastructure can be | |
| leveraged for the initiator. In some environments, a per-host | | leveraged for the initiator. In some environments, a per-host | |
| password does not exist yet. If certificates are used for any | | password does not exist yet. If certificates are used for any | |
| per-host principals, then additional password infrastructure is | | per-host principals, then additional password infrastructure is | |
| not needed. | | not needed. | |
| | | | |
| o In cases when a host is both an NFS client and server, it can | | o In cases when a host is both an NFS client and server, it can | |
| share the same per-host certificate. | | share the same per-host certificate. | |
| | | | |
|
| Draft Specification NFS version 4 Protocol October 2002 | | Draft Specification NFS version 4 Protocol November 2002 | |
| | | | |
| 4. Filehandles | | 4. Filehandles | |
| | | | |
| The filehandle in the NFS protocol is a per server unique identifier | | The filehandle in the NFS protocol is a per server unique identifier | |
| for a filesystem object. The contents of the filehandle are opaque | | for a filesystem 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 filesystem | | the filehandle to an internal representation of the filesystem | |
| object. | | object. | |
| | | | |
| 4.1. Obtaining the First Filehandle | | 4.1. Obtaining the First Filehandle | |
| | | | |
| skipping to change at page 29, line 5 | | skipping to change at page 31, line 5 | |
| used, the client can then traverse the entirety of the server's file | | used, the client can then traverse the entirety of the server's file | |
| tree with the LOOKUP operation. A complete discussion of the server | | tree with the LOOKUP operation. A complete discussion of the server | |
| name space is in the section "NFS Server Name Space". | | name space is in the section "NFS Server Name Space". | |
| | | | |
| 4.1.2. Public Filehandle | | 4.1.2. Public Filehandle | |
| | | | |
| The second special filehandle is the PUBLIC filehandle. Unlike the | | The second special filehandle is the PUBLIC filehandle. Unlike the | |
| ROOT filehandle, the PUBLIC filehandle may be bound or represent an | | ROOT filehandle, the PUBLIC filehandle may be bound or represent an | |
| arbitrary filesystem object at the server. The server is responsible | | arbitrary filesystem object at the server. The server is responsible | |
| | | | |
|
| Draft Specification NFS version 4 Protocol October 2002 | | Draft Specification NFS version 4 Protocol November 2002 | |
| | | | |
| for this binding. It may be that the PUBLIC filehandle and the ROOT | | for this binding. It may be that the PUBLIC filehandle and the ROOT | |
| filehandle refer to the same filesystem object. However, it is up to | | filehandle refer to the same filesystem object. However, it is up to | |
| the administrative software at the server and the policies of the | | the administrative software at the server and the policies of the | |
| server administrator to define the binding of the PUBLIC filehandle | | server administrator to define the binding of the PUBLIC filehandle | |
| and server filesystem object. The client may not make any | | and server filesystem object. The client may not make any | |
| assumptions about this binding. The client uses the PUBLIC filehandle | | assumptions about this binding. The client uses the PUBLIC filehandle | |
| via the PUTPUBFH operation. | | via the PUTPUBFH operation. | |
| | | | |
| 4.2. Filehandle Types | | 4.2. Filehandle Types | |
| | | | |
| skipping to change at page 30, line 5 | | skipping to change at page 32, line 5 | |
| otherwise interpret the contents of filehandles. If two filehandles | | otherwise interpret the contents of filehandles. If two filehandles | |
| from the same server are equal, they MUST refer to the same file. | | from the same server are equal, they MUST refer to the same file. | |
| Servers SHOULD try to maintain a one-to-one correspondence between | | Servers SHOULD try to maintain a one-to-one correspondence between | |
| filehandles and files but this is not required. Clients MUST use | | filehandles and files but this is not required. Clients MUST use | |
| filehandle comparisons only to improve performance, not for correct | | filehandle comparisons only to improve performance, not for correct | |
| behavior. All clients need to be prepared for situations in which it | | behavior. All clients need to be prepared for situations in which it | |
| cannot be determined whether two filehandles denote the same object | | cannot be determined whether two filehandles denote the same object | |
| and in such cases, avoid making invalid assumptions which might cause | | and in such cases, avoid making invalid assumptions which might cause | |
| incorrect behavior. Further discussion of filehandle and attribute | | incorrect behavior. Further discussion of filehandle and attribute | |
| | | | |
|
| Draft Specification NFS version 4 Protocol October 2002 | | Draft Specification NFS version 4 Protocol November 2002 | |
| | | | |
| comparison in the context of data caching is presented in the section | | comparison in the context of data caching is presented in the section | |
| "Data Caching and File Identity". | | "Data Caching and File Identity". | |
| | | | |
| As an example, in the case that two different path names when | | As an example, in the case that two different path names when | |
| traversed at the server terminate at the same filesystem object, the | | traversed at the server terminate at the same filesystem object, the | |
| server SHOULD return the same filehandle for each path. This can | | server SHOULD return the same filehandle for each path. This can | |
| occur if a hard link is used to create two file names which refer to | | occur if a hard link is used to create two file names which refer to | |
| the same underlying file object and associated data. For example, if | | the same underlying file object and associated data. For example, if | |
| paths /a/b/c and /a/d/c refer to the same file, the server SHOULD | | paths /a/b/c and /a/d/c refer to the same file, the server SHOULD | |
| | | | |
| skipping to change at page 31, line 5 | | skipping to change at page 33, line 5 | |
| server should return NFS4ERR_STALE to the client (as is the case for | | server should return NFS4ERR_STALE to the client (as is the case for | |
| persistent filehandles). In all other cases where the server | | persistent filehandles). In all other cases where the server | |
| determines that a volatile filehandle can no longer be used, it | | determines that a volatile filehandle can no longer be used, it | |
| should return an error of NFS4ERR_FHEXPIRED. | | should return an error of NFS4ERR_FHEXPIRED. | |
| | | | |
| The mandatory attribute "fh_expire_type" is used by the client to | | The mandatory attribute "fh_expire_type" is used by the client to | |
| determine what type of filehandle the server is providing for a | | determine what type of filehandle the server is providing for a | |
| particular filesystem. This attribute is a bitmask with the | | particular filesystem. This attribute is a bitmask with the | |
| following values: | | following values: | |
| | | | |
|
| Draft Specification NFS version 4 Protocol October 2002 | | Draft Specification NFS version 4 Protocol November 2002 | |
| | | | |
| FH4_PERSISTENT | | FH4_PERSISTENT | |
| The value of FH4_PERSISTENT is used to indicate a persistent | | The value of FH4_PERSISTENT is used to indicate a persistent | |
| filehandle, which is valid until the object is removed from the | | filehandle, which is valid until the object is removed from the | |
| filesystem. The server will not return NFS4ERR_FHEXPIRED for | | filesystem. The server will not return NFS4ERR_FHEXPIRED for | |
| this filehandle. FH4_PERSISTENT is defined as a value in which | | this filehandle. FH4_PERSISTENT is defined as a value in which | |
| none of the bits specified below are set. | | none of the bits specified below are set. | |
| | | | |
| FH4_VOLATILE_ANY | | FH4_VOLATILE_ANY | |
| The filehandle may expire at any time, except as specifically | | The filehandle may expire at any time, except as specifically | |
| | | | |
| skipping to change at page 32, line 5 | | skipping to change at page 34, line 5 | |
| occurs, and it is likely that additional expirations will occur | | occurs, and it is likely that additional expirations will occur | |
| (as a result of file CLOSE) that are separated in time from the | | (as a result of file CLOSE) that are separated in time from the | |
| migration event itself. | | migration event itself. | |
| | | | |
| 4.2.4. One Method of Constructing a Volatile Filehandle | | 4.2.4. One Method of Constructing a Volatile Filehandle | |
| | | | |
| A volatile filehandle, while opaque to the client could contain: | | A volatile filehandle, while opaque to the client could contain: | |
| | | | |
| [volatile bit = 1 | server boot time | slot | generation number] | | [volatile bit = 1 | server boot time | slot | generation number] | |
| | | | |
|
| Draft Specification NFS version 4 Protocol October 2002 | | Draft Specification NFS version 4 Protocol November 2002 | |
| | | | |
| o slot is an index in the server volatile filehandle table | | o slot is an index in the server volatile filehandle table | |
| | | | |
| o generation number is the generation number for the table | | o generation number is the generation number for the table | |
| entry/slot | | entry/slot | |
| | | | |
| When the client presents a volatile filehandle, the server makes the | | When the client presents a volatile filehandle, the server makes the | |
| following checks, which assume that the check for the volatile bit | | following checks, which assume that the check for the volatile bit | |
| has passed. If the server boot time is less than the current server | | has passed. If the server boot time is less than the current server | |
| boot time, return NFS4ERR_FHEXPIRED. If slot is out of range, return | | boot time, return NFS4ERR_FHEXPIRED. If slot is out of range, return | |
| | | | |
| skipping to change at page 33, line 5 | | skipping to change at page 35, line 5 | |
| processing of the rename request. The client can then regenerate the | | processing of the rename request. The client can then regenerate the | |
| new filehandle based on the new path name. The client could also use | | new filehandle based on the new path name. The client could also use | |
| the compound operation mechanism to construct a set of operations | | the compound operation mechanism to construct a set of operations | |
| like: | | like: | |
| RENAME A B | | RENAME A B | |
| LOOKUP B | | LOOKUP B | |
| GETFH | | GETFH | |
| Note that the COMPOUND procedure does not provide atomicity. This | | Note that the COMPOUND procedure does not provide atomicity. This | |
| example only reduces the overhead of recovering from an expired | | example only reduces the overhead of recovering from an expired | |
| | | | |
|
| Draft Specification NFS version 4 Protocol October 2002 | | Draft Specification NFS version 4 Protocol November 2002 | |
| | | | |
| filehandle. | | filehandle. | |
| | | | |
|
| Draft Specification NFS version 4 Protocol October 2002 | | Draft Specification NFS version 4 Protocol November 2002 | |
| | | | |
| 5. File Attributes | | 5. File Attributes | |
| | | | |
| To meet the requirements of extensibility and increased | | To meet the requirements of extensibility and increased | |
| interoperability with non-UNIX platforms, attributes must be handled | | interoperability with non-UNIX platforms, attributes must be handled | |
| in a flexible manner. The NFS version 3 fattr3 structure contains a | | in a flexible manner. The NFS version 3 fattr3 structure contains a | |
| fixed list of attributes that not all clients and servers are able to | | fixed list of attributes that not all clients and servers are able to | |
| support or care about. The fattr3 structure can not be extended as | | support or care about. The fattr3 structure can not be extended as | |
| new needs arise and it provides no way to indicate non-support. With | | new needs arise and it provides no way to indicate non-support. With | |
| the NFS version 4 protocol, the client is able query what attributes | | the NFS version 4 protocol, the client is able query what attributes | |
| | | | |
| skipping to change at page 35, line 5 | | skipping to change at page 37, line 5 | |
| encouraged to define their new attributes as recommended attributes | | encouraged to define their new attributes as recommended attributes | |
| by bringing them to the IETF standards-track process. | | by bringing them to the IETF standards-track process. | |
| | | | |
| The set of attributes which are classified as mandatory is | | The set of attributes which are classified as mandatory is | |
| deliberately small since servers must do whatever it takes to support | | deliberately small since servers must do whatever it takes to support | |
| them. A server should support as many of the recommended attributes | | them. A server should support as many of the recommended attributes | |
| as possible but by their definition, the server is not required to | | as possible but by their definition, the server is not required to | |
| support all of them. Attributes are deemed mandatory if the data is | | support all of them. Attributes are deemed mandatory if the data is | |
| both needed by a large number of clients and is not otherwise | | both needed by a large number of clients and is not otherwise | |
| | | | |
|
| Draft Specification NFS version 4 Protocol October 2002 | | Draft Specification NFS version 4 Protocol November 2002 | |
| | | | |
| reasonably computable by the client when support is not provided on | | reasonably computable by the client when support is not provided on | |
| the server. | | the server. | |
| | | | |
| Note that the hidden directory returned by OPENATTR is a convenience | | Note that the hidden directory returned by OPENATTR is a convenience | |
| for protocol processing. The client should not make any assumptions | | for protocol processing. The client should not make any assumptions | |
| about the server's implementation of named attributes and whether the | | about the server's implementation of named attributes and whether the | |
| underlying filesystem at the server has a named attribute directory | | underlying filesystem at the server has a named attribute directory | |
| or not. Therefore, operations such as SETATTR and GETATTR on the | | or not. Therefore, operations such as SETATTR and GETATTR on the | |
| named attribute directory are undefined. | | named attribute directory are undefined. | |
| | | | |
| skipping to change at page 36, line 5 | | skipping to change at page 38, line 5 | |
| fabricate or construct an attribute or whether to do without the | | fabricate or construct an attribute or whether to do without the | |
| attribute. | | attribute. | |
| | | | |
| 5.3. Named Attributes | | 5.3. Named Attributes | |
| | | | |
| These attributes are not supported by direct encoding in the NFS | | These attributes are not supported by direct encoding in the NFS | |
| Version 4 protocol but are accessed by string names rather than | | Version 4 protocol but are accessed by string names rather than | |
| numbers and correspond to an uninterpreted stream of bytes which are | | numbers and correspond to an uninterpreted stream of bytes which are | |
| stored with the filesystem object. The name space for these | | stored with the filesystem object. The name space for these | |
| | | | |
|
| Draft Specification NFS version 4 Protocol October 2002 | | Draft Specification NFS version 4 Protocol November 2002 | |
| | | | |
| attributes may be accessed by using the OPENATTR operation. The | | attributes may be accessed by using the OPENATTR operation. The | |
| OPENATTR operation returns a filehandle for a virtual "attribute | | OPENATTR operation returns a filehandle for a virtual "attribute | |
| directory" and further perusal of the name space may be done using | | directory" and further perusal of the name space may be done using | |
| READDIR and LOOKUP operations on this filehandle. Named attributes | | READDIR and LOOKUP operations on this filehandle. Named attributes | |
| may then be examined or changed by normal READ and WRITE and CREATE | | may then be examined or changed by normal READ and WRITE and CREATE | |
| operations on the filehandles returned from READDIR and LOOKUP. | | operations on the filehandles returned from READDIR and LOOKUP. | |
| Named attributes may have attributes. | | Named attributes may have attributes. | |
| | | | |
| It is recommended that servers support arbitrary named attributes. A | | It is recommended that servers support arbitrary named attributes. A | |
| | | | |
| skipping to change at page 37, line 5 | | skipping to change at page 39, line 5 | |
| maxread, maxwrite, no_trunc, space_avail, space_free, | | maxread, maxwrite, no_trunc, space_avail, space_free, | |
| space_total, time_delta | | space_total, time_delta | |
| | | | |
| o The per filesystem object attributes are: | | o The per filesystem object attributes are: | |
| | | | |
| type, change, size, named_attr, fsid, rdattr_error, filehandle, | | type, change, size, named_attr, fsid, rdattr_error, filehandle, | |
| ACL, archive, fileid, hidden, maxlink, mimetype, mode, numlinks, | | ACL, archive, fileid, hidden, maxlink, mimetype, mode, numlinks, | |
| owner, owner_group, rawdev, space_used, system, time_access, | | owner, owner_group, rawdev, space_used, system, time_access, | |
| time_backup, time_create, time_metadata, time_modify, | | time_backup, time_create, time_metadata, time_modify, | |
| | | | |
|
| Draft Specification NFS version 4 Protocol October 2002 | | Draft Specification NFS version 4 Protocol November 2002 | |
| | | | |
| mounted_on_fileid | | mounted_on_fileid | |
| | | | |
| For quota_avail_hard, quota_avail_soft, and quota_used see their | | For quota_avail_hard, quota_avail_soft, and quota_used see their | |
| definitions below for the appropriate classification. | | definitions below for the appropriate classification. | |
| | | | |
|
| Draft Specification NFS version 4 Protocol October 2002 | | Draft Specification NFS version 4 Protocol November 2002 | |
| | | | |
| 5.5. Mandatory Attributes - Definitions | | 5.5. Mandatory Attributes - Definitions | |
| | | | |
| Name # DataType Access Description | | Name # DataType Access Description | |
| ___________________________________________________________________ | | ___________________________________________________________________ | |
| supp_attr 0 bitmap READ The bit vector which | | supp_attr 0 bitmap READ The bit vector which | |
| would retrieve all | | would retrieve all | |
| mandatory and | | mandatory and | |
| recommended attributes | | recommended attributes | |
| that are supported for | | that are supported for | |
| | | | |
| skipping to change at page 39, line 5 | | skipping to change at page 41, line 5 | |
| only if the filesystem | | only if the filesystem | |
| object can not be | | object can not be | |
| updated more | | updated more | |
| frequently than the | | frequently than the | |
| resolution of | | resolution of | |
| time_metadata. | | time_metadata. | |
| | | | |
| size 4 uint64 R/W The size of the object | | size 4 uint64 R/W The size of the object | |
| in bytes. | | in bytes. | |
| | | | |
|
| Draft Specification NFS version 4 Protocol October 2002 | | Draft Specification NFS version 4 Protocol November 2002 | |
| | | | |
| link_support 5 bool READ True, if the object's | | link_support 5 bool READ True, if the object's | |
| filesystem supports | | filesystem supports | |
| hard links. | | hard links. | |
| | | | |
| symlink_support 6 bool READ True, if the object's | | symlink_support 6 bool READ True, if the object's | |
| filesystem supports | | filesystem supports | |
| symbolic links. | | symbolic links. | |
| | | | |
| named_attr 7 bool READ True, if this object | | named_attr 7 bool READ True, if this object | |
| | | | |
| skipping to change at page 40, line 5 | | skipping to change at page 42, line 5 | |
| server in seconds. | | server in seconds. | |
| | | | |
| rdattr_error 11 enum READ Error returned from | | rdattr_error 11 enum READ Error returned from | |
| getattr during | | getattr during | |
| readdir. | | readdir. | |
| | | | |
| filehandle 19 nfs_fh4 READ The filehandle of this | | filehandle 19 nfs_fh4 READ The filehandle of this | |
| object (primarily for | | object (primarily for | |
| readdir requests). | | readdir requests). | |
| | | | |
|
| Draft Specification NFS version 4 Protocol October 2002 | | Draft Specification NFS version 4 Protocol November 2002 | |
| | | | |
| 5.6. Recommended Attributes - Definitions | | 5.6. Recommended Attributes - Definitions | |
| | | | |
| Name # Data Type Access Description | | Name # Data Type Access Description | |
| ______________________________________________________________________ | | ______________________________________________________________________ | |
| ACL 12 nfsace4<> R/W The access control | | ACL 12 nfsace4<> R/W The access control | |
| list for the object. | | list for the object. | |
| | | | |
| aclsupport 13 uint32 READ Indicates what types | | aclsupport 13 uint32 READ Indicates what types | |
| of ACLs are supported | | of ACLs are supported | |
| | | | |
| skipping to change at page 41, line 5 | | skipping to change at page 43, line 5 | |
| with a file if the | | with a file if the | |
| caller is not a | | caller is not a | |
| privileged user (for | | privileged user (for | |
| example, "root" in | | example, "root" in | |
| UNIX operating | | UNIX operating | |
| environments or in | | environments or in | |
| Windows 2000 the | | Windows 2000 the | |
| "Take Ownership" | | "Take Ownership" | |
| privilege). | | privilege). | |
| | | | |
|
| Draft Specification NFS version 4 Protocol October 2002 | | Draft Specification NFS version 4 Protocol November 2002 | |
| | | | |
| fileid 20 uint64 READ A number uniquely | | fileid 20 uint64 READ A number uniquely | |
| identifying the file | | identifying the file | |
| within the | | within the | |
| filesystem. | | filesystem. | |
| | | | |
| files_avail 21 uint64 READ File slots available | | files_avail 21 uint64 READ File slots available | |
| to this user on the | | to this user on the | |
| filesystem containing | | filesystem containing | |
| this object - this | | this object - this | |
| | | | |
| skipping to change at page 42, line 5 | | skipping to change at page 44, line 5 | |
| are per filesystem | | are per filesystem | |
| attributes the same | | attributes the same | |
| for all filesystem's | | for all filesystem's | |
| objects. | | objects. | |
| | | | |
| maxfilesize 27 uint64 READ Maximum supported | | maxfilesize 27 uint64 READ Maximum supported | |
| file size for the | | file size for the | |
| filesystem of this | | filesystem of this | |
| object. | | object. | |
| | | | |
|
| Draft Specification NFS version 4 Protocol October 2002 | | Draft Specification NFS version 4 Protocol November 2002 | |
| | | | |
| maxlink 28 uint32 READ Maximum number of | | maxlink 28 uint32 READ Maximum number of | |
| links for this | | links for this | |
| object. | | object. | |
| | | | |
| maxname 29 uint32 READ Maximum filename size | | maxname 29 uint32 READ Maximum filename size | |
| supported for this | | supported for this | |
| object. | | object. | |
| | | | |
| maxread 30 uint64 READ Maximum read size | | maxread 30 uint64 READ Maximum read size | |
| | | | |
| skipping to change at page 43, line 5 | | skipping to change at page 45, line 5 | |
| to this object. | | to this object. | |
| | | | |
| owner 36 utf8<> R/W The string name of | | owner 36 utf8<> R/W The string name of | |
| the owner of this | | the owner of this | |
| object. | | object. | |
| | | | |
| owner_group 37 utf8<> R/W The string name of | | owner_group 37 utf8<> R/W The string name of | |
| the group ownership | | the group ownership | |
| of this object. | | of this object. | |
| | | | |
|
| Draft Specification NFS version 4 Protocol October 2002 | | Draft Specification NFS version 4 Protocol November 2002 | |
| | | | |
| quota_avail_hard 38 uint64 READ For definition see | | quota_avail_hard 38 uint64 READ For definition see | |
| "Quota Attributes" | | "Quota Attributes" | |
| section below. | | section below. | |
| | | | |
| quota_avail_soft 39 uint64 READ For definition see | | quota_avail_soft 39 uint64 READ For definition see | |
| "Quota Attributes" | | "Quota Attributes" | |
| section below. | | section below. | |
| | | | |
| quota_used 40 uint64 READ For definition see | | quota_used 40 uint64 READ For definition see | |
| | | | |
| skipping to change at page 44, line 5 | | skipping to change at page 46, line 5 | |
| | | | |
| space_total 44 uint64 READ Total disk space in | | space_total 44 uint64 READ Total disk space in | |
| bytes on the | | bytes on the | |
| filesystem containing | | filesystem containing | |
| this object. | | this object. | |
| | | | |
| space_used 45 uint64 READ Number of filesystem | | space_used 45 uint64 READ Number of filesystem | |
| bytes allocated to | | bytes allocated to | |
| this object. | | this object. | |
| | | | |
|
| Draft Specification NFS version 4 Protocol October 2002 | | Draft Specification NFS version 4 Protocol November 2002 | |
| | | | |
| system 46 bool R/W True, if this file is | | system 46 bool R/W True, if this file is | |
| a "system" file with | | a "system" file with | |
| respect to the | | respect to the | |
| Windows API? | | Windows API? | |
| | | | |
| time_access 47 nfstime4 READ The time of last | | time_access 47 nfstime4 READ The time of last | |
| access to the object | | access to the object | |
| by a read that was | | by a read that was | |
| satisfied by the | | satisfied by the | |
| | | | |
| skipping to change at page 45, line 5 | | skipping to change at page 47, line 5 | |
| object. SETATTR use | | object. SETATTR use | |
| only. | | only. | |
| | | | |
| mounted_on_fileid 55 uint64 READ Like fileid, but if | | mounted_on_fileid 55 uint64 READ Like fileid, but if | |
| the target filehandle | | the target filehandle | |
| is the root of a | | is the root of a | |
| filesystem return the | | filesystem return the | |
| fileid of the | | fileid of the | |
| underlying directory. | | underlying directory. | |
| | | | |
|
| Draft Specification NFS version 4 Protocol October 2002 | | Draft Specification NFS version 4 Protocol November 2002 | |
| | | | |
| 5.7. Time Access | | 5.7. Time Access | |
| | | | |
| As defined above, the time_access attribute represents the time of | | As defined above, the time_access attribute represents the time of | |
| last access to the object by a read that was satisfied by the server. | | last access to the object by a read that was satisfied by the server. | |
| The notion of what is an "access" depends on server's operating | | The notion of what is an "access" depends on server's operating | |
| environment and/or the server's filesystem semantics. For example, | | environment and/or the server's filesystem semantics. For example, | |
| for servers obeying POSIX semantics, time_access would be updated | | for servers obeying POSIX semantics, time_access would be updated | |
| only by the READLINK, READ, and READDIR operations and not any of the | | only by the READLINK, READ, and READDIR operations and not any of the | |
| operations that modify the content of the object. Of course, setting | | operations that modify the content of the object. Of course, setting | |
| | | | |
| skipping to change at page 46, line 5 | | skipping to change at page 48, line 5 | |
| to these security principals. When these local identifiers are | | to these security principals. When these local identifiers are | |
| translated to the form of the owner attribute, associated with files | | translated to the form of the owner attribute, associated with files | |
| created by such principals they identify, in a common format, the | | created by such principals they identify, in a common format, the | |
| users associated with each corresponding set of security principals. | | users associated with each corresponding set of security principals. | |
| | | | |
| The translation used to interpret owner and group strings is not | | The translation used to interpret owner and group strings is not | |
| specified as part of the protocol. This allows various solutions to | | specified as part of the protocol. This allows various solutions to | |
| be employed. For example, a local translation table may be consulted | | be employed. For example, a local translation table may be consulted | |
| that maps between a numeric id to the user@dns_domain syntax. A name | | that maps between a numeric id to the user@dns_domain syntax. A name | |
| | | | |
|
| Draft Specification NFS version 4 Protocol October 2002 | | Draft Specification NFS version 4 Protocol November 2002 | |
| | | | |
| service may also be used to accomplish the translation. A server may | | service may also be used to accomplish the translation. A server may | |
| provide a more general service, not limited by any particular | | provide a more general service, not limited by any particular | |
| translation (which would only translate a limited set of possible | | translation (which would only translate a limited set of possible | |
| strings) by storing the owner and owner_group attributes in local | | strings) by storing the owner and owner_group attributes in local | |
| storage without any translation or it may augment a translation | | storage without any translation or it may augment a translation | |
| method by storing the entire string for attributes for which no | | method by storing the entire string for attributes for which no | |
| translation is available while using the local representation for | | translation is available while using the local representation for | |
| those cases in which a translation is available. | | those cases in which a translation is available. | |
| | | | |
| | | | |
| skipping to change at page 47, line 5 | | skipping to change at page 49, line 5 | |
| unsigned uid's and gid's, owner and group strings that consist of | | unsigned uid's and gid's, owner and group strings that consist of | |
| decimal numeric values with no leading zeros can be given a special | | decimal numeric values with no leading zeros can be given a special | |
| interpretation by clients and servers which choose to provide such | | interpretation by clients and servers which choose to provide such | |
| support. The receiver may treat such a user or group string as | | support. The receiver may treat such a user or group string as | |
| representing the same user as would be represented by a v2/v3 uid or | | representing the same user as would be represented by a v2/v3 uid or | |
| gid having the corresponding numeric value. A server is not | | gid having the corresponding numeric value. A server is not | |
| obligated to accept such a string, but may return an NFS4ERR_BADOWNER | | obligated to accept such a string, but may return an NFS4ERR_BADOWNER | |
| instead. To avoid this mechanism being used to subvert user and | | instead. To avoid this mechanism being used to subvert user and | |
| group translation, so that a client might pass all of the owners and | | group translation, so that a client might pass all of the owners and | |
| | | | |
|
| Draft Specification NFS version 4 Protocol October 2002 | | Draft Specification NFS version 4 Protocol November 2002 | |
| | | | |
| groups in numeric form, a server SHOULD return an NFS4ERR_BADOWNER | | groups in numeric form, a server SHOULD return an NFS4ERR_BADOWNER | |
| error when there is a valid translation for the user or owner | | error when there is a valid translation for the user or owner | |
| designated in this way. In that case, the client must use the | | designated in this way. In that case, the client must use the | |
| appropriate name@domain string and not the special form for | | appropriate name@domain string and not the special form for | |
| compatibility. | | compatibility. | |
| | | | |
| The owner string "nobody" may be used to designate an anonymous user, | | The owner string "nobody" may be used to designate an anonymous user, | |
| which will be associated with a file created by a security principal | | which will be associated with a file created by a security principal | |
| that cannot be mapped through normal means to the owner attribute. | | that cannot be mapped through normal means to the owner attribute. | |
| | | | |
| skipping to change at page 48, line 5 | | skipping to change at page 50, line 5 | |
| allocations to other files or directories. | | allocations to other files or directories. | |
| | | | |
| quota_used | | quota_used | |
| The value in bytes which represent the amount of disc space used | | The value in bytes which represent the amount of disc space used | |
| by this file or directory and possibly a number of other similar | | by this file or directory and possibly a number of other similar | |
| files or directories, where the set of "similar" meets at least | | files or directories, where the set of "similar" meets at least | |
| the criterion that allocating space to any file or directory in | | the criterion that allocating space to any file or directory in | |
| the set will reduce the "quota_avail_hard" of every other file | | the set will reduce the "quota_avail_hard" of every other file | |
| or directory in the set. | | or directory in the set. | |
| | | | |
|
| Draft Specification NFS version 4 Protocol October 2002 | | Draft Specification NFS version 4 Protocol November 2002 | |
| | | | |
| Note that there may be a number of distinct but overlapping sets | | Note that there may be a number of distinct but overlapping sets | |
| of files or directories for which a quota_used value is | | of files or directories for which a quota_used value is | |
| maintained. E.g. "all files with a given owner", "all files with | | maintained. E.g. "all files with a given owner", "all files with | |
| a given group owner". etc. | | a given group owner". etc. | |
| | | | |
| The server is at liberty to choose any of those sets but should | | The server is at liberty to choose any of those sets but should | |
| do so in a repeatable way. The rule may be configured per- | | do so in a repeatable way. The rule may be configured per- | |
| filesystem or may be "choose the set with the smallest quota". | | filesystem or may be "choose the set with the smallest quota". | |
| | | | |
| 5.11. Access Control Lists | | 5.11. Access Control Lists | |
| | | | |
| The NFS version 4 ACL attribute is an array of access control entries | | The NFS version 4 ACL attribute is an array of access control entries | |
|
| (ACE). There are various access control entry types, as defined in | | (ACE). Although, the client can read and write the ACL attribute, | |
| the Section "ACE type". The server is able to communicate which ACE | | the NFSv4 model is the server does all access control based on the | |
| types are supported by returning the appropriate value within the | | server's interpretation of the ACL. If at any point the client wants | |
| | | to check access without issuing an operation that modifies or reads | |
| | | data or metadata, the client can use the OPEN and ACCESS operations | |
| | | to do so. There are various access control entry types, as defined | |
| | | in the Section "ACE type". The server is able to communicate which | |
| | | ACE types are supported by returning the appropriate value within the | |
| aclsupport attribute. Each ACE covers one or more operations on a | | aclsupport attribute. Each ACE covers one or more operations on a | |
| file or directory as described in the Section "ACE Access Mask". It | | file or directory as described in the Section "ACE Access Mask". It | |
| may also contain one or more flags that modify the semantics of the | | may also contain one or more flags that modify the semantics of the | |
| ACE as defined in the Section "ACE flag". | | ACE as defined in the Section "ACE flag". | |
| | | | |
| The NFS ACE attribute is defined as follows: | | The NFS ACE attribute is defined as follows: | |
| | | | |
| typedef uint32_t acetype4; | | typedef uint32_t acetype4; | |
| typedef uint32_t aceflag4; | | typedef uint32_t aceflag4; | |
| typedef uint32_t acemask4; | | typedef uint32_t acemask4; | |
| | | | |
| struct nfsace4 { | | struct nfsace4 { | |
| acetype4 type; | | acetype4 type; | |
| aceflag4 flag; | | aceflag4 flag; | |
| acemask4 access_mask; | | acemask4 access_mask; | |
|
| utf8string who; | | utf8str_mixed who; | |
| }; | | }; | |
| | | | |
| To determine if a request succeeds, each nfsace4 entry is processed | | To determine if a request succeeds, each nfsace4 entry is processed | |
| in order by the server. Only ACEs which have a "who" that matches | | in order by the server. Only ACEs which have a "who" that matches | |
| the requester are considered. Each ACE is processed until all of the | | the requester are considered. Each ACE is processed until all of the | |
| bits of the requester's access have been ALLOWED. Once a bit (see | | bits of the requester's access have been ALLOWED. Once a bit (see | |
| below) has been ALLOWED by an ACCESS_ALLOWED_ACE, it is no longer | | below) has been ALLOWED by an ACCESS_ALLOWED_ACE, it is no longer | |
| considered in the processing of later ACEs. If an ACCESS_DENIED_ACE | | considered in the processing of later ACEs. If an ACCESS_DENIED_ACE | |
| is encountered where the requester's access still has unALLOWED bits | | is encountered where the requester's access still has unALLOWED bits | |
| in common with the "access_mask" of the ACE, the request is denied. | | in common with the "access_mask" of the ACE, the request is denied. | |
| However, unlike the ALLOWED and DENIED ACE types, the ALARM and AUDIT | | However, unlike the ALLOWED and DENIED ACE types, the ALARM and AUDIT | |
| ACE types do not affect a requester's access, and instead are for | | ACE types do not affect a requester's access, and instead are for | |
| triggering events as a result of a requester's access attempt. | | triggering events as a result of a requester's access attempt. | |
|
| | | | |
| | | Draft Specification NFS version 4 Protocol November 2002 | |
| | | | |
| Therefore, all AUDIT and ALARM ACEs are processed until end of the | | Therefore, all AUDIT and ALARM ACEs are processed until end of the | |
| ACL. When the ACL is fully processed, if there are bits in | | ACL. When the ACL is fully processed, if there are bits in | |
| requester's mask that have not been considered whether the server | | requester's mask that have not been considered whether the server | |
| allows or denies the access is undefined. If there is a mode | | allows or denies the access is undefined. If there is a mode | |
| attribute on the file, then this cannot happen, since the mode's | | attribute on the file, then this cannot happen, since the mode's | |
|
| | | | |
| Draft Specification NFS version 4 Protocol October 2002 | | | |
| | | | |
| MODE4_*OTH bits will map to EVERYONE@ ACEs that unambiguously specify | | MODE4_*OTH bits will map to EVERYONE@ ACEs that unambiguously specify | |
| the requester's access. | | the requester's access. | |
| | | | |
| The NFS version 4 ACL model is quite rich. Some server platforms may | | The NFS version 4 ACL model is quite rich. Some server platforms may | |
| provide access control functionality that goes beyond the UNIX-style | | provide access control functionality that goes beyond the UNIX-style | |
| mode attribute, but which is not as rich as the NFS ACL model. So | | mode attribute, but which is not as rich as the NFS ACL model. So | |
| that users can take advantage of this more limited functionality, the | | that users can take advantage of this more limited functionality, the | |
| server may indicate that it supports ACLs as long as it follows the | | server may indicate that it supports ACLs as long as it follows the | |
| guidelines for mapping between its ACL model and the NFS version 4 | | guidelines for mapping between its ACL model and the NFS version 4 | |
| ACL model. | | ACL model. | |
| | | | |
| skipping to change at page 49, line 51 | | skipping to change at page 52, line 4 | |
| uses any of the access methods specified | | uses any of the access methods specified | |
| in acemask4. | | in acemask4. | |
| | | | |
| ALARM Generate a system ALARM (system | | ALARM Generate a system ALARM (system | |
| dependent) when any access attempt is | | dependent) when any access attempt is | |
| made to a file or directory for the | | made to a file or directory for the | |
| access methods specified in acemask4. | | access methods specified in acemask4. | |
| | | | |
| A server need not support all of the above ACE types. The bitmask | | A server need not support all of the above ACE types. The bitmask | |
| constants used to represent the above definitions within the | | constants used to represent the above definitions within the | |
|
| | | | |
| | | Draft Specification NFS version 4 Protocol November 2002 | |
| | | | |
| aclsupport attribute are as follows: | | aclsupport attribute are as follows: | |
| | | | |
| const ACL4_SUPPORT_ALLOW_ACL = 0x00000001; | | const ACL4_SUPPORT_ALLOW_ACL = 0x00000001; | |
| const ACL4_SUPPORT_DENY_ACL = 0x00000002; | | const ACL4_SUPPORT_DENY_ACL = 0x00000002; | |
|
| | | | |
| Draft Specification NFS version 4 Protocol October 2002 | | | |
| | | | |
| const ACL4_SUPPORT_AUDIT_ACL = 0x00000004; | | const ACL4_SUPPORT_AUDIT_ACL = 0x00000004; | |
| const ACL4_SUPPORT_ALARM_ACL = 0x00000008; | | const ACL4_SUPPORT_ALARM_ACL = 0x00000008; | |
| | | | |
| The semantics of the "type" field follow the descriptions provided | | The semantics of the "type" field follow the descriptions provided | |
| above. | | above. | |
| | | | |
| The constants used for the type field (acetype4) are as follows: | | The constants used for the type field (acetype4) are as follows: | |
| | | | |
| const ACE4_ACCESS_ALLOWED_ACE_TYPE = 0x00000000; | | const ACE4_ACCESS_ALLOWED_ACE_TYPE = 0x00000000; | |
| const ACE4_ACCESS_DENIED_ACE_TYPE = 0x00000001; | | const ACE4_ACCESS_DENIED_ACE_TYPE = 0x00000001; | |
| | | | |
| skipping to change at page 50, line 48 | | skipping to change at page 53, line 4 | |
| _______________________________________________________________ | | _______________________________________________________________ | |
| READ_DATA Permission to read the data of the file | | READ_DATA Permission to read the data of the file | |
| LIST_DIRECTORY Permission to list the contents of a | | LIST_DIRECTORY Permission to list the contents of a | |
| directory | | directory | |
| WRITE_DATA Permission to modify the file's data | | WRITE_DATA Permission to modify the file's data | |
| ADD_FILE Permission to add a new file to a | | ADD_FILE Permission to add a new file to a | |
| directory | | directory | |
| APPEND_DATA Permission to append data to a file | | APPEND_DATA Permission to append data to a file | |
| ADD_SUBDIRECTORY Permission to create a subdirectory to a | | ADD_SUBDIRECTORY Permission to create a subdirectory to a | |
| directory | | directory | |
|
| | | | |
| | | Draft Specification NFS version 4 Protocol November 2002 | |
| | | | |
| READ_NAMED_ATTRS Permission to read the named attributes | | READ_NAMED_ATTRS Permission to read the named attributes | |
| of a file | | of a file | |
| WRITE_NAMED_ATTRS Permission to write the named attributes | | WRITE_NAMED_ATTRS Permission to write the named attributes | |
| of a file | | of a file | |
| EXECUTE Permission to execute a file | | EXECUTE Permission to execute a file | |
|
| | | | |
| Draft Specification NFS version 4 Protocol October 2002 | | | |
| | | | |
| DELETE_CHILD Permission to delete a file or directory | | DELETE_CHILD Permission to delete a file or directory | |
| within a directory | | within a directory | |
| READ_ATTRIBUTES The ability to read basic attributes | | READ_ATTRIBUTES The ability to read basic attributes | |
| (non-acls) of a file | | (non-acls) of a file | |
| WRITE_ATTRIBUTES Permission to change basic attributes | | WRITE_ATTRIBUTES Permission to change basic attributes | |
| (non-acls) of a file | | (non-acls) of a file | |
|
| | | | |
| DELETE Permission to Delete the file | | DELETE Permission to Delete the file | |
| READ_ACL Permission to Read the ACL | | READ_ACL Permission to Read the ACL | |
| WRITE_ACL Permission to Write the ACL | | WRITE_ACL Permission to Write the ACL | |
| WRITE_OWNER Permission to change the owner | | WRITE_OWNER Permission to change the owner | |
| SYNCHRONIZE Permission to access file locally at the | | SYNCHRONIZE Permission to access file locally at the | |
| server with synchronous reads and writes | | server with synchronous reads and writes | |
| | | | |
| The bitmask constants used for the access mask field are as follows: | | The bitmask constants used for the access mask field are as follows: | |
| | | | |
| const ACE4_READ_DATA = 0x00000001; | | const ACE4_READ_DATA = 0x00000001; | |
| | | | |
| skipping to change at page 51, line 53 | | skipping to change at page 54, line 4 | |
| systems might not distinguish APPEND_DATA (the ability to append to a | | systems might not distinguish APPEND_DATA (the ability to append to a | |
| file) from WRITE_DATA (the ability to modify existing contents); both | | file) from WRITE_DATA (the ability to modify existing contents); both | |
| masks would be tied to a single ``write'' permission. When such a | | masks would be tied to a single ``write'' permission. When such a | |
| server returns attributes to the client, it would show both | | server returns attributes to the client, it would show both | |
| APPEND_DATA and WRITE_DATA if and only if the write permission is | | APPEND_DATA and WRITE_DATA if and only if the write permission is | |
| enabled. | | enabled. | |
| | | | |
| If a server receives a SETATTR request that it cannot accurately | | If a server receives a SETATTR request that it cannot accurately | |
| implement, it should error in the direction of more restricted | | implement, it should error in the direction of more restricted | |
| access. For example, suppose a server cannot distinguish overwriting | | access. For example, suppose a server cannot distinguish overwriting | |
|
| | | | |
| | | Draft Specification NFS version 4 Protocol November 2002 | |
| | | | |
| data from appending new data, as described in the previous paragraph. | | data from appending new data, as described in the previous paragraph. | |
| If a client submits an ACE where APPEND_DATA is set but WRITE_DATA is | | If a client submits an ACE where APPEND_DATA is set but WRITE_DATA is | |
| not (or vice versa), the server should reject the request with | | not (or vice versa), the server should reject the request with | |
| NFS4ERR_ATTRNOTSUPP. Nonetheless, if the ACE has type DENY, the | | NFS4ERR_ATTRNOTSUPP. Nonetheless, if the ACE has type DENY, the | |
| server may silently turn on the other bit, so that both APPEND_DATA | | server may silently turn on the other bit, so that both APPEND_DATA | |
|
| | | | |
| Draft Specification NFS version 4 Protocol October 2002 | | | |
| | | | |
| and WRITE_DATA are denied. | | and WRITE_DATA are denied. | |
| | | | |
| 5.11.3. ACE flag | | 5.11.3. ACE flag | |
| | | | |
| The "flag" field contains values based on the following descriptions. | | The "flag" field contains values based on the following descriptions. | |
| | | | |
| ACE4_FILE_INHERIT_ACE | | ACE4_FILE_INHERIT_ACE | |
| | | | |
| Can be placed on a directory and indicates that this ACE should be | | Can be placed on a directory and indicates that this ACE should be | |
| added to each new non-directory file created. | | added to each new non-directory file created. | |
| | | | |
| skipping to change at page 52, line 48 | | skipping to change at page 55, line 4 | |
| | | | |
| ACE4_SUCCESSFUL_ACCESS_ACE_FLAG | | ACE4_SUCCESSFUL_ACCESS_ACE_FLAG | |
| | | | |
| ACL4_FAILED_ACCESS_ACE_FLAG | | ACL4_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 relate only to | | ACE4_FAILED_ACCESS_ACE_FLAG (FAILED) flag bits relate only to | |
| 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, the | | (ALARM) ACE types. If during the processing of the file's ACL, the | |
| server encounters an AUDIT or ALARM ACE that matches the principal | | server encounters an AUDIT or ALARM ACE that matches the principal | |
|
| | | | |
| | | Draft Specification NFS version 4 Protocol November 2002 | |
| | | | |
| attempting the OPEN, the server notes that fact, and the presence, if | | attempting the OPEN, the server notes that fact, and the presence, if | |
| any, of the SUCCESS and FAILED flags encountered in the AUDIT or | | any, of the SUCCESS and FAILED flags encountered in the AUDIT or | |
| ALARM ACE. Once the server completes the ACL processing, and the | | ALARM ACE. Once the server completes the ACL processing, and the | |
| share reservation processing, and the OPEN call, it then notes if the | | share reservation processing, and the OPEN call, it then notes if the | |
| OPEN succeeded or failed. If the OPEN succeeded, and if the SUCCESS | | OPEN succeeded or failed. If the OPEN succeeded, and if the SUCCESS | |
|
| | | | |
| Draft Specification NFS version 4 Protocol October 2002 | | | |
| | | | |
| flag was set for a matching AUDIT or ALARM, then the appropriate | | flag was set for a matching AUDIT or ALARM, then the appropriate | |
| AUDIT or ALARM event occurs. If the OPEN failed, and if the FAILED | | AUDIT or ALARM event occurs. If the OPEN failed, and if the FAILED | |
| flag was set for the matching AUDIT or ALARM, then the appropriate | | flag was set for the matching AUDIT or ALARM, then the appropriate | |
| AUDIT or ALARM event occurs. Clearly either or both of the SUCCESS | | AUDIT or ALARM event occurs. Clearly either or both of the SUCCESS | |
| or FAILED can be set, but if neither is set, the AUDIT or ALARM ACE | | or FAILED can be set, but if neither is set, the AUDIT or ALARM ACE | |
| is not useful. | | is not useful. | |
| | | | |
| The previously described processing applies to that of the ACCESS | | The previously described processing applies to that of the ACCESS | |
| operation as well. The difference being that "success" or "failure" | | operation as well. The difference being that "success" or "failure" | |
| does not mean whether ACCESS returns NFS4_OK or not. Success means | | does not mean whether ACCESS returns NFS4_OK or not. Success means | |
| | | | |
| skipping to change at page 53, line 52 | | skipping to change at page 56, line 5 | |
| For example, suppose a client tries to set an ACE with | | For example, suppose a client tries to set an ACE with | |
| ACE4_FILE_INHERIT_ACE set but not ACE4_DIRECTORY_INHERIT_ACE. If the | | ACE4_FILE_INHERIT_ACE set but not ACE4_DIRECTORY_INHERIT_ACE. If the | |
| server does not support any form of ACL inheritance, the server | | server does not support any form of ACL inheritance, the server | |
| should reject the request with NFS4ERR_ATTRNOTSUPP. If the server | | should reject the request with NFS4ERR_ATTRNOTSUPP. If the server | |
| supports a single "inherit ACE" flag that applies to both files and | | supports a single "inherit ACE" flag that applies to both files and | |
| directories, the server may reject the request (i.e., requiring the | | directories, the server may reject the request (i.e., requiring the | |
| client to set both the file and directory inheritance flags). The | | client to set both the file and directory inheritance flags). The | |
| server may also accept the request and silently turn on the | | server may also accept the request and silently turn on the | |
| ACE4_DIRECTORY_INHERIT_ACE flag. | | ACE4_DIRECTORY_INHERIT_ACE flag. | |
| | | | |
|
| | | Draft Specification NFS version 4 Protocol November 2002 | |
| | | | |
| 5.11.4. ACE who | | 5.11.4. ACE who | |
| | | | |
| There are several special identifiers ("who") which need to be | | There are several special identifiers ("who") which need to be | |
|
| | | | |
| Draft Specification NFS version 4 Protocol October 2002 | | | |
| | | | |
| understood universally, rather than in the context of a particular | | understood universally, rather than in the context of a particular | |
| DNS domain. Some of these identifiers cannot be understood when an | | DNS domain. Some of these identifiers cannot be understood when an | |
| NFS client accesses the server, but have meaning when a local process | | NFS client accesses the server, but have meaning when a local process | |
| accesses the file. The ability to display and modify these | | accesses the file. The ability to display and modify these | |
| permissions is permitted over NFS, even if none of the access methods | | permissions is permitted over NFS, even if none of the access methods | |
| on the server understands the identifiers. | | on the server understands the identifiers. | |
| | | | |
| Who Description | | Who Description | |
| _______________________________________________________________ | | _______________________________________________________________ | |
| "OWNER" The owner of the file. | | "OWNER" The owner of the file. | |
| | | | |
| skipping to change at page 54, line 52 | | skipping to change at page 57, line 4 | |
| const MODE4_XUSR = 0x040; /* execute permission: owner */ | | const MODE4_XUSR = 0x040; /* execute permission: owner */ | |
| const MODE4_RGRP = 0x020; /* read permission: group */ | | const MODE4_RGRP = 0x020; /* read permission: group */ | |
| const MODE4_WGRP = 0x010; /* write permission: group */ | | const MODE4_WGRP = 0x010; /* write permission: group */ | |
| const MODE4_XGRP = 0x008; /* execute permission: group */ | | const MODE4_XGRP = 0x008; /* execute permission: group */ | |
| const MODE4_ROTH = 0x004; /* read permission: other */ | | const MODE4_ROTH = 0x004; /* read permission: other */ | |
| const MODE4_WOTH = 0x002; /* write permission: other */ | | const MODE4_WOTH = 0x002; /* write permission: other */ | |
| const MODE4_XOTH = 0x001; /* execute permission: other */ | | const MODE4_XOTH = 0x001; /* execute permission: other */ | |
| | | | |
| Bits MODE4_RUSR, MODE4_WUSR, and MODE4_XUSR apply to the principal | | Bits MODE4_RUSR, MODE4_WUSR, and MODE4_XUSR apply to the principal | |
| identified in the owner attribute. Bits MODE4_RGRP, MODE4_WGRP, and | | identified in the owner attribute. Bits MODE4_RGRP, MODE4_WGRP, and | |
|
| | | | |
| | | Draft Specification NFS version 4 Protocol November 2002 | |
| | | | |
| MODE4_XGRP apply to the principals identified in the owner_group | | MODE4_XGRP apply to the principals identified in the owner_group | |
| attribute. Bits MODE4_ROTH, MODE4_WOTH, MODE4_XOTH apply to any | | attribute. Bits MODE4_ROTH, MODE4_WOTH, MODE4_XOTH apply to any | |
| principal that does not match that in the owner group, and does not | | principal that does not match that in the owner group, and does not | |
|
| | | | |
| Draft Specification NFS version 4 Protocol October 2002 | | | |
| | | | |
| have a group matching that of the owner_group attribute. | | have a group matching that of the owner_group attribute. | |
| | | | |
| The remaining bits are not defined by this protocol and MUST NOT be | | The remaining bits are not defined by this protocol and MUST NOT be | |
| used. The minor version mechanism must be used to define further bit | | used. The minor version mechanism must be used to define further bit | |
| usage. | | usage. | |
| | | | |
| Note that in UNIX, if a file has the MODE4_SGID bit set and no | | Note that in UNIX, if a file has the MODE4_SGID bit set and no | |
| MODE4_XGRP bit set, then READ and WRITE must use mandatory file | | MODE4_XGRP bit set, then READ and WRITE must use mandatory file | |
| locking. | | locking. | |
| | | | |
| | | | |
| skipping to change at page 55, line 55 | | skipping to change at page 58, line 4 | |
| system call returns. The stat() system call is returning the fileid | | system call returns. The stat() system call is returning the fileid | |
| of the root of the mounted filesystem, whereas readdir() is returning | | of the root of the mounted filesystem, whereas readdir() is returning | |
| the fileid stat() would have returned before any filesystems were | | the fileid stat() would have returned before any filesystems were | |
| mounted on the mount point. | | mounted on the mount point. | |
| | | | |
| Unlike NFS version 3, NFS version 4 allows a client's LOOKUP request | | Unlike NFS version 3, NFS version 4 allows a client's LOOKUP request | |
| to cross other filesystems. The client detects the filesystem | | to cross other filesystems. The client detects the filesystem | |
| crossing whenever the filehandle argument of LOOKUP has an fsid | | crossing whenever the filehandle argument of LOOKUP has an fsid | |
| attribute different from that of the filehandle returned by LOOKUP. A | | attribute different from that of the filehandle returned by LOOKUP. A | |
| UNIX-based client will consider this a "mount point crossing". UNIX | | UNIX-based client will consider this a "mount point crossing". UNIX | |
|
| | | | |
| | | Draft Specification NFS version 4 Protocol November 2002 | |
| | | | |
| has a legacy scheme for allowing a process to determine its current | | has a legacy scheme for allowing a process to determine its current | |
| working directory. This relies on readdir() of a mount point's parent | | working directory. This relies on readdir() of a mount point's parent | |
| and stat() of the mount point returning fileids as previously | | and stat() of the mount point returning fileids as previously | |
|
| | | | |
| Draft Specification NFS version 4 Protocol October 2002 | | | |
| | | | |
| described. The mounted_on_fileid attribute corresponds to the fileid | | described. The mounted_on_fileid attribute corresponds to the fileid | |
| that readdir() would have returned as described previously. | | that readdir() would have returned as described previously. | |
| | | | |
| While the NFS version 4 client could simply fabricate a fileid | | While the NFS version 4 client could simply fabricate a fileid | |
| corresponding to what mounted_on_fileid provides (and if the server | | corresponding to what mounted_on_fileid provides (and if the server | |
| does not support mounted_on_fileid, the client has no choice), there | | does not support mounted_on_fileid, the client has no choice), there | |
| is a risk that the client will generate a fileid that conflicts with | | is a risk that the client will generate a fileid that conflicts with | |
| one that is already assigned to another object in the filesystem. | | one that is already assigned to another object in the filesystem. | |
| Instead, if the server can provide the mounted_on_fileid, the | | Instead, if the server can provide the mounted_on_fileid, the | |
| potential for client operational problems in this area is eliminated. | | potential for client operational problems in this area is eliminated. | |
| | | | |
| skipping to change at page 57, line 5 | | skipping to change at page 59, line 5 | |
| fileid of a directory entry returned by readdir(). If | | fileid of a directory entry returned by readdir(). If | |
| mounted_on_fileid is requested in a GETATTR operation, the server | | mounted_on_fileid is requested in a GETATTR operation, the server | |
| should obey an invariant that has it returning a value that is equal | | should obey an invariant that has it returning a value that is equal | |
| to the file object's entry in the object's parent directory, i.e. | | to the file object's entry in the object's parent directory, i.e. | |
| what readdir() would have returned. Some operating environments | | what readdir() would have returned. Some operating environments | |
| allow a series of two or more filesystems to be mounted onto a single | | allow a series of two or more filesystems to be mounted onto a single | |
| mount point. In this case, for the server to obey the aforementioned | | mount point. In this case, for the server to obey the aforementioned | |
| invariant, it will need to find the base mount point, and not the | | invariant, it will need to find the base mount point, and not the | |
| intermediate mount points. | | intermediate mount points. | |
| | | | |
|
| Draft Specification NFS version 4 Protocol October 2002 | | Draft Specification NFS version 4 Protocol November 2002 | |
| | | | |
| 6. Filesystem Migration and Replication | | 6. Filesystem Migration and Replication | |
| | | | |
| With the use of the recommended attribute "fs_locations", the NFS | | With the use of the recommended attribute "fs_locations", the NFS | |
| version 4 server has a method of providing filesystem migration or | | version 4 server has a method of providing filesystem migration or | |
| replication services. For the purposes of migration and replication, | | replication services. For the purposes of migration and replication, | |
| a filesystem will be defined as all files that share a given fsid | | a filesystem will be defined as all files that share a given fsid | |
| (both major and minor values are the same). | | (both major and minor values are the same). | |
| | | | |
| The fs_locations attribute provides a list of filesystem locations. | | The fs_locations attribute provides a list of filesystem locations. | |
| | | | |
| skipping to change at page 58, line 5 | | skipping to change at page 60, line 5 | |
| | | | |
| Once the servers participating in the migration have completed the | | Once the servers participating in the migration have completed the | |
| move of the filesystem, the error NFS4ERR_MOVED will be returned for | | move of the filesystem, the error NFS4ERR_MOVED will be returned for | |
| subsequent requests received by the original server. The | | subsequent requests received by the original server. The | |
| NFS4ERR_MOVED error is returned for all operations except PUTFH and | | NFS4ERR_MOVED error is returned for all operations except PUTFH and | |
| GETATTR. Upon receiving the NFS4ERR_MOVED error, the client will | | GETATTR. Upon receiving the NFS4ERR_MOVED error, the client will | |
| obtain the value of the fs_locations attribute. The client will then | | obtain the value of the fs_locations attribute. The client will then | |
| use the contents of the attribute to redirect its requests to the | | use the contents of the attribute to redirect its requests to the | |
| specified server. To facilitate the use of GETATTR, operations such | | specified server. To facilitate the use of GETATTR, operations such | |
| | | | |
|
| Draft Specification NFS version 4 Protocol October 2002 | | Draft Specification NFS version 4 Protocol November 2002 | |
| | | | |
| as PUTFH must also be accepted by the server for the migrated file | | as PUTFH must also be accepted by the server for the migrated file | |
| system's filehandles. Note that if the server returns NFS4ERR_MOVED, | | system's filehandles. Note that if the server returns NFS4ERR_MOVED, | |
| the server MUST support the fs_locations attribute. | | the server MUST support the fs_locations attribute. | |
| | | | |
| If the client requests more attributes than just fs_locations, the | | If the client requests more attributes than just fs_locations, the | |
| server may return fs_locations only. This is to be expected since | | server may return fs_locations only. This is to be expected since | |
| the server has migrated the filesystem and may not have a method of | | the server has migrated the filesystem and may not have a method of | |
| obtaining additional attribute data. | | obtaining additional attribute data. | |
| | | | |
| | | | |
| skipping to change at page 58, line 29 | | skipping to change at page 60, line 29 | |
| limited to locking/share state, delegation state, and asynchronous | | limited to locking/share state, delegation state, and asynchronous | |
| file writes which are represented by WRITE and COMMIT verifiers. The | | file writes which are represented by WRITE and COMMIT verifiers. The | |
| server should strive to minimize the impact on its clients during and | | server should strive to minimize the impact on its clients during and | |
| after the migration process. | | after the migration process. | |
| | | | |
| 6.3. Interpretation of the fs_locations Attribute | | 6.3. Interpretation of the fs_locations Attribute | |
| | | | |
| The fs_location attribute is structured in the following way: | | The fs_location attribute is structured in the following way: | |
| | | | |
| struct fs_location { | | struct fs_location { | |
|
| utf8string server<>; | | utf8str_cis server<>; | |
| pathname4 rootpath; | | pathname4 rootpath; | |
| }; | | }; | |
| | | | |
| struct fs_locations { | | struct fs_locations { | |
| pathname4 fs_root; | | pathname4 fs_root; | |
| fs_location locations<>; | | fs_location locations<>; | |
| }; | | }; | |
| | | | |
| The fs_location struct is used to represent the location of a | | The fs_location struct is used to represent the location of a | |
| filesystem by providing a server name and the path to the root of the | | filesystem by providing a server name and the path to the root of the | |
| | | | |
| skipping to change at page 59, line 5 | | skipping to change at page 61, line 5 | |
| | | | |
| The fs_locations struct and attribute then contains an array of | | The fs_locations struct and attribute then contains an array of | |
| locations. Since the name space of each server may be constructed | | locations. Since the name space of each server may be constructed | |
| differently, the "fs_root" field is provided. The path represented | | differently, the "fs_root" field is provided. The path represented | |
| by fs_root represents the location of the filesystem in the server's | | by fs_root represents the location of the filesystem in the server's | |
| name space. Therefore, the fs_root path is only associated with the | | name space. Therefore, the fs_root path is only associated with the | |
| server from which the fs_locations attribute was obtained. The | | server from which the fs_locations attribute was obtained. The | |
| fs_root path is meant to aid the client in locating the filesystem at | | fs_root path is meant to aid the client in locating the filesystem at | |
| the various servers listed. | | the various servers listed. | |
| | | | |
|
| Draft Specification NFS version 4 Protocol October 2002 | | Draft Specification NFS version 4 Protocol November 2002 | |
| | | | |
| As an example, there is a replicated filesystem located at two | | As an example, there is a replicated filesystem located at two | |
| servers (servA and servB). At servA the filesystem is located at | | servers (servA and servB). At servA the filesystem is located at | |
| path "/a/b/c". At servB the filesystem is located at path "/x/y/z". | | path "/a/b/c". At servB the filesystem is located at path "/x/y/z". | |
| In this example the client accesses the filesystem first at servA | | In this example the client accesses the filesystem first at servA | |
| with a multi-component lookup path of "/a/b/c/d". Since the client | | with a multi-component lookup path of "/a/b/c/d". Since the client | |
| used a multi-component lookup to obtain the filehandle at "/a/b/c/d", | | used a multi-component lookup to obtain the filehandle at "/a/b/c/d", | |
| it is unaware that the filesystem's root is located in servA's name | | it is unaware that the filesystem's root is located in servA's name | |
| space at "/a/b/c". When the client switches to servB, it will need | | space at "/a/b/c". When the client switches to servB, it will need | |
| to determine that the directory it first referenced at servA is now | | to determine that the directory it first referenced at servA is now | |
| | | | |
| skipping to change at page 60, line 5 | | skipping to change at page 62, line 5 | |
| of the fh_expire_type attribute, whether volatile filehandles will | | of the fh_expire_type attribute, whether volatile filehandles will | |
| expire at the migration or replication event. If the bit | | expire at the migration or replication event. If the bit | |
| FH4_VOL_MIGRATION is set in the fh_expire_type attribute, the client | | FH4_VOL_MIGRATION is set in the fh_expire_type attribute, the client | |
| must treat the volatile filehandle as if the server had returned the | | must treat the volatile filehandle as if the server had returned the | |
| NFS4ERR_FHEXPIRED error. At the migration or replication event in | | NFS4ERR_FHEXPIRED error. At the migration or replication event in | |
| the presence of the FH4_VOL_MIGRATION bit, the client will not | | the presence of the FH4_VOL_MIGRATION bit, the client will not | |
| present the original or old volatile filehandle to the new server. | | present the original or old volatile filehandle to the new server. | |
| The client will start its communication with the new server by | | The client will start its communication with the new server by | |
| recovering its filehandles using the saved file names. | | recovering its filehandles using the saved file names. | |
| | | | |
|
| Draft Specification NFS version 4 Protocol October 2002 | | Draft Specification NFS version 4 Protocol November 2002 | |
| | | | |
| 7. NFS Server Name Space | | 7. NFS Server Name Space | |
| | | | |
| 7.1. Server Exports | | 7.1. Server Exports | |
| | | | |
| On a UNIX server the name space describes all the files reachable by | | On a UNIX server the name space describes all the files reachable by | |
| pathnames under the root directory or "/". On a Windows NT server | | pathnames under the root directory or "/". On a Windows NT server | |
| the name space constitutes all the files on disks named by mapped | | the name space constitutes all the files on disks named by mapped | |
| disk letters. NFS server administrators rarely make the entire | | disk letters. NFS server administrators rarely make the entire | |
| server's filesystem name space available to NFS clients. More often | | server's filesystem name space available to NFS clients. More often | |
| | | | |
| skipping to change at page 61, line 5 | | skipping to change at page 63, line 5 | |
| the server's name space on the client: it is static. If the server | | the server's name space on the client: it is static. If the server | |
| administrator adds a new export the client will be unaware of it. | | administrator adds a new export the client will be unaware of it. | |
| | | | |
| 7.3. Server Pseudo Filesystem | | 7.3. Server Pseudo Filesystem | |
| | | | |
| NFS version 4 servers avoid this name space inconsistency by | | NFS version 4 servers avoid this name space inconsistency by | |
| presenting all the exports within the framework of a single server | | presenting all the exports within the framework of a single server | |
| name space. An NFS version 4 client uses LOOKUP and READDIR | | name space. An NFS version 4 client uses LOOKUP and READDIR | |
| operations to browse seamlessly from one export to another. Portions | | operations to browse seamlessly from one export to another. Portions | |
| | | | |
|
| Draft Specification NFS version 4 Protocol October 2002 | | Draft Specification NFS version 4 Protocol November 2002 | |
| | | | |
| of the server name space that are not exported are bridged via a | | of the server name space that are not exported are bridged via a | |
| "pseudo filesystem" that provides a view of exported directories | | "pseudo filesystem" that provides a view of exported directories | |
| only. A pseudo filesystem has a unique fsid and behaves like a | | only. A pseudo filesystem has a unique fsid and behaves like a | |
| normal, read only filesystem. | | normal, read only filesystem. | |
| | | | |
| Based on the construction of the server's name space, it is possible | | Based on the construction of the server's name space, it is possible | |
| that multiple pseudo filesystems may exist. For example, | | that multiple pseudo filesystems may exist. For example, | |
| | | | |
| /a pseudo filesystem | | /a pseudo filesystem | |
| | | | |
| skipping to change at page 62, line 5 | | skipping to change at page 64, line 5 | |
| | | | |
| 7.6. Exported Root | | 7.6. Exported Root | |
| | | | |
| If the server's root filesystem is exported, one might conclude that | | If the server's root filesystem is exported, one might conclude that | |
| a pseudo-filesystem is not needed. This would be wrong. Assume the | | a pseudo-filesystem is not needed. This would be wrong. Assume the | |
| following filesystems on a server: | | following filesystems on a server: | |
| | | | |
| / disk1 (exported) | | / disk1 (exported) | |
| /a disk2 (not exported) | | /a disk2 (not exported) | |
| | | | |
|
| Draft Specification NFS version 4 Protocol October 2002 | | Draft Specification NFS version 4 Protocol November 2002 | |
| | | | |
| /a/b disk3 (exported) | | /a/b disk3 (exported) | |
| | | | |
| Because disk2 is not exported, disk3 cannot be reached with simple | | Because disk2 is not exported, disk3 cannot be reached with simple | |
| LOOKUPs. The server must bridge the gap with a pseudo-filesystem. | | LOOKUPs. The server must bridge the gap with a pseudo-filesystem. | |
| | | | |
| 7.7. Mount Point Crossing | | 7.7. Mount Point Crossing | |
| | | | |
| The server filesystem environment may be constructed in such a way | | The server filesystem environment may be constructed in such a way | |
| that one filesystem contains a directory which is 'covered' or | | that one filesystem contains a directory which is 'covered' or | |
| | | | |
| skipping to change at page 63, line 5 | | skipping to change at page 65, line 5 | |
| chooses to limit the contents of the pseudo filesystem, the server | | chooses to limit the contents of the pseudo filesystem, the server | |
| may effectively hide filesystems from a client that may otherwise | | may effectively hide filesystems from a client that may otherwise | |
| have legitimate access. | | have legitimate access. | |
| | | | |
| As suggested practice, the server should apply the security policy of | | As suggested practice, the server should apply the security policy of | |
| a shared resource in the server's namespace to the components of the | | a shared resource in the server's namespace to the components of the | |
| resource's ancestors. For example: | | resource's ancestors. For example: | |
| | | | |
| / | | / | |
| | | | |
|
| Draft Specification NFS version 4 Protocol October 2002 | | Draft Specification NFS version 4 Protocol November 2002 | |
| | | | |
| /a/b | | /a/b | |
| /a/b/c | | /a/b/c | |
| | | | |
| The /a/b/c directory is a real filesystem and is the shared resource. | | The /a/b/c directory is a real filesystem and is the shared resource. | |
| The security policy for /a/b/c is Kerberos with integrity. The | | The security policy for /a/b/c is Kerberos with integrity. The | |
| server should apply the same security policy to /, /a, and /a/b. | | server should apply the same security policy to /, /a, and /a/b. | |
| This allows for the extension of the protection of the server's | | This allows for the extension of the protection of the server's | |
| namespace to the ancestors of the real shared resource. | | namespace to the ancestors of the real shared resource. | |
| | | | |
| For the case of the use of multiple, disjoint security mechanisms in | | For the case of the use of multiple, disjoint security mechanisms in | |
| the server's resources, the security for a particular object in the | | the server's resources, the security for a particular object in the | |
| server's namespace should be the union of all security mechanisms of | | server's namespace should be the union of all security mechanisms of | |
| all direct descendants. | | all direct descendants. | |
| | | | |
|
| Draft Specification NFS version 4 Protocol October 2002 | | Draft Specification NFS version 4 Protocol November 2002 | |
| | | | |
| 8. File Locking and Share Reservations | | 8. File Locking and Share Reservations | |
| | | | |
| 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 share reservations the protocol | | stateful. With the inclusion of share reservations the protocol | |
| becomes substantially more dependent on state than the traditional | | becomes substantially more dependent on state than the traditional | |
| combination of NFS and NLM [XNFS]. There are three components to | | combination of NFS and NLM [XNFS]. There are three components to | |
| making this state manageable: | | making this state manageable: | |
| | | | |
| o Clear division between client and server | | o Clear division between client and server | |
| | | | |
| skipping to change at page 65, line 5 | | skipping to change at page 67, line 5 | |
| owner. | | owner. | |
| | | | |
| The following sections describe the transition from the heavy weight | | The following sections describe the transition from the heavy weight | |
| information to the eventual stateid used for most client and server | | information to the eventual stateid used for most client and server | |
| locking and lease interactions. | | locking and lease interactions. | |
| | | | |
| 8.1.1. Client ID | | 8.1.1. Client ID | |
| | | | |
| For each LOCK request, the client must identify itself to the server. | | For each LOCK request, the client must identify itself to the server. | |
| | | | |
|
| Draft Specification NFS version 4 Protocol October 2002 | | Draft Specification NFS version 4 Protocol November 2002 | |
| | | | |
| This is done in such a way as to allow for correct lock | | This is done in such a way as to allow for correct lock | |
| identification and crash recovery. A sequence of a SETCLIENTID | | identification and crash recovery. A sequence of a SETCLIENTID | |
| operation followed by a SETCLIENTID_CONFIRM operation is required to | | operation followed by a SETCLIENTID_CONFIRM operation is required to | |
| establish the identification onto the server. Establishment of | | establish the identification onto the server. Establishment of | |
| identification by a new incarnation of the client also has the effect | | identification by a new incarnation of the client also has the effect | |
| of immediately breaking any leased state that a previous incarnation | | of immediately breaking any leased state that a previous incarnation | |
| of the client might have had on the server, as opposed to forcing the | | of the client might have had on the server, as opposed to forcing the | |
| new client incarnation to wait for the leases to expire. Breaking | | new client incarnation to wait for the leases to expire. Breaking | |
| the lease state amounts to the server removing all lock, share | | the lease state amounts to the server removing all lock, share | |
| | | | |
| skipping to change at page 65, line 31 | | skipping to change at page 67, line 31 | |
| Client identification is encapsulated in the following structure: | | Client identification is encapsulated in the following structure: | |
| | | | |
| struct nfs_client_id4 { | | struct nfs_client_id4 { | |
| verifier4 verifier; | | verifier4 verifier; | |
| opaque id<NFS4_OPAQUE_LIMIT>; | | opaque id<NFS4_OPAQUE_LIMIT>; | |
| }; | | }; | |
| | | | |
| The first field, verifier is a client incarnation verifier that is | | The first field, verifier is a client incarnation verifier that is | |
| used to detect client reboots. Only if the verifier is different from | | used to detect client reboots. Only if the verifier is different from | |
| that the server has previously recorded the client (as identified by | | that the server has previously recorded the client (as identified by | |
|
| the second field f the structure, id) does the server start the | | the second field of the structure, id) does the server start the | |
| process of canceling the client's leased state. | | process of canceling the client's leased state. | |
| | | | |
| The second field, id is a variable length string that uniquely | | The second field, id is a variable length string that uniquely | |
| defines the client. | | defines the client. | |
| | | | |
| There are several considerations for how the client generates the id | | There are several considerations for how the client generates the id | |
| string: | | string: | |
| | | | |
| o The string should be unique so that multiple clients do not | | o The string should be unique so that multiple clients do not | |
| present the same string. The consequences of two clients | | present the same string. The consequences of two clients | |
| | | | |
| skipping to change at page 66, line 5 | | skipping to change at page 68, line 5 | |
| 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 NFS | | where there is no local disk and all file access is from an NFS | |
| version 4 server. | | version 4 server. | |
| | | | |
| o The string should be different for each server network address | | o The string should be different for each server network address | |
| that the client accesses, rather than common to all server | | that the client accesses, rather than common to all server | |
| network addresses. The reason is that it may not be possible for | | network addresses. The reason is that it may not be possible for | |
| the client to tell if same server is listening on multiple | | the client to tell if same server is listening on multiple | |
| network addresses. If the client issues SETCLIENTID with the | | network addresses. If the client issues SETCLIENTID with the | |
| | | | |
|
| Draft Specification NFS version 4 Protocol October 2002 | | Draft Specification NFS version 4 Protocol November 2002 | |
| | | | |
| same id string to each network address of such a server, the | | same id string to each network address of such a server, the | |
| server will think it is the same client, and each successive | | server will think it is the same client, and each successive | |
| SETCLIENTID will cause the server to begin the process of | | SETCLIENTID will cause the server to begin the process of | |
| removing the client's previous leased state. | | removing the client's previous leased state. | |
| | | | |
| o The algorithm for generating the string should not assume that | | o The algorithm for generating the string should not assume that | |
| the client's network address won't change. This includes | | the client's network address won't change. This includes | |
| changes between client incarnations and even changes while the | | changes between client incarnations and even changes while the | |
| client is stilling running in its current incarnation. This | | client is stilling running in its current incarnation. This | |
| | | | |
| skipping to change at page 67, line 5 | | skipping to change at page 69, line 5 | |
| the same between client incarnations, this shares the same | | the same between client incarnations, this shares the same | |
| problem as that of the using the timestamp of the software | | problem as that of the using the timestamp of the software | |
| installation. | | installation. | |
| | | | |
| As a security measure, the server MUST NOT cancel a client's leased | | As a security measure, the server MUST NOT cancel a client's leased | |
| state if the principal established the state for a given id string is | | state if the principal established the state for a given id string is | |
| not the same as the principal issuing the SETCLIENTID. | | not the same as the principal issuing the SETCLIENTID. | |
| | | | |
| Note that SETCLIENTID and SETCLIENTID_CONFIRM has a secondary purpose | | Note that SETCLIENTID and SETCLIENTID_CONFIRM has a secondary purpose | |
| | | | |
|
| Draft Specification NFS version 4 Protocol October 2002 | | Draft Specification NFS version 4 Protocol November 2002 | |
| | | | |
| of establishing the information the server needs to make callbacks to | | of establishing the information the server needs to make callbacks to | |
| the client for purpose of supporting delegations. It is permitted to | | the client for purpose of supporting delegations. It is permitted to | |
| change this information via SETCLIENTID and SETCLIENTID_CONFIRM | | change this information via SETCLIENTID and SETCLIENTID_CONFIRM | |
| within the same incarnation of the client without removing the | | within the same incarnation of the client without removing the | |
| client's leased state. | | client's leased state. | |
| | | | |
| Once a SETCLIENTID and SETCLIENTID_CONFIRM sequence has successfully | | Once a SETCLIENTID and SETCLIENTID_CONFIRM sequence has successfully | |
| completed, the client uses the short hand client identifier, of type | | completed, the client uses the short hand client identifier, of type | |
| clientid4, instead of the longer and less compact nfs_client_id4 | | clientid4, instead of the longer and less compact nfs_client_id4 | |
| | | | |
| skipping to change at page 68, line 5 | | skipping to change at page 70, line 5 | |
| there had been no activity from that client for many minutes. | | there had been no activity from that client for many minutes. | |
| | | | |
| Note that if the id string in a SETCLIENTID request is properly | | Note that if the id string in a SETCLIENTID request is properly | |
| constructed, and if the client takes care to use the same principal | | constructed, and if the client takes care to use the same principal | |
| for each successive use of SETCLIENTID, then, barring an active | | for each successive use of SETCLIENTID, then, barring an active | |
| denial of service attack, NFS4ERR_CLID_INUSE should never be | | denial of service attack, NFS4ERR_CLID_INUSE should never be | |
| returned. | | returned. | |
| | | | |
| However, client bugs, server bugs, or perhaps a deliberate change of | | However, client bugs, server bugs, or perhaps a deliberate change of | |
| | | | |
|
| Draft Specification NFS version 4 Protocol October 2002 | | Draft Specification NFS version 4 Protocol November 2002 | |
| | | | |
| the principal owner of the id string (such as the case of a client | | the principal owner of the id string (such as the case of a client | |
| that changes security flavors, and under the new flavor, there is no | | that changes security flavors, and under the new flavor, there is no | |
| mapping to the previous owner) will in rare cases result in | | mapping to the previous owner) will in rare cases result in | |
| NFS4ERR_CLID_INUSE. | | NFS4ERR_CLID_INUSE. | |
| | | | |
| In that event, when the server gets a SETCLIENTID for a client id | | In that event, when the server gets a SETCLIENTID for a client id | |
| that currently has no state, or it has state, but the lease has | | that currently has no state, or it has state, but the lease has | |
| expired, rather than returning NFS4ERR_CLID_INUSE, the server MUST | | expired, rather than returning NFS4ERR_CLID_INUSE, the server MUST | |
| allow the SETCLIENTID, and confirm the new clientid if followed by | | allow the SETCLIENTID, and confirm the new clientid if followed by | |
| | | | |
| skipping to change at page 69, line 5 | | skipping to change at page 71, line 5 | |
| o The stateid was generated by an earlier server instance (i.e. | | o The stateid was generated by an earlier server instance (i.e. | |
| before a server reboot). The error NFS4ERR_STALE_STATEID should | | before a server reboot). The error NFS4ERR_STALE_STATEID should | |
| be returned. | | be returned. | |
| | | | |
| o The stateid was generated by the current server instance but the | | o The stateid was generated by the current server instance but the | |
| stateid no longer designates the current locking state for the | | stateid no longer designates the current locking state for the | |
| lockowner-file pair in question (i.e. one or more locking | | lockowner-file pair in question (i.e. one or more locking | |
| operations has occurred). The error NFS4ERR_OLD_STATEID should | | operations has occurred). The error NFS4ERR_OLD_STATEID should | |
| be returned. | | be returned. | |
| | | | |
|
| Draft Specification NFS version 4 Protocol October 2002 | | Draft Specification NFS version 4 Protocol November 2002 | |
| | | | |
| This error condition will only occur when the client issues a | | This error condition will only occur when the client issues a | |
| locking request which changes a stateid while an I/O request | | locking request which changes a stateid while an I/O request | |
| that uses that stateid is outstanding. | | that uses that stateid is outstanding. | |
| | | | |
| o The stateid was generated by the current server instance but the | | o The stateid was generated by the current server instance but the | |
| stateid does not designate a locking state for any active | | stateid does not designate a locking state for any active | |
| lockowner-file pair. The error NFS4ERR_BAD_STATEID should be | | lockowner-file pair. The error NFS4ERR_BAD_STATEID should be | |
| returned. | | returned. | |
| | | | |
| | | | |
| skipping to change at page 70, line 5 | | skipping to change at page 72, line 5 | |
| the file by means of the SETATTR), even where SETATTR is not | | the file by means of the SETATTR), even where SETATTR is not | |
| explicitly mentioned in the text. | | explicitly mentioned in the text. | |
| | | | |
| If the lock_owner performs a READ or WRITE in a situation in which it | | If the lock_owner performs a READ or WRITE in a situation in which it | |
| has established a lock or share reservation on the server (any OPEN | | has established a lock or share reservation on the server (any OPEN | |
| constitutes a share reservation) the stateid (previously returned by | | constitutes a share reservation) the stateid (previously returned by | |
| the server) must be used to indicate what locks, including both | | the server) must be used to indicate what locks, including both | |
| record locks and share reservations, are held by the lockowner. If | | record locks and share reservations, are held by the lockowner. If | |
| no state is established by the client, either record lock or share | | no state is established by the client, either record lock or share | |
| | | | |
|
| Draft Specification NFS version 4 Protocol October 2002 | | Draft Specification NFS version 4 Protocol November 2002 | |
| | | | |
| reservation, a stateid of all bits 0 is used. Regardless whether a | | reservation, a stateid of all bits 0 is used. Regardless whether a | |
| stateid of all bits 0, or a stateid returned by the server is used, | | stateid of all bits 0, or a stateid returned by the server is used, | |
| if there is a conflicting share reservation or mandatory record lock | | if there is a conflicting share reservation or mandatory record lock | |
| held on the file, the server MUST refuse to service the READ or WRITE | | held on the file, the server MUST refuse to service the READ or WRITE | |
| operation. | | operation. | |
| | | | |
| Share reservations are established by OPEN operations and by their | | Share reservations are established by OPEN operations and by their | |
| nature are mandatory in that when the OPEN denies READ or WRITE | | nature are mandatory in that when the OPEN denies READ or WRITE | |
| operations, that denial results in such operations being rejected | | operations, that denial results in such operations being rejected | |
| | | | |
| skipping to change at page 71, line 5 | | skipping to change at page 73, line 5 | |
| NFS4ERR_LOCKED. | | NFS4ERR_LOCKED. | |
| | | | |
| For Windows environments, there are no advisory record locks, so the | | For Windows environments, there are no advisory record locks, so the | |
| server always checks for record locks during I/O requests. | | server always checks for record locks during I/O requests. | |
| | | | |
| Thus, the NFS version 4 LOCK operation does not need to distinguish | | Thus, the NFS version 4 LOCK operation does not need to distinguish | |
| between advisory and mandatory record locks. It is the NFS version 4 | | between advisory and mandatory record locks. It is the NFS version 4 | |
| server's processing of the READ and WRITE operations that introduces | | server's processing of the READ and WRITE operations that introduces | |
| the distinction. | | the distinction. | |
| | | | |
|
| Draft Specification NFS version 4 Protocol October 2002 | | Draft Specification NFS version 4 Protocol November 2002 | |
| | | | |
| Every stateid other than the special stateid values noted in this | | Every stateid other than the special stateid values noted in this | |
| section, whether returned by an OPEN-type operation (i.e. OPEN, | | section, whether returned by an OPEN-type operation (i.e. OPEN, | |
| OPEN_DOWNGRADE), or by a LOCK-type operation (i.e. LOCK or LOCKU), | | OPEN_DOWNGRADE), or by a LOCK-type operation (i.e. LOCK or LOCKU), | |
| defines an access mode for the file (i.e. READ, WRITE, or READ-WRITE) | | defines an access mode for the file (i.e. READ, WRITE, or READ-WRITE) | |
| as established by the original OPEN which began the stateid sequence, | | as established by the original OPEN which began the stateid sequence, | |
| and as modified by subsequent OPENs and OPEN_DOWNGRADEs within that | | and as modified by subsequent OPENs and OPEN_DOWNGRADEs within that | |
| stateid sequence. When a READ, WRITE, or SETATTR which specifies the | | stateid sequence. When a READ, WRITE, or SETATTR which specifies the | |
| size attribute, is done, the operation is subject to checking against | | size attribute, is done, the operation is subject to checking against | |
| the access mode to verify that the operation is appropriate given the | | the access mode to verify that the operation is appropriate given the | |
| | | | |
| skipping to change at page 72, line 5 | | skipping to change at page 74, line 5 | |
| most-one" semantics that are not provided by ONCRPC. ONCRPC over a | | most-one" semantics that are not provided by ONCRPC. ONCRPC over a | |
| reliable transport is not sufficient because a sequence of locking | | reliable transport is not sufficient because a sequence of locking | |
| requests may span multiple TCP connections. In the face of | | requests may span multiple TCP connections. In the face of | |
| retransmission or reordering, lock or unlock requests must have a | | retransmission or reordering, lock or unlock requests must have a | |
| well defined and consistent behavior. To accomplish this, each lock | | well defined and consistent behavior. To accomplish this, each lock | |
| request contains a sequence number that is a consecutively increasing | | request contains a sequence number that is a consecutively increasing | |
| integer. Different lock_owners have different sequences. The server | | integer. Different lock_owners have different sequences. The server | |
| maintains the last sequence number (L) received and the response that | | maintains the last sequence number (L) received and the response that | |
| was returned. The first request issued for any given lock_owner is | | was returned. The first request issued for any given lock_owner is | |
| | | | |
|
| Draft Specification NFS version 4 Protocol October 2002 | | Draft Specification NFS version 4 Protocol November 2002 | |
| | | | |
| issued with a sequence number of zero. | | issued with a sequence number of zero. | |
| | | | |
| Note that for requests that contain a sequence number, for each | | Note that for requests that contain a sequence number, for each | |
| lock_owner, there should be no more than one outstanding request. | | lock_owner, there should be no more than one outstanding request. | |
| | | | |
| If a request (r) with a previous sequence number (r < L) is received, | | If a request (r) with a previous sequence number (r < L) is received, | |
| it is rejected with the return of error NFS4ERR_BAD_SEQID. Given a | | it is rejected with the return of error NFS4ERR_BAD_SEQID. Given a | |
| properly-functioning client, the response to (r) must have been | | properly-functioning client, the response to (r) must have been | |
| received before the last request (L) was sent. If a duplicate of | | received before the last request (L) was sent. If a duplicate of | |
| last request (r == L) is received, the stored response is returned. | | last request (r == L) is received, the stored response is returned. | |
| If a request beyond the next sequence (r == L + 2) is received, it is | | If a request beyond the next sequence (r == L + 2) is received, it is | |
| rejected with the return of error NFS4ERR_BAD_SEQID. Sequence | | rejected with the return of error NFS4ERR_BAD_SEQID. Sequence | |
| history is reinitialized whenever the SETCLIENTID/SETCLIENTID_CONFIRM | | history is reinitialized whenever the SETCLIENTID/SETCLIENTID_CONFIRM | |
| sequence changes the client verifier. | | sequence changes the client verifier. | |
| | | | |
| Since the sequence number is represented with an unsigned 32-bit | | Since the sequence number is represented with an unsigned 32-bit | |
| integer, the arithmetic involved with the sequence number is mod | | integer, the arithmetic involved with the sequence number is mod | |
|
| 2^32. | | 2^32. For an example of modulo arithetic involving sequence numbers | |
| | | see [RFC793]. | |
| | | | |
| It is critical the server maintain the last response sent to the | | It is critical the server maintain the last response sent to the | |
| client to provide a more reliable cache of duplicate non-idempotent | | client to provide a more reliable cache of duplicate non-idempotent | |
| requests than that of the traditional cache described in [Juszczak]. | | requests than that of the traditional cache described in [Juszczak]. | |
| The traditional duplicate request cache uses a least recently used | | The traditional duplicate request cache uses a least recently used | |
| algorithm for removing unneeded requests. However, the last lock | | algorithm for removing unneeded requests. However, the last lock | |
| request and response on a given lock_owner must be cached as long as | | request and response on a given lock_owner must be cached as long as | |
| the lock state exists on the server. | | the lock state exists on the server. | |
| | | | |
| The client MUST monotonically increment the sequence number for the | | The client MUST monotonically increment the sequence number for the | |
| | | | |
| skipping to change at page 73, line 5 | | skipping to change at page 75, line 5 | |
| the methods described above, there are no risks of a Byzantine router | | the methods described above, there are no risks of a Byzantine router | |
| re-sending old requests. The server need only maintain the | | re-sending old requests. The server need only maintain the | |
| (lock_owner, sequence number) state as long as there are open files | | (lock_owner, sequence number) state as long as there are open files | |
| or closed files with locks outstanding. | | or closed files with locks outstanding. | |
| | | | |
| LOCK, LOCKU, OPEN, OPEN_DOWNGRADE, and CLOSE each contain a sequence | | LOCK, LOCKU, OPEN, OPEN_DOWNGRADE, and CLOSE each contain a sequence | |
| number and therefore the risk of the replay of these operations | | number and therefore the risk of the replay of these operations | |
| resulting in undesired effects is non-existent while the server | | resulting in undesired effects is non-existent while the server | |
| maintains the lock_owner state. | | maintains the lock_owner state. | |
| | | | |
|
| Draft Specification NFS version 4 Protocol October 2002 | | Draft Specification NFS version 4 Protocol November 2002 | |
| | | | |
| 8.1.7. Releasing lock_owner State | | 8.1.7. Releasing lock_owner State | |
| | | | |
| When a particular lock_owner no longer holds open or file locking | | When a particular lock_owner no longer holds open or file locking | |
| state at the server, the server may choose to release the sequence | | state at the server, the server may choose to release the sequence | |
| number state associated with the lock_owner. The server may make | | number state associated with the lock_owner. The server may make | |
| this choice based on lease expiration, for the reclamation of server | | this choice based on lease expiration, for the reclamation of server | |
| memory, or other implementation specific details. In any event, the | | memory, or other implementation specific details. In any event, the | |
| server is able to do this safely only when the lock_owner no longer | | server is able to do this safely only when the lock_owner no longer | |
| is being utilized by the client. The server may choose to hold the | | is being utilized by the client. The server may choose to hold the | |
| | | | |
| skipping to change at page 74, line 5 | | skipping to change at page 76, line 5 | |
| situations in which the server can avoid the need for confirmation | | situations in which the server can avoid the need for confirmation | |
| when responding to open requests. The two constraints are: | | when responding to open requests. The two constraints are: | |
| | | | |
| o The server must not bestow a delegation for any open which would | | o The server must not bestow a delegation for any open which would | |
| require confirmation. | | require confirmation. | |
| | | | |
| o The server MUST NOT require confirmation on a reclaim-type open | | o The server MUST NOT require confirmation on a reclaim-type open | |
| (i.e. one specifying claim type CLAIM_PREVIOUS or | | (i.e. one specifying claim type CLAIM_PREVIOUS or | |
| CLAIM_DELEGATE_PREV). | | CLAIM_DELEGATE_PREV). | |
| | | | |
|
| Draft Specification NFS version 4 Protocol October 2002 | | Draft Specification NFS version 4 Protocol November 2002 | |
| | | | |
| These constraints are related in that reclaim-type opens are the only | | These constraints are related in that reclaim-type opens are the only | |
| ones in which the server may be required to send a delegation. For | | ones in which the server may be required to send a delegation. For | |
| CLAIM_NULL, sending the delegation is optional while for | | CLAIM_NULL, sending the delegation is optional while for | |
| CLAIM_DELEGATE_CUR, no delegation is sent. | | CLAIM_DELEGATE_CUR, no delegation is sent. | |
| | | | |
| Delegations being sent with an open requiring confirmation are | | Delegations being sent with an open requiring confirmation are | |
| troublesome because recovering from non-confirmation adds undue | | troublesome because recovering from non-confirmation adds undue | |
| complexity to the protocol while requiring confirmation on reclaim- | | complexity to the protocol while requiring confirmation on reclaim- | |
| type opens poses difficulties in that the inability to resolve the | | type opens poses difficulties in that the inability to resolve the | |
| | | | |
| skipping to change at page 75, line 5 | | skipping to change at page 77, line 5 | |
| As discussed in the section "Server Failure and Recovery" below, the | | As discussed in the section "Server Failure and Recovery" below, the | |
| server may employ certain optimizations during recovery that work | | server may employ certain optimizations during recovery that work | |
| effectively only when the client's behavior during lock recovery is | | effectively only when the client's behavior during lock recovery is | |
| similar to the client's locking behavior prior to server failure. | | similar to the client's locking behavior prior to server failure. | |
| | | | |
| 8.3. Upgrading and Downgrading Locks | | 8.3. Upgrading and Downgrading Locks | |
| | | | |
| If a client has a write lock on a record, it can request an atomic | | If a client has a write lock on a record, it can request an atomic | |
| downgrade of the lock to a read lock via the LOCK request, by setting | | downgrade of the lock to a read lock via the LOCK request, by setting | |
| | | | |
|
| Draft Specification NFS version 4 Protocol October 2002 | | Draft Specification NFS version 4 Protocol November 2002 | |
| | | | |
| the type to READ_LT. If the server supports atomic downgrade, the | | the type to READ_LT. If the server supports atomic downgrade, the | |
| request will succeed. If not, it will return NFS4ERR_LOCK_NOTSUPP. | | request will succeed. If not, it will return NFS4ERR_LOCK_NOTSUPP. | |
| The client should be prepared to receive this error, and if | | The client should be prepared to receive this error, and if | |
| appropriate, report the error to the requesting application. | | appropriate, report the error to the requesting application. | |
| | | | |
| If a client has a read lock on a record, it can request an atomic | | If a client has a read lock on a record, it can request an atomic | |
| upgrade of the lock to a write lock via the LOCK request by setting | | upgrade of the lock to a write lock via the LOCK request by setting | |
| the type to WRITE_LT or WRITEW_LT. If the server does not support | | the type to WRITE_LT or WRITEW_LT. If the server does not support | |
| atomic upgrade, it will return NFS4ERR_LOCK_NOTSUPP. If the upgrade | | atomic upgrade, it will return NFS4ERR_LOCK_NOTSUPP. If the upgrade | |
| | | | |
| skipping to change at page 76, line 5 | | skipping to change at page 78, line 5 | |
| avoid the burden of needlessly frequent polling for blocking locks. | | avoid the burden of needlessly frequent polling for blocking locks. | |
| The server should take care in the length of delay in the event the | | The server should take care in the length of delay in the event the | |
| client retransmits the request. | | client retransmits the request. | |
| | | | |
| 8.5. Lease Renewal | | 8.5. Lease Renewal | |
| | | | |
| The purpose of a lease is to allow a server to remove stale locks | | The purpose of a lease is to allow a server to remove stale locks | |
| that are held by a client that has crashed or is otherwise | | that are held by a client that has crashed or is otherwise | |
| unreachable. It is not a mechanism for cache consistency and lease | | unreachable. It is not a mechanism for cache consistency and lease | |
| | | | |
|
| Draft Specification NFS version 4 Protocol October 2002 | | Draft Specification NFS version 4 Protocol November 2002 | |
| | | | |
| renewals may not be denied if the lease interval has not expired. | | renewals may not be denied if the lease interval has not expired. | |
| | | | |
| The following events cause implicit renewal of all of the leases for | | The following events cause implicit renewal of all of the leases for | |
| a given client (i.e. all those sharing a given clientid). Each of | | a given client (i.e. all those sharing a given clientid). Each of | |
| these is a positive indication that the client is still active and | | these is a positive indication that the client is still active and | |
| that the associated state held at the server, for the client, is | | that the associated state held at the server, for the client, is | |
| still valid. | | still valid. | |
| | | | |
| o An OPEN with a valid clientid. | | o An OPEN with a valid clientid. | |
| | | | |
| skipping to change at page 77, line 5 | | skipping to change at page 79, line 5 | |
| 8.6. Crash Recovery | | 8.6. Crash Recovery | |
| | | | |
| The important requirement in crash recovery is that both the client | | The important requirement in crash recovery is that both the client | |
| and the server know when the other has failed. Additionally, it is | | and the server know when the other has failed. Additionally, it is | |
| required that a client sees a consistent view of data across server | | required that a client sees a consistent view of data across server | |
| restarts or reboots. All READ and WRITE operations that may have | | restarts or reboots. All READ and WRITE operations that may have | |
| been queued within the client or network buffers must wait until the | | been queued within the client or network buffers must wait until the | |
| client has successfully recovered the locks protecting the READ and | | client has successfully recovered the locks protecting the READ and | |
| WRITE operations. | | WRITE operations. | |
| | | | |
|
| Draft Specification NFS version 4 Protocol October 2002 | | Draft Specification NFS version 4 Protocol November 2002 | |
| | | | |
| 8.6.1. Client Failure and Recovery | | 8.6.1. Client Failure and Recovery | |
| | | | |
| In the event that a client fails, the server may recover the client's | | In the event that a client fails, the server may recover the client's | |
| locks when the associated leases have expired. Conflicting locks | | locks when the associated leases have expired. Conflicting locks | |
| from another client may only be granted after this lease expiration. | | from another client may only be granted after this lease expiration. | |
| If the client is able to restart or reinitialize within the lease | | If the client is able to restart or reinitialize within the lease | |
| period the client may be forced to wait the remainder of the lease | | period the client may be forced to wait the remainder of the lease | |
| period before obtaining new locks. | | period before obtaining new locks. | |
| | | | |
| | | | |
| skipping to change at page 78, line 5 | | skipping to change at page 80, line 5 | |
| A client can determine that server failure (and thus loss of locking | | A client can determine that server failure (and thus loss of locking | |
| state) has occurred, when it receives one of two errors. The | | state) has occurred, when it receives one of two errors. The | |
| NFS4ERR_STALE_STATEID error indicates a stateid invalidated by a | | NFS4ERR_STALE_STATEID error indicates a stateid invalidated by a | |
| reboot or restart. The NFS4ERR_STALE_CLIENTID error indicates a | | reboot or restart. The NFS4ERR_STALE_CLIENTID error indicates a | |
| clientid invalidated by reboot or restart. When either of these are | | clientid invalidated by reboot or restart. When either of these are | |
| received, the client must establish a new clientid (See the section | | received, the client must establish a new clientid (See the section | |
| "Client ID") and re-establish the locking state as discussed below. | | "Client ID") and re-establish the locking state as discussed below. | |
| | | | |
| The period of special handling of locking and READs and WRITEs, equal | | The period of special handling of locking and READs and WRITEs, equal | |
| | | | |
|
| Draft Specification NFS version 4 Protocol October 2002 | | Draft Specification NFS version 4 Protocol November 2002 | |
| | | | |
| in duration to the lease period, is referred to as the "grace | | in duration to the lease period, is referred to as the "grace | |
| period". During the grace period, clients recover locks and the | | period". During the grace period, clients recover locks and the | |
| associated state by reclaim-type locking requests (i.e. LOCK requests | | associated state by reclaim-type locking requests (i.e. LOCK requests | |
| with reclaim set to true and OPEN operations with a claim type of | | with reclaim set to true and OPEN operations with a claim type of | |
| CLAIM_PREVIOUS). During the grace period, the server must reject | | CLAIM_PREVIOUS). During the grace period, the server must reject | |
| READ and WRITE operations and non-reclaim locking requests (i.e. | | READ and WRITE operations and non-reclaim locking requests (i.e. | |
| other LOCK and OPEN operations) with an error of NFS4ERR_GRACE. | | other LOCK and OPEN operations) with an error of NFS4ERR_GRACE. | |
| | | | |
| If the server can reliably determine that granting a non-reclaim | | If the server can reliably determine that granting a non-reclaim | |
| | | | |
| skipping to change at page 79, line 5 | | skipping to change at page 81, line 5 | |
| 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 | |
| [Floyd]. The client must account for the server that is able to | | [Floyd]. The client must account for the server that is able to | |
| perform I/O and non-reclaim locking requests within the grace period | | perform I/O and non-reclaim locking requests within the grace period | |
| as well as those that can not do so. | | as well as those that can not 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 | |
| | | | |
|
| Draft Specification NFS version 4 Protocol October 2002 | | Draft Specification NFS version 4 Protocol November 2002 | |
| | | | |
| 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 reboot or restart. | | I/O request has been granted since reboot or 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 clientid is | | period. Therefore, clients should, once a new clientid 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 | |
| for lease renewal for the lease associated with that server. However, | | for lease renewal for the lease associated with that server. However, | |
| the server must establish, for this restart event, a grace period at | | the server must establish, for this restart event, a grace period at | |
| least as long as the lease period for the previous server | | least as long as the lease period for the previous server | |
| | | | |
| skipping to change at page 80, line 5 | | skipping to change at page 82, line 5 | |
| 2. Client A and server experience mutual network partition, | | 2. Client A and server experience mutual network partition, | |
| such that client A is unable to renew its lease. | | such that client A is unable to renew its lease. | |
| | | | |
| 3. Client A's lease expires, so server releases lock. | | 3. Client A's lease expires, so server releases lock. | |
| | | | |
| 4. Client B acquires a lock that would have conflicted with | | 4. Client B acquires a lock that would have conflicted with | |
| that of Client A. | | that of Client A. | |
| | | | |
| 5. Client B releases the lock | | 5. Client B releases the lock | |
| | | | |
|
| Draft Specification NFS version 4 Protocol October 2002 | | Draft Specification NFS version 4 Protocol November 2002 | |
| | | | |
| 6. Server reboots | | 6. Server reboots | |
| | | | |
| 7. Network partition between client A and server heals. | | 7. Network partition between client A and server heals. | |
| | | | |
| 8. Client A issues a RENEW operation, and gets back a | | 8. Client A issues a RENEW operation, and gets back a | |
| NFS4ERR_STALE_CLIENTID. | | NFS4ERR_STALE_CLIENTID. | |
| | | | |
| 9. Client A reclaims its lock within the server's grace period. | | 9. Client A reclaims its lock within the server's grace period. | |
| | | | |
| | | | |
| skipping to change at page 81, line 5 | | skipping to change at page 83, line 5 | |
| | | | |
| Solving the first and second edge conditions requires that the server | | Solving the first and second edge conditions requires that the server | |
| either assume after it reboots that edge condition occurs, and thus | | either assume after it reboots that edge condition occurs, and thus | |
| return NFS4ERR_NO_GRACE for all reclaim attempts, or that the server | | return NFS4ERR_NO_GRACE for all reclaim attempts, or that the server | |
| record some information stable storage. The amount of information | | record some information stable storage. The amount of information | |
| the server records in stable storage is in inverse proportion to how | | the server records in stable storage is in inverse proportion to how | |
| harsh the server wants to be whenever the edge conditions occur. The | | harsh the server wants to be whenever the edge conditions occur. The | |
| server that is completely tolerant of all edge conditions will record | | server that is completely tolerant of all edge conditions will record | |
| in stable storage every lock that is acquired, removing the lock | | in stable storage every lock that is acquired, removing the lock | |
| | | | |
|
| Draft Specification NFS version 4 Protocol October 2002 | | Draft Specification NFS version 4 Protocol November 2002 | |
| | | | |
| record from stable storage only when the lock is unlocked by the | | record from stable storage only when the lock is unlocked by the | |
| client and the lock's lockowner advances the sequence number such | | client and the lock's lockowner advances the sequence number such | |
| that the lock release is not the last stateful event for the | | that the lock release is not the last stateful event for the | |
| lockowner's sequence. For the two aforementioned edge conditions, the | | lockowner's sequence. For the two aforementioned edge conditions, the | |
| harshest a server can be, and still support a grace period for | | harshest a server can be, and still support a grace period for | |
| reclaims, requires that the server record in stable storage | | reclaims, requires that the server record in stable storage | |
| information some minimal information. For example, a server | | information some minimal information. For example, a server | |
| implementation could, for each client, save in stable storage a | | implementation could, for each client, save in stable storage a | |
| record containing: | | record containing: | |
| | | | |
| skipping to change at page 82, line 5 | | skipping to change at page 84, line 5 | |
| 1. Reject all reclaims with NFS4ERR_NO_GRACE. This is | | 1. Reject all reclaims with NFS4ERR_NO_GRACE. This is | |
| superharsh, but necessary if the server does not want to | | superharsh, but necessary if the server does not want to | |
| record lock state in stable storage. | | record lock state in stable storage. | |
| | | | |
| 2. Record sufficient state in stable storage such that all | | 2. Record sufficient state in stable storage such that all | |
| known edge conditions involving server reboot, including the | | known edge conditions involving server reboot, including the | |
| two noted in this section, are detected. False positives are | | two noted in this section, are detected. False positives are | |
| acceptable. Note that at this time, it is not known if there | | acceptable. Note that at this time, it is not known if there | |
| are other edge conditions. | | are other edge conditions. | |
| | | | |
|
| Draft Specification NFS version 4 Protocol October 2002 | | Draft Specification NFS version 4 Protocol November 2002 | |
| | | | |
| In the event, after a server reboot, the server determines | | In the event, after a server reboot, the server determines | |
| that there is unrecoverable damage or corruption to the the | | that there is unrecoverable damage or corruption to the the | |
| stable storage, then for all clients and/or locks affected, | | stable storage, then for all clients and/or locks affected, | |
| the server MUST return NFS4ERR_NO_GRACE. | | the server MUST return NFS4ERR_NO_GRACE. | |
| | | | |
| A mandate for the client's handling of the NFS4ERR_NO_GRACE error is | | A mandate for the client's handling of the NFS4ERR_NO_GRACE error is | |
| outside the scope of this specification, since the strategies for | | outside the scope of this specification, since the strategies for | |
| such handling are very dependent on the client's operating | | such handling are very dependent on the client's operating | |
| environment. However, one potential approach is described below. | | environment. However, one potential approach is described below. | |
| | | | |
| skipping to change at page 83, line 5 | | skipping to change at page 85, line 5 | |
| not receive a response. From this, the next time the client does a | | not receive a response. From this, the next time the client does a | |
| lock operation for the lock_owner, it can send the cached request, if | | lock operation for the lock_owner, it can send the cached request, if | |
| there is one, and if the request was one that established state (e.g. | | there is one, and if the request was one that established state (e.g. | |
| a LOCK or OPEN operation), the server will return the cached result | | a LOCK or OPEN operation), the server will return the cached result | |
| or if never saw the request, perform it. The client can follow up | | or if never saw the request, perform it. The client can follow up | |
| with a request to remove the state (e.g. a LOCKU or CLOSE operation). | | with a request to remove the state (e.g. a LOCKU or CLOSE operation). | |
| With this approach, the sequencing and stateid information on the | | With this approach, the sequencing and stateid information on the | |
| client and server for the given lock_owner will re-synchronize and in | | client and server for the given lock_owner will re-synchronize and in | |
| turn the lock state will re-synchronize. | | turn the lock state will re-synchronize. | |
| | | | |
|
| Draft Specification NFS version 4 Protocol October 2002 | | Draft Specification NFS version 4 Protocol November 2002 | |
| | | | |
| 8.8. Server Revocation of Locks | | 8.8. Server Revocation of Locks | |
| | | | |
| At any point, the server can revoke locks held by a client and the | | At any point, the server can revoke locks held by a client and the | |
| client must be prepared for this event. When the client detects that | | client must be prepared for this event. When the client detects that | |
| its locks have been or may have been revoked, the client is | | its locks have been or may have been revoked, the client is | |
| responsible for validating the state information between itself and | | responsible for validating the state information between itself and | |
| the server. Validating locking state for the client means that it | | the server. Validating locking state for the client means that it | |
| must verify or reclaim state for each lock currently held. | | must verify or reclaim state for each lock currently held. | |
| | | | |
| | | | |
| skipping to change at page 84, line 5 | | skipping to change at page 86, line 5 | |
| which the server may grant conflicting locks after the lease period | | which the server may grant conflicting locks after the lease period | |
| has expired for a client. When it is possible that the lease period | | has expired for a client. When it is possible that the lease period | |
| has expired, the client must validate each lock currently held to | | has expired, the client must validate each lock currently held to | |
| ensure that a conflicting lock has not been granted. The client may | | ensure that a conflicting lock has not been granted. The client may | |
| accomplish this task by issuing an I/O request, either a pending I/O | | accomplish this task by issuing an I/O request, either a pending I/O | |
| or a zero-length read, specifying the stateid associated with the | | or a zero-length read, specifying the stateid associated with the | |
| lock in question. If the response to the request is success, the | | lock in question. If the response to the request is success, the | |
| client has validated all of the locks governed by that stateid and | | client has validated all of the locks governed by that stateid and | |
| re-established the appropriate state between itself and the server. | | re-established the appropriate state between itself and the server. | |
| | | | |
|
| Draft Specification NFS version 4 Protocol October 2002 | | Draft Specification NFS version 4 Protocol November 2002 | |
| | | | |
| If the I/O request is not successful, then one or more of the locks | | If the I/O request is not successful, then one or more of the locks | |
| associated with the stateid was revoked by the server and the client | | associated with the stateid was revoked by the server and the client | |
| must notify the owner. | | must notify the owner. | |
| | | | |
| 8.9. Share Reservations | | 8.9. Share Reservations | |
| | | | |
| A share reservation is a mechanism to control access to a file. It | | A share reservation is a mechanism to control access to a file. It | |
| is a separate and independent mechanism from record locking. When a | | is a separate and independent mechanism from record locking. When a | |
| client opens a file, it issues an OPEN operation to the server | | client opens a file, it issues an OPEN operation to the server | |
| | | | |
| skipping to change at page 85, line 5 | | skipping to change at page 87, line 5 | |
| | | | |
| To provide correct share semantics, a client MUST use the OPEN | | To provide correct share semantics, a client MUST use the OPEN | |
| operation to obtain the initial filehandle and indicate the desired | | operation to obtain the initial filehandle and indicate the desired | |
| access and what if any access to deny. Even if the client intends to | | access and what if any access to deny. Even if the client intends to | |
| use a stateid of all 0's or all 1's, it must still obtain the | | use a stateid of all 0's or all 1's, it must still obtain the | |
| filehandle for the regular file with the OPEN operation so the | | filehandle for the regular file with the OPEN operation so the | |
| appropriate share semantics can be applied. For clients that do not | | appropriate share semantics can be applied. For clients that do not | |
| have a deny mode built into their open programming interfaces, deny | | have a deny mode built into their open programming interfaces, deny | |
| equal to NONE should be used. | | equal to NONE should be used. | |
| | | | |
|
| Draft Specification NFS version 4 Protocol October 2002 | | Draft Specification NFS version 4 Protocol November 2002 | |
| | | | |
| The OPEN operation with the CREATE flag, also subsumes the CREATE | | The OPEN operation with the CREATE flag, also subsumes the CREATE | |
| operation for regular files as used in previous versions of the NFS | | operation for regular files as used in previous versions of the NFS | |
| protocol. This allows a create with a share to be done atomically. | | protocol. This allows a create with a share to be done atomically. | |
| | | | |
| The CLOSE operation removes all share reservations held by the | | The CLOSE operation removes all share reservations held by the | |
| lock_owner on that file. If record locks are held, the client SHOULD | | lock_owner on that file. If record locks are held, the client SHOULD | |
| release all locks before issuing a CLOSE. The server MAY free all | | release all locks before issuing a CLOSE. The server MAY free all | |
| outstanding locks on CLOSE but some servers may not support the CLOSE | | outstanding locks on CLOSE but some servers may not support the CLOSE | |
| of a file that still has record locks held. The server MUST return | | of a file that still has record locks held. The server MUST return | |
| | | | |
| skipping to change at page 86, line 5 | | skipping to change at page 88, line 5 | |
| o The time that a lockowner is freed by the server due to period | | o The time that a lockowner is freed by the server due to period | |
| with no activity. | | with no activity. | |
| | | | |
| o All locks for the client are freed as a result of a SETCLIENTID. | | o All locks for the client are freed as a result of a SETCLIENTID. | |
| | | | |
| Servers may avoid this complexity, at the cost of less complete | | Servers may avoid this complexity, at the cost of less complete | |
| protocol error checking, by simply responding NFS4_OK in the event of | | protocol error checking, by simply responding NFS4_OK in the event of | |
| a CLOSE for a deallocated stateid, on the assumption that this case | | a CLOSE for a deallocated stateid, on the assumption that this case | |
| must be caused by a retransmitted close. When adopting this | | must be caused by a retransmitted close. When adopting this | |
| | | | |
|
| Draft Specification NFS version 4 Protocol October 2002 | | Draft Specification NFS version 4 Protocol November 2002 | |
| | | | |
| approach, it is desirable to at least log an error when returning a | | approach, it is desirable to at least log an error when returning a | |
| no-error indication in this situation. If the server maintains a | | no-error indication in this situation. If the server maintains a | |
| reply-cache mechanism, it can verify the CLOSE is indeed a | | reply-cache mechanism, it can verify the CLOSE is indeed a | |
| retransmission and avoid error logging in most cases. | | retransmission and avoid error logging in most cases. | |
| | | | |
| 8.11. Open Upgrade and Downgrade | | 8.11. Open Upgrade and Downgrade | |
| | | | |
| When an OPEN is done for a file and the lockowner for which the open | | When an OPEN is done for a file and the lockowner for which the open | |
| is being done already has the file open, the result is to upgrade the | | is being done already has the file open, the result is to upgrade the | |
| | | | |
| skipping to change at page 87, line 5 | | skipping to change at page 89, line 5 | |
| recovery at a cost of increased RENEW or READ (with zero length) | | recovery at a cost of increased RENEW or READ (with zero length) | |
| requests. Longer leases are certainly kinder and gentler to servers | | requests. Longer leases are certainly kinder and gentler to servers | |
| trying to handle very large numbers of clients. The number of RENEW | | trying to handle very large numbers of clients. The number of RENEW | |
| requests drop in proportion to the lease time. The disadvantages of | | requests drop in proportion to the lease time. The disadvantages of | |
| long leases are slower recovery after server failure (the server must | | long leases are slower recovery after server failure (the server must | |
| wait for the leases to expire and the grace period to elapse before | | wait for the leases to expire and the grace period to elapse before | |
| granting new lock requests) and increased file contention (if client | | granting new lock requests) and increased file contention (if client | |
| fails to transmit an unlock request then server must wait for lease | | fails to transmit an unlock request then server must wait for lease | |
| expiration before granting new locks). | | expiration before granting new locks). | |
| | | | |
|
| Draft Specification NFS version 4 Protocol October 2002 | | Draft Specification NFS version 4 Protocol November 2002 | |
| | | | |
| Long leases are usable if the server is able to store lease state in | | Long leases are usable if the server is able to store lease state in | |
| non-volatile memory. Upon recovery, the server can reconstruct the | | non-volatile memory. Upon recovery, the server can reconstruct the | |
| lease state from its non-volatile memory and continue operation with | | lease state from its non-volatile memory and continue operation with | |
| its clients and therefore long leases would not be an issue. | | its clients and therefore long leases would not be an issue. | |
| | | | |
| 8.13. Clocks, Propagation Delay, and Calculating Lease Expiration | | 8.13. Clocks, Propagation Delay, and Calculating Lease Expiration | |
| | | | |
| To avoid the need for synchronized clocks, lease times are granted by | | To avoid the need for synchronized clocks, lease times are granted by | |
| the server as a time delta. However, there is a requirement that the | | the server as a time delta. However, there is a requirement that the | |
| | | | |
| skipping to change at page 88, line 5 | | skipping to change at page 90, line 5 | |
| Share Reservations" | | Share Reservations" | |
| | | | |
| If server replica or a server immigrating a filesystem agrees to, or | | If server replica or a server immigrating a filesystem agrees to, or | |
| is expected to, accept opaque values from the client that originated | | is expected to, accept opaque values from the client that originated | |
| from another server, then it is a wise implementation practice for | | from another server, then it is a wise implementation practice for | |
| the servers to encode the "opaque" values in network byte order. This | | the servers to encode the "opaque" values in network byte order. This | |
| way, servers acting as replicas or immigrating filesystems will be | | way, servers acting as replicas or immigrating filesystems will be | |
| able to parse values like stateids, directory cookies, filehandles, | | able to parse values like stateids, directory cookies, filehandles, | |
| etc. even if their native byte order is different from other servers | | etc. even if their native byte order is different from other servers | |
| | | | |
|
| Draft Specification NFS version 4 Protocol October 2002 | | Draft Specification NFS version 4 Protocol November 2002 | |
| | | | |
| cooperating in the replication and migration of the filesystem. | | cooperating in the replication and migration of the filesystem. | |
| | | | |
| 8.14.1. Migration and State | | 8.14.1. Migration and State | |
| | | | |
| In the case of migration, the servers involved in the migration of a | | In the case of migration, the servers involved in the migration of a | |
| filesystem SHOULD transfer all server state from the original to the | | filesystem SHOULD transfer all server state from the original to the | |
| new server. This must be done in a way that is transparent to the | | new server. This must be done in a way that is transparent to the | |
| client. This state transfer will ease the client's transition when a | | client. This state transfer will ease the client's transition when a | |
| filesystem migration occurs. If the servers are successful in | | filesystem migration occurs. If the servers are successful in | |
| | | | |
| skipping to change at page 89, line 5 | | skipping to change at page 91, line 5 | |
| leases, stateids and clientids do not have validity across a | | leases, stateids and clientids do not have validity across a | |
| transition from one server to another. The client must re-establish | | transition from one server to another. The client must re-establish | |
| its locks on the new server. This can be compared to the re- | | its locks on the new server. This can be compared to the re- | |
| establishment of locks by means of reclaim-type requests after a | | establishment of locks by means of reclaim-type requests after a | |
| server reboot. The difference is that the server has no provision to | | server reboot. The difference is that the server has no provision to | |
| distinguish requests reclaiming locks from those obtaining new locks | | distinguish requests reclaiming locks from those obtaining new locks | |
| or to defer the latter. Thus, a client re-establishing a lock on the | | or to defer the latter. Thus, a client re-establishing a lock on the | |
| new server (by means of a LOCK or OPEN request), may have the | | new server (by means of a LOCK or OPEN request), may have the | |
| requests denied due to a conflicting lock. Since replication is | | requests denied due to a conflicting lock. Since replication is | |
| | | | |
|
| Draft Specification NFS version 4 Protocol October 2002 | | Draft Specification NFS version 4 Protocol November 2002 | |
| | | | |
| intended for read-only use of filesystems, such denial of locks | | intended for read-only use of filesystems, such denial of locks | |
| should not pose large difficulties in practice. When an attempt to | | should not pose large difficulties in practice. When an attempt to | |
| re-establish a lock on a new server is denied, the client should | | re-establish a lock on a new server is denied, the client should | |
| treat the situation as if his original lock had been revoked. | | treat the situation as if his original lock had been revoked. | |
| | | | |
| 8.14.3. Notification of Migrated Lease | | 8.14.3. Notification of Migrated Lease | |
| | | | |
| In the case of lease renewal, the client may not be submitting | | In the case of lease renewal, the client may not be submitting | |
| requests for a filesystem that has been migrated to another server. | | requests for a filesystem that has been migrated to another server. | |
| | | | |
| skipping to change at page 90, line 5 | | skipping to change at page 92, line 5 | |
| | | | |
| When state is transferred transparently, that state should include | | When state is transferred transparently, that state should include | |
| the correct value of the lease_time attribute. The lease_time | | the correct value of the lease_time attribute. The lease_time | |
| attribute on the destination server must never be less than that on | | attribute on the destination server must never be less than that on | |
| the source since this would result in premature expiration of leases | | the source since this would result in premature expiration of leases | |
| granted by the source server. Upon migration in which state is | | granted by the source server. Upon migration in which state is | |
| transferred transparently, the client is under no obligation to re- | | transferred transparently, the client is under no obligation to re- | |
| fetch the lease_time attribute and may continue to use the value | | fetch the lease_time attribute and may continue to use the value | |
| previously fetched (on the source server). | | previously fetched (on the source server). | |
| | | | |
|
| Draft Specification NFS version 4 Protocol October 2002 | | Draft Specification NFS version 4 Protocol November 2002 | |
| | | | |
| If state has not been transferred transparently (i.e. the client sees | | If state has not been transferred transparently (i.e. the client sees | |
| a real or simulated server reboot), the client should fetch the value | | a real or simulated server reboot), the client should fetch the value | |
| of lease_time on the new (i.e. destination) server, and use it for | | of lease_time on the new (i.e. destination) server, and use it for | |
| subsequent locking requests. However the server must respect a grace | | subsequent locking requests. However the server must respect a grace | |
| period at least as long as the lease_time on the source server, in | | period at least as long as the lease_time on the source server, in | |
| order to ensure that clients have ample time to reclaim their locks | | order to ensure that clients have ample time to reclaim their locks | |
| before potentially conflicting non-reclaimed locks are granted. The | | before potentially conflicting non-reclaimed locks are granted. The | |
| means by which the new server obtains the value of lease_time on the | | means by which the new server obtains the value of lease_time on the | |
| old server is left to the server implementations. It is not | | old server is left to the server implementations. It is not | |
| specified by the NFS version 4 protocol. | | specified by the NFS version 4 protocol. | |
| | | | |
|
| Draft Specification NFS version 4 Protocol October 2002 | | Draft Specification NFS version 4 Protocol November 2002 | |
| | | | |
| 9. Client-Side Caching | | 9. Client-Side Caching | |
| | | | |
| Client-side caching of data, of file attributes, and of file names is | | Client-side caching of data, of file attributes, and of file names is | |
| essential to providing good performance with the NFS protocol. | | essential to providing good performance with the NFS protocol. | |
| Providing distributed cache coherence is a difficult problem and | | Providing distributed cache coherence is a difficult problem and | |
| previous versions of the NFS protocol have not attempted it. | | previous versions of the NFS protocol have not attempted it. | |
| Instead, several NFS client implementation techniques have been used | | Instead, several NFS client implementation techniques have been used | |
| to reduce the problems that a lack of coherence poses for users. | | to reduce the problems that a lack of coherence poses for users. | |
| These techniques have not been clearly defined by earlier protocol | | These techniques have not been clearly defined by earlier protocol | |
| | | | |
| skipping to change at page 92, line 5 | | skipping to change at page 94, line 5 | |
| performance is to allow a client that repeatedly opens a file to do | | performance is to allow a client that repeatedly opens a file to do | |
| so without reference to the server. This is done until potentially | | so without reference to the server. This is done until potentially | |
| conflicting operations from another client actually occur. | | conflicting operations from another client actually occur. | |
| | | | |
| A similar situation arises in connection with file locking. Sending | | A similar situation arises in connection with file locking. Sending | |
| file lock and unlock requests to the server as well as the read and | | file lock and unlock requests to the server as well as the read and | |
| write requests necessary to make data caching consistent with the | | write requests necessary to make data caching consistent with the | |
| locking semantics (see the section "Data Caching and File Locking") | | locking semantics (see the section "Data Caching and File Locking") | |
| can severely limit performance. When locking is used to provide | | can severely limit performance. When locking is used to provide | |
| | | | |
|
| Draft Specification NFS version 4 Protocol October 2002 | | Draft Specification NFS version 4 Protocol November 2002 | |
| | | | |
| protection against infrequent conflicts, a large penalty is incurred. | | protection against infrequent conflicts, a large penalty is incurred. | |
| This penalty may discourage the use of file locking by applications. | | This penalty may discourage the use of file locking by applications. | |
| | | | |
| The NFS version 4 protocol provides more aggressive caching | | The NFS version 4 protocol provides more aggressive caching | |
| strategies with the following design goals: | | strategies with the following design goals: | |
| | | | |
| o Compatibility with a large range of server semantics. | | o Compatibility with a large range of server semantics. | |
| | | | |
| o Provide the same caching benefits as previous versions of the | | o Provide the same caching benefits as previous versions of the | |
| | | | |
| skipping to change at page 93, line 5 | | skipping to change at page 95, line 5 | |
| on them. Preliminary testing of callback functionality by means of a | | on them. Preliminary testing of callback functionality by means of a | |
| CB_NULL procedure determines whether callbacks can be supported. The | | CB_NULL procedure determines whether callbacks can be supported. The | |
| CB_NULL procedure checks the continuity of the callback path. A | | CB_NULL procedure checks the continuity of the callback path. A | |
| server makes a preliminary assessment of callback availability to a | | server makes a preliminary assessment of callback availability to a | |
| given client and avoids delegating responsibilities until it has | | given client and avoids delegating responsibilities until it has | |
| determined that callbacks are supported. Because the granting of a | | determined that callbacks are supported. Because the granting of a | |
| delegation is always conditional upon the absence of conflicting | | delegation is always conditional upon the absence of conflicting | |
| access, clients must not assume that a delegation will be granted and | | access, clients must not assume that a delegation will be granted and | |
| they must always be prepared for OPENs to be processed without any | | they must always be prepared for OPENs to be processed without any | |
| | | | |
|
| Draft Specification NFS version 4 Protocol October 2002 | | Draft Specification NFS version 4 Protocol November 2002 | |
| | | | |
| delegations being granted. | | delegations being granted. | |
| | | | |
| Once granted, a delegation behaves in most ways like a lock. There | | Once granted, a delegation behaves in most ways like a lock. There | |
| is an associated lease that is subject to renewal together with all | | is an associated lease that is subject to renewal together with all | |
| of the other leases held by that client. | | of the other leases held by that client. | |
| | | | |
| Unlike locks, an operation by a second client to a delegated file | | Unlike locks, an operation by a second client to a delegated file | |
| will cause the server to recall a delegation through a callback. | | will cause the server to recall a delegation through a callback. | |
| | | | |
| | | | |
| skipping to change at page 94, line 5 | | skipping to change at page 96, line 5 | |
| There are three situations that delegation recovery must deal with: | | There are three situations that delegation recovery must deal with: | |
| | | | |
| o Client reboot or restart | | o Client reboot or restart | |
| | | | |
| o Server reboot or restart | | o Server reboot or restart | |
| | | | |
| o Network partition (full or callback-only) | | o Network partition (full or callback-only) | |
| | | | |
| In the event the client reboots or restarts, the failure to renew | | In the event the client reboots or restarts, the failure to renew | |
| | | | |
|
| Draft Specification NFS version 4 Protocol October 2002 | | Draft Specification NFS version 4 Protocol November 2002 | |
| | | | |
| leases will result in the revocation of record locks and share | | leases will result in the revocation of record locks and share | |
| reservations. Delegations, however, may be treated a bit | | reservations. Delegations, however, may be treated a bit | |
| differently. | | differently. | |
| | | | |
| There will be situations in which delegations will need to be | | There will be situations in which delegations will need to be | |
| reestablished after a client reboots or restarts. The reason for | | reestablished after a client reboots or restarts. The reason for | |
| this is the client may have file data stored locally and this data | | this is the client may have file data stored locally and this data | |
| was associated with the previously held delegations. The client will | | was associated with the previously held delegations. The client will | |
| need to reestablish the appropriate file state on the server. | | need to reestablish the appropriate file state on the server. | |
| | | | |
| skipping to change at page 95, line 5 | | skipping to change at page 97, line 5 | |
| process of handling delegation reclaim reconciles three principles of | | process of handling delegation reclaim reconciles three principles of | |
| the NFS version 4 protocol: | | the NFS version 4 protocol: | |
| | | | |
| o Upon reclaim, a client reporting resources assigned to it by an | | o Upon reclaim, a client reporting resources assigned to it by an | |
| earlier server instance must be granted those resources. | | earlier server instance must be granted those resources. | |
| | | | |
| o The server has unquestionable authority to determine whether | | o The server has unquestionable authority to determine whether | |
| delegations are to be granted and, once granted, whether they | | delegations are to be granted and, once granted, whether they | |
| are to be continued. | | are to be continued. | |
| | | | |
|
| Draft Specification NFS version 4 Protocol October 2002 | | Draft Specification NFS version 4 Protocol November 2002 | |
| | | | |
| o The use of callbacks is not to be depended upon until the client | | o The use of callbacks is not to be depended upon until the client | |
| has proven its ability to receive them. | | has proven its ability to receive them. | |
| | | | |
| When a network partition occurs, delegations are subject to freeing | | When a network partition occurs, delegations are subject to freeing | |
| by the server when the lease renewal period expires. This is similar | | by the server when the lease renewal period expires. This is similar | |
| to the behavior for locks and share reservations. For delegations, | | to the behavior for locks and share reservations. For delegations, | |
| however, the server may extend the period in which conflicting | | however, the server may extend the period in which conflicting | |
| requests are held off. Eventually the occurrence of a conflicting | | requests are held off. Eventually the occurrence of a conflicting | |
| request from another client will cause revocation of the delegation. | | request from another client will cause revocation of the delegation. | |
| | | | |
| skipping to change at page 96, line 5 | | skipping to change at page 98, line 5 | |
| invalidate the assumptions that those using these facilities depend | | invalidate the assumptions that those using these facilities depend | |
| upon. | | upon. | |
| | | | |
| 9.3.1. Data Caching and OPENs | | 9.3.1. Data Caching and OPENs | |
| | | | |
| In order to avoid invalidating the sharing assumptions that | | In order to avoid invalidating the sharing assumptions that | |
| applications rely on, NFS version 4 clients should not provide cached | | applications rely on, NFS version 4 clients should not provide cached | |
| data to applications or modify it on behalf of an application when it | | data to applications or modify it on behalf of an application when it | |
| would not be valid to obtain or modify that same data via a READ or | | would not be valid to obtain or modify that same data via a READ or | |
| | | | |
|
| Draft Specification NFS version 4 Protocol October 2002 | | Draft Specification NFS version 4 Protocol November 2002 | |
| | | | |
| WRITE operation. | | WRITE operation. | |
| | | | |
| Furthermore, in the absence of open delegation (see the section "Open | | Furthermore, in the absence of open delegation (see the section "Open | |
| Delegation") two additional rules apply. Note that these rules are | | Delegation") two additional rules apply. Note that these rules are | |
| obeyed in practice by many NFS version 2 and version 3 clients. | | obeyed in practice by many NFS version 2 and version 3 clients. | |
| | | | |
| o First, cached data present on a client must be revalidated after | | o First, cached data present on a client must be revalidated after | |
| doing an OPEN. Revalidating means that the client fetches the | | doing an OPEN. Revalidating means that the client fetches the | |
| change attribute from the server, compares it with the cached | | change attribute from the server, compares it with the cached | |
| | | | |
| skipping to change at page 97, line 5 | | skipping to change at page 99, line 5 | |
| written to the file. Hence, this requirement. | | written to the file. Hence, this requirement. | |
| | | | |
| 9.3.2. Data Caching and File Locking | | 9.3.2. Data Caching and File Locking | |
| | | | |
| For those applications that choose to use file locking instead of | | For those applications that choose to use file locking instead of | |
| share reservations to exclude inconsistent file access, there is an | | share reservations to exclude inconsistent file access, there is an | |
| analogous set of constraints that apply to client side data caching. | | analogous set of constraints that apply to client side data caching. | |
| These rules are effective only if the file locking is used in a way | | These rules are effective only if the file locking is used in a way | |
| that matches in an equivalent way the actual READ and WRITE | | that matches in an equivalent way the actual READ and WRITE | |
| | | | |
|
| Draft Specification NFS version 4 Protocol October 2002 | | Draft Specification NFS version 4 Protocol November 2002 | |
| | | | |
| operations executed. This is as opposed to file locking that is | | operations executed. This is as opposed to file locking that is | |
| based on pure convention. For example, it is possible to manipulate | | based on pure convention. For example, it is possible to manipulate | |
| a two-megabyte file by dividing the file into two one-megabyte | | a two-megabyte file by dividing the file into two one-megabyte | |
| regions and protecting access to the two regions by file locks on | | regions and protecting access to the two regions by file locks on | |
| bytes zero and one. A lock for write on byte zero of the file would | | bytes zero and one. A lock for write on byte zero of the file would | |
| represent the right to do READ and WRITE operations on the first | | represent the right to do READ and WRITE operations on the first | |
| region. A lock for write on byte one of the file would represent the | | region. A lock for write on byte one of the file would represent the | |
| right to do READ and WRITE operations on the second region. As long | | right to do READ and WRITE operations on the second region. As long | |
| as all applications manipulating the file obey this convention, they | | as all applications manipulating the file obey this convention, they | |
| | | | |
| skipping to change at page 98, line 5 | | skipping to change at page 100, line 5 | |
| The data that is written to the server as a prerequisite to the | | The data that is written to the server as a prerequisite to the | |
| unlocking of a region must be written, at the server, to stable | | unlocking of a region must be written, at the server, to stable | |
| storage. The client may accomplish this either with synchronous | | storage. The client may accomplish this either with synchronous | |
| writes or by following asynchronous writes with a COMMIT operation. | | writes or by following asynchronous writes with a COMMIT operation. | |
| This is required because retransmission of the modified data after a | | This is required because retransmission of the modified data after a | |
| server reboot might conflict with a lock held by another client. | | server reboot might conflict with a lock held by another client. | |
| | | | |
| A client implementation may choose to accommodate applications which | | A client implementation may choose to accommodate applications which | |
| use record locking in non-standard ways (e.g. using a record lock as | | use record locking in non-standard ways (e.g. using a record lock as | |
| | | | |
|
| Draft Specification NFS version 4 Protocol October 2002 | | Draft Specification NFS version 4 Protocol November 2002 | |
| | | | |
| a global semaphore) by flushing to the server more data upon an LOCKU | | a global semaphore) by flushing to the server more data upon an LOCKU | |
| than is covered by the locked range. This may include modified data | | than is covered by the locked range. This may include modified data | |
| within files other than the one for which the unlocks are being done. | | within files other than the one for which the unlocks are being done. | |
| In such cases, the client must not interfere with applications whose | | In such cases, the client must not interfere with applications whose | |
| READs and WRITEs are being done only within the bounds of record | | READs and WRITEs are being done only within the bounds of record | |
| locks which the application holds. For example, an application locks | | locks which the application holds. For example, an application locks | |
| a single byte of a file and proceeds to write that single byte. A | | a single byte of a file and proceeds to write that single byte. A | |
| client that chose to handle a LOCKU by flushing all modified data to | | client that chose to handle a LOCKU by flushing all modified data to | |
| the server could validly write that single byte in response to an | | the server could validly write that single byte in response to an | |
| | | | |
| skipping to change at page 99, line 5 | | skipping to change at page 101, line 5 | |
| the purpose of caching that distinct filehandles represent distinct | | the purpose of caching that distinct filehandles represent distinct | |
| filesystem objects. The client then has the choice to organize and | | filesystem objects. The client then has the choice to organize and | |
| maintain the data cache on this basis. | | maintain the data cache on this basis. | |
| | | | |
| In the NFS version 4 protocol, there is now the possibility to have | | In the NFS version 4 protocol, there is now the possibility to have | |
| significant deviations from a "one filehandle per object" model | | significant deviations from a "one filehandle per object" model | |
| because a filehandle may be constructed on the basis of the object's | | because a filehandle may be constructed on the basis of the object's | |
| pathname. Therefore, clients need a reliable method to determine if | | pathname. Therefore, clients need a reliable method to determine if | |
| two filehandles designate the same filesystem object. If clients | | two filehandles designate the same filesystem object. If clients | |
| | | | |
|
| Draft Specification NFS version 4 Protocol October 2002 | | Draft Specification NFS version 4 Protocol November 2002 | |
| | | | |
| were simply to assume that all distinct filehandles denote distinct | | were simply to assume that all distinct filehandles denote distinct | |
| objects and proceed to do data caching on this basis, caching | | objects and proceed to do data caching on this basis, caching | |
| inconsistencies would arise between the distinct client side objects | | inconsistencies would arise between the distinct client side objects | |
| which mapped to the same server side object. | | which mapped to the same server side object. | |
| | | | |
| By providing a method to differentiate filehandles, the NFS version 4 | | By providing a method to differentiate filehandles, the NFS version 4 | |
| protocol alleviates a potential functional regression in comparison | | protocol alleviates a potential functional regression in comparison | |
| with the NFS version 3 protocol. Without this method, caching | | with the NFS version 3 protocol. Without this method, caching | |
| inconsistencies within the same client could occur and this has not | | inconsistencies within the same client could occur and this has not | |
| | | | |
| skipping to change at page 100, line 5 | | skipping to change at page 102, line 5 | |
| delegation is recallable, since the circumstances that allowed for | | delegation is recallable, since the circumstances that allowed for | |
| the delegation are subject to change. In particular, the server may | | the delegation are subject to change. In particular, the server may | |
| receive a conflicting OPEN from another client, the server must | | receive a conflicting OPEN from another client, the server must | |
| recall the delegation before deciding whether the OPEN from the other | | recall the delegation before deciding whether the OPEN from the other | |
| client may be granted. Making a delegation is up to the server and | | client may be granted. Making a delegation is up to the server and | |
| clients should not assume that any particular OPEN either will or | | clients should not assume that any particular OPEN either will or | |
| will not result in an open delegation. The following is a typical | | will not result in an open delegation. The following is a typical | |
| set of conditions that servers might use in deciding whether OPEN | | set of conditions that servers might use in deciding whether OPEN | |
| should be delegated: | | should be delegated: | |
| | | | |
|
| Draft Specification NFS version 4 Protocol October 2002 | | Draft Specification NFS version 4 Protocol November 2002 | |
| | | | |
| o The client must be able to respond to the server's callback | | o The client must be able to respond to the server's callback | |
| requests. The server will use the CB_NULL procedure for a test | | requests. The server will use the CB_NULL procedure for a test | |
| of callback ability. | | of callback ability. | |
| | | | |
| o The client must have responded properly to previous recalls. | | o The client must have responded properly to previous recalls. | |
| | | | |
| o There must be no current open conflicting with the requested | | o There must be no current open conflicting with the requested | |
| delegation. | | delegation. | |
| | | | |
| | | | |
| skipping to change at page 101, line 5 | | skipping to change at page 103, line 5 | |
| | | | |
| When an open delegation is made, the response to the OPEN contains an | | When an open delegation is made, the response to the OPEN contains an | |
| open delegation structure which specifies the following: | | open delegation structure which specifies the following: | |
| | | | |
| o the type of delegation (read or write) | | o the type of delegation (read or write) | |
| | | | |
| o space limitation information to control flushing of data on | | o space limitation information to control flushing of data on | |
| close (write open delegation only, see the section "Open | | close (write open delegation only, see the section "Open | |
| Delegation and Data Caching") | | Delegation and Data Caching") | |
| | | | |
|
| Draft Specification NFS version 4 Protocol October 2002 | | Draft Specification NFS version 4 Protocol November 2002 | |
| | | | |
| o an nfsace4 specifying read and write permissions | | o an nfsace4 specifying read and write permissions | |
| | | | |
| o a stateid to represent the delegation for READ and WRITE | | o a stateid to represent the delegation for READ and WRITE | |
| | | | |
| The delegation stateid is separate and distinct from the stateid for | | The delegation stateid is separate and distinct from the stateid for | |
| the OPEN proper. The standard stateid, unlike the delegation | | the OPEN proper. The standard stateid, unlike the delegation | |
| stateid, is associated with a particular lock_owner and will continue | | stateid, is associated with a particular lock_owner and will continue | |
| to be valid after the delegation is recalled and the file remains | | to be valid after the delegation is recalled and the file remains | |
| open. | | open. | |
| | | | |
| skipping to change at page 102, line 5 | | skipping to change at page 104, line 5 | |
| The use of delegation together with various other forms of caching | | The use of delegation together with various other forms of caching | |
| creates the possibility that no server authentication will ever be | | creates the possibility that no server authentication will ever be | |
| performed for a given user since all of the user's requests might be | | performed for a given user since all of the user's requests might be | |
| satisfied locally. Where the client is depending on the server for | | satisfied locally. Where the client is depending on the server for | |
| authentication, the client should be sure authentication occurs for | | authentication, the client should be sure authentication occurs for | |
| each user by use of the ACCESS operation. This should be the case | | each user by use of the ACCESS operation. This should be the case | |
| even if an ACCESS operation would not be required otherwise. As | | even if an ACCESS operation would not be required otherwise. As | |
| mentioned before, the server may enforce frequent authentication by | | mentioned before, the server may enforce frequent authentication by | |
| returning an nfsace4 denying all access with every open delegation. | | returning an nfsace4 denying all access with every open delegation. | |
| | | | |
|
| Draft Specification NFS version 4 Protocol October 2002 | | Draft Specification NFS version 4 Protocol November 2002 | |
| | | | |
| 9.4.1. Open Delegation and Data Caching | | 9.4.1. Open Delegation and Data Caching | |
| | | | |
| OPEN delegation allows much of the message overhead associated with | | OPEN delegation allows much of the message overhead associated with | |
| the opening and closing files to be eliminated. An open when an open | | the opening and closing files to be eliminated. An open when an open | |
| delegation is in effect does not require that a validation message be | | delegation is in effect does not require that a validation message be | |
| sent to the server. The continued endurance of the "read open | | sent to the server. The continued endurance of the "read open | |
| delegation" provides a guarantee that no OPEN for write and thus no | | delegation" provides a guarantee that no OPEN for write and thus no | |
| write has occurred. Similarly, when closing a file opened for write | | write has occurred. Similarly, when closing a file opened for write | |
| and if write open delegation is in effect, the data written does not | | and if write open delegation is in effect, the data written does not | |
| | | | |
| skipping to change at page 103, line 5 | | skipping to change at page 105, line 5 | |
| The server can recall delegations as a result of managing the | | The server can recall delegations as a result of managing the | |
| available filesystem space. The client should abide by the server's | | available filesystem space. The client should abide by the server's | |
| state space limits for delegations. If the client exceeds the stated | | state space limits for delegations. If the client exceeds the stated | |
| limits for the delegation, the server's behavior is undefined. | | limits for the delegation, the server's behavior is undefined. | |
| | | | |
| Based on server conditions, quotas or available filesystem space, the | | Based on server conditions, quotas or available filesystem space, the | |
| server may grant write open delegations with very restrictive space | | server may grant write open delegations with very restrictive space | |
| limitations. The limitations may be defined in a way that will | | limitations. The limitations may be defined in a way that will | |
| always force modified data to be flushed to the server on close. | | always force modified data to be flushed to the server on close. | |
| | | | |
|
| Draft Specification NFS version 4 Protocol October 2002 | | Draft Specification NFS version 4 Protocol November 2002 | |
| | | | |
| With respect to authentication, flushing modified data to the server | | With respect to authentication, flushing modified data to the server | |
| after a CLOSE has occurred may be problematic. For example, the user | | after a CLOSE has occurred may be problematic. For example, the user | |
| of the application may have logged off the client and unexpired | | of the application may have logged off the client and unexpired | |
| authentication credentials may not be present. In this case, the | | authentication credentials may not be present. In this case, the | |
| client may need to take special care to ensure that local unexpired | | client may need to take special care to ensure that local unexpired | |
| credentials will in fact be available. This may be accomplished by | | credentials will in fact be available. This may be accomplished by | |
| tracking the expiration time of credentials and flushing data well in | | tracking the expiration time of credentials and flushing data well in | |
| advance of their expiration or by making private copies of | | advance of their expiration or by making private copies of | |
| credentials to assure their availability when needed. | | credentials to assure their availability when needed. | |
| | | | |
| skipping to change at page 104, line 5 | | skipping to change at page 106, line 5 | |
| only needs to know about this modified state. If the server | | only needs to know about this modified state. If the server | |
| determines that the file is currently modified, it will respond to | | determines that the file is currently modified, it will respond to | |
| the second client's GETATTR as if the file had been modified locally | | the second client's GETATTR as if the file had been modified locally | |
| at the server. | | at the server. | |
| | | | |
| Since the form of the change attribute is determined by the server | | Since the form of the change attribute is determined by the server | |
| and is opaque to the client, the client and server need to agree on a | | and is opaque to the client, the client and server need to agree on a | |
| method of communicating the modified state of the file. For the size | | method of communicating the modified state of the file. For the size | |
| attribute, the client will report its current view of the file size. | | attribute, the client will report its current view of the file size. | |
| | | | |
|
| Draft Specification NFS version 4 Protocol October 2002 | | Draft Specification NFS version 4 Protocol November 2002 | |
| | | | |
| For the change attribute, the handling is more involved. | | For the change attribute, the handling is more involved. | |
| | | | |
| For the client, the following steps will be taken when receiving a | | For the client, the following steps will be taken when receiving a | |
| write delegation: | | write delegation: | |
| | | | |
| o The value of the change attribute will be obtained from the | | o The value of the change attribute will be obtained from the | |
| server and cached. Let this value be represented by c. | | server and cached. Let this value be represented by c. | |
| | | | |
| o The client will create a value greater than c that will be used | | o The client will create a value greater than c that will be used | |
| | | | |
| skipping to change at page 105, line 5 | | skipping to change at page 107, line 5 | |
| the delegation. Let this value be represented by sc. | | the delegation. Let this value be represented by sc. | |
| | | | |
| o When a second client sends a GETATTR operation on the same file | | o When a second client sends a GETATTR operation on the same file | |
| to the server, the server obtains the change attribute from the | | to the server, the server obtains the change attribute from the | |
| first client. Let this value be cc. | | first client. Let this value be cc. | |
| | | | |
| o If the value cc is equal to sc, the file is not modified and the | | o If the value cc is equal to sc, the file is not modified and the | |
| server returns the current values for change, time_metadata, and | | server returns the current values for change, time_metadata, and | |
| time_modify (for example) to the second client. | | time_modify (for example) to the second client. | |
| | | | |
|
| Draft Specification NFS version 4 Protocol October 2002 | | Draft Specification NFS version 4 Protocol November 2002 | |
| | | | |
| o If the value cc is NOT equal to sc, the file is currently | | o If the value cc is NOT equal to sc, the file is currently | |
| modified at the first client and most likely will be modified at | | modified at the first client and most likely will be modified at | |
| the server at a future time. The server then uses its current | | the server at a future time. The server then uses its current | |
| time to construct attribute values for time_metadata and | | time to construct attribute values for time_metadata and | |
| time_modify. A new value of sc, which we will call nsc, is | | time_modify. A new value of sc, which we will call nsc, is | |
| computed by the server, such that nsc >= sc + 1. The server | | computed by the server, such that nsc >= sc + 1. The server | |
| then returns the constructed time_metadata, time_modify, and nsc | | then returns the constructed time_metadata, time_modify, and nsc | |
| values to the requester. The server replaces sc in the | | values to the requester. The server replaces sc in the | |
| delegation record with nsc. To prevent the possibility of | | delegation record with nsc. To prevent the possibility of | |
| | | | |
| skipping to change at page 106, line 5 | | skipping to change at page 108, line 5 | |
| update sc, time_modify, time_metadata into file's metadata; | | update sc, time_modify, time_metadata into file's metadata; | |
| } | | } | |
| | | | |
| return to client (that sent GETATTR) the attributes | | return to client (that sent GETATTR) the attributes | |
| it requested, but make sure size comes from what | | it requested, but make sure size comes from what | |
| CB_GETATTR returned. Do not update the file's metadata | | CB_GETATTR returned. Do not update the file's metadata | |
| with the client's modified size. | | with the client's modified size. | |
| | | | |
| o In the case that the file attribute size is different than the | | o In the case that the file attribute size is different than the | |
| | | | |
|
| Draft Specification NFS version 4 Protocol October 2002 | | Draft Specification NFS version 4 Protocol November 2002 | |
| | | | |
| server's current value, the server treats this as a modification | | server's current value, the server treats this as a modification | |
| regardless of the value of the change attribute retrieved via | | regardless of the value of the change attribute retrieved via | |
| CB_GETATTR and responds to the second client as in the last | | CB_GETATTR and responds to the second client as in the last | |
| step. | | step. | |
| | | | |
| This methodology resolves issues of clock differences between client | | This methodology resolves issues of clock differences between client | |
| and server and other scenarios where the use of CB_GETATTR break | | and server and other scenarios where the use of CB_GETATTR break | |
| down. | | down. | |
| | | | |
| | | | |
| skipping to change at page 107, line 5 | | skipping to change at page 109, line 5 | |
| delegation voluntarily. The following items of state need to be | | delegation voluntarily. The following items of state need to be | |
| dealt with: | | dealt with: | |
| | | | |
| o If the file associated with the delegation is no longer open and | | o If the file associated with the delegation is no longer open and | |
| 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. | |
| | | | |
| o If a file has other open references at the client, then OPEN | | o 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 | |
| | | | |
|
| Draft Specification NFS version 4 Protocol October 2002 | | Draft Specification NFS version 4 Protocol November 2002 | |
| | | | |
| 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 not longer be valid. These | | since the delegation stateid will not longer be valid. These | |
| OPEN requests are done with the claim type of | | OPEN requests are done with the claim type of | |
| CLAIM_DELEGATE_CUR. This will allow the presentation of the | | CLAIM_DELEGATE_CUR. This will allow the presentation of the | |
| delegation stateid so that the client can establish the | | delegation stateid so that the client can establish the | |
| appropriate rights to perform the OPEN. (see the section | | appropriate rights to perform the OPEN. (see the section | |
| "Operation 18: OPEN" for details.) | | "Operation 18: OPEN" for details.) | |
| | | | |
| o If there are granted file locks, the corresponding LOCK | | o If there are granted file locks, the corresponding LOCK | |
| | | | |
| skipping to change at page 108, line 5 | | skipping to change at page 110, line 5 | |
| the actual open state of the file may continue to change makes it not | | the actual open state of the file may continue to change makes it not | |
| worthwhile to send information about opens and closes to the server, | | worthwhile to send information about opens and closes to the server, | |
| except as part of delegation return. Only in the case of closing the | | except as part of delegation return. Only in the case of closing the | |
| open that resulted in obtaining the delegation would clients be | | open that resulted in obtaining the delegation would clients be | |
| likely to do this early, since, in that case, the close once done | | likely to do this early, since, in that case, the close once done | |
| will not be undone. Regardless of the client's choices on scheduling | | will not be undone. Regardless of the client's choices on scheduling | |
| these actions, all must be performed before the delegation is | | these actions, all must be performed before the delegation is | |
| returned, including (when applicable) the close that corresponds to | | returned, including (when applicable) the close that corresponds to | |
| the open that resulted in the delegation. These actions can be | | the open that resulted in the delegation. These actions can be | |
| | | | |
|
| Draft Specification NFS version 4 Protocol October 2002 | | Draft Specification NFS version 4 Protocol November 2002 | |
| | | | |
| performed either in previous requests or in previous operations in | | performed either in previous requests or in previous operations in | |
| the same COMPOUND request. | | the same COMPOUND request. | |
| | | | |
| 9.4.5. Clients that Fail to Honor Delegation Recalls | | 9.4.5. Clients that Fail to Honor Delegation Recalls | |
| | | | |
| A client may fail to respond to a recall for various reasons, such as | | A client may fail to respond to a recall for various reasons, such as | |
| a failure of the callback path from server to the client. The client | | a failure of the callback path from server to the client. The client | |
| may be unaware of a failure in the callback path. This lack of | | may be unaware of a failure in the callback path. This lack of | |
| awareness could result in the client finding out long after the | | awareness could result in the client finding out long after the | |
| | | | |
| skipping to change at page 109, line 5 | | skipping to change at page 111, line 5 | |
| except for RENEW, that take a stateid, to renew delegation leases | | except for RENEW, that take a stateid, to renew delegation leases | |
| across callback path failures. The client that wants to keep | | across callback path failures. The client that wants to keep | |
| delegations in force across callback path failures must use RENEW | | delegations in force across callback path failures must use RENEW | |
| to do so. | | to do so. | |
| | | | |
| 9.4.6. Delegation Revocation | | 9.4.6. Delegation Revocation | |
| | | | |
| At the point a delegation is revoked, if there are associated opens | | At the point a delegation is revoked, if there are associated opens | |
| on the client, the applications holding these opens need to be | | on the client, the applications holding these opens need to be | |
| | | | |
|
| Draft Specification NFS version 4 Protocol October 2002 | | Draft Specification NFS version 4 Protocol November 2002 | |
| | | | |
| notified. This notification usually occurs by returning errors for | | notified. This notification usually occurs by returning errors for | |
| READ/WRITE operations or when a close is attempted for the open file. | | READ/WRITE operations or when a close is attempted for the open file. | |
| | | | |
| If no opens exist for the file at the point the delegation is | | If no opens exist for the file at the point the delegation is | |
| revoked, then notification of the revocation is unnecessary. | | revoked, then notification of the revocation is unnecessary. | |
| However, if there is modified data present at the client for the | | However, if there is modified data present at the client for the | |
| file, the user of the application should be notified. Unfortunately, | | file, the user of the application should be notified. Unfortunately, | |
| it may not be possible to notify the user since active applications | | it may not be possible to notify the user since active applications | |
| may not be present at the client. See the section "Revocation | | may not be present at the client. See the section "Revocation | |
| | | | |
| skipping to change at page 110, line 5 | | skipping to change at page 112, line 5 | |
| 9.5.1. Revocation Recovery for Write Open Delegation | | 9.5.1. Revocation Recovery for Write Open Delegation | |
| | | | |
| Revocation recovery for a write open delegation poses the special | | Revocation recovery for a write open delegation poses the special | |
| issue of modified data in the client cache while the file is not | | issue of modified data in the client cache while the file is not | |
| open. In this situation, any client which does not flush modified | | open. In this situation, any client which does not flush modified | |
| data to the server on each close must ensure that the user receives | | data to the server on each close must ensure that the user receives | |
| appropriate notification of the failure as a result of the | | appropriate notification of the failure as a result of the | |
| revocation. Since such situations may require human action to | | revocation. Since such situations may require human action to | |
| correct problems, notification schemes in which the appropriate user | | correct problems, notification schemes in which the appropriate user | |
| | | | |
|
| Draft Specification NFS version 4 Protocol October 2002 | | Draft Specification NFS version 4 Protocol November 2002 | |
| | | | |
| or administrator is notified may be necessary. Logging and console | | or administrator is notified may be necessary. Logging and console | |
| messages are typical examples. | | messages are typical examples. | |
| | | | |
| If there is modified data on the client, it must not be flushed | | If there is modified data on the client, it must not be flushed | |
| normally to the server. A client may attempt to provide a copy of | | normally to the server. A client may attempt to provide a copy of | |
| the file data as modified during the delegation under a different | | the file data as modified during the delegation under a different | |
| name in the filesystem name space to ease recovery. Note that when | | name in the filesystem name space to ease recovery. Note that when | |
| the client can determine that the file has not been modified by any | | the client can determine that the file has not been modified by any | |
| other client, or when the client has a complete cached copy of file | | other client, or when the client has a complete cached copy of file | |
| | | | |
| skipping to change at page 111, line 5 | | skipping to change at page 113, line 5 | |
| immediately reflected on the server. Normally such changes are not | | immediately reflected on the server. Normally such changes are not | |
| propagated directly to the server but when the modified data is | | propagated directly to the server but when the modified data is | |
| flushed to the server, analogous attribute changes are made on the | | flushed to the server, analogous attribute changes are made on the | |
| server. When open delegation is in effect, the modified attributes | | server. When open delegation is in effect, the modified attributes | |
| may be returned to the server in the response to a CB_RECALL call. | | may be returned to the server in the response to a CB_RECALL call. | |
| | | | |
| The result of local caching of attributes is that the attribute | | The result of local caching of attributes is that the attribute | |
| caches maintained on individual clients will not be coherent. Changes | | caches maintained on individual clients will not be coherent. Changes | |
| made in one order on the server may be seen in a different order on | | made in one order on the server may be seen in a different order on | |
| | | | |
|
| Draft Specification NFS version 4 Protocol October 2002 | | Draft Specification NFS version 4 Protocol November 2002 | |
| | | | |
| one client and in a third order on a different client. | | one client and in a third order on a different client. | |
| | | | |
| The typical filesystem application programming interfaces do not | | The typical filesystem application programming interfaces do not | |
| provide means to atomically modify or interrogate attributes for | | provide means to atomically modify or interrogate attributes for | |
| multiple files at the same time. The following rules provide an | | multiple files at the same time. The following rules provide an | |
| environment where the potential incoherences mentioned above can be | | environment where the potential incoherences mentioned above can be | |
| reasonably managed. These rules are derived from the practice of | | reasonably managed. These rules are derived from the practice of | |
| previous NFS protocols. | | previous NFS protocols. | |
| | | | |
| | | | |
| skipping to change at page 112, line 5 | | skipping to change at page 114, line 5 | |
| attribute changes are immediately sent to the server. | | attribute changes are immediately sent to the server. | |
| | | | |
| In some operating environments, the equivalent to time_access is | | In some operating environments, the equivalent to time_access is | |
| expected to be implicitly updated by each read of the content of the | | expected to be implicitly updated by each read of the content of the | |
| file object. If an NFS client is caching the content of a file | | file object. If an NFS client is caching the content of a file | |
| object, whether it is a regular file, directory, or symbolic link, | | object, whether it is a regular file, directory, or symbolic link, | |
| the client SHOULD NOT update the time_access attribute (via SETATTR | | the client SHOULD NOT update the time_access attribute (via SETATTR | |
| or a small READ or READDIR request) on the server with each read that | | or a small READ or READDIR request) on the server with each read that | |
| is satisfied from cache. The reason is that this can defeat the | | is satisfied from cache. The reason is that this can defeat the | |
| | | | |
|
| Draft Specification NFS version 4 Protocol October 2002 | | Draft Specification NFS version 4 Protocol November 2002 | |
| | | | |
| performance benefits of caching content, especially since an explicit | | performance benefits of caching content, especially since an explicit | |
| SETATTR of time_access may alter the change attribute on the server. | | SETATTR of time_access may alter the change attribute on the server. | |
| If the change attribute changes, clients that are caching the content | | If the change attribute changes, clients that are caching the content | |
| will think the content has changed, and will re-read unmodified data | | will think the content has changed, and will re-read unmodified data | |
| from the server. Nor is the client encouraged to maintain a modified | | from the server. Nor is the client encouraged to maintain a modified | |
| version of time_access in its cache, since this would mean that the | | version of time_access in its cache, since this would mean that the | |
| client will either eventually have to write the access time to the | | client will either eventually have to write the access time to the | |
| server with bad performance effects, or it would never update the | | server with bad performance effects, or it would never update the | |
| server's time_access, thereby resulting in a situation where an | | server's time_access, thereby resulting in a situation where an | |
| | | | |
| skipping to change at page 113, line 5 | | skipping to change at page 115, line 5 | |
| the application to always get the most up to date data and | | the application to always get the most up to date data and | |
| metadata for the file. However, due to the negative performance | | metadata for the file. However, due to the negative performance | |
| implications of this, such behavior is OPTIONAL. | | implications of this, such behavior is OPTIONAL. | |
| | | | |
| o If the memory mapped file is not being modified on the server, | | o If the memory mapped file is not being modified on the server, | |
| and instead is just being read by an application via the memory | | and instead is just being read by an application via the memory | |
| mapped interface, the client will not see an updated time_access | | mapped interface, the client will not see an updated time_access | |
| attribute. However, in many operating environments, neither | | attribute. However, in many operating environments, neither | |
| will any process running on the server. Thus NFS clients are at | | will any process running on the server. Thus NFS clients are at | |
| | | | |
|
| Draft Specification NFS version 4 Protocol October 2002 | | Draft Specification NFS version 4 Protocol November 2002 | |
| | | | |
| no disadvantage with respect to local processes. | | no disadvantage with respect to local processes. | |
| | | | |
| o If there is another client that is memory mapping the file, and | | o If there is another client that is memory mapping the file, and | |
| if that client is holding a write delegation, the same set of | | if that client is holding a write delegation, the same set of | |
| issues as discussed in the previous two bullet items apply. So, | | issues as discussed in the previous two bullet items apply. So, | |
| when a server does a CB_GETATTR to a file that the client has | | when a server does a CB_GETATTR to a file that the client has | |
| modified in its cache, the response from CB_GETATTR will not | | modified in its cache, the response from CB_GETATTR will not | |
| necessarily be accurate. As discussed earlier, the client's | | necessarily be accurate. As discussed earlier, the client's | |
| obligation is to report that the file has been modified since | | obligation is to report that the file has been modified since | |
| | | | |
| skipping to change at page 114, line 5 | | skipping to change at page 116, line 5 | |
| write to the server that portion of the page that is locked. | | write to the server that portion of the page that is locked. | |
| For example, if client A simply writes out the page, and then | | For example, if client A simply writes out the page, and then | |
| client B writes out the page, client A's data is lost. | | client B writes out the page, client A's data is lost. | |
| | | | |
| Moreover, if mandatory locking is enabled on the file, then we | | Moreover, if mandatory locking is enabled on the file, then we | |
| have a different problem. When clients A and B issue the STORE | | have a different problem. When clients A and B issue the STORE | |
| instructions, the resulting page faults require a record lock on | | instructions, the resulting page faults require a record lock on | |
| the entire page. Each client then tries to extend their locked | | the entire page. Each client then tries to extend their locked | |
| range to the entire page, which results in a deadlock. | | range to the entire page, which results in a deadlock. | |
| | | | |
|
| Draft Specification NFS version 4 Protocol October 2002 | | Draft Specification NFS version 4 Protocol November 2002 | |
| | | | |
| Communicating the NFS4ERR_DEADLOCK error to a STORE instruction | | Communicating the NFS4ERR_DEADLOCK error to a STORE instruction | |
| is difficult at best. | | is difficult at best. | |
| | | | |
| If a client is locking the entire memory mapped file, there is | | If a client is locking the entire memory mapped file, there is | |
| no problem with advisory or mandatory record locking, at least | | no problem with advisory or mandatory record locking, at least | |
| until the client unlocks a region in the middle of the file. | | until the client unlocks a region in the middle of the file. | |
| | | | |
| Given the above issues the following are permitted: | | Given the above issues the following are permitted: | |
| | | | |
| | | | |
| skipping to change at page 115, line 5 | | skipping to change at page 117, line 5 | |
| other clients. It does this by using the change attribute as | | other clients. It does this by using the change attribute as | |
| reported before and after the directory operation in the associated | | reported before and after the directory operation in the associated | |
| change_info4 value returned for the operation. The server is able to | | change_info4 value returned for the operation. The server is able to | |
| communicate to the client whether the change_info4 data is provided | | communicate to the client whether the change_info4 data is provided | |
| atomically with respect to the directory operation. If the change | | atomically with respect to the directory operation. If the change | |
| values are provided atomically, the client is then able to compare | | values are provided atomically, the client is then able to compare | |
| the pre-operation change value with the change value in the client's | | the pre-operation change value with the change value in the client's | |
| name cache. If the comparison indicates that the directory was | | name cache. If the comparison indicates that the directory was | |
| updated by another client, the name cache associated with the | | updated by another client, the name cache associated with the | |
| | | | |
|
| Draft Specification NFS version 4 Protocol October 2002 | | Draft Specification NFS version 4 Protocol November 2002 | |
| | | | |
| modified directory is purged from the client. If the comparison | | modified directory is purged from the client. If the comparison | |
| indicates no modification, the name cache can be updated on the | | indicates no modification, the name cache can be updated on the | |
| client to reflect the directory operation and the associated timeout | | client to reflect the directory operation and the associated timeout | |
| extended. The post-operation change value needs to be saved as the | | extended. The post-operation change value needs to be saved as the | |
| basis for future change_info4 comparisons. | | basis for future change_info4 comparisons. | |
| | | | |
| As demonstrated by the scenario above, name caching requires that the | | As demonstrated by the scenario above, name caching requires that the | |
| client revalidate name cache data by inspecting the change attribute | | client revalidate name cache data by inspecting the change attribute | |
| of a directory at the point when the name cache item was cached. | | of a directory at the point when the name cache item was cached. | |
| | | | |
| skipping to change at page 116, line 5 | | skipping to change at page 118, line 5 | |
| is adequate. The lifetime of the cache entry can be extended at | | is adequate. The lifetime of the cache entry can be extended at | |
| these checkpoints. When a client is modifying the directory, the | | these checkpoints. When a client is modifying the directory, the | |
| client needs to use the change_info4 data to determine whether there | | client needs to use the change_info4 data to determine whether there | |
| are other clients modifying the directory. If it is determined that | | are other clients modifying the directory. If it is determined that | |
| no other client modifications are occurring, the client may update | | no other client modifications are occurring, the client may update | |
| its directory cache to reflect its own changes. | | its directory cache to reflect its own changes. | |
| | | | |
| As demonstrated previously, directory caching requires that the | | As demonstrated previously, directory caching requires that the | |
| client revalidate directory cache data by inspecting the change | | client revalidate directory cache data by inspecting the change | |
| | | | |
|
| Draft Specification NFS version 4 Protocol October 2002 | | Draft Specification NFS version 4 Protocol November 2002 | |
| | | | |
| attribute of a directory at the point when the directory was cached. | | attribute of a directory at the point when the directory was cached. | |
| This requires that the server update the change attribute for | | This requires that the server update the change attribute for | |
| directories when the contents of the corresponding directory is | | directories when the contents of the corresponding directory is | |
| modified. For a client to use the change_info4 information | | modified. For a client to use the change_info4 information | |
| appropriately and correctly, the server must report the pre and post | | appropriately and correctly, the server must report the pre and post | |
| operation change attribute values atomically. When the server is | | operation change attribute values atomically. When the server is | |
| unable to report the before and after values atomically with respect | | unable to report the before and after values atomically with respect | |
| to the directory operation, the server must indicate that fact in the | | to the directory operation, the server must indicate that fact in the | |
| change_info4 return value. When the information is not atomically | | change_info4 return value. When the information is not atomically | |
| reported, the client should not assume that other clients have not | | reported, the client should not assume that other clients have not | |
| changed the directory. | | changed the directory. | |
| | | | |
|
| Draft Specification NFS version 4 Protocol October 2002 | | Draft Specification NFS version 4 Protocol November 2002 | |
| | | | |
| 10. Minor Versioning | | 10. 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 NFS version 4 protocol contains the rules and | | need arises, the NFS version 4 protocol contains the rules and | |
| framework to allow for future minor changes or versioning. | | framework to 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 must follow the IETF process and be | | future accepted minor version must follow the IETF process and be | |
| documented in a standards track RFC. Therefore, each minor version | | documented in a standards track RFC. Therefore, each minor version | |
| | | | |
| skipping to change at page 118, line 5 | | skipping to change at page 120, line 5 | |
| documented attribute. | | documented attribute. | |
| | | | |
| Since attribute results are specified as an opaque array of | | Since attribute results are specified as an opaque array of | |
| per-attribute XDR encoded results, the complexity of adding new | | per-attribute XDR encoded results, the complexity of adding new | |
| attributes in the midst of the current definitions will be too | | attributes in the midst of the current definitions will be too | |
| burdensome. | | burdensome. | |
| | | | |
| 3 Minor versions must not modify the structure of an existing | | 3 Minor versions must not modify the structure of an existing | |
| operation's arguments or results. | | operation's arguments or results. | |
| | | | |
|
| Draft Specification NFS version 4 Protocol October 2002 | | Draft Specification NFS version 4 Protocol November 2002 | |
| | | | |
| Again the complexity of handling multiple structure definitions | | Again the complexity of handling multiple structure definitions | |
| for a single operation is too burdensome. New operations should | | for a single operation is too burdensome. New operations should | |
| be added instead of modifying existing structures for a minor | | be added instead of modifying existing structures for a minor | |
| version. | | version. | |
| | | | |
| This rule does not preclude the following adaptations in a minor | | This rule does not preclude the following adaptations in a minor | |
| version. | | version. | |
| | | | |
| o adding bits to flag fields such as new attributes to | | o adding bits to flag fields such as new attributes to | |
| | | | |
| skipping to change at page 119, line 5 | | skipping to change at page 121, line 5 | |
| the request as an XDR decode error. This approach allows for | | the request as an XDR decode error. This approach allows for | |
| the obsolescence of an operation while maintaining its structure | | the obsolescence of an operation while maintaining its structure | |
| so that a future minor version can reintroduce the operation. | | so that a future minor version can reintroduce the operation. | |
| | | | |
| 8.1 Minor versions may declare attributes mandatory to NOT | | 8.1 Minor versions may declare attributes mandatory to NOT | |
| implement. | | implement. | |
| | | | |
| 8.2 Minor versions may declare flag bits or enumeration values as | | 8.2 Minor versions may declare flag bits or enumeration values as | |
| mandatory to NOT implement. | | mandatory to NOT implement. | |
| | | | |
|
| Draft Specification NFS version 4 Protocol October 2002 | | Draft Specification NFS version 4 Protocol November 2002 | |
| | | | |
| 9 Minor versions may downgrade features from mandatory to | | 9 Minor versions may downgrade features from mandatory to | |
| recommended, or recommended to optional. | | recommended, or recommended to optional. | |
| | | | |
| 10 Minor versions may upgrade features from optional to recommended | | 10 Minor versions may upgrade features from optional to recommended | |
| or recommended to mandatory. | | or recommended to mandatory. | |
| | | | |
| 11 A client and server that support minor version X must support | | 11 A client and server that support minor version X must support | |
| minor versions 0 (zero) through X-1 as well. | | minor versions 0 (zero) through X-1 as well. | |
| | | | |
| | | | |
| skipping to change at page 120, line 5 | | skipping to change at page 122, line 5 | |
| | | | |
| This rule allows for the introduction of new functionality and | | This rule allows for the introduction of new functionality and | |
| forces the use of implementation experience before designating a | | forces the use of implementation experience before designating a | |
| feature as mandatory. | | feature as mandatory. | |
| | | | |
| 13 A client MUST NOT attempt to use a stateid, filehandle, or | | 13 A client MUST NOT attempt to use a stateid, filehandle, or | |
| similar returned object from the COMPOUND procedure with minor | | similar returned object from the COMPOUND procedure with minor | |
| version X for another COMPOUND procedure with minor version Y, | | version X for another COMPOUND procedure with minor version Y, | |
| where X != Y. | | where X != Y. | |
| | | | |
|
| Draft Specification NFS version 4 Protocol October 2002 | | Draft Specification NFS version 4 Protocol November 2002 | |
| | | | |
| 11. Internationalization | | 11. Internationalization | |
| | | | |
|
| The primary issue in which NFS needs to deal with | | The primary issue in which NFS version 4 needs to deal with | |
| internationalization, or I18N, is with respect to file names and | | internationalization, or I18N, is with respect to file names and | |
| other strings as used within the protocol. The choice of string | | other strings as used within the protocol. The choice of string | |
| representation must allow reasonable name/string access to clients | | representation must allow reasonable name/string access to clients | |
| which use various languages. The UTF-8 encoding of the UCS as | | which use various languages. The UTF-8 encoding of the UCS as | |
| defined by [ISO10646] allows for this type of access and follows the | | defined by [ISO10646] allows for this type of access and follows the | |
| policy described in "IETF Policy on Character Sets and Languages", | | policy described in "IETF Policy on Character Sets and Languages", | |
|
| [RFC2277]. This choice is explained further in the following. | | [RFC2277]. | |
| | | | |
|
| 11.1. Universal Versus Local Character Sets | | [RFC-XXX-stringprep-XXX], otherwise know as "stringprep", documents a | |
| | | framework for using Unicode/UTF-8 in networking protocols, so as "to | |
| | | increase the likelihood that string input and string comparison work | |
| | | in ways that make sense for typical users throughout the world." A | |
| | | protocol must define a profile of stringprep "in order to fully | |
| | | specify the processing options." The remainder of this | |
| | | Internationalization section defines the NFS version 4 stringprep | |
| | | profiles. Much of terminology used for the remainder of this section | |
| | | comes from stringprep. | |
| | | | |
|
| [RFC1345] describes a table of 16 bit characters for many different | | There are three UTF-8 string types defined for NFS version 4: | |
| languages (the bit encodings match Unicode, though of course | | utf8str_cs, utf8str_cis, and utf8str_mixed. Separate profiles are | |
| [RFC1345] is somewhat out of date with respect to current Unicode | | defined for each. Each profile defines the following, as required by | |
| assignments). Each character from each language has a unique 16 bit | | stringprep: | |
| value in the 16 bit character set. Thus this table can be thought of | | | |
| as a universal character set. [RFC1345] then talks about groupings | | | |
| of subsets of the entire 16 bit character set into "Charset Tables". | | | |
| For example one might take all the Greek characters from the 16 bit | | | |
| table (which are consecutively allocated), and normalize their | | | |
| offsets to a table that fits in 7 bits. Thus it is determined that | | | |
| "lower case alpha" is in the same position as "upper case a" in the | | | |
| US-ASCII table, and "upper case alpha" is in the same position as | | | |
| "lower case a" in the US-ASCII table. | | | |
| | | | |
|
| These normalized subset character sets can be thought of as "local | | o The intended applicability of the profile | |
| character sets", suitable for an operating system locale. | | | |
| | | | |
|
| Local character sets are not suitable for the NFS protocol. Consider | | o The character repertoire that is the input and output to | |
| someone who creates a file with a name in a Swedish character set. | | stringprep (which is Unicode 3.2 for referenced version of | |
| If someone else later goes to access the file with their locale set | | stringprep) | |
| to the Swedish language, then there are no problems. But if someone | | | |
| in say the US-ASCII locale goes to access the file, the file name | | | |
| will look very different, because the Swedish characters in the 7 bit | | | |
| table will now be represented in US-ASCII characters on the display. | | | |
| It would be preferable to give the US-ASCII user a way to display the | | | |
| file name using Swedish glyphs. In order to do that, the NFS protocol | | | |
| would have to include the locale with the file name on each operation | | | |
| to create a file. | | | |
| | | | |
|
| However, the complexity burden of defining such locales in a way that | | o The mapping tables from stringprep used (as described in section | |
| could be understood by all clients and servers, and maintaining them | | 3 of stringprep) | |
| in the face of changes would be considerable. A better solution is | | | |
| desirable. | | | |
| | | | |
|
| If the NFS version 4 protocol used a universal 16 bit or 32 bit | | o Any additional mapping tables specific to the profile | |
| character set (or an encoding of a 16 bit or 32 bit character set | | | |
| into octets), then the server and client need not care if the locale | | | |
| of the user accessing the file is different than the locale of the | | | |
| user who created the file. The unique 16 bit or 32 bit encoding of | | | |
| | | | |
|
| Draft Specification NFS version 4 Protocol October 2002 | | o The Unicode normalization used, if any (as described in section | |
| | | 4 of stringprep) | |
| | | | |
|
| the character allows for determination of what language the character | | o The tables from stringprep listing of characters that are | |
| is from and also how to display that character on the client. The | | prohibited as output (as described in section 5 of stringprep) | |
| server need not know what locales are used. | | | |
| | | | |
|
| 11.2. Overview of Universal Character Set Standards | | o The bidirectional string testing used, if any (as described in | |
| | | section 6 of stringprep) | |
| | | | |
|
| The previous section makes a case for using a universal character | | o Any additional characters that are prohibited as output specific | |
| set. This section makes the case for using UTF-8 as the specific | | to the profile | |
| universal character set for the NFS version 4 protocol. | | | |
| | | | |
|
| [RFC2279] discusses UTF-* (UTF-8 and other UTF-XXX encodings), | | Stringprep discusses Unicode characters, whereas NFS version 4 | |
| Unicode, and UCS-*. There are two standards bodies managing | | renders UTF-8 characters. Since there is a one to one mapping from | |
| universal code sets: | | UTF-8 to Unicode, where ever the remainder of this document refers to | |
| | | | |
|
| o ISO/IEC which has the standard 10646-1 | | Draft Specification NFS version 4 Protocol November 2002 | |
| | | | |
|
| o Unicode which has the Unicode standard | | to Unicode, the reader should assume UTF-8. | |
| | | | |
|
| Both standards bodies have pledged to track each other's assignments | | Much of the text for the profiles comes from [RFC-XXX-nameprep-XXX]. | |
| of character codes. | | | |
| | | | |
|
| The following is a brief analysis of the various standards. | | 11.1. Stringprep profile for the utf8str_cs type | |
| | | | |
|
| UCS Universal Character Set. This is ISO/IEC 10646-1: "a | | Every use of the utf8str_cs type definition in the NFS version 4 | |
| multi-octet character set called the Universal Character | | protocol specification follows the profile named nfs4_cs_prep. | |
| Set (UCS), which encompasses most of the world's writing | | | |
| systems." | | | |
| | | | |
|
| UCS-2 a two octet per character encoding that addresses the first | | 11.1.1. Intended applicability of the nfs4_cs_prep profile | |
| 2^16 characters of UCS. Currently there are no UCS | | | |
| characters beyond that range. | | | |
| | | | |
|
| UCS-4 a four octet per character encoding that permits the | | The utf8str_cs type is a case sensitive string of UTF-8 characters. | |
| encoding of up to 2^31 characters. | | Its primary use in NFS Version 4 is for naming components and | |
| | | pathnames. Components and pathnames are stored on the server's | |
| | | filesystem. Two valid distinct UTF-8 strings might be the same after | |
| | | processing via the utf8str_cs profile. If the strings are two names | |
| | | inside a directory, the NFS version 4 server will need to either: | |
| | | | |
|
| UTF UTF is an abbreviation of the term "UCS transformation | | o disallow the creation of a second name if it's post processed | |
| format" and is used in the naming of various standards for | | form collides with that of an existing name, or | |
| encoding of UCS characters as described below. | | | |
| | | | |
|
| UTF-1 Only historical interest; it has been removed from 10646-1 | | o allow the creation of the second name, but arrange so that after | |
| | | post processing, the second name is different than the post | |
| | | processed form of the first name. | |
| | | | |
|
| UTF-7 Encodes the entire "repertoire" of UCS "characters using | | 11.1.2. Character repertoire of nfs4_cs_prep | |
| only octets with the higher order bit clear". [RFC2152] | | | |
| describes UTF-7. UTF-7 accomplishes this by reserving one | | | |
| of the 7bit US-ASCII characters as a "shift" character to | | | |
| indicate non-US-ASCII characters. | | | |
| | | | |
|
| Draft Specification NFS version 4 Protocol October 2002 | | The nfs4_cs_prep profile uses Unicode 3.2, as defined in stringprep's | |
| | | Appendix A.1 | |
| | | | |
|
| UTF-8 Unlike UTF-7, uses all 8 bits of the octets. US-ASCII | | 11.1.3. Mapping used by nfs4_cs_prep | |
| characters are encoded as before unchanged. Any octet with | | | |
| the high bit cleared can only mean a US-ASCII character. | | | |
| The high bit set means that a UCS character is being | | | |
| encoded. | | | |
| | | | |
|
| UTF-16 Encodes UCS-4 characters into UCS-2 characters using a | | The nfs4_cs_prep profile specifies mapping using the following tables | |
| reserved range in UCS-2. | | from stringprep: | |
| | | | |
|
| Unicode Unicode and UCS-2 are the same; [RFC2279] states: | | Table B.1 | |
| | | | |
|
| Up to the present time, changes in Unicode and amendments | | Table B.2 is normally not part of the nfs4_cs_prep profile as it is | |
| to ISO/IEC 10646 have tracked each other, so that the | | primarily for dealing with case-insensitive comparisons. However, if | |
| character repertoires and code point assignments have | | the NFS version 4 file server supports the case_insensitive | |
| remained in sync. The relevant standardization committees | | filesystem attribute, and if case_insensitive is true, the NFS | |
| have committed to maintain this very useful synchronism. | | version 4 server MUST use Table B.2 (in addition to Table B1) when | |
| | | processing utf8str_cs strings, and the NFS version 4 client MUST | |
| | | assume Table B.2 (in addition to Table B.1) are being used. | |
| | | | |
|
| 11.3. Difficulties with UCS-4, UCS-2, Unicode | | If the case_preserving attribute is present and set to false, then | |
| | | the NFS version 4 server MUST use table B.2 to map case when | |
| | | processing utf8str_cs strings. Whether the server maps from lower to | |
| | | upper case or the upper to lower case is an implementation | |
| | | dependency. | |
| | | | |
|
| Adapting existing applications, and filesystems to multi-octet | | Draft Specification NFS version 4 Protocol November 2002 | |
| schemes like UCS and Unicode can be difficult. A significant amount | | | |
| of code has been written to process streams of bytes. Also there are | | | |
| many existing stored objects described with 7 bit or 8 bit | | | |
| characters. Doubling or quadrupling the bandwidth and storage | | | |
| requirements seems like an expensive way to accomplish I18N. | | | |
| | | | |
|
| UCS-2 and Unicode are "only" 16 bits long. That might seem to be | | 11.1.4. Normalization used by nfs4_cs_prep | |
| enough but, according to [Unicode1], 49,194 Unicode characters are | | | |
| already assigned. According to [Unicode2] there are still more | | | |
| languages that need to be added. | | | |
| | | | |
|
| 11.4. UTF-8 and its solutions | | The nfs4_cs_prep profile does not specify a normalization form. A | |
| | | later revision of this specification may specify a particular | |
| | | normalization form. Therefore, the server and client can expect that | |
| | | they may receive unnormalized characters within protocol requests and | |
| | | responses. If the operating environment requires normalization, then | |
| | | the implementation must normalize utf8str_cs strings within the | |
| | | protocol before presenting the information to an application (at the | |
| | | client) or local filesystem (at the server). | |
| | | | |
|
| UTF-8 solves problems for NFS that exist with the use of UCS and | | 11.1.5. Prohibited output for nfs4_cs_prep | |
| Unicode. UTF-8 will encode 16 bit and 32 bit characters in a way | | | |
| that will be compact for most users. The encoding table from UCS-4 to | | | |
| UTF-8, as copied from [RFC2279]: | | | |
| | | | |
|
| UCS-4 range (hex.) UTF-8 octet sequence (binary) | | The nfs4_cs_prep profile specifies prohibiting using the following | |
| 0000 0000-0000 007F 0xxxxxxx | | tables from stringprep: | |
| 0000 0080-0000 07FF 110xxxxx 10xxxxxx | | | |
| 0000 0800-0000 FFFF 1110xxxx 10xxxxxx 10xxxxxx | | | |
| | | | |
|
| 0001 0000-001F FFFF 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx | | Table C.3 | |
| 0020 0000-03FF FFFF 111110xx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx | | Table C.4 | |
| 0400 0000-7FFF FFFF 1111110x 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx | | Table C.5 | |
| 10xxxxxx | | Table C.6 | |
| | | Table C.7 | |
| | | Table C.8 | |
| | | Table C.9 | |
| | | | |
|
| See [RFC2279] for precise encoding and decoding rules. Note because | | 11.1.6. Bidirectional output for nfs4_cs_prep | |
| | | | |
|
| Draft Specification NFS version 4 Protocol October 2002 | | The nfs4_cs_prep profile does not specify any checking of | |
| | | bidirectional strings. | |
| | | | |
|
| of UTF-16, the algorithm from Unicode/UCS-2 to UTF-8 needs to account | | 11.2. Stringprep profile for the utf8str_cis type | |
| for the reserved range between D800 and DFFF. | | | |
| | | | |
|
| Note that the 16 bit UCS or Unicode characters require no more than 3 | | Every use of the utf8str_cis type definition in the NFS version 4 | |
| octets to encode into UTF-8 | | protocol specification follows the profile named nfs4_cis_prep. | |
| | | | |
|
| Interestingly, UTF-8 has room to handle characters larger than 31 | | 11.2.1. Intended applicability of the nfs4_cis_prep profile | |
| bits, because the leading octet of form: | | | |
| | | | |
|
| 1111111x | | The utf8str_cis type is a case insensitive string of UTF-8 | |
| | | characters. Its primary use in NFS Version 4 is for naming NFS | |
| | | servers. | |
| | | | |
|
| is not defined. If needed, ISO could either use that octet to | | 11.2.2. Character repertoire of nfs4_cis_prep | |
| indicate a sequence of an encoded 8 octet character, or perhaps use | | | |
| 11111110 to permit the next octet to indicate an even more expandable | | | |
| character set. | | | |
| | | | |
|
| So using UTF-8 to represent character encodings means never having to | | The nfs4_cis_prep profile uses Unicode 3.2, as defined in | |
| run out of room. | | stringprep's Appendix A.1 | |
| | | | |
|
| 11.5. Normalization | | 11.2.3. Mapping used by nfs4_cis_prep | |
| | | | |
|
| The client and server operating environments may differ in their | | The nfs4_cis_prep profile specifies mapping using the following | |
| policies and operational methods with respect to character | | tables from stringprep: | |
| normalization (See [Unicode1] for a discussion of normalization | | | |
| forms). This difference may also exist between applications on the | | | |
| same client. This adds to the difficulty of providing a single | | | |
| normalization policy for the protocol that allows for maximal | | | |
| interoperability. This issue is similar to the character case issues | | | |
| where the server may or may not support case insensitive file name | | | |
| matching and may or may not preserve the character case when storing | | | |
| file names. The protocol does not mandate a particular behavior but | | | |
| allows for the various permutations. | | | |
| | | | |
|
| The NFS version 4 protocol does not mandate the use of a particular | | Table B.1 | |
| normalization form at this time. A later revision of this | | Table B.2 | |
| specification may specify a particular normalization form. | | | |
| Therefore, the server and client can expect that they may receive | | | |
| unnormalized characters within protocol requests and responses. If | | | |
| the operating environment requires normalization, then the | | | |
| implementation must normalize the various UTF-8 encoded strings | | | |
| within the protocol before presenting the information to an | | | |
| application (at the client) or local filesystem (at the server). | | | |
| | | | |
|
| 11.6. UTF-8 Related Errors | | Draft Specification NFS version 4 Protocol November 2002 | |
| | | | |
| | | 11.2.4. Normalization used by nfs4_cis_prep | |
| | | | |
| | | The nfs4_cis_prep profile specifies using Unicode normalization form | |
| | | KC, as described in stringprep. | |
| | | | |
| | | 11.2.5. Prohibited output for nfs4_cis_prep | |
| | | | |
| | | The nfs4_cis_prep profile specifies prohibiting using the following | |
| | | tables from stringprep: | |
| | | | |
| | | Table C.1.2 | |
| | | Table C.2.2 | |
| | | Table C.3 | |
| | | Table C.4 | |
| | | Table C.5 | |
| | | Table C.6 | |
| | | Table C.7 | |
| | | Table C.8 | |
| | | Table C.9 | |
| | | | |
| | | 11.2.6. Bidirectional output for nfs4_cis_prep | |
| | | | |
| | | The nfs4_cis_prep profile specifies checking bidirectional strings as | |
| | | described in stringprep's section 6. | |
| | | | |
| | | 11.3. Stringprep profile for the utf8str_mixed type | |
| | | | |
| | | Every use of the utf8str_mixed type definition in the NFS version 4 | |
| | | protocol specification follows the profile named nfs4_mixed_prep. | |
| | | | |
| | | 11.3.1. Intended applicability of the nfs4_mixed_prep profile | |
| | | | |
| | | The utf8str_mixed type is a string of UTF-8 characters, with a prefix | |
| | | that is case sensitive, a separator equal to '@', and a suffix that | |
| | | is fully qualified domain name. Its primary use in NFS Version 4 is | |
| | | for naming principals identified in an Access Control Entry. | |
| | | | |
| | | 11.3.2. Character repertoire of nfs4_mixed_prep | |
| | | | |
| | | The nfs4_mixed_prep profile uses Unicode 3.2, as defined in | |
| | | stringprep's Appendix A.1 | |
| | | | |
| | | 11.3.3. Mapping used by nfs4_cis_prep | |
| | | | |
| | | For the prefix and the separator of a utf8str_mixed string, the | |
| | | nfs4_mixed_prep profile specifies mapping using the following table | |
| | | from stringprep: | |
| | | | |
| | | Table B.1 | |
| | | | |
| | | For the suffix of a utf8str_mixed string, the nfs4_mixed_prep profile | |
| | | | |
| | | Draft Specification NFS version 4 Protocol November 2002 | |
| | | | |
| | | specifies mapping using the following tables from stringprep: | |
| | | | |
| | | Table B.1 | |
| | | Table B.2 | |
| | | | |
| | | 11.3.4. Normalization used by nfs4_mixed_prep | |
| | | | |
| | | The nfs4_mixed_prep profile specifies using Unicode normalization | |
| | | form KC, as described in stringprep. | |
| | | | |
| | | 11.3.5. Prohibited output for nfs4_mixed_prep | |
| | | | |
| | | The nfs4_mixed_prep profile specifies prohibiting using the following | |
| | | tables from stringprep: | |
| | | | |
| | | Table C.1.2 | |
| | | Table C.2.2 | |
| | | Table C.3 | |
| | | Table C.4 | |
| | | Table C.5 | |
| | | Table C.6 | |
| | | Table C.7 | |
| | | Table C.8 | |
| | | Table C.9 | |
| | | | |
| | | 11.3.6. Bidirectional output for nfs4_mixed_prep | |
| | | | |
| | | The nfs4_mixed_prep profile specifies checking bidirectional strings | |
| | | as described in stringprep's section 6. | |
| | | | |
| | | 11.4. UTF-8 Related Errors | |
| | | | |
| Where the client sends an invalid UTF-8 string, the server should | | Where the client sends an invalid UTF-8 string, the server should | |
| return an NFS4ERR_INVAL error. This includes cases in which | | return an NFS4ERR_INVAL error. This includes cases in which | |
| inappropriate prefixes are detected and where the count includes | | inappropriate prefixes are detected and where the count includes | |
| trailing bytes that do not constitute a full UCS character. | | trailing bytes that do not constitute a full UCS character. | |
| | | | |
| Where the client supplied string is valid UTF-8 but contains | | Where the client supplied string is valid UTF-8 but contains | |
|
| | | | |
| Draft Specification NFS version 4 Protocol October 2002 | | | |
| | | | |
| characters that are not supported by the server as a value for that | | characters that are not supported by the server as a value for that | |
| string (e.g. names containing characters that have more than two | | string (e.g. names containing characters that have more than two | |
| octets on a filesystem that supports Unicode characters only), the | | octets on a filesystem that supports Unicode characters only), the | |
| server should return an NFS4ERR_BADCHAR error. | | server should return an NFS4ERR_BADCHAR error. | |
| | | | |
| Where a UTF-8 string is used as a file name, and the filesystem, | | Where a UTF-8 string is used as a file name, and the filesystem, | |
| while supporting all of the characters within the name, does not | | while supporting all of the characters within the name, does not | |
|
| allow that particular name to be used, the error should return the | | allow that particular name to be used, the server should return the | |
| error NFS4ERR_BADNAME. This includes situations in which the server | | error NFS4ERR_BADNAME. This includes situations in which the server | |
| filesystem imposes a normalization constraint on name strings, but | | filesystem imposes a normalization constraint on name strings, but | |
| will also include such situations as filesystem prohibitions of "." | | will also include such situations as filesystem prohibitions of "." | |
| and ".." as file names for certain operations, and other such | | and ".." as file names for certain operations, and other such | |
| constraints. | | constraints. | |
| | | | |
|
| Draft Specification NFS version 4 Protocol October 2002 | | Draft Specification NFS version 4 Protocol November 2002 | |
| | | | |
| 12. Error Definitions | | 12. Error Definitions | |
| | | | |
| NFS error numbers are assigned to failed operations within a compound | | NFS error numbers are assigned to failed operations within a compound | |
| request. A compound request contains a number of NFS operations that | | request. A compound request contains a number of NFS operations that | |
| have their results encoded in sequence in a compound reply. The | | have their results encoded in sequence in a compound reply. The | |
| results of successful operations will consist of an NFS4_OK status | | results of successful operations will consist of an NFS4_OK status | |
| followed by the encoded results of the operation. If an NFS | | followed by the encoded results of the operation. If an NFS | |
| operation fails, an error status will be entered in the reply and the | | operation fails, an error status will be entered in the reply and the | |
| compound request will be terminated. | | compound request will be terminated. | |
| | | | |
| skipping to change at page 126, line 5 | | skipping to change at page 128, line 5 | |
| valid name for current operation. | | valid name for current operation. | |
| | | | |
| NFS4ERR_BADOWNER An owner, owner_group, or ACL attribute value | | NFS4ERR_BADOWNER An owner, owner_group, or ACL attribute value | |
| can not be translated to local representation. | | can not be translated to local representation. | |
| | | | |
| NFS4ERR_BADTYPE An attempt was made to create an object of a | | NFS4ERR_BADTYPE An attempt was made to create an object of a | |
| type not supported by the server. | | type not supported by the server. | |
| | | | |
| NFS4ERR_BAD_RANGE The range for a LOCK, LOCKT, or LOCKU operation | | NFS4ERR_BAD_RANGE The range for a LOCK, LOCKT, or LOCKU operation | |
| | | | |
|
| Draft Specification NFS version 4 Protocol October 2002 | | Draft Specification NFS version 4 Protocol November 2002 | |
| | | | |
| is not appropriate to the allowable range of | | is not appropriate to the allowable range of | |
| offsets for the server. | | offsets for the server. | |
| | | | |
| NFS4ERR_BAD_SEQID The sequence number in a locking request is | | NFS4ERR_BAD_SEQID The sequence number in a locking request is | |
| neither the next expected number or the last | | neither the next expected number or the last | |
| number processed. | | number processed. | |
| | | | |
| NFS4ERR_BAD_STATEID A stateid generated by the current server | | NFS4ERR_BAD_STATEID A stateid generated by the current server | |
| instance, but which does not designate any | | instance, but which does not designate any | |
| | | | |
| skipping to change at page 127, line 5 | | skipping to change at page 129, line 5 | |
| exceeded. | | exceeded. | |
| | | | |
| NFS4ERR_EXIST File exists. The file specified already exists. | | NFS4ERR_EXIST File exists. The file specified already exists. | |
| | | | |
| NFS4ERR_EXPIRED A lease has expired that is being used in the | | NFS4ERR_EXPIRED A lease has expired that is being used in the | |
| current operation. | | current operation. | |
| | | | |
| NFS4ERR_FBIG File too large. The operation would have caused | | NFS4ERR_FBIG File too large. The operation would have caused | |
| a file to grow beyond the server's limit. | | a file to grow beyond the server's limit. | |
| | | | |
|
| Draft Specification NFS version 4 Protocol October 2002 | | Draft Specification NFS version 4 Protocol November 2002 | |
| | | | |
| NFS4ERR_FHEXPIRED The filehandle provided is volatile and has | | NFS4ERR_FHEXPIRED The filehandle provided is volatile and has | |
| expired at the server. | | expired at the server. | |
| | | | |
| NFS4ERR_FILE_OPEN The operation can not be successfully processed | | NFS4ERR_FILE_OPEN The operation can not be successfully processed | |
| because a file involved in the operation is | | because a file involved in the operation is | |
| currently open. | | currently open. | |
| | | | |
| NFS4ERR_GRACE The server is in its recovery or grace period | | NFS4ERR_GRACE The server is in its recovery or grace period | |
| which should match the lease period of the | | which should match the lease period of the | |
| | | | |
| skipping to change at page 128, line 5 | | skipping to change at page 130, line 5 | |
| The server has received a request that | | The server has received a request that | |
| specifies an unsupported minor version. The | | specifies an unsupported minor version. The | |
| server must return a COMPOUND4res with a zero | | server must return a COMPOUND4res with a zero | |
| length operations result array. | | length operations result array. | |
| | | | |
| NFS4ERR_MLINK Too many hard links. | | NFS4ERR_MLINK Too many hard links. | |
| | | | |
| NFS4ERR_MOVED The filesystem which contains the current | | NFS4ERR_MOVED The filesystem which contains the current | |
| filehandle object has been relocated or | | filehandle object has been relocated or | |
| | | | |
|
| Draft Specification NFS version 4 Protocol October 2002 | | Draft Specification NFS version 4 Protocol November 2002 | |
| | | | |
| migrated to another server. The client may | | migrated to another server. The client may | |
| obtain the new filesystem location by obtaining | | obtain the new filesystem location by obtaining | |
| the "fs_locations" attribute for the current | | the "fs_locations" attribute for the current | |
| filehandle. For further discussion, refer to | | filehandle. For further discussion, refer to | |
| the section "Filesystem Migration or | | the section "Filesystem Migration or | |
| Relocation". | | Relocation". | |
| | | | |
| NFS4ERR_NAMETOOLONG The filename in an operation was too long. | | NFS4ERR_NAMETOOLONG The filename in an operation was too long. | |
| | | | |
| | | | |
| skipping to change at page 129, line 5 | | skipping to change at page 131, line 5 | |
| | | | |
| NFS4ERR_OLD_STATEID A stateid which designates the locking state | | NFS4ERR_OLD_STATEID A stateid which designates the locking state | |
| for a lockowner-file at an earlier time was | | for a lockowner-file at an earlier time was | |
| used. | | used. | |
| | | | |
| NFS4ERR_OPENMODE The client attempted a READ, WRITE, LOCK or | | NFS4ERR_OPENMODE The client attempted a READ, WRITE, LOCK or | |
| SETATTR operation not sanctioned by the stateid | | SETATTR operation not sanctioned by the stateid | |
| passed (e.g. writing to a file opened only for | | passed (e.g. writing to a file opened only for | |
| read). | | read). | |
| | | | |
|
| Draft Specification NFS version 4 Protocol October 2002 | | Draft Specification NFS version 4 Protocol November 2002 | |
| | | | |
| NFS4ERR_OP_ILLEGAL An illegal operation value has been specified | | NFS4ERR_OP_ILLEGAL An illegal operation value has been specified | |
| in the argop field of a COMPOUND or CB_COMPOUND | | in the argop field of a COMPOUND or CB_COMPOUND | |
| procedure. | | procedure. | |
| | | | |
| NFS4ERR_PERM Not owner. The operation was not allowed | | NFS4ERR_PERM Not owner. The operation was not allowed | |
| because the caller is either not a privileged | | because the caller is either not a privileged | |
| user (root) or not the owner of the target of | | user (root) or not the owner of the target of | |
| the operation. | | the operation. | |
| | | | |
| | | | |
| skipping to change at page 130, line 5 | | skipping to change at page 132, line 5 | |
| | | | |
| NFS4ERR_SHARE_DENIED An attempt to OPEN a file with a share | | NFS4ERR_SHARE_DENIED An attempt to OPEN a file with a share | |
| reservation has failed because of a share | | reservation has failed because of a share | |
| conflict. | | conflict. | |
| | | | |
| NFS4ERR_STALE Invalid filehandle. The filehandle given in the | | NFS4ERR_STALE Invalid filehandle. The filehandle given in the | |
| arguments was invalid. The file referred to by | | arguments was invalid. The file referred to by | |
| that filehandle no longer exists or access to | | that filehandle no longer exists or access to | |
| it has been revoked. | | it has been revoked. | |
| | | | |
|
| Draft Specification NFS version 4 Protocol October 2002 | | Draft Specification NFS version 4 Protocol November 2002 | |
| | | | |
| NFS4ERR_STALE_CLIENTID A clientid not recognized by the server was | | NFS4ERR_STALE_CLIENTID A clientid not recognized by the server was | |
| used in a locking or SETCLIENTID_CONFIRM | | used in a locking or SETCLIENTID_CONFIRM | |
| request. | | request. | |
| | | | |
| NFS4ERR_STALE_STATEID A stateid generated by an earlier server | | NFS4ERR_STALE_STATEID A stateid generated by an earlier server | |
| instance was used. | | instance was used. | |
| | | | |
| NFS4ERR_SYMLINK The current filehandle provided for a LOOKUP is | | NFS4ERR_SYMLINK The current filehandle provided for a LOOKUP is | |
| not a directory but a symbolic link. Also used | | not a directory but a symbolic link. Also used | |
| | | | |
| skipping to change at page 131, line 5 | | skipping to change at page 133, line 5 | |
| | | | |
| NFS4ERR_WRONGSEC The security mechanism being used by the client | | NFS4ERR_WRONGSEC The security mechanism being used by the client | |
| for the operation does not match the server's | | for the operation does not match the server's | |
| security policy. The client should change the | | security policy. The client should change the | |
| security mechanism being used and retry the | | security mechanism being used and retry the | |
| operation. | | operation. | |
| | | | |
| NFS4ERR_XDEV Attempt to do an operation between different | | NFS4ERR_XDEV Attempt to do an operation between different | |
| fsids. | | fsids. | |
| | | | |
|
| Draft Specification NFS version 4 Protocol October 2002 | | Draft Specification NFS version 4 Protocol November 2002 | |
| | | | |
| 13. NFS version 4 Requests | | 13. NFS version 4 Requests | |
| | | | |
| For the NFS version 4 RPC program, there are two traditional RPC | | For the NFS version 4 RPC program, there are two traditional RPC | |
| procedures: NULL and COMPOUND. All other functionality is defined as | | procedures: NULL and COMPOUND. All other functionality is defined as | |
| a set of operations and these operations are defined in normal | | a set of operations and these operations are defined in normal | |
| XDR/RPC syntax and semantics. However, these operations are | | XDR/RPC syntax and semantics. However, these operations are | |
| encapsulated within the COMPOUND procedure. This requires that the | | encapsulated within the COMPOUND procedure. This requires that the | |
| client combine one or more of the NFS version 4 operations into a | | client combine one or more of the NFS version 4 operations into a | |
| single request. | | single request. | |
| | | | |
| skipping to change at page 132, line 5 | | skipping to change at page 134, line 5 | |
| +-----+--------------+--------+-----------+-----------+-----------+-- | | +-----+--------------+--------+-----------+-----------+-----------+-- | |
| | | | |
| and the reply's structure is: | | and the reply's structure is: | |
| | | | |
| +------------+-----+--------+-----------------------+-- | | +------------+-----+--------+-----------------------+-- | |
| |last status | tag | numres | status + op + results | | | |last status | tag | numres | status + op + results | | |
| +------------+-----+--------+-----------------------+-- | | +------------+-----+--------+-----------------------+-- | |
| | | | |
| The numops and numres fields, used in the depiction above, represent | | The numops and numres fields, used in the depiction above, represent | |
| | | | |
|
| Draft Specification NFS version 4 Protocol October 2002 | | Draft Specification NFS version 4 Protocol November 2002 | |
| | | | |
| the count for the counted array encoding use to signify the number of | | the count for the counted array encoding use to signify the number of | |
| arguments or results encoded in the request and response. As per the | | arguments or results encoded in the request and response. As per the | |
| XDR encoding, these counts must match exactly the number of operation | | XDR encoding, these counts must match exactly the number of operation | |
| arguments or results encoded. | | arguments or results encoded. | |
| | | | |
| 13.2. Evaluation of a Compound Request | | 13.2. Evaluation of a Compound Request | |
| | | | |
| The server will process the COMPOUND procedure by evaluating each of | | The server will process the COMPOUND procedure by evaluating each of | |
| the operations within the COMPOUND procedure in order. Each | | the operations within the COMPOUND procedure in order. Each | |
| | | | |
| skipping to change at page 133, line 5 | | skipping to change at page 135, line 5 | |
| 13.3. Synchronous Modifying Operations | | 13.3. Synchronous Modifying Operations | |
| | | | |
| NFS version 4 operations that modify the filesystem are synchronous. | | NFS version 4 operations that modify the filesystem are synchronous. | |
| When an operation is successfully completed at the server, the client | | When an operation is successfully completed at the server, the client | |
| can depend that any data associated with the request is now on stable | | can depend that any data associated with the request is now on stable | |
| storage (the one exception is in the case of the file data in a WRITE | | storage (the one exception is in the case of the file data in a WRITE | |
| operation with the UNSTABLE option specified). | | operation with the UNSTABLE option specified). | |
| | | | |
| This implies that any previous operations within the same compound | | This implies that any previous operations within the same compound | |
| | | | |
|
| Draft Specification NFS version 4 Protocol October 2002 | | Draft Specification NFS version 4 Protocol November 2002 | |
| | | | |
| request are also reflected in stable storage. This behavior enables | | request are also reflected in stable storage. This behavior enables | |
| the client's ability to recover from a partially executed compound | | the client's ability to recover from a partially executed compound | |
| request which may resulted from the failure of the server. For | | request which may resulted from the failure of the server. For | |
| example, if a compound request contains operations A and B and the | | example, if a compound request contains operations A and B and the | |
| server is unable to send a response to the client, depending on the | | server is unable to send a response to the client, depending on the | |
| progress the server made in servicing the request the result of both | | progress the server made in servicing the request the result of both | |
| operations may be reflected in stable storage or just operation A may | | operations may be reflected in stable storage or just operation A may | |
| be reflected. The server must not have just the results of operation | | be reflected. The server must not have just the results of operation | |
| B in stable storage. | | B in stable storage. | |
| | | | |
| 13.4. Operation Values | | 13.4. Operation Values | |
| | | | |
| The operations encoded in the COMPOUND procedure are identified by | | The operations encoded in the COMPOUND procedure are identified by | |
| operation values. To avoid overlap with the RPC procedure numbers, | | operation values. To avoid overlap with the RPC procedure numbers, | |
| operations 0 (zero) and 1 are not defined. Operation 2 is not | | operations 0 (zero) and 1 are not defined. Operation 2 is not | |
| defined but reserved for future use with minor versioning. | | defined but reserved for future use with minor versioning. | |
| | | | |
|
| Draft Specification NFS version 4 Protocol October 2002 | | Draft Specification NFS version 4 Protocol November 2002 | |
| | | | |
| 14. NFS version 4 Procedures | | 14. NFS version 4 Procedures | |
| | | | |
| 14.1. Procedure 0: NULL - No Operation | | 14.1. Procedure 0: NULL - No Operation | |
| | | | |
| SYNOPSIS | | SYNOPSIS | |
| | | | |
| <null> | | <null> | |
| | | | |
| ARGUMENT | | ARGUMENT | |
| | | | |
| skipping to change at page 135, line 5 | | skipping to change at page 137, line 5 | |
| Standard NULL procedure. Void argument, void response. This | | Standard NULL procedure. Void argument, void response. This | |
| procedure has no functionality associated with it. Because of this | | procedure has no functionality associated with it. Because of this | |
| it is sometimes used to measure the overhead of processing a | | it is sometimes used to measure the overhead of processing a | |
| service request. Therefore, the server should ensure that no | | service request. Therefore, the server should ensure that no | |
| unnecessary work is done in servicing this procedure. | | unnecessary work is done in servicing this procedure. | |
| | | | |
| ERRORS | | ERRORS | |
| | | | |
| None. | | None. | |
| | | | |
|
| Draft Specification NFS version 4 Protocol October 2002 | | Draft Specification NFS version 4 Protocol November 2002 | |
| | | | |
| 14.2. Procedure 1: COMPOUND - Compound Operations | | 14.2. Procedure 1: COMPOUND - Compound Operations | |
| | | | |
| SYNOPSIS | | SYNOPSIS | |
| | | | |
| compoundargs -> compoundres | | compoundargs -> compoundres | |
| | | | |
| ARGUMENT | | ARGUMENT | |
| | | | |
| union nfs_argop4 switch (nfs_opnum4 argop) { | | union nfs_argop4 switch (nfs_opnum4 argop) { | |
| case <OPCODE>: <argument>; | | case <OPCODE>: <argument>; | |
| ... | | ... | |
| }; | | }; | |
| | | | |
| struct COMPOUND4args { | | struct COMPOUND4args { | |
|
| utf8string tag; | | utf8str_cs tag; | |
| uint32_t minorversion; | | uint32_t minorversion; | |
| nfs_argop4 argarray<>; | | nfs_argop4 argarray<>; | |
| }; | | }; | |
| | | | |
| RESULT | | RESULT | |
| | | | |
| union nfs_resop4 switch (nfs_opnum4 resop){ | | union nfs_resop4 switch (nfs_opnum4 resop){ | |
| case <OPCODE>: <result>; | | case <OPCODE>: <result>; | |
| ... | | ... | |
| }; | | }; | |
| | | | |
| struct COMPOUND4res { | | struct COMPOUND4res { | |
| nfsstat4 status; | | nfsstat4 status; | |
|
| utf8string tag; | | utf8str_cs tag; | |
| nfs_resop4 resarray<>; | | nfs_resop4 resarray<>; | |
| }; | | }; | |
| | | | |
| DESCRIPTION | | DESCRIPTION | |
| | | | |
| The COMPOUND procedure is used to combine one or more of the NFS | | The COMPOUND procedure is used to combine one or more of the NFS | |
| operations into a single RPC request. The main NFS RPC program has | | operations into a single RPC request. The main NFS RPC program has | |
| two main procedures: NULL and COMPOUND. All other operations use | | two main procedures: NULL and COMPOUND. All other operations use | |
| the COMPOUND procedure as a wrapper. | | the COMPOUND procedure as a wrapper. | |
| | | | |
| The COMPOUND procedure is used to combine individual operations | | The COMPOUND procedure is used to combine individual operations | |
| into a single RPC request. The server interprets each of the | | into a single RPC request. The server interprets each of the | |
| operations in turn. If an operation is executed by the server and | | operations in turn. If an operation is executed by the server and | |
| the status of that operation is NFS4_OK, then the next operation in | | the status of that operation is NFS4_OK, then the next operation in | |
| the COMPOUND procedure is executed. The server continues this | | the COMPOUND procedure is executed. The server continues this | |
| process until there are no more operations to be executed or one of | | process until there are no more operations to be executed or one of | |
| the operations has a status value other than NFS4_OK. | | the operations has a status value other than NFS4_OK. | |
| | | | |
|
| Draft Specification NFS version 4 Protocol October 2002 | | Draft Specification NFS version 4 Protocol November 2002 | |
| | | | |
| In the processing of the COMPOUND procedure, the server may find | | In the processing of the COMPOUND procedure, the server may find | |
| that it does not have the available resources to execute any or all | | that it does not have the available resources to execute any or all | |
| of the operations within the COMPOUND sequence. In this case, the | | of the operations within the COMPOUND sequence. In this case, the | |
| error NFS4ERR_RESOURCE will be returned for the particular | | error NFS4ERR_RESOURCE will be returned for the particular | |
| operation within the COMPOUND procedure where the resource | | operation within the COMPOUND procedure where the resource | |
| exhaustion occurred. This assumes that all previous operations | | exhaustion occurred. This assumes that all previous operations | |
| within the COMPOUND sequence have been evaluated successfully. The | | within the COMPOUND sequence have been evaluated successfully. The | |
| results for all of the evaluated operations must be returned to the | | results for all of the evaluated operations must be returned to the | |
| client. | | client. | |
| | | | |
| skipping to change at page 137, line 5 | | skipping to change at page 139, line 5 | |
| the minorversion field is non-zero and the server does not support | | the minorversion field is non-zero and the server does not support | |
| the minor version, the server returns an error of | | the minor version, the server returns an error of | |
| NFS4ERR_MINOR_VERS_MISMATCH. Therefore, the | | NFS4ERR_MINOR_VERS_MISMATCH. Therefore, the | |
| NFS4ERR_MINOR_VERS_MISMATCH error takes precedence over all other | | NFS4ERR_MINOR_VERS_MISMATCH error takes precedence over all other | |
| errors. | | errors. | |
| | | | |
| It is possible that the server receives a request that contains an | | It is possible that the server receives a request that contains an | |
| operation that is less than the first legal operation (OP_ACCESS) | | operation that is less than the first legal operation (OP_ACCESS) | |
| or greater than the last legal operation (OP_RELEASE_LOCKOWNER). | | or greater than the last legal operation (OP_RELEASE_LOCKOWNER). | |
| | | | |
|
| Draft Specification NFS version 4 Protocol October 2002 | | Draft Specification NFS version 4 Protocol November 2002 | |
| | | | |
| In this case, the server's response will encode the opcode | | In this case, the server's response will encode the opcode | |
| OP_ILLEGAL rather than the illegal opcode of the request. The | | OP_ILLEGAL rather than the illegal opcode of the request. The | |
| status field in the ILLEGAL return results will set to | | status field in the ILLEGAL return results will set to | |
| NFS4ERR_OP_ILLEGAL. The COMPOUND procedure's return results will | | NFS4ERR_OP_ILLEGAL. The COMPOUND procedure's return results will | |
| also be NFS4ERR_OP_ILLEGAL. | | also be NFS4ERR_OP_ILLEGAL. | |
| | | | |
| The definition of the "tag" in the request is left to the | | The definition of the "tag" in the request is left to the | |
| implementor. It may be used to summarize the content of the | | implementor. It may be used to summarize the content of the | |
| compound request for the benefit of packet sniffers and engineers | | compound request for the benefit of packet sniffers and engineers | |
| | | | |
| skipping to change at page 138, line 5 | | skipping to change at page 140, line 5 | |
| recover from any failure. If the source of an NFS4ERR_RESOURCE | | recover from any failure. If the source of an NFS4ERR_RESOURCE | |
| error was a complex or lengthy set of operations, it is likely that | | error was a complex or lengthy set of operations, it is likely that | |
| if the number of operations were reduced the server would be able | | if the number of operations were reduced the server would be able | |
| to evaluate them successfully. Therefore, the client is | | to evaluate them successfully. Therefore, the client is | |
| responsible for dealing with this type of complexity in recovery. | | responsible for dealing with this type of complexity in recovery. | |
| | | | |
| ERRORS | | ERRORS | |
| | | | |
| All errors defined in the protocol | | All errors defined in the protocol | |
| | | | |
|
| Draft Specification NFS version 4 Protocol October 2002 | | Draft Specification NFS version 4 Protocol November 2002 | |
| | | | |
| 14.2.1. Operation 3: ACCESS - Check Access Rights | | 14.2.1. Operation 3: ACCESS - Check Access Rights | |
| | | | |
| SYNOPSIS | | SYNOPSIS | |
| | | | |
| (cfh), accessreq -> supported, accessrights | | (cfh), accessreq -> supported, accessrights | |
| | | | |
| ARGUMENT | | ARGUMENT | |
| | | | |
| const ACCESS4_READ = 0x00000001; | | const ACCESS4_READ = 0x00000001; | |
| | | | |
| skipping to change at page 139, line 5 | | skipping to change at page 141, line 5 | |
| system object specified by the current filehandle. The client | | system object specified by the current filehandle. The client | |
| encodes the set of access rights that are to be checked in the bit | | encodes the set of access rights that are to be checked in the bit | |
| mask "access". The server checks the permissions encoded in the | | mask "access". The server checks the permissions encoded in the | |
| bit mask. If a status of NFS4_OK is returned, two bit masks are | | bit mask. If a status of NFS4_OK is returned, two bit masks are | |
| included in the response. The first, "supported", represents the | | included in the response. The first, "supported", represents the | |
| access rights for which the server can verify reliably. The | | access rights for which the server can verify reliably. The | |
| second, "access", represents the access rights available to the | | second, "access", represents the access rights available to the | |
| user for the filehandle provided. On success, the current | | user for the filehandle provided. On success, the current | |
| filehandle retains its value. | | filehandle retains its value. | |
| | | | |
|
| Draft Specification NFS version 4 Protocol October 2002 | | Draft Specification NFS version 4 Protocol November 2002 | |
| | | | |
| Note that the supported field will contain only as many values as | | Note that the supported field will contain only as many values as | |
| was originally sent in the arguments. For example, if the client | | was originally sent in the arguments. For example, if the client | |
| sends an ACCESS operation with only the ACCESS4_READ value set and | | sends an ACCESS operation with only the ACCESS4_READ value set and | |
| the server supports this value, the server will return only | | the server supports this value, the server will return only | |
| ACCESS4_READ even if it could have reliably checked other values. | | ACCESS4_READ even if it could have reliably checked other values. | |
| | | | |
| The results of this operation are necessarily advisory in nature. | | The results of this operation are necessarily advisory in nature. | |
| A return status of NFS4_OK and the appropriate bit set in the bit | | A return status of NFS4_OK and the appropriate bit set in the bit | |
| mask does not imply that such access will be allowed to the file | | mask does not imply that such access will be allowed to the file | |
| | | | |
| skipping to change at page 140, line 5 | | skipping to change at page 142, line 5 | |
| In the NFS version 2 protocol, the only reliable way to determine | | In the NFS version 2 protocol, the only reliable way to determine | |
| whether an operation was allowed was to try it and see if it | | whether an operation was allowed was to try it and see if it | |
| succeeded or failed. Using the ACCESS operation in the NFS version | | succeeded or failed. Using the ACCESS operation in the NFS version | |
| 4 protocol, the client can ask the server to indicate whether or | | 4 protocol, the client can ask the server to indicate whether or | |
| not one or more classes of operations are permitted. The ACCESS | | not one or more classes of operations are permitted. The ACCESS | |
| operation is provided to allow clients to check before doing a | | operation is provided to allow clients to check before doing a | |
| series of operations which will result in an access failure. The | | series of operations which will result in an access failure. The | |
| OPEN operation provides a point where the server can verify access | | OPEN operation provides a point where the server can verify access | |
| to the file object and method to return that information to the | | to the file object and method to return that information to the | |
| | | | |
|
| Draft Specification NFS version 4 Protocol October 2002 | | Draft Specification NFS version 4 Protocol November 2002 | |
| | | | |
| client. The ACCESS operation is still useful for directory | | client. The ACCESS operation is still useful for directory | |
| operations or for use in the case the UNIX API "access" is used on | | operations or for use in the case the UNIX API "access" is used on | |
| the client. | | the client. | |
| | | | |
| The information returned by the server in response to an ACCESS | | The information returned by the server in response to an ACCESS | |
| call is not permanent. It was correct at the exact time that the | | call is not permanent. It was correct at the exact time that the | |
| server performed the checks, but not necessarily afterwards. The | | server performed the checks, but not necessarily afterwards. The | |
| server can revoke access permission at any time. | | server can revoke access permission at any time. | |
| | | | |
| | | | |
| skipping to change at page 141, line 5 | | skipping to change at page 143, line 5 | |
| NFS4ERR_DELAY | | NFS4ERR_DELAY | |
| NFS4ERR_FHEXPIRED | | NFS4ERR_FHEXPIRED | |
| NFS4ERR_INVAL | | NFS4ERR_INVAL | |
| NFS4ERR_IO | | NFS4ERR_IO | |
| NFS4ERR_MOVED | | NFS4ERR_MOVED | |
| NFS4ERR_NOFILEHANDLE | | NFS4ERR_NOFILEHANDLE | |
| NFS4ERR_RESOURCE | | NFS4ERR_RESOURCE | |
| NFS4ERR_SERVERFAULT | | NFS4ERR_SERVERFAULT | |
| NFS4ERR_STALE | | NFS4ERR_STALE | |
| | | | |
|
| Draft Specification NFS version 4 Protocol October 2002 | | Draft Specification NFS version 4 Protocol November 2002 | |
| | | | |
| 14.2.2. Operation 4: CLOSE - Close File | | 14.2.2. Operation 4: CLOSE - Close File | |
| | | | |
| SYNOPSIS | | SYNOPSIS | |
| | | | |
| (cfh), seqid, open_stateid -> open_stateid | | (cfh), seqid, open_stateid -> open_stateid | |
| | | | |
| ARGUMENT | | ARGUMENT | |
| | | | |
| struct CLOSE4args { | | struct CLOSE4args { | |
| | | | |
| skipping to change at page 142, line 5 | | skipping to change at page 144, line 5 | |
| locks would exist after the CLOSE. | | locks would exist after the CLOSE. | |
| | | | |
| On success, the current filehandle retains its value. | | On success, the current filehandle retains its value. | |
| | | | |
| IMPLEMENTATION | | IMPLEMENTATION | |
| | | | |
| Even though CLOSE returns a stateid, this stateid is not useful to | | Even though CLOSE returns a stateid, this stateid is not useful to | |
| the client and should be treated as deprecated. CLOSE "shuts down" | | the client and should be treated as deprecated. CLOSE "shuts down" | |
| the state associated with all OPENs for the file by a single | | the state associated with all OPENs for the file by a single | |
| | | | |
|
| Draft Specification NFS version 4 Protocol October 2002 | | Draft Specification NFS version 4 Protocol November 2002 | |
| | | | |
| open_owner. As noted above, CLOSE will either release all file | | open_owner. As noted above, CLOSE will either release all file | |
| locking state or return an error. Therefore, the stateid returned | | locking state or return an error. Therefore, the stateid returned | |
| by CLOSE is not useful for operations that follow. | | by CLOSE is not useful for operations that follow. | |
| | | | |
| ERRORS | | ERRORS | |
| | | | |
| NFS4ERR_ADMIN_REVOKED | | NFS4ERR_ADMIN_REVOKED | |
| NFS4ERR_BADHANDLE | | NFS4ERR_BADHANDLE | |
| NFS4ERR_BAD_SEQID | | NFS4ERR_BAD_SEQID | |
| | | | |
| skipping to change at page 143, line 5 | | skipping to change at page 145, line 5 | |
| NFS4ERR_LEASE_MOVED | | NFS4ERR_LEASE_MOVED | |
| NFS4ERR_LOCKS_HELD | | NFS4ERR_LOCKS_HELD | |
| NFS4ERR_MOVED | | NFS4ERR_MOVED | |
| NFS4ERR_NOFILEHANDLE | | NFS4ERR_NOFILEHANDLE | |
| NFS4ERR_OLD_STATEID | | NFS4ERR_OLD_STATEID | |
| NFS4ERR_RESOURCE | | NFS4ERR_RESOURCE | |
| NFS4ERR_SERVERFAULT | | NFS4ERR_SERVERFAULT | |
| NFS4ERR_STALE | | NFS4ERR_STALE | |
| NFS4ERR_STALE_STATEID | | NFS4ERR_STALE_STATEID | |
| | | | |
|
| Draft Specification NFS version 4 Protocol October 2002 | | Draft Specification NFS version 4 Protocol November 2002 | |
| | | | |
| 14.2.3. Operation 5: COMMIT - Commit Cached Data | | 14.2.3. Operation 5: COMMIT - Commit Cached Data | |
| | | | |
| SYNOPSIS | | SYNOPSIS | |
| | | | |
| (cfh), offset, count -> verifier | | (cfh), offset, count -> verifier | |
| | | | |
| ARGUMENT | | ARGUMENT | |
| | | | |
| struct COMMIT4args { | | struct COMMIT4args { | |
| | | | |
| skipping to change at page 144, line 5 | | skipping to change at page 146, line 5 | |
| The server returns a write verifier upon successful completion of | | The server returns a write verifier upon successful completion of | |
| the COMMIT. The write verifier is used by the client to determine | | the COMMIT. The write verifier is used by the client to determine | |
| if the server has restarted or rebooted between the initial | | if the server has restarted or rebooted between the initial | |
| WRITE(s) and the COMMIT. The client does this by comparing the | | WRITE(s) and the COMMIT. The client does this by comparing the | |
| write verifier returned from the initial writes and the verifier | | write verifier returned from the initial writes and the verifier | |
| returned by the COMMIT operation. The server must vary the value | | returned by the COMMIT operation. The server must vary the value | |
| of the write verifier at each server event or instantiation that | | of the write verifier at each server event or instantiation that | |
| may lead to a loss of uncommitted data. Most commonly this occurs | | may lead to a loss of uncommitted data. Most commonly this occurs | |
| when the server is rebooted; however, other events at the server | | when the server is rebooted; however, other events at the server | |
| | | | |
|
| Draft Specification NFS version 4 Protocol October 2002 | | Draft Specification NFS version 4 Protocol November 2002 | |
| | | | |
| may result in uncommitted data loss as well. | | may result in uncommitted data loss as well. | |
| | | | |
| On success, the current filehandle retains its value. | | On success, the current filehandle retains its value. | |
| | | | |
| IMPLEMENTATION | | IMPLEMENTATION | |
| | | | |
| The COMMIT operation is similar in operation and semantics to the | | The COMMIT operation is similar in operation and semantics to the | |
| POSIX fsync(2) system call that synchronizes a file's state with | | POSIX fsync(2) system call that synchronizes a file's state with | |
| the disk (file data and metadata is flushed to disk or stable | | the disk (file data and metadata is flushed to disk or stable | |
| | | | |
| skipping to change at page 145, line 5 | | skipping to change at page 147, line 5 | |
| close. In this case, the client would gather all of the buffers | | close. In this case, the client would gather all of the buffers | |
| for this file that contain uncommitted data, do the COMMIT | | for this file that contain uncommitted data, do the COMMIT | |
| operation with an offset of 0 and count of 0, and then free all of | | operation with an offset of 0 and count of 0, and then free all of | |
| those buffers. Any other dirty buffers would be sent to the server | | those buffers. Any other dirty buffers would be sent to the server | |
| in the normal fashion. | | in the normal fashion. | |
| | | | |
| After a buffer is written by the client with the stable parameter | | After a buffer is written by the client with the stable parameter | |
| set to UNSTABLE4, the buffer must be considered as modified by the | | set to UNSTABLE4, the buffer must be considered as modified by the | |
| client until the buffer has either been flushed via a COMMIT | | client until the buffer has either been flushed via a COMMIT | |
| | | | |
|
| Draft Specification NFS version 4 Protocol October 2002 | | Draft Specification NFS version 4 Protocol November 2002 | |
| | | | |
| operation or written via a WRITE operation with stable parameter | | operation or written via a WRITE operation with stable parameter | |
| set to FILE_SYNC4 or DATA_SYNC4. This is done to prevent the buffer | | set to FILE_SYNC4 or DATA_SYNC4. This is done to prevent the buffer | |
| from being freed and reused before the data can be flushed to | | from being freed and reused before the data can be flushed to | |
| stable storage on the server. | | stable storage on the server. | |
| | | | |
| When a response is returned from either a WRITE or a COMMIT | | When a response is returned from either a WRITE or a COMMIT | |
| operation and it contains a write verifier that is different than | | operation and it contains a write verifier that is different than | |
| previously returned by the server, the client will need to | | previously returned by the server, the client will need to | |
| retransmit all of the buffers containing uncommitted cached data to | | retransmit all of the buffers containing uncommitted cached data to | |
| | | | |
| skipping to change at page 146, line 5 | | skipping to change at page 148, line 5 | |
| NFS4ERR_INVAL | | NFS4ERR_INVAL | |
| NFS4ERR_IO | | NFS4ERR_IO | |
| NFS4ERR_ISDIR | | NFS4ERR_ISDIR | |
| NFS4ERR_MOVED | | NFS4ERR_MOVED | |
| NFS4ERR_NOFILEHANDLE | | NFS4ERR_NOFILEHANDLE | |
| NFS4ERR_RESOURCE | | NFS4ERR_RESOURCE | |
| NFS4ERR_ROFS | | NFS4ERR_ROFS | |
| NFS4ERR_SERVERFAULT | | NFS4ERR_SERVERFAULT | |
| NFS4ERR_STALE | | NFS4ERR_STALE | |
| | | | |
|
| Draft Specification NFS version 4 Protocol October 2002 | | Draft Specification NFS version 4 Protocol November 2002 | |
| | | | |
| 14.2.4. Operation 6: CREATE - Create a Non-Regular File Object | | 14.2.4. Operation 6: CREATE - Create a Non-Regular File Object | |
| | | | |
| SYNOPSIS | | SYNOPSIS | |
| | | | |
| (cfh), name, type, attrs -> (cfh), change_info, attrs_set | | (cfh), name, type, attrs -> (cfh), change_info, attrs_set | |
| | | | |
| ARGUMENT | | ARGUMENT | |
| | | | |
| union createtype4 switch (nfs_ftype4 type) { | | union createtype4 switch (nfs_ftype4 type) { | |
| | | | |
| skipping to change at page 147, line 5 | | skipping to change at page 149, line 5 | |
| | | | |
| DESCRIPTION | | DESCRIPTION | |
| | | | |
| The CREATE operation creates a non-regular file object in a | | The CREATE operation creates a non-regular file object in a | |
| directory with a given name. The OPEN operation MUST be used to | | directory with a given name. The OPEN operation MUST be used to | |
| create a regular file. | | create a regular file. | |
| | | | |
| The objname specifies the name for the new object. The objtype | | The objname specifies the name for the new object. The objtype | |
| determines the type of object to be created: directory, symlink, | | determines the type of object to be created: directory, symlink, | |
| | | | |
|
| Draft Specification NFS version 4 Protocol October 2002 | | Draft Specification NFS version 4 Protocol November 2002 | |
| | | | |
| etc. | | etc. | |
| | | | |
| If an object of the same name already exists in the directory, the | | If an object of the same name already exists in the directory, the | |
| server will return the error NFS4ERR_EXIST. | | server will return the error NFS4ERR_EXIST. | |
| | | | |
| For the directory where the new file object was created, the server | | For the directory where the new file object was created, the server | |
| returns change_info4 information in cinfo. With the atomic field | | returns change_info4 information in cinfo. With the atomic field | |
| of the change_info4 struct, the server will indicate if the before | | of the change_info4 struct, the server will indicate if the before | |
| and after change attributes were obtained atomically with respect | | and after change attributes were obtained atomically with respect | |
| | | | |
| skipping to change at page 148, line 5 | | skipping to change at page 150, line 5 | |
| OPEN operation too. | | OPEN operation too. | |
| | | | |
| Conversely, it is possible the client will specify in createattrs | | Conversely, it is possible the client will specify in createattrs | |
| an owner attribute or group attribute or ACL that the principal | | an owner attribute or group attribute or ACL that the principal | |
| indicated the RPC call's credentials does not have permissions to | | indicated the RPC call's credentials does not have permissions to | |
| create files for. The error to be returned in this instance is | | create files for. The error to be returned in this instance is | |
| NFS4ERR_PERM. This applies to the OPEN operation too. | | NFS4ERR_PERM. This applies to the OPEN operation too. | |
| | | | |
| IMPLEMENTATION | | IMPLEMENTATION | |
| | | | |
|
| Draft Specification NFS version 4 Protocol October 2002 | | Draft Specification NFS version 4 Protocol November 2002 |