draft-ietf-nfsv4-rfc3530bis-dot-x-01.txt   draft-ietf-nfsv4-rfc3530bis-dot-x-02.txt 
NFSv4 T. Haynes NFSv4 T. Haynes
Internet-Draft Editor Internet-Draft D. Noveck
Intended status: Standards Track March 05, 2010 Intended status: Standards Track Editors
Expires: September 6, 2010 Expires: January 8, 2011 July 07, 2010
NFS Version 4 Protocol NFS Version 4 Protocol External Data Representation Standard (XDR)
draft-ietf-nfsv4-rfc3530bis-dot-x-01.txt Description
draft-ietf-nfsv4-rfc3530bis-dot-x-02.txt
Abstract Abstract
The Network File System (NFS) version 4 is a distributed filesystem The Network File System (NFS) version 4 is a distributed filesystem
protocol which owes heritage to NFS protocol version 2, RFC 1094, and protocol which owes heritage to NFS protocol version 2, RFC 1094, and
version 3, RFC 1813. Unlike earlier versions, the NFS version 4 version 3, RFC 1813. Unlike earlier versions, the NFS version 4
protocol supports traditional file access while integrating support protocol supports traditional file access while integrating support
for file locking and the mount protocol. In addition, support for for file locking and the mount protocol. In addition, support for
strong security (and its negotiation), compound operations, client strong security (and its negotiation), compound operations, client
caching, and internationalization have been added. Of course, caching, and internationalization have been added. Of course,
attention has been applied to making NFS version 4 operate well in an attention has been applied to making NFS version 4 operate well in an
Internet environment. This document replaces RFC 3530 as the Internet environment.
This document, together with RFC 3530bis replaces RFC 3530 as the
definition of the NFS version 4 protocol. definition of the NFS version 4 protocol.
Requirements Language Requirements Language
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 RFC 2119 [1]. document are to be interpreted as described in RFC 2119 [1].
Status of this Memo Status of this Memo
skipping to change at page 2, line 5 skipping to change at page 2, line 8
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 6, 2010. This Internet-Draft will expire on January 8, 2011.
Copyright Notice Copyright Notice
Copyright (c) 2010 IETF Trust and the persons identified as the Copyright (c) 2010 IETF Trust and the persons identified as the
document authors. All rights reserved. document authors. All rights reserved.
This document is subject to BCP 78 and the IETF Trust's Legal This document is subject to BCP 78 and the IETF Trust's Legal
Provisions Relating to IETF Documents Provisions Relating to IETF Documents
(http://trustee.ietf.org/license-info) in effect on the date of (http://trustee.ietf.org/license-info) in effect on the date of
publication of this document. Please review these documents publication of this document. Please review these documents
skipping to change at page 3, line 7 skipping to change at page 3, line 7
modifications of such material outside the IETF Standards Process. modifications of such material outside the IETF Standards Process.
Without obtaining an adequate license from the person(s) controlling Without obtaining an adequate license from the person(s) controlling
the copyright in such materials, this document may not be modified the copyright in such materials, this document may not be modified
outside the IETF Standards Process, and derivative works of it may outside the IETF Standards Process, and derivative works of it may
not be created outside the IETF Standards Process, except to format not be created outside the IETF Standards Process, except to format
it for publication as an RFC or to translate it into languages other it for publication as an RFC or to translate it into languages other
than English. than English.
Table of Contents Table of Contents
1. XDR Description of NFSv4.1 . . . . . . . . . . . . . . . . . . 3 1. XDR Description of NFSv4.0 . . . . . . . . . . . . . . . . . . 3
2. Security Considerations . . . . . . . . . . . . . . . . . . . 36 2. Security Considerations . . . . . . . . . . . . . . . . . . . 36
3. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 36 3. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 36
4. Normative References . . . . . . . . . . . . . . . . . . . . . 36 4. Normative References . . . . . . . . . . . . . . . . . . . . . 36
Author's Address . . . . . . . . . . . . . . . . . . . . . . . . . 36 Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . . 36
1. XDR Description of NFSv4.1 1. XDR Description of NFSv4.0
This document contains the XDR ([2]) description of NFSv4.0 protocol This document contains the XDR ([2]) description of NFSv4.0 protocol
([3]). ([3]).
The XDR description is provided in this document in a way that makes The XDR description is provided in this document in a way that makes
it simple for the reader to extract into ready to compile form. The it simple for the reader to extract into ready to compile form. The
reader can feed this document in the following shell script to reader can feed this document in the following shell script to
produce the machine readable XDR description of NFSv4.0: produce the machine readable XDR description of NFSv4.0:
#!/bin/sh #!/bin/sh
skipping to change at page 4, line 30 skipping to change at page 4, line 30
sh extract.sh < spec.txt > nfs4_prot.x sh extract.sh < spec.txt > nfs4_prot.x
The effect of the script is to remove leading white space from each The effect of the script is to remove leading white space from each
line, plus a sentinel sequence of "///". line, plus a sentinel sequence of "///".
The XDR description, with the sentinel sequence follows: The XDR description, with the sentinel sequence follows:
/// /* /// /*
/// * This file was machine generated for /// * This file was machine generated for
/// * draft-ietf-nfsv4-rfc3530bis-03 /// * draft-ietf-nfsv4-rfc3530bis-04
/// * Last updated Friday, March 5, 2010 03:56:29 PM CST /// * Last updated Wed Jul 7 15:06:26 CDT 2010
/// */ /// */
/// /* /// /*
/// * Copyright (C) The IETF Trust (2007-2008) /// * Copyright (C) The IETF Trust (2009-2010)
/// * All Rights Reserved. /// * All Rights Reserved.
/// * /// *
/// * Copyright (C) The Internet Society (1998-2006). /// * Copyright (C) The Internet Society (1998-2010).
/// * All Rights Reserved. /// * All Rights Reserved.
/// */ /// */
/// ///
/// /* /// /*
/// * nfs4_prot.x /// * nfs4_prot.x
/// * /// *
/// */ /// */
/// ///
/// /* /// /*
/// * Basic typedefs for RFC 1832 data type definitions /// * Basic typedefs for RFC 1832 data type definitions
skipping to change at page 7, line 14 skipping to change at page 7, line 14
/// NFS4ERR_OP_ILLEGAL = 10044,/* undefined operation */ /// NFS4ERR_OP_ILLEGAL = 10044,/* undefined operation */
/// NFS4ERR_DEADLOCK = 10045,/* file locking deadlock */ /// NFS4ERR_DEADLOCK = 10045,/* file locking deadlock */
/// NFS4ERR_FILE_OPEN = 10046,/* open file blocks op. */ /// NFS4ERR_FILE_OPEN = 10046,/* open file blocks op. */
/// NFS4ERR_ADMIN_REVOKED = 10047,/* lockowner state revoked */ /// NFS4ERR_ADMIN_REVOKED = 10047,/* lockowner state revoked */
/// NFS4ERR_CB_PATH_DOWN = 10048 /* callback path down */ /// NFS4ERR_CB_PATH_DOWN = 10048 /* callback path down */
/// }; /// };
/// ///
/// /* /// /*
/// * Basic data types /// * Basic data types
/// */ /// */
/// typedef opaque attrlist4<>; /// typedef opaque attrlist4<>;
/// typedef uint32_t bitmap4<>; /// typedef uint32_t bitmap4<>;
/// typedef uint64_t changeid4; /// typedef uint64_t changeid4;
/// typedef uint64_t clientid4; /// typedef uint64_t clientid4;
/// typedef uint32_t count4; /// typedef uint32_t count4;
/// typedef uint64_t length4; /// typedef uint64_t length4;
/// typedef uint32_t mode4; /// typedef uint32_t mode4;
/// typedef uint64_t nfs_cookie4; /// typedef uint64_t nfs_cookie4;
/// typedef opaque nfs_fh4<NFS4_FHSIZE>; /// typedef opaque nfs_fh4<NFS4_FHSIZE>;
/// typedef uint64_t offset4; /// typedef uint64_t offset4;
/// typedef uint32_t qop4; /// typedef uint32_t qop4;
/// typedef opaque sec_oid4<>; /// typedef opaque sec_oid4<>;
/// typedef uint32_t seqid4; /// typedef uint32_t seqid4;
/// typedef opaque utf8string<>; /// typedef opaque utf8string<>;
/// typedef utf8string utf8str_cis; /// typedef utf8string utf8_should;
/// typedef utf8string utf8str_cs; /// typedef utf8string utf8val_should;
/// typedef utf8string utf8str_mixed; /// typedef utf8string utf8val_must;
/// typedef utf8str_cs component4; /// typedef utf8string ascii_must;
/// typedef utf8str_cs linktext4; /// typedef utf8_should comptag4;
/// typedef utf8val_should component4;
/// typedef utf8val_should linktext4;
/// typedef component4 pathname4<>; /// typedef component4 pathname4<>;
/// typedef uint64_t nfs_lockid4; /// typedef uint64_t nfs_lockid4;
/// typedef opaque verifier4[NFS4_VERIFIER_SIZE]; /// typedef opaque verifier4[NFS4_VERIFIER_SIZE];
/// ///
/// ///
/// /* /// /*
/// * Timeval /// * Timeval
/// */ /// */
/// struct nfstime4 { /// struct nfstime4 {
/// int64_t seconds; /// int64_t seconds;
/// uint32_t nseconds; /// uint32_t nseconds;
/// }; /// };
/// ///
skipping to change at page 8, line 29 skipping to change at page 8, line 31
/// struct fsid4 { /// struct fsid4 {
/// uint64_t major; /// uint64_t major;
/// uint64_t minor; /// uint64_t minor;
/// }; /// };
/// ///
/// ///
/// /* /// /*
/// * Filesystem locations attribute for relocation/migration /// * Filesystem locations attribute for relocation/migration
/// */ /// */
/// struct fs_location4 { /// struct fs_location4 {
/// utf8str_cis server<>; /// utf8val_must server<>;
/// pathname4 rootpath; /// pathname4 rootpath;
/// }; /// };
/// ///
/// struct fs_locations4 { /// struct fs_locations4 {
/// pathname4 fs_root; /// pathname4 fs_root;
/// fs_location4 locations<>; /// fs_location4 locations<>;
/// }; /// };
/// ///
/// ///
/// /* /// /*
skipping to change at page 11, line 9 skipping to change at page 11, line 11
/// const ACE4_GENERIC_EXECUTE = 0x001200A0; /// const ACE4_GENERIC_EXECUTE = 0x001200A0;
/// ///
/// ///
/// /* /// /*
/// * Access Control Entry definition /// * Access Control Entry definition
/// */ /// */
/// struct nfsace4 { /// struct nfsace4 {
/// acetype4 type; /// acetype4 type;
/// aceflag4 flag; /// aceflag4 flag;
/// acemask4 access_mask; /// acemask4 access_mask;
/// utf8str_mixed who; /// utf8_must who;
/// }; /// };
/// ///
/// ///
/// /* /// /*
/// * Field definitions for the fattr4_mode attribute /// * Field definitions for the fattr4_mode attribute
/// */ /// */
/// const MODE4_SUID = 0x800; /* set user id on execution */ /// const MODE4_SUID = 0x800; /* set user id on execution */
/// const MODE4_SGID = 0x400; /* set group id on execution */ /// const MODE4_SGID = 0x400; /* set group id on execution */
/// const MODE4_SVTX = 0x200; /* save text even after use */ /// const MODE4_SVTX = 0x200; /* save text even after use */
/// const MODE4_RUSR = 0x100; /* read permission: owner */ /// const MODE4_RUSR = 0x100; /* read permission: owner */
skipping to change at page 12, line 35 skipping to change at page 12, line 37
/// typedef uint64_t fattr4_files_free; /// typedef uint64_t fattr4_files_free;
/// typedef uint64_t fattr4_files_total; /// typedef uint64_t fattr4_files_total;
/// typedef fs_locations4 fattr4_fs_locations; /// typedef fs_locations4 fattr4_fs_locations;
/// typedef bool fattr4_hidden; /// typedef bool fattr4_hidden;
/// typedef bool fattr4_homogeneous; /// typedef bool fattr4_homogeneous;
/// typedef uint64_t fattr4_maxfilesize; /// typedef uint64_t fattr4_maxfilesize;
/// typedef uint32_t fattr4_maxlink; /// typedef uint32_t fattr4_maxlink;
/// typedef uint32_t fattr4_maxname; /// typedef uint32_t fattr4_maxname;
/// typedef uint64_t fattr4_maxread; /// typedef uint64_t fattr4_maxread;
/// typedef uint64_t fattr4_maxwrite; /// typedef uint64_t fattr4_maxwrite;
/// typedef utf8str_cs fattr4_mimetype; /// typedef ascii_must fattr4_mimetype;
/// typedef mode4 fattr4_mode; /// typedef mode4 fattr4_mode;
/// typedef uint64_t fattr4_mounted_on_fileid; /// typedef uint64_t fattr4_mounted_on_fileid;
/// typedef bool fattr4_no_trunc; /// typedef bool fattr4_no_trunc;
/// typedef uint32_t fattr4_numlinks; /// typedef uint32_t fattr4_numlinks;
/// typedef utf8str_mixed fattr4_owner; /// typedef utf8val_must fattr4_owner;
/// typedef utf8str_mixed fattr4_owner_group; /// typedef utf8val_must fattr4_owner_group;
/// typedef uint64_t fattr4_quota_avail_hard; /// typedef uint64_t fattr4_quota_avail_hard;
/// typedef uint64_t fattr4_quota_avail_soft; /// typedef uint64_t fattr4_quota_avail_soft;
/// typedef uint64_t fattr4_quota_used; /// typedef uint64_t fattr4_quota_used;
/// typedef specdata4 fattr4_rawdev; /// typedef specdata4 fattr4_rawdev;
/// typedef uint64_t fattr4_space_avail; /// typedef uint64_t fattr4_space_avail;
/// typedef uint64_t fattr4_space_free; /// typedef uint64_t fattr4_space_free;
/// typedef uint64_t fattr4_space_total; /// typedef uint64_t fattr4_space_total;
/// typedef uint64_t fattr4_space_used; /// typedef uint64_t fattr4_space_used;
/// typedef bool fattr4_system; /// typedef bool fattr4_system;
/// typedef nfstime4 fattr4_time_access; /// typedef nfstime4 fattr4_time_access;
skipping to change at page 34, line 41 skipping to change at page 34, line 43
/// opsetclientid_confirm; /// opsetclientid_confirm;
/// case OP_VERIFY: VERIFY4res opverify; /// case OP_VERIFY: VERIFY4res opverify;
/// case OP_WRITE: WRITE4res opwrite; /// case OP_WRITE: WRITE4res opwrite;
/// case OP_RELEASE_LOCKOWNER: /// case OP_RELEASE_LOCKOWNER:
/// RELEASE_LOCKOWNER4res /// RELEASE_LOCKOWNER4res
/// oprelease_lockowner; /// oprelease_lockowner;
/// case OP_ILLEGAL: ILLEGAL4res opillegal; /// case OP_ILLEGAL: ILLEGAL4res opillegal;
/// }; /// };
/// ///
/// struct COMPOUND4args { /// struct COMPOUND4args {
/// utf8str_cs tag; /// comptag4 tag;
/// uint32_t minorversion; /// uint32_t minorversion;
/// nfs_argop4 argarray<>; /// nfs_argop4 argarray<>;
/// }; /// };
/// ///
/// struct COMPOUND4res { /// struct COMPOUND4res {
/// nfsstat4 status; /// nfsstat4 status;
/// utf8str_cs tag; /// comptag4 tag;
/// nfs_resop4 resarray<>; /// nfs_resop4 resarray<>;
/// }; /// };
/// ///
/// ///
/// /* /// /*
/// * Remote file service routines /// * Remote file service routines
/// */ /// */
/// program NFS4_PROGRAM { /// program NFS4_PROGRAM {
/// version NFS_V4 { /// version NFS_V4 {
/// void /// void
skipping to change at page 36, line 33 skipping to change at page 36, line 35
/// }; /// };
/// ///
/// union nfs_cb_resop4 switch (unsigned resop) { /// union nfs_cb_resop4 switch (unsigned resop) {
/// case OP_CB_GETATTR: CB_GETATTR4res opcbgetattr; /// case OP_CB_GETATTR: CB_GETATTR4res opcbgetattr;
/// case OP_CB_RECALL: CB_RECALL4res opcbrecall; /// case OP_CB_RECALL: CB_RECALL4res opcbrecall;
/// case OP_CB_ILLEGAL: CB_ILLEGAL4res opcbillegal; /// case OP_CB_ILLEGAL: CB_ILLEGAL4res opcbillegal;
/// }; /// };
/// ///
/// ///
/// struct CB_COMPOUND4args { /// struct CB_COMPOUND4args {
/// utf8str_cs tag; /// comptag4 tag;
/// uint32_t minorversion; /// uint32_t minorversion;
/// uint32_t callback_ident; /// uint32_t callback_ident;
/// nfs_cb_argop4 argarray<>; /// nfs_cb_argop4 argarray<>;
/// }; /// };
/// ///
/// struct CB_COMPOUND4res { /// struct CB_COMPOUND4res {
/// nfsstat4 status; /// nfsstat4 status;
/// utf8str_cs tag; /// comptag4 tag;
/// nfs_cb_resop4 resarray<>; /// nfs_cb_resop4 resarray<>;
/// }; /// };
/// ///
/// ///
/// ///
/// /* /// /*
/// * Program number is in the transient range since the client /// * Program number is in the transient range since the client
/// * will assign the exact transient program number and provide /// * will assign the exact transient program number and provide
/// * that to the server via the SETCLIENTID operation. /// * that to the server via the SETCLIENTID operation.
/// */ /// */
skipping to change at page 37, line 29 skipping to change at page 37, line 31
See the IANA Considerations section of [3]. See the IANA Considerations section of [3].
4. Normative References 4. Normative References
[1] Bradner, S., "Key words for use in RFCs to Indicate Requirement [1] Bradner, S., "Key words for use in RFCs to Indicate Requirement
Levels", March 1997. Levels", March 1997.
[2] Eisler, M., "XDR: External Data Representation Standard", [2] Eisler, M., "XDR: External Data Representation Standard",
STD 67, RFC 4506, May 2006. STD 67, RFC 4506, May 2006.
[3] Haynes, T., "NFS Version 4 Protocol", [3] Haynes, T. and D. Noveck, "NFS Version 4 Protocol",
draft-ietf-nfsv4-rfc3530bis-00 (work in progress), March 2009. draft-ietf-nfsv4-rfc3530bis-04 (work in progress), July 2010.
Author's Address Authors' Addresses
Thomas Haynes Thomas Haynes
Sun Microsystems, Inc. Oracle Corporation
9110 E 66th St 9110 E 66th St
Tulsa, OK 74133 Tulsa, OK 74133
USA USA
Phone: +1-918-307-1415 Phone: +1-918-307-1415
Email: tom.haynes@oracle.com Email: tom.haynes@oracle.com
David Noveck
EMC
32 Coslin Drive
Southborough, MA 01772
US
Phone: +1 508 305 8404
Email: novecd@emc.com
 End of changes. 27 change blocks. 
38 lines changed or deleted 43 lines changed or added

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