Found wdiff, but it reported no recognisable version. Falling back to builtin diff colouring... Diff: draft-pre-ch-16.txt - draft-ietf-nfsv4-minorversion1-22.txt
 draft-pre-ch-16.txt   draft-ietf-nfsv4-minorversion1-22.txt 
NFSv4 S. Shepler NFSv4 S. Shepler
Internet-Draft M. Eisler Internet-Draft M. Eisler
Intended status: Standards Track D. Noveck Intended status: Standards Track D. Noveck
Expires: September 23, 2008 Editors Expires: October 2, 2008 Editors
March 22, 2008 March 31, 2008
NFS Version 4 Minor Version 1 NFS Version 4 Minor Version 1
draft-ietf-nfsv4-minorversion1-22.txt draft-ietf-nfsv4-minorversion1-22.txt
Status of this Memo Status of this Memo
By submitting this Internet-Draft, each author represents that any By submitting this Internet-Draft, each author represents that any
applicable patent or other IPR claims of which he or she is aware applicable patent or other IPR claims of which he or she is aware
have been or will be disclosed, and any of which he or she becomes have been or will be disclosed, and any of which he or she becomes
aware will be disclosed, in accordance with Section 6 of BCP 79. aware will be disclosed, in accordance with Section 6 of BCP 79.
skipping to change at page 1, line 35 skipping to change at page 1, line 35
and may be updated, replaced, or obsoleted by other documents at any and may be updated, replaced, or obsoleted by other documents at any
time. It is inappropriate to use Internet-Drafts as reference time. It is inappropriate to use Internet-Drafts as reference
material or to cite them other than as "work in progress." material or to cite them other than as "work in progress."
The list of current Internet-Drafts can be accessed at The list of current Internet-Drafts can be accessed at
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.
This Internet-Draft will expire on September 23, 2008. This Internet-Draft will expire on October 2, 2008.
Copyright Notice Copyright Notice
Copyright (C) The IETF Trust (2008). Copyright (C) The IETF Trust (2008).
Abstract Abstract
This Internet-Draft describes NFS version 4 minor version one, This Internet-Draft describes NFS version 4 minor version one,
including features retained from the base protocol and protocol including features retained from the base protocol and protocol
extensions made subsequently. Major extensions introduced in NFS extensions made subsequently. Major extensions introduced in NFS
skipping to change at page 8, line 9 skipping to change at page 8, line 9
15.1.13. Client Management Errors . . . . . . . . . . . . . . 339 15.1.13. Client Management Errors . . . . . . . . . . . . . . 339
15.1.14. Delegation Errors . . . . . . . . . . . . . . . . . 340 15.1.14. Delegation Errors . . . . . . . . . . . . . . . . . 340
15.1.15. Attribute Handling Errors . . . . . . . . . . . . . 341 15.1.15. Attribute Handling Errors . . . . . . . . . . . . . 341
15.1.16. Obsoleted Errors . . . . . . . . . . . . . . . . . . 341 15.1.16. Obsoleted Errors . . . . . . . . . . . . . . . . . . 341
15.2. Operations and their valid errors . . . . . . . . . . . 342 15.2. Operations and their valid errors . . . . . . . . . . . 342
15.3. Callback operations and their valid errors . . . . . . . 358 15.3. Callback operations and their valid errors . . . . . . . 358
15.4. Errors and the operations that use them . . . . . . . . 360 15.4. Errors and the operations that use them . . . . . . . . 360
16. NFSv4.1 Procedures . . . . . . . . . . . . . . . . . . . . . 374 16. NFSv4.1 Procedures . . . . . . . . . . . . . . . . . . . . . 374
16.1. Procedure 0: NULL - No Operation . . . . . . . . . . . . 374 16.1. Procedure 0: NULL - No Operation . . . . . . . . . . . . 374
16.2. Procedure 1: COMPOUND - Compound Operations . . . . . . 375 16.2. Procedure 1: COMPOUND - Compound Operations . . . . . . 375
17. Operations: REQUIRED, RECOMMENDED, or OPTIONAL . . . . . . . 385 17. Operations: REQUIRED, RECOMMENDED, or OPTIONAL . . . . . . . 386
18. NFSv4.1 Operations . . . . . . . . . . . . . . . . . . . . . 388 18. NFSv4.1 Operations . . . . . . . . . . . . . . . . . . . . . 389
18.1. Operation 3: ACCESS - Check Access Rights . . . . . . . 388 18.1. Operation 3: ACCESS - Check Access Rights . . . . . . . 389
18.2. Operation 4: CLOSE - Close File . . . . . . . . . . . . 391 18.2. Operation 4: CLOSE - Close File . . . . . . . . . . . . 392
18.3. Operation 5: COMMIT - Commit Cached Data . . . . . . . . 392 18.3. Operation 5: COMMIT - Commit Cached Data . . . . . . . . 393
18.4. Operation 6: CREATE - Create a Non-Regular File Object . 395 18.4. Operation 6: CREATE - Create a Non-Regular File Object . 396
18.5. Operation 7: DELEGPURGE - Purge Delegations Awaiting 18.5. Operation 7: DELEGPURGE - Purge Delegations Awaiting
Recovery . . . . . . . . . . . . . . . . . . . . . . . . 398 Recovery . . . . . . . . . . . . . . . . . . . . . . . . 399
18.6. Operation 8: DELEGRETURN - Return Delegation . . . . . . 399 18.6. Operation 8: DELEGRETURN - Return Delegation . . . . . . 400
18.7. Operation 9: GETATTR - Get Attributes . . . . . . . . . 399 18.7. Operation 9: GETATTR - Get Attributes . . . . . . . . . 400
18.8. Operation 10: GETFH - Get Current Filehandle . . . . . . 401 18.8. Operation 10: GETFH - Get Current Filehandle . . . . . . 402
18.9. Operation 11: LINK - Create Link to a File . . . . . . . 402 18.9. Operation 11: LINK - Create Link to a File . . . . . . . 403
18.10. Operation 12: LOCK - Create Lock . . . . . . . . . . . . 404 18.10. Operation 12: LOCK - Create Lock . . . . . . . . . . . . 405
18.11. Operation 13: LOCKT - Test For Lock . . . . . . . . . . 408 18.11. Operation 13: LOCKT - Test For Lock . . . . . . . . . . 409
18.12. Operation 14: LOCKU - Unlock File . . . . . . . . . . . 410 18.12. Operation 14: LOCKU - Unlock File . . . . . . . . . . . 411
18.13. Operation 15: LOOKUP - Lookup Filename . . . . . . . . . 411 18.13. Operation 15: LOOKUP - Lookup Filename . . . . . . . . . 412
18.14. Operation 16: LOOKUPP - Lookup Parent Directory . . . . 413 18.14. Operation 16: LOOKUPP - Lookup Parent Directory . . . . 414
18.15. Operation 17: NVERIFY - Verify Difference in 18.15. Operation 17: NVERIFY - Verify Difference in
Attributes . . . . . . . . . . . . . . . . . . . . . . . 414 Attributes . . . . . . . . . . . . . . . . . . . . . . . 415
18.16. Operation 18: OPEN - Open a Regular File . . . . . . . . 415 18.16. Operation 18: OPEN - Open a Regular File . . . . . . . . 416
18.17. Operation 19: OPENATTR - Open Named Attribute 18.17. Operation 19: OPENATTR - Open Named Attribute
Directory . . . . . . . . . . . . . . . . . . . . . . . 434 Directory . . . . . . . . . . . . . . . . . . . . . . . 435
18.18. Operation 21: OPEN_DOWNGRADE - Reduce Open File Access . 435 18.18. Operation 21: OPEN_DOWNGRADE - Reduce Open File Access . 436
18.19. Operation 22: PUTFH - Set Current Filehandle . . . . . . 437 18.19. Operation 22: PUTFH - Set Current Filehandle . . . . . . 438
18.20. Operation 23: PUTPUBFH - Set Public Filehandle . . . . . 437 18.20. Operation 23: PUTPUBFH - Set Public Filehandle . . . . . 438
18.21. Operation 24: PUTROOTFH - Set Root Filehandle . . . . . 439 18.21. Operation 24: PUTROOTFH - Set Root Filehandle . . . . . 440
18.22. Operation 25: READ - Read from File . . . . . . . . . . 439 18.22. Operation 25: READ - Read from File . . . . . . . . . . 441
18.23. Operation 26: READDIR - Read Directory . . . . . . . . . 442 18.23. Operation 26: READDIR - Read Directory . . . . . . . . . 443
18.24. Operation 27: READLINK - Read Symbolic Link . . . . . . 446 18.24. Operation 27: READLINK - Read Symbolic Link . . . . . . 447
18.25. Operation 28: REMOVE - Remove File System Object . . . . 447 18.25. Operation 28: REMOVE - Remove File System Object . . . . 448
18.26. Operation 29: RENAME - Rename Directory Entry . . . . . 449 18.26. Operation 29: RENAME - Rename Directory Entry . . . . . 450
18.27. Operation 31: RESTOREFH - Restore Saved Filehandle . . . 453 18.27. Operation 31: RESTOREFH - Restore Saved Filehandle . . . 454
18.28. Operation 32: SAVEFH - Save Current Filehandle . . . . . 454 18.28. Operation 32: SAVEFH - Save Current Filehandle . . . . . 455
18.29. Operation 33: SECINFO - Obtain Available Security . . . 454 18.29. Operation 33: SECINFO - Obtain Available Security . . . 456
18.30. Operation 34: SETATTR - Set Attributes . . . . . . . . . 457 18.30. Operation 34: SETATTR - Set Attributes . . . . . . . . . 459
18.31. Operation 37: VERIFY - Verify Same Attributes . . . . . 460 18.31. Operation 37: VERIFY - Verify Same Attributes . . . . . 461
18.32. Operation 38: WRITE - Write to File . . . . . . . . . . 461 18.32. Operation 38: WRITE - Write to File . . . . . . . . . . 462
18.33. Operation 40: BACKCHANNEL_CTL - Backchannel control . . 466 18.33. Operation 40: BACKCHANNEL_CTL - Backchannel control . . 467
18.34. Operation 41: BIND_CONN_TO_SESSION . . . . . . . . . . . 467 18.34. Operation 41: BIND_CONN_TO_SESSION . . . . . . . . . . . 468
18.35. Operation 42: EXCHANGE_ID - Instantiate Client ID . . . 470 18.35. Operation 42: EXCHANGE_ID - Instantiate Client ID . . . 471
18.36. Operation 43: CREATE_SESSION - Create New Session and 18.36. Operation 43: CREATE_SESSION - Create New Session and
Confirm Client ID . . . . . . . . . . . . . . . . . . . 486 Confirm Client ID . . . . . . . . . . . . . . . . . . . 487
18.37. Operation 44: DESTROY_SESSION - Destroy existing 18.37. Operation 44: DESTROY_SESSION - Destroy existing
session . . . . . . . . . . . . . . . . . . . . . . . . 496 session . . . . . . . . . . . . . . . . . . . . . . . . 497
18.38. Operation 45: FREE_STATEID - Free stateid with no 18.38. Operation 45: FREE_STATEID - Free stateid with no
locks . . . . . . . . . . . . . . . . . . . . . . . . . 498 locks . . . . . . . . . . . . . . . . . . . . . . . . . 499
18.39. Operation 46: GET_DIR_DELEGATION - Get a directory 18.39. Operation 46: GET_DIR_DELEGATION - Get a directory
delegation . . . . . . . . . . . . . . . . . . . . . . . 499 delegation . . . . . . . . . . . . . . . . . . . . . . . 500
18.40. Operation 47: GETDEVICEINFO - Get Device Information . . 503 18.40. Operation 47: GETDEVICEINFO - Get Device Information . . 504
18.41. Operation 48: GETDEVICELIST - Get All Device Mappings 18.41. Operation 48: GETDEVICELIST - Get All Device Mappings
for a File System . . . . . . . . . . . . . . . . . . . 505 for a File System . . . . . . . . . . . . . . . . . . . 506
18.42. Operation 49: LAYOUTCOMMIT - Commit writes made using 18.42. Operation 49: LAYOUTCOMMIT - Commit writes made using
a layout . . . . . . . . . . . . . . . . . . . . . . . . 507 a layout . . . . . . . . . . . . . . . . . . . . . . . . 508
18.43. Operation 50: LAYOUTGET - Get Layout Information . . . . 510 18.43. Operation 50: LAYOUTGET - Get Layout Information . . . . 511
18.44. Operation 51: LAYOUTRETURN - Release Layout 18.44. Operation 51: LAYOUTRETURN - Release Layout
Information . . . . . . . . . . . . . . . . . . . . . . 514 Information . . . . . . . . . . . . . . . . . . . . . . 515
18.45. Operation 52: SECINFO_NO_NAME - Get Security on 18.45. Operation 52: SECINFO_NO_NAME - Get Security on
Unnamed Object . . . . . . . . . . . . . . . . . . . . . 519 Unnamed Object . . . . . . . . . . . . . . . . . . . . . 520
18.46. Operation 53: SEQUENCE - Supply per-procedure 18.46. Operation 53: SEQUENCE - Supply per-procedure
sequencing and control . . . . . . . . . . . . . . . . . 520 sequencing and control . . . . . . . . . . . . . . . . . 521
18.47. Operation 54: SET_SSV - Update SSV for a Client ID . . . 526 18.47. Operation 54: SET_SSV - Update SSV for a Client ID . . . 527
18.48. Operation 55: TEST_STATEID - Test stateids for 18.48. Operation 55: TEST_STATEID - Test stateids for
validity . . . . . . . . . . . . . . . . . . . . . . . . 528 validity . . . . . . . . . . . . . . . . . . . . . . . . 529
18.49. Operation 56: WANT_DELEGATION - Request Delegation . . . 530 18.49. Operation 56: WANT_DELEGATION - Request Delegation . . . 531
18.50. Operation 57: DESTROY_CLIENTID - Destroy existing 18.50. Operation 57: DESTROY_CLIENTID - Destroy existing
client ID . . . . . . . . . . . . . . . . . . . . . . . 534 client ID . . . . . . . . . . . . . . . . . . . . . . . 535
18.51. Operation 58: RECLAIM_COMPLETE - Indicates Reclaims 18.51. Operation 58: RECLAIM_COMPLETE - Indicates Reclaims
Finished . . . . . . . . . . . . . . . . . . . . . . . . 534 Finished . . . . . . . . . . . . . . . . . . . . . . . . 535
18.52. Operation 10044: ILLEGAL - Illegal operation . . . . . . 537 18.52. Operation 10044: ILLEGAL - Illegal operation . . . . . . 538
19. NFSv4.1 Callback Procedures . . . . . . . . . . . . . . . . . 537 19. NFSv4.1 Callback Procedures . . . . . . . . . . . . . . . . . 538
19.1. Procedure 0: CB_NULL - No Operation . . . . . . . . . . 538 19.1. Procedure 0: CB_NULL - No Operation . . . . . . . . . . 539
19.2. Procedure 1: CB_COMPOUND - Compound Operations . . . . . 538 19.2. Procedure 1: CB_COMPOUND - Compound Operations . . . . . 539
20. NFSv4.1 Callback Operations . . . . . . . . . . . . . . . . . 542 20. NFSv4.1 Callback Operations . . . . . . . . . . . . . . . . . 543
20.1. Operation 3: CB_GETATTR - Get Attributes . . . . . . . . 542 20.1. Operation 3: CB_GETATTR - Get Attributes . . . . . . . . 543
20.2. Operation 4: CB_RECALL - Recall an Open Delegation . . . 543 20.2. Operation 4: CB_RECALL - Recall an Open Delegation . . . 544
20.3. Operation 5: CB_LAYOUTRECALL - Recall Layout from 20.3. Operation 5: CB_LAYOUTRECALL - Recall Layout from
Client . . . . . . . . . . . . . . . . . . . . . . . . . 544 Client . . . . . . . . . . . . . . . . . . . . . . . . . 545
20.4. Operation 6: CB_NOTIFY - Notify directory changes . . . 548 20.4. Operation 6: CB_NOTIFY - Notify directory changes . . . 549
20.5. Operation 7: CB_PUSH_DELEG - Offer Delegation to 20.5. Operation 7: CB_PUSH_DELEG - Offer Delegation to
Client . . . . . . . . . . . . . . . . . . . . . . . . . 552 Client . . . . . . . . . . . . . . . . . . . . . . . . . 553
20.6. Operation 8: CB_RECALL_ANY - Keep any N delegations . . 553 20.6. Operation 8: CB_RECALL_ANY - Keep any N delegations . . 554
20.7. Operation 9: CB_RECALLABLE_OBJ_AVAIL - Signal 20.7. Operation 9: CB_RECALLABLE_OBJ_AVAIL - Signal
Resources for Recallable Objects . . . . . . . . . . . . 555 Resources for Recallable Objects . . . . . . . . . . . . 556
20.8. Operation 10: CB_RECALL_SLOT - change flow control 20.8. Operation 10: CB_RECALL_SLOT - change flow control
limits . . . . . . . . . . . . . . . . . . . . . . . . . 556 limits . . . . . . . . . . . . . . . . . . . . . . . . . 557
20.9. Operation 11: CB_SEQUENCE - Supply backchannel 20.9. Operation 11: CB_SEQUENCE - Supply backchannel
sequencing and control . . . . . . . . . . . . . . . . . 557 sequencing and control . . . . . . . . . . . . . . . . . 558
20.10. Operation 12: CB_WANTS_CANCELLED - Cancel Pending 20.10. Operation 12: CB_WANTS_CANCELLED - Cancel Pending
Delegation Wants . . . . . . . . . . . . . . . . . . . . 559 Delegation Wants . . . . . . . . . . . . . . . . . . . . 560
20.11. Operation 13: CB_NOTIFY_LOCK - Notify of possible 20.11. Operation 13: CB_NOTIFY_LOCK - Notify of possible
lock availability . . . . . . . . . . . . . . . . . . . 560 lock availability . . . . . . . . . . . . . . . . . . . 561
20.12. Operation 14: CB_NOTIFY_DEVICEID - Notify device ID 20.12. Operation 14: CB_NOTIFY_DEVICEID - Notify device ID
changes . . . . . . . . . . . . . . . . . . . . . . . . 562 changes . . . . . . . . . . . . . . . . . . . . . . . . 563
20.13. Operation 10044: CB_ILLEGAL - Illegal Callback 20.13. Operation 10044: CB_ILLEGAL - Illegal Callback
Operation . . . . . . . . . . . . . . . . . . . . . . . 564 Operation . . . . . . . . . . . . . . . . . . . . . . . 565
21. Security Considerations . . . . . . . . . . . . . . . . . . . 564 21. Security Considerations . . . . . . . . . . . . . . . . . . . 565
22. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 566 22. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 567
22.1. Named Attribute Definitions . . . . . . . . . . . . . . 566 22.1. Named Attribute Definitions . . . . . . . . . . . . . . 567
22.2. ONC RPC Network Identifiers (netids) . . . . . . . . . . 566 22.2. ONC RPC Network Identifiers (netids) . . . . . . . . . . 567
22.3. Defining New Notifications . . . . . . . . . . . . . . . 567 22.3. Defining New Notifications . . . . . . . . . . . . . . . 568
22.4. Defining New Layout Types . . . . . . . . . . . . . . . 567 22.4. Defining New Layout Types . . . . . . . . . . . . . . . 568
22.5. Path Variable Definitions . . . . . . . . . . . . . . . 569 22.5. Path Variable Definitions . . . . . . . . . . . . . . . 570
22.5.1. Path Variable Values . . . . . . . . . . . . . . . . 569 22.5.1. Path Variable Values . . . . . . . . . . . . . . . . 570
22.5.2. Path Variable Names . . . . . . . . . . . . . . . . 569 22.5.2. Path Variable Names . . . . . . . . . . . . . . . . 570
23. References . . . . . . . . . . . . . . . . . . . . . . . . . 569 23. References . . . . . . . . . . . . . . . . . . . . . . . . . 570
23.1. Normative References . . . . . . . . . . . . . . . . . . 569 23.1. Normative References . . . . . . . . . . . . . . . . . . 570
23.2. Informative References . . . . . . . . . . . . . . . . . 571 23.2. Informative References . . . . . . . . . . . . . . . . . 572
Appendix A. Acknowledgments . . . . . . . . . . . . . . . . . . 572 Appendix A. Acknowledgments . . . . . . . . . . . . . . . . . . 573
Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 574 Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 575
Intellectual Property and Copyright Statements . . . . . . . . . 576 Intellectual Property and Copyright Statements . . . . . . . . . 577
1. Introduction 1. Introduction
1.1. The NFS Version 4 Minor Version 1 Protocol 1.1. The NFS Version 4 Minor Version 1 Protocol
The NFS version 4 minor version 1 (NFSv4.1) protocol is the second The NFS version 4 minor version 1 (NFSv4.1) protocol is the second
minor version of the NFS version 4 (NFSv4) protocol. The first minor minor version of the NFS version 4 (NFSv4) protocol. The first minor
version, NFSv4.0 is described in [21]. It generally follows the version, NFSv4.0 is described in [21]. It generally follows the
guidelines for minor versioning model listed in Section 10 of RFC guidelines for minor versioning model listed in Section 10 of RFC
3530. However, it diverges from guidelines 11 ("a client and server 3530. However, it diverges from guidelines 11 ("a client and server
skipping to change at page 374, line 28 skipping to change at page 374, line 28
| | RECLAIM_COMPLETE, SETATTR, | | | RECLAIM_COMPLETE, SETATTR, |
| | VERIFY, WANT_DELEGATION, | | | VERIFY, WANT_DELEGATION, |
| | WRITE | | | WRITE |
| NFS4ERR_XDEV | LINK, RENAME | | NFS4ERR_XDEV | LINK, RENAME |
+-----------------------------------+-------------------------------+ +-----------------------------------+-------------------------------+
Table 14 Table 14
16. NFSv4.1 Procedures 16. NFSv4.1 Procedures
Both procedures, NULL and COMPOUND, MUST be implemented.
16.1. Procedure 0: NULL - No Operation 16.1. Procedure 0: NULL - No Operation
16.1.1. ARGUMENTS 16.1.1. ARGUMENTS
void; void;
16.1.2. RESULTS 16.1.2. RESULTS
void; void;
skipping to change at page 381, line 21 skipping to change at page 381, line 25
struct COMPOUND4res { struct COMPOUND4res {
nfsstat4 status; nfsstat4 status;
utf8str_cs tag; utf8str_cs tag;
nfs_resop4 resarray<>; nfs_resop4 resarray<>;
}; };
16.2.3. DESCRIPTION 16.2.3. 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 NFS RPC program has two
two main procedures: NULL and COMPOUND. All other operations use the main procedures: NULL and COMPOUND. All other operations use the
COMPOUND procedure as a wrapper. COMPOUND procedure as a wrapper.
The COMPOUND procedure is used to combine individual operations into The COMPOUND procedure is used to combine individual operations into
a single RPC request. The server interprets each of the operations a single RPC request. The server interprets each of the operations
in turn. If an operation is executed by the server and the status of 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 COMPOUND that operation is NFS4_OK, then the next operation in the COMPOUND
procedure is executed. The server continues this process until there procedure is executed. The server continues this process until there
are no more operations to be executed or one of the operations has a are no more operations to be executed or one of the operations has a
status value other than NFS4_OK. status value other than NFS4_OK.
skipping to change at page 382, line 15 skipping to change at page 382, line 19
zero length resultdata array. zero length resultdata array.
Contained within the COMPOUND results is a "status" field. If the Contained within the COMPOUND results is a "status" field. If the
results array length is non-zero, this status must be equivalent to results array length is non-zero, this status must be equivalent to
the status of the last operation that was executed within the the status of the last operation that was executed within the
COMPOUND procedure. Therefore, if an operation incurred an error COMPOUND procedure. Therefore, if an operation incurred an error
then the "status" value will be the same error value as is being then the "status" value will be the same error value as is being
returned for the operation that failed. returned for the operation that failed.
Note that operations, 0 (zero) and 1 (one) are not defined for the Note that operations, 0 (zero) and 1 (one) are not defined for the
COMPOUND procedure. Operation 2 is not defined but reserved for COMPOUND procedure. Operation 2 is not defined and is reserved for
future definition and use with minor versioning. If the server future definition and use with minor versioning. If the server
receives a operation array that contains operation 2 and the receives a operation array that contains operation 2 and the
minorversion field has a value of 0 (zero), an error of minorversion field has a value of 0 (zero), an error of
NFS4ERR_OP_ILLEGAL, as described in the next paragraph, is returned NFS4ERR_OP_ILLEGAL, as described in the next paragraph, is returned
to the client. If an operation array contains an operation 2 and the to the client. If an operation array contains an operation 2 and 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 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.
skipping to change at page 383, line 21 skipping to change at page 383, line 26
LOOKUP "compA" {fh2} LOOKUP "compA" {fh2}
GETATTR {fh2} GETATTR {fh2}
LOOKUP "compB" {fh3} LOOKUP "compB" {fh3}
GETATTR {fh3} GETATTR {fh3}
LOOKUP "compC" {fh4} LOOKUP "compC" {fh4}
GETATTR {fh4} GETATTR {fh4}
GETFH GETFH
Figure 84 Figure 84
In this example, the PUTFH operation explicitly sets the current In this example, the PUTFH (Section 18.19) operation explicitly sets
filehandle value while the result of each LOOKUP operation sets the the current filehandle value while the result of each LOOKUP
current filehandle value to the resultant file system object. Also, operation sets the current filehandle value to the resultant file
the client is able to insert GETATTR operations using the current system object. Also, the client is able to insert GETATTR operations
filehandle as an argument. using the current filehandle as an argument.
The PUTROOTFH (Section 18.21) and PUTPUBFH (Section 18.21) operations
also set the current filehandle. The above example would replace
"PUTFH fh1" with PUTROOTFH or PUTPUBFH with no filehandle argument in
order to achieve the same effect (on the assumption that "compA" is
directly below the root of the namespace).
Along with the current filehandle, there is a saved filehandle. Along with the current filehandle, there is a saved filehandle.
While the current filehandle is set as the result of operations like While the current filehandle is set as the result of operations like
LOOKUP, the saved filehandle must be set directly with the use of the LOOKUP, the saved filehandle must be set directly with the use of the
SAVEFH operation. The SAVEFH operations copies the current SAVEFH operation. The SAVEFH operations copies the current
filehandle value to the saved value. The saved filehandle value is filehandle value to the saved value. The saved filehandle value is
used in combination with the current filehandle value for the LINK used in combination with the current filehandle value for the LINK
and RENAME operations. The RESTOREFH operation will copy the saved and RENAME operations. The RESTOREFH operation will copy the saved
filehandle value to the current filehandle value; as a result, the filehandle value to the current filehandle value; as a result, the
saved filehandle value may be used a sort of "scratch" area for the saved filehandle value may be used a sort of "scratch" area for the
skipping to change at page 384, line 5 skipping to change at page 384, line 19
passing of stateids between operations. There are no changes to the passing of stateids between operations. There are no changes to the
syntax of the protocol, only changes to the semantics of a few syntax of the protocol, only changes to the semantics of a few
operations. operations.
A "current stateid" is the stateid that is associated with the A "current stateid" is the stateid that is associated with the
current filehandle. The current stateid may only be changed by an current filehandle. The current stateid may only be changed by an
operation that modifies the current filehandle or returns a stateid. operation that modifies the current filehandle or returns a stateid.
If an operation returns a stateid it MUST set the current stateid to If an operation returns a stateid it MUST set the current stateid to
the returned value. If an operation sets the current filehandle but the returned value. If an operation sets the current filehandle but
does not return a stateid, the current stateid MUST be set to the does not return a stateid, the current stateid MUST be set to the
all-zeros special stateid. As an example, PUTFH will change the all-zeros special stateid, i.e. (seqid, other) = (0, 0). If an
current server state from {ocfh, osid} to {cfh, 0} while LOCK will operation uses a stateid as an argument but does not return a
change the current state from {cfh, osid} to {cfh, nsid}. The SAVEFH stateid, the current stateid MUST NOT be changed. E.g., PUTFH,
and RESTOREFH operations will save and restore both the filehandle PUTROOFH, and PUTPUBFH will change the current server state from
and the stateid as a set. {ocfh, (osid)} to {cfh, (0, 0)} while LOCK will change the current
state from {cfh, (osid} to {cfh, (nsid)}. Operations like LOOKUP
Any operation which takes as an argument a stateid that is not the that transform a current filehandle and component name into a new
special all-zeros stateid MUST set the current stateid to the all- current filehandle will also change the current stateid to {0, 0}.
zeros value before evaluating the operation. If the argument is the The SAVEFH and RESTOREFH operations will save and restore both the
special all-zeros stateid, the operation is evaluated using the current filehandle and the current stateid as a set.
current stateid.
The following example is the common case of a simple READ operation The following example is the common case of a simple READ operation
with a supplied stateid showing that the PUTFH initializes the with a supplied stateid showing that the PUTFH initializes the
current stateid to zero. The subsequent READ with stateid sid1 current stateid to (0, 0). The subsequent READ with stateid (sid1)
replaces the current stateid before evaluating the operation. leaves the current stateid unchanged, but does evaluate the the
operation.
PUTFH fh1 - -> {fh1, 0} PUTFH fh1 - -> {fh1, (0, 0)}
READ sid1,0,1024 {fh1, sid1} -> {fh1, sid1} READ (sid1), 0, 1024 {fh1, (0, 0)} -> {fh1, (0, 0)}
Figure 85 Figure 85
This next example performs an OPEN with the client provided stateid This next example performs an OPEN with the root filehandle and as a
sid1 and as a result generates stateid sid2. The next operation result generates stateid (sid1). The next operation specifies the
specifies the READ with the special all-zero stateid but the current READ with the argument stateid set such that (seqid, other) are equal
stateid set by the previous operation is actually used when the to (1, 0), but the current stateid set by the previous operation is
operation is evaluated, allowing correct interaction with any actually used when the operation is evaluated. This allows correct
existing, potentially conflicting, locks. interaction with any existing, potentially conflicting, locks.
PUTFH fh1 - -> {fh1, 0}
OPEN R,sid1,"compA" {fh1, sid1} -> {fh2, sid2}
READ 0,0,1024 {fh2, sid2} -> {fh2, sid2}
CLOSE 0 {fh2, sid2} -> {fh2, sid3}
PUTROOTFH - -> {fh1, (0, 0)}
OPEN "compA" {fh1, (0, 0)} -> {fh2, (sid1)}
READ (1, 0), 0, 1024 {fh2, (sid1)} -> {fh2, (sid1)}
CLOSE (1, 0) {fh2, (sid1)} -> {fh2, (sid2)}
Figure 86 Figure 86
The final example is similar to the second in how it passes the The final example is similar to the second in how it passes the
stateid sid2 generated by the LOCK operation to the next READ stateid sid2 generated by the LOCK operation to the next READ
operation. This allows the client to explicitly surround a single operation. This allows the client to explicitly surround a single
I/O operation with a lock and its appropriate stateid to guarantee I/O operation with a lock and its appropriate stateid to guarantee
correctness with other client locks. correctness with other client locks. The example also shows how
SAVEFH and RESTOREFH can save and later re-use a filehandle and
stateid, passing them as the current filehandle and stateid to a READ
operation.
PUTFH fh1 - -> {fh1, (0, 0)}
LOCK 0, 1024, (sid1) {fh1, (sid1)} -> {fh1, (sid2)}
READ (1, 0), 0, 1024 {fh1, (sid2)} -> {fh1, (sid2)}
LOCKU 0, 1024, (1, 0) {fh1, (sid2)} -> {fh1, (sid3)}
SAVEFH {fh1, (sid3)} -> {fh1, (sid3)}
PUTFH fh2 {fh1, (sid3)} -> {fh2, (0, 0)}
WRITE (1, 0), 0, 1024 {fh2, (0, 0)} -> {fh2, (0, 0)}
RESTOREFH {fh2, (0, 0)} -> {fh1, (sid3)}
READ (1, 0), 1024, 1024 {fh1, (sid3)} -> {fh1, (sid3)}
PUTFH fh1 - -> {fh1, 0}
LOCK W,0,1024,sid1 {fh1, sid1} -> {fh1, sid2}
READ 0,0,1024 {fh1, sid2} -> {fh1, sid2}
LOCKU W,0,1024,0 {fh1, sid2} -> {fh1, sid3}
Figure 87 Figure 87
16.2.4. ERRORS 16.2.4. ERRORS
COMPOUND will of course return every error that each operation on the COMPOUND will of course return every error that each operation on the
fore channel can return (see Table 12). However if COMPOUND returns fore channel can return (see Table 12). However if COMPOUND returns
zero operations, obviously the error returned by COMPOUND has nothing zero operations, obviously the error returned by COMPOUND has nothing
to do with an error returned by an operation. The list of errors to do with an error returned by an operation. The list of errors
COMPOUND will return if it processes zero operations include: COMPOUND will return if it processes zero operations include:
skipping to change at page 437, line 26 skipping to change at page 438, line 26
/* /*
* If status is NFS4_OK, * If status is NFS4_OK,
* new CURRENT_FH: argument to PUTFH * new CURRENT_FH: argument to PUTFH
*/ */
nfsstat4 status; nfsstat4 status;
}; };
18.19.3. DESCRIPTION 18.19.3. DESCRIPTION
Replaces the current filehandle with the filehandle provided as an Replaces the current filehandle with the filehandle provided as an
argument. argument. Clears the current stateid.
If the security mechanism used by the requester does not meet the If the security mechanism used by the requester does not meet the
requirements of the filehandle provided to this operation, the server requirements of the filehandle provided to this operation, the server
MUST return NFS4ERR_WRONGSEC. MUST return NFS4ERR_WRONGSEC.
See Section 16.2.3.1.1 for more details on the current filehandle.
See Section 16.2.3.1.2 for more details on the current stateid.
18.19.4. IMPLEMENTATION 18.19.4. IMPLEMENTATION
Commonly used as the first operator in an NFS request to set the Commonly used as the first operator in an NFS request to set the
context for following operations. context for following operations.
18.20. Operation 23: PUTPUBFH - Set Public Filehandle 18.20. Operation 23: PUTPUBFH - Set Public Filehandle
18.20.1. ARGUMENT 18.20.1. ARGUMENT
void; void;
skipping to change at page 438, line 22 skipping to change at page 439, line 22
nfsstat4 status; nfsstat4 status;
}; };
18.20.3. DESCRIPTION 18.20.3. DESCRIPTION
Replaces the current filehandle with the filehandle that represents Replaces the current filehandle with the filehandle that represents
the public filehandle of the server's name space. This filehandle the public filehandle of the server's name space. This filehandle
may be different from the "root" filehandle which may be associated may be different from the "root" filehandle which may be associated
with some other directory on the server. with some other directory on the server.
PUTPUBFH also clears the current stateid.
The public filehandle represents the concepts embodied in RFC2054 The public filehandle represents the concepts embodied in RFC2054
[32], RFC2055 [33], RFC2224 [41]. The intent for NFSv4.1 is that the [32], RFC2055 [33], RFC2224 [41]. The intent for NFSv4.1 is that the
public filehandle (represented by the PUTPUBFH operation) be used as public filehandle (represented by the PUTPUBFH operation) be used as
a method of providing WebNFS server compatibility with NFSv3. a method of providing WebNFS server compatibility with NFSv3.
The public filehandle and the root filehandle (represented by the The public filehandle and the root filehandle (represented by the
PUTROOTFH operation) should be equivalent. If the public and root PUTROOTFH operation) SHOULD be equivalent. If the public and root
filehandles are not equivalent, then the public filehandle MUST be a filehandles are not equivalent, then the public filehandle MUST be a
descendant of the root filehandle. descendant of the root filehandle.
See Section 16.2.3.1.1 for more details on the current filehandle.
See Section 16.2.3.1.2 for more details on the current stateid.
18.20.4. IMPLEMENTATION 18.20.4. IMPLEMENTATION
Used as the first operator in an NFS request to set the context for Used as the second operator (after SEQUENCE) in an NFS request to set
following operations. the context for file accessing operations that follow in the same
COMPOUND request.
With the NFSv3 public filehandle, the client is able to specify With the NFSv3 public filehandle, the client is able to specify
whether the path name provided in the LOOKUP should be evaluated as whether the path name provided in the LOOKUP should be evaluated as
either an absolute path relative to the server's root or relative to either an absolute path relative to the server's root or relative to
the public filehandle. RFC2224 [41] contains further discussion of the public filehandle. RFC2224 [41] contains further discussion of
the functionality. With NFSv4.1, that type of specification is not the functionality. With NFSv4.1, that type of specification is not
directly available in the LOOKUP operation. The reason for this is directly available in the LOOKUP operation. The reason for this is
because the component separators needed to specify absolute vs. because the component separators needed to specify absolute vs.
relative are not allowed in NFSv4. Therefore, the client is relative are not allowed in NFSv4. Therefore, the client is
responsible for constructing its request such that the use of either responsible for constructing its request such that the use of either
PUTROOTFH or PUTPUBFH are used to signify absolute or relative PUTROOTFH or PUTPUBFH are used to signify absolute or relative
evaluation of an NFS URL respectively. evaluation of an NFS URL respectively.
Note that there are warnings mentioned in RFC2224 [41] with respect Note that there are warnings mentioned in RFC2224 [41] with respect
to the use of absolute evaluation and the restrictions the server may to the use of absolute evaluation and the restrictions the server may
place on that evaluation with respect to how much of its namespace place on that evaluation with respect to how much of its namespace
has been made available. These same warnings apply to NFSv4. It is has been made available. These same warnings apply to NFSv4.1. It
likely, therefore that because of server implementation details, an is likely, therefore that because of server implementation details,
NFSv3 absolute public filehandle lookup may behave differently than an NFSv3 absolute public filehandle lookup may behave differently
an NFSv4.1 absolute resolution. than an NFSv4.1 absolute resolution.
There is a form of security negotiation as described in RFC2755 [42] There is a form of security negotiation as described in RFC2755 [42]
that uses the public filehandle a method of employing SNEGO. This that uses the public filehandle and an overloading of the pathname.
method is not available with NFSv4.1 as filehandles are not This method is not available with NFSv4.1 as filehandles are not
overloaded with special meaning and therefore do not provide the same overloaded with special meaning and therefore do not provide the same
framework as NFSv3. Clients should therefore use the security framework as NFSv3. Clients should therefore use the security
negotiation mechanisms described in this RFC. negotiation mechanisms described in Section 2.6.
18.21. Operation 24: PUTROOTFH - Set Root Filehandle 18.21. Operation 24: PUTROOTFH - Set Root Filehandle
18.21.1. ARGUMENTS 18.21.1. ARGUMENTS
void; void;
18.21.2. RESULTS 18.21.2. RESULTS
struct PUTROOTFH4res { struct PUTROOTFH4res {
skipping to change at page 439, line 40 skipping to change at page 440, line 47
}; };
18.21.3. DESCRIPTION 18.21.3. DESCRIPTION
Replaces the current filehandle with the filehandle that represents Replaces the current filehandle with the filehandle that represents
the root of the server's name space. From this filehandle a LOOKUP the root of the server's name space. From this filehandle a LOOKUP
operation can locate any other filehandle on the server. This operation can locate any other filehandle on the server. This
filehandle may be different from the "public" filehandle which may be filehandle may be different from the "public" filehandle which may be
associated with some other directory on the server. associated with some other directory on the server.
PUTROOTFH also clears the current stateid.
See Section 16.2.3.1.1 for more details on the current filehandle.
See Section 16.2.3.1.2 for more details on the current stateid.
18.21.4. IMPLEMENTATION 18.21.4. IMPLEMENTATION
Commonly used as the first operator in an NFS request to set the Commonly used as the second operator (after SEQUENCE) in an NFS
context for following operations. request to set the context for file accessing operations that follow
in the same COMPOUND request.
18.22. Operation 25: READ - Read from File 18.22. Operation 25: READ - Read from File
18.22.1. ARGUMENTS 18.22.1. ARGUMENTS
struct READ4args { struct READ4args {
/* CURRENT_FH: file */ /* CURRENT_FH: file */
stateid4 stateid; stateid4 stateid;
offset4 offset; offset4 offset;
count4 count; count4 count;
skipping to change at page 453, line 39 skipping to change at page 454, line 39
struct RESTOREFH4res { struct RESTOREFH4res {
/* /*
* If status is NFS4_OK, * If status is NFS4_OK,
* new CURRENT_FH: value of saved fh * new CURRENT_FH: value of saved fh
*/ */
nfsstat4 status; nfsstat4 status;
}; };
18.27.3. DESCRIPTION 18.27.3. DESCRIPTION
Set the current filehandle to the value in the saved filehandle. If Set the current filehandle and stateid to the values in the saved
there is no saved filehandle then the server will return the error filehandle and stateid. If there is no saved filehandle then the
NFS4ERR_NOFILEHANDLE. server will return the error NFS4ERR_NOFILEHANDLE.
See Section 16.2.3.1.1 for more details on the current filehandle.
See Section 16.2.3.1.2 for more details on the current stateid.
18.27.4. IMPLEMENTATION 18.27.4. IMPLEMENTATION
Operations like OPEN and LOOKUP use the current filehandle to Operations like OPEN and LOOKUP use the current filehandle to
represent a directory and replace it with a new filehandle. Assuming represent a directory and replace it with a new filehandle. Assuming
the previous filehandle was saved with a SAVEFH operator, the the previous filehandle was saved with a SAVEFH operator, the
previous filehandle can be restored as the current filehandle. This previous filehandle can be restored as the current filehandle. This
is commonly used to obtain post-operation attributes for the is commonly used to obtain post-operation attributes for the
directory, e.g. directory, e.g.
skipping to change at page 454, line 32 skipping to change at page 455, line 36
struct SAVEFH4res { struct SAVEFH4res {
/* /*
* If status is NFS4_OK, * If status is NFS4_OK,
* new SAVED_FH: value of current fh * new SAVED_FH: value of current fh
*/ */
nfsstat4 status; nfsstat4 status;
}; };
18.28.3. DESCRIPTION 18.28.3. DESCRIPTION
Save the current filehandle. If a previous filehandle was saved then Save the current filehandle and stateid. If a previous filehandle
it is no longer accessible. The saved filehandle can be restored as was saved then it is no longer accessible. The saved filehandle can
the current filehandle with the RESTOREFH operator. be restored as the current filehandle with the RESTOREFH operator.
On success, the current filehandle retains its value. On success, the current filehandle retains its value.
See Section 16.2.3.1.1 for more details on the current filehandle.
See Section 16.2.3.1.2 for more details on the current stateid.
18.28.4. IMPLEMENTATION 18.28.4. IMPLEMENTATION
18.29. Operation 33: SECINFO - Obtain Available Security 18.29. Operation 33: SECINFO - Obtain Available Security
18.29.1. ARGUMENTS 18.29.1. ARGUMENTS
struct SECINFO4args { struct SECINFO4args {
/* CURRENT_FH: directory */ /* CURRENT_FH: directory */
component4 name; component4 name;
}; };
skipping to change at page 538, line 5 skipping to change at page 539, line 5
the ILLEGAL4res would not be returned. the ILLEGAL4res would not be returned.
19. NFSv4.1 Callback Procedures 19. NFSv4.1 Callback Procedures
The procedures used for callbacks are defined in the following The procedures used for callbacks are defined in the following
sections. In the interest of clarity, the terms "client" and sections. In the interest of clarity, the terms "client" and
"server" refer to NFS clients and servers, despite the fact that for "server" refer to NFS clients and servers, despite the fact that for
an individual callback RPC, the sense of these terms would be an individual callback RPC, the sense of these terms would be
precisely the opposite. precisely the opposite.
Both procedures, CB_NULL and CB_COMPOUND, MUST be implemented.
19.1. Procedure 0: CB_NULL - No Operation 19.1. Procedure 0: CB_NULL - No Operation
19.1.1. ARGUMENTS 19.1.1. ARGUMENTS
void; void;
19.1.2. RESULTS 19.1.2. RESULTS
void; void;
 End of changes. 53 change blocks. 
147 lines changed or deleted 193 lines changed or added

This html diff was produced by rfcdiff 1.33. The latest version is available from http://tools.ietf.org/tools/rfcdiff/