Internet Engineering Task Force (IETF) S. Shepler, Ed. Request for Comments: 5662 Storspeed, Inc. Category: Standards Track M. Eisler, Ed. ISSN: 2070-1721 D. Noveck, Ed. NetApp January 2010
Network File System (NFS) Version 4 Minor Version 1 External Data Representation Standard (XDR) Description
Abstract
This document provides the External Data Representation Standard (XDR) description for Network File System version 4 (NFSv4) minor version 1.
Status of This Memo
This is an Internet Standards Track document.
This document is a product of the Internet Engineering Task Force (IETF). It represents the consensus of the IETF community. It has received public review and has been approved for publication by the Internet Engineering Steering Group (IESG). Further information on Internet Standards is available in Section 2 of RFC 5741.
Information about the current status of this document, any errata, and how to provide feedback on it may be obtained at http://www.rfc-editor.org/info/rfc5662.
Copyright Notice
Copyright (c) 2010 IETF Trust and the persons identified as the document authors. All rights reserved.
This document is subject to BCP 78 and the IETF Trust's Legal Provisions Relating to IETF Documents (http://trustee.ietf.org/license-info) in effect on the date of publication of this document. Please review these documents carefully, as they describe your rights and restrictions with respect to this document. Code Components extracted from this document must include Simplified BSD License text as described in Section 4.e of the Trust Legal Provisions and are provided without warranty as described in the Simplified BSD License.
The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be interpreted as described in RFC 2119 [1].
The XDR description and scripts for extracting the XDR description are Code Components as described in Section 4 of "Legal Provisions Relating to IETF Documents" [2].
This document contains the XDR ([3]) description of NFSv4.1 protocol ([4]). In order to facilitate implementations that support both NFSv4.0 and NFSv4.1, the description includes operations and other features of NFSv4.0 that do not apply to NFSv4.1.
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 reader can feed this document in the following shell script to produce the machine readable XDR description of NFSv4.1:
Shepler, et al. Standards Track [Page 2]
RFC 5662 NFSv4.1 XDR Description January 2010
<CODE BEGINS>
#!/bin/sh grep '^ *///' | sed 's?^ */// ??' | sed 's?^ *///$??'
<CODE ENDS>
That is, if the above script is stored in a file called "extract.sh", and this document is in a file called "spec.txt", then the reader can do:
<CODE BEGINS>
sh extract.sh < spec.txt > nfs4_prot.x
<CODE ENDS>
Shepler, et al. Standards Track [Page 3]
RFC 5662 NFSv4.1 XDR Description January 2010
The effect of the script is to remove leading white space from each line, plus a sentinel sequence of "///".
The XDR description, with the sentinel sequence follows:
<CODE BEGINS>
/// /* /// * Copyright (c) 2010 IETF Trust and the persons identified /// * as the document authors. All rights reserved. /// * /// * The document authors are identified in RFC 3530 and /// * RFC 5661. /// * /// * Redistribution and use in source and binary forms, with /// * or without modification, are permitted provided that the /// * following conditions are met: /// * /// * - Redistributions of source code must retain the above /// * copyright notice, this list of conditions and the /// * following disclaimer. /// * /// * - Redistributions in binary form must reproduce the above /// * copyright notice, this list of conditions and the /// * following disclaimer in the documentation and/or other /// * materials provided with the distribution. /// * /// * - Neither the name of Internet Society, IETF or IETF /// * Trust, nor the names of specific contributors, may be /// * used to endorse or promote products derived from this /// * software without specific prior written permission. /// * /// * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS /// * AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED /// * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE /// * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS /// * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO /// * EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE /// * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, /// * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT /// * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR /// * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS /// * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF /// * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, /// * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING /// * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF /// * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. /// */
/// /* /// * Not a reclaim. /// * /// * Like CLAIM_NULL, but object identified /// * by the current filehandle. /// */ /// CLAIM_FH = 4, /* new to v4.1 */ /// /// /* /// * Like CLAIM_DELEGATE_CUR, but object identified /// * by current filehandle. /// */ /// CLAIM_DELEG_CUR_FH = 5, /* new to v4.1 */ /// /// /* /// * Like CLAIM_DELEGATE_PREV, but object identified /// * by current filehandle. /// */ /// CLAIM_DELEG_PREV_FH = 6 /* new to v4.1 */ /// }; /// /// struct open_claim_delegate_cur4 { /// stateid4 delegate_stateid; /// component4 file; /// }; /// /// union open_claim4 switch (open_claim_type4 claim) { /// /* /// * No special rights to file. /// * Ordinary OPEN of the specified file. /// */ /// case CLAIM_NULL: /// /* CURRENT_FH: directory */ /// component4 file; /// /* /// * Right to the file established by an /// * open previous to server reboot. File /// * identified by filehandle obtained at /// * that time rather than by name. /// */ /// case CLAIM_PREVIOUS: /// /* CURRENT_FH: file being reclaimed */ /// open_delegation_type4 delegate_type; /// /// /* /// * Right to file based on a delegation /// * granted by the server. File is /// * specified by name.
Shepler, et al. Standards Track [Page 35]
RFC 5662 NFSv4.1 XDR Description January 2010
/// */ /// case CLAIM_DELEGATE_CUR: /// /* CURRENT_FH: directory */ /// open_claim_delegate_cur4 delegate_cur_info; /// /// /* /// * Right to file based on a delegation /// * granted to a previous boot instance /// * of the client. File is specified by name. /// */ /// case CLAIM_DELEGATE_PREV: /// /* CURRENT_FH: directory */ /// component4 file_delegate_prev; /// /// /* /// * Like CLAIM_NULL. No special rights /// * to file. Ordinary OPEN of the /// * specified file by current filehandle. /// */ /// case CLAIM_FH: /* new to v4.1 */ /// /* CURRENT_FH: regular file to open */ /// void; /// /// /* /// * Like CLAIM_DELEGATE_PREV. Right to file based on a /// * delegation granted to a previous boot /// * instance of the client. File is identified by /// * by filehandle. /// */ /// case CLAIM_DELEG_PREV_FH: /* new to v4.1 */ /// /* CURRENT_FH: file being opened */ /// void; /// /// /* /// * Like CLAIM_DELEGATE_CUR. Right to file based on /// * a delegation granted by the server. /// * File is identified by filehandle. /// */ /// case CLAIM_DELEG_CUR_FH: /* new to v4.1 */ /// /* CURRENT_FH: file being opened */ /// stateid4 oc_delegate_stateid; /// /// }; /// /// /* /// * OPEN: Open a file, potentially receiving an open delegation /// */ /// struct OPEN4args {
Shepler, et al. Standards Track [Page 36]
RFC 5662 NFSv4.1 XDR Description January 2010
/// seqid4 seqid; /// uint32_t share_access; /// uint32_t share_deny; /// open_owner4 owner; /// openflag4 openhow; /// open_claim4 claim; /// }; /// /// struct open_read_delegation4 { /// stateid4 stateid; /* Stateid for delegation*/ /// bool recall; /* Pre-recalled flag for /// delegations obtained /// by reclaim (CLAIM_PREVIOUS) */ /// /// nfsace4 permissions; /* Defines users who don't /// need an ACCESS call to /// open for read */ /// }; /// /// struct open_write_delegation4 { /// stateid4 stateid; /* Stateid for delegation */ /// bool recall; /* Pre-recalled flag for /// delegations obtained /// by reclaim /// (CLAIM_PREVIOUS) */ /// /// nfs_space_limit4 /// space_limit; /* Defines condition that /// the client must check to /// determine whether the /// file needs to be flushed /// to the server on close. */ /// /// nfsace4 permissions; /* Defines users who don't /// need an ACCESS call as /// part of a delegated /// open. */ /// }; /// /// /// enum why_no_delegation4 { /* new to v4.1 */ /// WND4_NOT_WANTED = 0, /// WND4_CONTENTION = 1, /// WND4_RESOURCE = 2, /// WND4_NOT_SUPP_FTYPE = 3, /// WND4_WRITE_DELEG_NOT_SUPP_FTYPE = 4, /// WND4_NOT_SUPP_UPGRADE = 5, /// WND4_NOT_SUPP_DOWNGRADE = 6,
Shepler, et al. Standards Track [Page 37]
RFC 5662 NFSv4.1 XDR Description January 2010
/// WND4_CANCELLED = 7, /// WND4_IS_DIR = 8 /// }; /// /// union open_none_delegation4 /* new to v4.1 */ /// switch (why_no_delegation4 ond_why) { /// case WND4_CONTENTION: /// bool ond_server_will_push_deleg; /// case WND4_RESOURCE: /// bool ond_server_will_signal_avail; /// default: /// void; /// }; /// /// union open_delegation4 /// switch (open_delegation_type4 delegation_type) { /// case OPEN_DELEGATE_NONE: /// void; /// case OPEN_DELEGATE_READ: /// open_read_delegation4 read; /// case OPEN_DELEGATE_WRITE: /// open_write_delegation4 write; /// case OPEN_DELEGATE_NONE_EXT: /* new to v4.1 */ /// open_none_delegation4 od_whynone; /// }; /// /// /* /// * Result flags /// */ /// /// /* Client must confirm open */ /// const OPEN4_RESULT_CONFIRM = 0x00000002; /// /* Type of file locking behavior at the server */ /// const OPEN4_RESULT_LOCKTYPE_POSIX = 0x00000004; /// /* Server will preserve file if removed while open */ /// const OPEN4_RESULT_PRESERVE_UNLINKED = 0x00000008; /// /// /* /// * Server may use CB_NOTIFY_LOCK on locks /// * derived from this open /// */ /// const OPEN4_RESULT_MAY_NOTIFY_LOCK = 0x00000020; /// /// struct OPEN4resok { /// stateid4 stateid; /* Stateid for open */ /// change_info4 cinfo; /* Directory Change Info */ /// uint32_t rflags; /* Result flags */ /// bitmap4 attrset; /* attribute set for create*/
Shepler, et al. Standards Track [Page 38]
RFC 5662 NFSv4.1 XDR Description January 2010
/// open_delegation4 delegation; /* Info on any open /// delegation */ /// }; /// /// union OPEN4res switch (nfsstat4 status) { /// case NFS4_OK: /// /* New CURRENT_FH: opened file */ /// OPEN4resok resok4; /// default: /// void; /// }; /// /// struct OPENATTR4args { /// /* CURRENT_FH: object */ /// bool createdir; /// }; /// /// struct OPENATTR4res { /// /* /// * If status is NFS4_OK, /// * new CURRENT_FH: named attribute /// * directory /// */ /// nfsstat4 status; /// }; /// /// /* obsolete in NFSv4.1 */ /// struct OPEN_CONFIRM4args { /// /* CURRENT_FH: opened file */ /// stateid4 open_stateid; /// seqid4 seqid; /// }; /// /// struct OPEN_CONFIRM4resok { /// stateid4 open_stateid; /// }; /// /// union OPEN_CONFIRM4res switch (nfsstat4 status) { /// case NFS4_OK: /// OPEN_CONFIRM4resok resok4; /// default: /// void; /// }; /// /// struct OPEN_DOWNGRADE4args { /// /* CURRENT_FH: opened file */ /// stateid4 open_stateid; /// seqid4 seqid;
Shepler, et al. Standards Track [Page 39]
RFC 5662 NFSv4.1 XDR Description January 2010
/// uint32_t share_access; /// uint32_t share_deny; /// }; /// /// struct OPEN_DOWNGRADE4resok { /// stateid4 open_stateid; /// }; /// /// union OPEN_DOWNGRADE4res switch(nfsstat4 status) { /// case NFS4_OK: /// OPEN_DOWNGRADE4resok resok4; /// default: /// void; /// }; /// /// struct PUTFH4args { /// nfs_fh4 object; /// }; /// /// struct PUTFH4res { /// /* /// * If status is NFS4_OK, /// * new CURRENT_FH: argument to PUTFH /// */ /// nfsstat4 status; /// }; /// /// struct PUTPUBFH4res { /// /* /// * If status is NFS4_OK, /// * new CURRENT_FH: public fh /// */ /// nfsstat4 status; /// }; /// /// struct PUTROOTFH4res { /// /* /// * If status is NFS4_OK, /// * new CURRENT_FH: root fh /// */ /// nfsstat4 status; /// }; /// /// struct READ4args { /// /* CURRENT_FH: file */ /// stateid4 stateid; /// offset4 offset; /// count4 count;
/// nfsstat4 tsr_status_codes<>; /// }; /// /// union TEST_STATEID4res switch (nfsstat4 tsr_status) { /// case NFS4_OK: /// TEST_STATEID4resok tsr_resok4; /// default: /// void; /// }; /// /// union deleg_claim4 switch (open_claim_type4 dc_claim) { /// /* /// * No special rights to object. Ordinary delegation /// * request of the specified object. Object identified /// * by filehandle. /// */ /// case CLAIM_FH: /* new to v4.1 */ /// /* CURRENT_FH: object being delegated */ /// void; /// /// /* /// * Right to file based on a delegation granted /// * to a previous boot instance of the client. /// * File is specified by filehandle. /// */ /// case CLAIM_DELEG_PREV_FH: /* new to v4.1 */ /// /* CURRENT_FH: object being delegated */ /// void; /// /// /* /// * Right to the file established by an open previous /// * to server reboot. File identified by filehandle. /// * Used during server reclaim grace period. /// */ /// case CLAIM_PREVIOUS: /// /* CURRENT_FH: object being reclaimed */ /// open_delegation_type4 dc_delegate_type; /// }; /// /// struct WANT_DELEGATION4args { /// uint32_t wda_want; /// deleg_claim4 wda_claim; /// }; /// /// union WANT_DELEGATION4res switch (nfsstat4 wdr_status) { /// case NFS4_OK: /// open_delegation4 wdr_resok4; /// default:
/// case OP_COMMIT: COMMIT4args opcommit; /// case OP_CREATE: CREATE4args opcreate; /// case OP_DELEGPURGE: DELEGPURGE4args opdelegpurge; /// case OP_DELEGRETURN: DELEGRETURN4args opdelegreturn; /// case OP_GETATTR: GETATTR4args opgetattr; /// case OP_GETFH: void; /// case OP_LINK: LINK4args oplink; /// case OP_LOCK: LOCK4args oplock; /// case OP_LOCKT: LOCKT4args oplockt; /// case OP_LOCKU: LOCKU4args oplocku; /// case OP_LOOKUP: LOOKUP4args oplookup; /// case OP_LOOKUPP: void; /// case OP_NVERIFY: NVERIFY4args opnverify; /// case OP_OPEN: OPEN4args opopen; /// case OP_OPENATTR: OPENATTR4args opopenattr; /// /// /* Not for NFSv4.1 */ /// case OP_OPEN_CONFIRM: OPEN_CONFIRM4args opopen_confirm; /// /// case OP_OPEN_DOWNGRADE: /// OPEN_DOWNGRADE4args opopen_downgrade; /// /// case OP_PUTFH: PUTFH4args opputfh; /// case OP_PUTPUBFH: void; /// case OP_PUTROOTFH: void; /// case OP_READ: READ4args opread; /// case OP_READDIR: READDIR4args opreaddir; /// case OP_READLINK: void; /// case OP_REMOVE: REMOVE4args opremove; /// case OP_RENAME: RENAME4args oprename; /// /// /* Not for NFSv4.1 */ /// case OP_RENEW: RENEW4args oprenew; /// /// case OP_RESTOREFH: void; /// case OP_SAVEFH: void; /// case OP_SECINFO: SECINFO4args opsecinfo; /// case OP_SETATTR: SETATTR4args opsetattr; /// /// /* Not for NFSv4.1 */ /// case OP_SETCLIENTID: SETCLIENTID4args opsetclientid; /// /// /* Not for NFSv4.1 */ /// case OP_SETCLIENTID_CONFIRM: SETCLIENTID_CONFIRM4args /// opsetclientid_confirm; /// case OP_VERIFY: VERIFY4args opverify; /// case OP_WRITE: WRITE4args opwrite; ///
Shepler, et al. Standards Track [Page 59]
RFC 5662 NFSv4.1 XDR Description January 2010
/// /* Not for NFSv4.1 */ /// case OP_RELEASE_LOCKOWNER: /// RELEASE_LOCKOWNER4args /// oprelease_lockowner; /// /// /* Operations new to NFSv4.1 */ /// case OP_BACKCHANNEL_CTL: /// BACKCHANNEL_CTL4args opbackchannel_ctl; /// /// case OP_BIND_CONN_TO_SESSION: /// BIND_CONN_TO_SESSION4args /// opbind_conn_to_session; /// /// case OP_EXCHANGE_ID: EXCHANGE_ID4args opexchange_id; /// /// case OP_CREATE_SESSION: /// CREATE_SESSION4args opcreate_session; /// /// case OP_DESTROY_SESSION: /// DESTROY_SESSION4args opdestroy_session; /// /// case OP_FREE_STATEID: FREE_STATEID4args opfree_stateid; /// /// case OP_GET_DIR_DELEGATION: /// GET_DIR_DELEGATION4args /// opget_dir_delegation; /// /// case OP_GETDEVICEINFO: GETDEVICEINFO4args opgetdeviceinfo; /// case OP_GETDEVICELIST: GETDEVICELIST4args opgetdevicelist; /// case OP_LAYOUTCOMMIT: LAYOUTCOMMIT4args oplayoutcommit; /// case OP_LAYOUTGET: LAYOUTGET4args oplayoutget; /// case OP_LAYOUTRETURN: LAYOUTRETURN4args oplayoutreturn; /// /// case OP_SECINFO_NO_NAME: /// SECINFO_NO_NAME4args opsecinfo_no_name; /// /// case OP_SEQUENCE: SEQUENCE4args opsequence; /// case OP_SET_SSV: SET_SSV4args opset_ssv; /// case OP_TEST_STATEID: TEST_STATEID4args optest_stateid; /// /// case OP_WANT_DELEGATION: /// WANT_DELEGATION4args opwant_delegation; /// /// case OP_DESTROY_CLIENTID: /// DESTROY_CLIENTID4args /// opdestroy_clientid; /// /// case OP_RECLAIM_COMPLETE:
Shepler, et al. Standards Track [Page 60]
RFC 5662 NFSv4.1 XDR Description January 2010
/// RECLAIM_COMPLETE4args /// opreclaim_complete; /// /// /* Operations not new to NFSv4.1 */ /// case OP_ILLEGAL: void; /// }; /// /// union nfs_resop4 switch (nfs_opnum4 resop) { /// case OP_ACCESS: ACCESS4res opaccess; /// case OP_CLOSE: CLOSE4res opclose; /// case OP_COMMIT: COMMIT4res opcommit; /// case OP_CREATE: CREATE4res opcreate; /// case OP_DELEGPURGE: DELEGPURGE4res opdelegpurge; /// case OP_DELEGRETURN: DELEGRETURN4res opdelegreturn; /// case OP_GETATTR: GETATTR4res opgetattr; /// case OP_GETFH: GETFH4res opgetfh; /// case OP_LINK: LINK4res oplink; /// case OP_LOCK: LOCK4res oplock; /// case OP_LOCKT: LOCKT4res oplockt; /// case OP_LOCKU: LOCKU4res oplocku; /// case OP_LOOKUP: LOOKUP4res oplookup; /// case OP_LOOKUPP: LOOKUPP4res oplookupp; /// case OP_NVERIFY: NVERIFY4res opnverify; /// case OP_OPEN: OPEN4res opopen; /// case OP_OPENATTR: OPENATTR4res opopenattr; /// /* Not for NFSv4.1 */ /// case OP_OPEN_CONFIRM: OPEN_CONFIRM4res opopen_confirm; /// /// case OP_OPEN_DOWNGRADE: /// OPEN_DOWNGRADE4res /// opopen_downgrade; /// /// case OP_PUTFH: PUTFH4res opputfh; /// case OP_PUTPUBFH: PUTPUBFH4res opputpubfh; /// case OP_PUTROOTFH: PUTROOTFH4res opputrootfh; /// case OP_READ: READ4res opread; /// case OP_READDIR: READDIR4res opreaddir; /// case OP_READLINK: READLINK4res opreadlink; /// case OP_REMOVE: REMOVE4res opremove; /// case OP_RENAME: RENAME4res oprename; /// /* Not for NFSv4.1 */ /// case OP_RENEW: RENEW4res oprenew; /// case OP_RESTOREFH: RESTOREFH4res oprestorefh; /// case OP_SAVEFH: SAVEFH4res opsavefh; /// case OP_SECINFO: SECINFO4res opsecinfo; /// case OP_SETATTR: SETATTR4res opsetattr; /// /* Not for NFSv4.1 */ /// case OP_SETCLIENTID: SETCLIENTID4res opsetclientid;
Shepler, et al. Standards Track [Page 61]
RFC 5662 NFSv4.1 XDR Description January 2010
/// /// /* Not for NFSv4.1 */ /// case OP_SETCLIENTID_CONFIRM: /// SETCLIENTID_CONFIRM4res /// opsetclientid_confirm; /// case OP_VERIFY: VERIFY4res opverify; /// case OP_WRITE: WRITE4res opwrite; /// /// /* Not for NFSv4.1 */ /// case OP_RELEASE_LOCKOWNER: /// RELEASE_LOCKOWNER4res /// oprelease_lockowner; /// /// /* Operations new to NFSv4.1 */ /// case OP_BACKCHANNEL_CTL: /// BACKCHANNEL_CTL4res /// opbackchannel_ctl; /// /// case OP_BIND_CONN_TO_SESSION: /// BIND_CONN_TO_SESSION4res /// opbind_conn_to_session; /// /// case OP_EXCHANGE_ID: EXCHANGE_ID4res opexchange_id; /// /// case OP_CREATE_SESSION: /// CREATE_SESSION4res /// opcreate_session; /// /// case OP_DESTROY_SESSION: /// DESTROY_SESSION4res /// opdestroy_session; /// /// case OP_FREE_STATEID: FREE_STATEID4res /// opfree_stateid; /// /// case OP_GET_DIR_DELEGATION: /// GET_DIR_DELEGATION4res /// opget_dir_delegation; /// /// case OP_GETDEVICEINFO: GETDEVICEINFO4res /// opgetdeviceinfo; /// /// case OP_GETDEVICELIST: GETDEVICELIST4res /// opgetdevicelist; /// /// case OP_LAYOUTCOMMIT: LAYOUTCOMMIT4res oplayoutcommit; /// case OP_LAYOUTGET: LAYOUTGET4res oplayoutget; /// case OP_LAYOUTRETURN: LAYOUTRETURN4res oplayoutreturn;
Shepler, et al. Standards Track [Page 62]
RFC 5662 NFSv4.1 XDR Description January 2010
/// /// case OP_SECINFO_NO_NAME: /// SECINFO_NO_NAME4res /// opsecinfo_no_name; /// /// case OP_SEQUENCE: SEQUENCE4res opsequence; /// case OP_SET_SSV: SET_SSV4res opset_ssv; /// case OP_TEST_STATEID: TEST_STATEID4res optest_stateid; /// /// case OP_WANT_DELEGATION: /// WANT_DELEGATION4res /// opwant_delegation; /// /// case OP_DESTROY_CLIENTID: /// DESTROY_CLIENTID4res /// opdestroy_clientid; /// /// case OP_RECLAIM_COMPLETE: /// RECLAIM_COMPLETE4res /// opreclaim_complete; /// /// /* Operations not new to NFSv4.1 */ /// case OP_ILLEGAL: ILLEGAL4res opillegal; /// }; /// /// struct COMPOUND4args { /// utf8str_cs tag; /// uint32_t minorversion; /// nfs_argop4 argarray<>; /// }; /// /// struct COMPOUND4res { /// nfsstat4 status; /// utf8str_cs tag; /// nfs_resop4 resarray<>; /// }; /// /// /// /* /// * Remote file service routines /// */ /// program NFS4_PROGRAM { /// version NFS_V4 { /// void /// NFSPROC4_NULL(void) = 0; /// /// COMPOUND4res /// NFSPROC4_COMPOUND(COMPOUND4args) = 1;
/// OP_CB_NOTIFY = 6, /// OP_CB_PUSH_DELEG = 7, /// OP_CB_RECALL_ANY = 8, /// OP_CB_RECALLABLE_OBJ_AVAIL = 9, /// OP_CB_RECALL_SLOT = 10, /// OP_CB_SEQUENCE = 11, /// OP_CB_WANTS_CANCELLED = 12, /// OP_CB_NOTIFY_LOCK = 13, /// OP_CB_NOTIFY_DEVICEID = 14, /// /// OP_CB_ILLEGAL = 10044 /// }; /// /// union nfs_cb_argop4 switch (unsigned argop) { /// case OP_CB_GETATTR: /// CB_GETATTR4args opcbgetattr; /// case OP_CB_RECALL: /// CB_RECALL4args opcbrecall; /// case OP_CB_LAYOUTRECALL: /// CB_LAYOUTRECALL4args opcblayoutrecall; /// case OP_CB_NOTIFY: /// CB_NOTIFY4args opcbnotify; /// case OP_CB_PUSH_DELEG: /// CB_PUSH_DELEG4args opcbpush_deleg; /// case OP_CB_RECALL_ANY: /// CB_RECALL_ANY4args opcbrecall_any; /// case OP_CB_RECALLABLE_OBJ_AVAIL: /// CB_RECALLABLE_OBJ_AVAIL4args opcbrecallable_obj_avail; /// case OP_CB_RECALL_SLOT: /// CB_RECALL_SLOT4args opcbrecall_slot; /// case OP_CB_SEQUENCE: /// CB_SEQUENCE4args opcbsequence; /// case OP_CB_WANTS_CANCELLED: /// CB_WANTS_CANCELLED4args opcbwants_cancelled; /// case OP_CB_NOTIFY_LOCK: /// CB_NOTIFY_LOCK4args opcbnotify_lock; /// case OP_CB_NOTIFY_DEVICEID: /// CB_NOTIFY_DEVICEID4args opcbnotify_deviceid; /// case OP_CB_ILLEGAL: void; /// }; /// /// union nfs_cb_resop4 switch (unsigned resop) { /// case OP_CB_GETATTR: CB_GETATTR4res opcbgetattr; /// case OP_CB_RECALL: CB_RECALL4res opcbrecall; /// /// /* new NFSv4.1 operations */ /// case OP_CB_LAYOUTRECALL: /// CB_LAYOUTRECALL4res
Shepler, et al. Standards Track [Page 70]
RFC 5662 NFSv4.1 XDR Description January 2010
/// opcblayoutrecall; /// /// case OP_CB_NOTIFY: CB_NOTIFY4res opcbnotify; /// /// case OP_CB_PUSH_DELEG: CB_PUSH_DELEG4res /// opcbpush_deleg; /// /// case OP_CB_RECALL_ANY: CB_RECALL_ANY4res /// opcbrecall_any; /// /// case OP_CB_RECALLABLE_OBJ_AVAIL: /// CB_RECALLABLE_OBJ_AVAIL4res /// opcbrecallable_obj_avail; /// /// case OP_CB_RECALL_SLOT: /// CB_RECALL_SLOT4res /// opcbrecall_slot; /// /// case OP_CB_SEQUENCE: CB_SEQUENCE4res opcbsequence; /// /// case OP_CB_WANTS_CANCELLED: /// CB_WANTS_CANCELLED4res /// opcbwants_cancelled; /// /// case OP_CB_NOTIFY_LOCK: /// CB_NOTIFY_LOCK4res /// opcbnotify_lock; /// /// case OP_CB_NOTIFY_DEVICEID: /// CB_NOTIFY_DEVICEID4res /// opcbnotify_deviceid; /// /// /* Not new operation */ /// case OP_CB_ILLEGAL: CB_ILLEGAL4res opcbillegal; /// }; /// /// /// struct CB_COMPOUND4args { /// utf8str_cs tag; /// uint32_t minorversion; /// uint32_t callback_ident; /// nfs_cb_argop4 argarray<>; /// }; /// /// struct CB_COMPOUND4res { /// nfsstat4 status; /// utf8str_cs tag; /// nfs_cb_resop4 resarray<>;
Shepler, et al. Standards Track [Page 71]
RFC 5662 NFSv4.1 XDR Description January 2010
/// }; /// /// /// /// /* /// * Program number is in the transient range since the client /// * will assign the exact transient program number and provide /// * that to the server via the SETCLIENTID operation. /// */ /// program NFS4_CALLBACK { /// version NFS_CB { /// void /// CB_NULL(void) = 0; /// CB_COMPOUND4res /// CB_COMPOUND(CB_COMPOUND4args) = 1; /// } = 1; /// } = 0x40000000;
[1] Bradner, S., "Key words for use in RFCs to Indicate Requirement Levels", BCP 14, RFC 2119, March 1997.
[2] IETF Trust, "Legal Provisions Relating to IETF Documents", November 2008.
[3] Eisler, M., "XDR: External Data Representation Standard", STD 67, RFC 4506, May 2006.
[4] Shepler, S., Ed., Eisler, M., Ed., and D. Noveck, Ed., "Network File System (NFS) Version 4 Minor Version 1 Protocol", RFC 5661, January 2010.
[5] Shepler, S., Callaghan, B., Robinson, D., Thurlow, R., Beame, C., Eisler, M., and D. Noveck, "Network File System (NFS) version 4 Protocol", RFC 3530, April 2003.