xref: /linux/Documentation/sunrpc/xdr/nfs4_1.x (revision 1260ed77798502de9c98020040d2995008de10cc)
18e1d3227SJeff Layton /*
28e1d3227SJeff Layton  * Copyright (c) 2010 IETF Trust and the persons identified
38e1d3227SJeff Layton  * as the document authors.  All rights reserved.
48e1d3227SJeff Layton  *
58e1d3227SJeff Layton  * The document authors are identified in RFC 3530 and
68e1d3227SJeff Layton  * RFC 5661.
78e1d3227SJeff Layton  *
88e1d3227SJeff Layton  * Redistribution and use in source and binary forms, with
98e1d3227SJeff Layton  * or without modification, are permitted provided that the
108e1d3227SJeff Layton  * following conditions are met:
118e1d3227SJeff Layton  *
128e1d3227SJeff Layton  * - Redistributions of source code must retain the above
138e1d3227SJeff Layton  *   copyright notice, this list of conditions and the
148e1d3227SJeff Layton  *   following disclaimer.
158e1d3227SJeff Layton  *
168e1d3227SJeff Layton  * - Redistributions in binary form must reproduce the above
178e1d3227SJeff Layton  *   copyright notice, this list of conditions and the
188e1d3227SJeff Layton  *   following disclaimer in the documentation and/or other
198e1d3227SJeff Layton  *   materials provided with the distribution.
208e1d3227SJeff Layton  *
218e1d3227SJeff Layton  * - Neither the name of Internet Society, IETF or IETF
228e1d3227SJeff Layton  *   Trust, nor the names of specific contributors, may be
238e1d3227SJeff Layton  *   used to endorse or promote products derived from this
248e1d3227SJeff Layton  *   software without specific prior written permission.
258e1d3227SJeff Layton  *
268e1d3227SJeff Layton  *   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS
278e1d3227SJeff Layton  *   AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED
288e1d3227SJeff Layton  *   WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
298e1d3227SJeff Layton  *   IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
308e1d3227SJeff Layton  *   FOR A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO
318e1d3227SJeff Layton  *   EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
328e1d3227SJeff Layton  *   LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
338e1d3227SJeff Layton  *   EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
348e1d3227SJeff Layton  *   NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
358e1d3227SJeff Layton  *   SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
368e1d3227SJeff Layton  *   INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
378e1d3227SJeff Layton  *   LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
388e1d3227SJeff Layton  *   OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
398e1d3227SJeff Layton  *   IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
408e1d3227SJeff Layton  *   ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
418e1d3227SJeff Layton  */
428e1d3227SJeff Layton 
438e1d3227SJeff Layton pragma header nfs4;
448e1d3227SJeff Layton 
458e1d3227SJeff Layton /*
468e1d3227SJeff Layton  * Basic typedefs for RFC 1832 data type definitions
478e1d3227SJeff Layton  */
488e1d3227SJeff Layton typedef hyper		int64_t;
498e1d3227SJeff Layton typedef unsigned int	uint32_t;
508e1d3227SJeff Layton 
518e1d3227SJeff Layton /*
528e1d3227SJeff Layton  * Basic data types
538e1d3227SJeff Layton  */
548e1d3227SJeff Layton typedef uint32_t	bitmap4<>;
558e1d3227SJeff Layton 
568e1d3227SJeff Layton /*
578e1d3227SJeff Layton  * Timeval
588e1d3227SJeff Layton  */
598e1d3227SJeff Layton struct nfstime4 {
608e1d3227SJeff Layton 	int64_t		seconds;
618e1d3227SJeff Layton 	uint32_t	nseconds;
628e1d3227SJeff Layton };
638e1d3227SJeff Layton 
648e1d3227SJeff Layton 
658e1d3227SJeff Layton /*
668e1d3227SJeff Layton  * The following content was extracted from draft-ietf-nfsv4-delstid
678e1d3227SJeff Layton  */
688e1d3227SJeff Layton 
698e1d3227SJeff Layton typedef bool            fattr4_offline;
708e1d3227SJeff Layton 
718e1d3227SJeff Layton 
728e1d3227SJeff Layton const FATTR4_OFFLINE            = 83;
738e1d3227SJeff Layton 
748e1d3227SJeff Layton 
758e1d3227SJeff Layton struct open_arguments4 {
768e1d3227SJeff Layton   bitmap4  oa_share_access;
778e1d3227SJeff Layton   bitmap4  oa_share_deny;
788e1d3227SJeff Layton   bitmap4  oa_share_access_want;
798e1d3227SJeff Layton   bitmap4  oa_open_claim;
808e1d3227SJeff Layton   bitmap4  oa_create_mode;
818e1d3227SJeff Layton };
828e1d3227SJeff Layton 
838e1d3227SJeff Layton 
848e1d3227SJeff Layton enum open_args_share_access4 {
858e1d3227SJeff Layton    OPEN_ARGS_SHARE_ACCESS_READ  = 1,
868e1d3227SJeff Layton    OPEN_ARGS_SHARE_ACCESS_WRITE = 2,
878e1d3227SJeff Layton    OPEN_ARGS_SHARE_ACCESS_BOTH  = 3
888e1d3227SJeff Layton };
898e1d3227SJeff Layton 
908e1d3227SJeff Layton 
918e1d3227SJeff Layton enum open_args_share_deny4 {
928e1d3227SJeff Layton    OPEN_ARGS_SHARE_DENY_NONE  = 0,
938e1d3227SJeff Layton    OPEN_ARGS_SHARE_DENY_READ  = 1,
948e1d3227SJeff Layton    OPEN_ARGS_SHARE_DENY_WRITE = 2,
958e1d3227SJeff Layton    OPEN_ARGS_SHARE_DENY_BOTH  = 3
968e1d3227SJeff Layton };
978e1d3227SJeff Layton 
988e1d3227SJeff Layton 
998e1d3227SJeff Layton enum open_args_share_access_want4 {
1008e1d3227SJeff Layton    OPEN_ARGS_SHARE_ACCESS_WANT_ANY_DELEG           = 3,
1018e1d3227SJeff Layton    OPEN_ARGS_SHARE_ACCESS_WANT_NO_DELEG            = 4,
1028e1d3227SJeff Layton    OPEN_ARGS_SHARE_ACCESS_WANT_CANCEL              = 5,
1038e1d3227SJeff Layton    OPEN_ARGS_SHARE_ACCESS_WANT_SIGNAL_DELEG_WHEN_RESRC_AVAIL
1048e1d3227SJeff Layton                                                    = 17,
1058e1d3227SJeff Layton    OPEN_ARGS_SHARE_ACCESS_WANT_PUSH_DELEG_WHEN_UNCONTENDED
1068e1d3227SJeff Layton                                                    = 18,
1078e1d3227SJeff Layton    OPEN_ARGS_SHARE_ACCESS_WANT_DELEG_TIMESTAMPS    = 20,
1088e1d3227SJeff Layton    OPEN_ARGS_SHARE_ACCESS_WANT_OPEN_XOR_DELEGATION = 21
1098e1d3227SJeff Layton };
1108e1d3227SJeff Layton 
1118e1d3227SJeff Layton 
1128e1d3227SJeff Layton enum open_args_open_claim4 {
1138e1d3227SJeff Layton    OPEN_ARGS_OPEN_CLAIM_NULL          = 0,
1148e1d3227SJeff Layton    OPEN_ARGS_OPEN_CLAIM_PREVIOUS      = 1,
1158e1d3227SJeff Layton    OPEN_ARGS_OPEN_CLAIM_DELEGATE_CUR  = 2,
1168e1d3227SJeff Layton    OPEN_ARGS_OPEN_CLAIM_DELEGATE_PREV = 3,
1178e1d3227SJeff Layton    OPEN_ARGS_OPEN_CLAIM_FH            = 4,
1188e1d3227SJeff Layton    OPEN_ARGS_OPEN_CLAIM_DELEG_CUR_FH  = 5,
1198e1d3227SJeff Layton    OPEN_ARGS_OPEN_CLAIM_DELEG_PREV_FH = 6
1208e1d3227SJeff Layton };
1218e1d3227SJeff Layton 
1228e1d3227SJeff Layton 
1238e1d3227SJeff Layton enum open_args_createmode4 {
1248e1d3227SJeff Layton    OPEN_ARGS_CREATEMODE_UNCHECKED4     = 0,
1258e1d3227SJeff Layton    OPEN_ARGS_CREATE_MODE_GUARDED       = 1,
1268e1d3227SJeff Layton    OPEN_ARGS_CREATEMODE_EXCLUSIVE4     = 2,
1278e1d3227SJeff Layton    OPEN_ARGS_CREATE_MODE_EXCLUSIVE4_1  = 3
1288e1d3227SJeff Layton };
1298e1d3227SJeff Layton 
1308e1d3227SJeff Layton 
1318e1d3227SJeff Layton typedef open_arguments4 fattr4_open_arguments;
1328e1d3227SJeff Layton pragma public fattr4_open_arguments;
1338e1d3227SJeff Layton 
1348e1d3227SJeff Layton 
1358e1d3227SJeff Layton %/*
1368e1d3227SJeff Layton % * Determine what OPEN supports.
1378e1d3227SJeff Layton % */
1388e1d3227SJeff Layton const FATTR4_OPEN_ARGUMENTS     = 86;
1398e1d3227SJeff Layton 
1408e1d3227SJeff Layton 
1418e1d3227SJeff Layton 
1428e1d3227SJeff Layton 
1438e1d3227SJeff Layton const OPEN4_RESULT_NO_OPEN_STATEID = 0x00000010;
1448e1d3227SJeff Layton 
1458e1d3227SJeff Layton 
1468e1d3227SJeff Layton /*
1478e1d3227SJeff Layton  * attributes for the delegation times being
1488e1d3227SJeff Layton  * cached and served by the "client"
1498e1d3227SJeff Layton  */
1508e1d3227SJeff Layton typedef nfstime4        fattr4_time_deleg_access;
1518e1d3227SJeff Layton typedef nfstime4        fattr4_time_deleg_modify;
1528e1d3227SJeff Layton pragma public 		fattr4_time_deleg_access;
1538e1d3227SJeff Layton pragma public		fattr4_time_deleg_modify;
1548e1d3227SJeff Layton 
1558e1d3227SJeff Layton 
1568e1d3227SJeff Layton %/*
1578e1d3227SJeff Layton % * New RECOMMENDED Attribute for
1588e1d3227SJeff Layton % * delegation caching of times
1598e1d3227SJeff Layton % */
1608e1d3227SJeff Layton const FATTR4_TIME_DELEG_ACCESS  = 84;
1618e1d3227SJeff Layton const FATTR4_TIME_DELEG_MODIFY  = 85;
1628e1d3227SJeff Layton 
163*c9c99a33SJeff Layton 
164*c9c99a33SJeff Layton 
165*c9c99a33SJeff Layton /* new flags for share_access field of OPEN4args */
166*c9c99a33SJeff Layton const OPEN4_SHARE_ACCESS_WANT_DELEG_MASK        = 0xFF00;
167*c9c99a33SJeff Layton const OPEN4_SHARE_ACCESS_WANT_NO_PREFERENCE     = 0x0000;
168*c9c99a33SJeff Layton const OPEN4_SHARE_ACCESS_WANT_READ_DELEG        = 0x0100;
169*c9c99a33SJeff Layton const OPEN4_SHARE_ACCESS_WANT_WRITE_DELEG       = 0x0200;
170*c9c99a33SJeff Layton const OPEN4_SHARE_ACCESS_WANT_ANY_DELEG         = 0x0300;
171*c9c99a33SJeff Layton const OPEN4_SHARE_ACCESS_WANT_NO_DELEG          = 0x0400;
172*c9c99a33SJeff Layton const OPEN4_SHARE_ACCESS_WANT_CANCEL            = 0x0500;
173*c9c99a33SJeff Layton 
174*c9c99a33SJeff Layton const OPEN4_SHARE_ACCESS_WANT_SIGNAL_DELEG_WHEN_RESRC_AVAIL = 0x10000;
175*c9c99a33SJeff Layton const OPEN4_SHARE_ACCESS_WANT_PUSH_DELEG_WHEN_UNCONTENDED = 0x20000;
1768e1d3227SJeff Layton const OPEN4_SHARE_ACCESS_WANT_DELEG_TIMESTAMPS = 0x100000;
177*c9c99a33SJeff Layton const OPEN4_SHARE_ACCESS_WANT_OPEN_XOR_DELEGATION = 0x200000;
1788e1d3227SJeff Layton 
1798dfbea8bSJeff Layton enum open_delegation_type4 {
1808dfbea8bSJeff Layton        OPEN_DELEGATE_NONE                  = 0,
1818dfbea8bSJeff Layton        OPEN_DELEGATE_READ                  = 1,
1828dfbea8bSJeff Layton        OPEN_DELEGATE_WRITE                 = 2,
1838dfbea8bSJeff Layton        OPEN_DELEGATE_NONE_EXT              = 3, /* new to v4.1 */
1848dfbea8bSJeff Layton        OPEN_DELEGATE_READ_ATTRS_DELEG      = 4,
1858dfbea8bSJeff Layton        OPEN_DELEGATE_WRITE_ATTRS_DELEG     = 5
1868dfbea8bSJeff Layton };
187