xref: /linux/Documentation/sunrpc/xdr/nfs4_1.x (revision be1ca3ee8f97067fee87fda73ea5959d5ab75bbf)
1 /*
2  * Copyright (c) 2010 IETF Trust and the persons identified
3  * as the document authors.  All rights reserved.
4  *
5  * The document authors are identified in RFC 3530 and
6  * RFC 5661.
7  *
8  * Redistribution and use in source and binary forms, with
9  * or without modification, are permitted provided that the
10  * following conditions are met:
11  *
12  * - Redistributions of source code must retain the above
13  *   copyright notice, this list of conditions and the
14  *   following disclaimer.
15  *
16  * - Redistributions in binary form must reproduce the above
17  *   copyright notice, this list of conditions and the
18  *   following disclaimer in the documentation and/or other
19  *   materials provided with the distribution.
20  *
21  * - Neither the name of Internet Society, IETF or IETF
22  *   Trust, nor the names of specific contributors, may be
23  *   used to endorse or promote products derived from this
24  *   software without specific prior written permission.
25  *
26  *   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS
27  *   AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED
28  *   WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
29  *   IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
30  *   FOR A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO
31  *   EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
32  *   LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
33  *   EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
34  *   NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
35  *   SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
36  *   INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
37  *   LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
38  *   OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
39  *   IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
40  *   ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
41  */
42 
43 pragma header nfs4;
44 
45 /*
46  * Basic typedefs for RFC 1832 data type definitions
47  */
48 typedef hyper		int64_t;
49 typedef unsigned int	uint32_t;
50 
51 /*
52  * Basic data types
53  */
54 typedef uint32_t	bitmap4<>;
55 
56 typedef opaque		utf8string<>;
57 typedef utf8string	utf8str_cis;
58 typedef utf8string	utf8str_cs;
59 typedef utf8string	utf8str_mixed;
60 
61 /*
62  * Timeval
63  */
64 struct nfstime4 {
65 	int64_t		seconds;
66 	uint32_t	nseconds;
67 };
68 
69 
70 /*
71  * The following content was extracted from draft-ietf-nfsv4-delstid
72  */
73 
74 typedef bool            fattr4_offline;
75 
76 
77 const FATTR4_OFFLINE            = 83;
78 
79 
80 struct open_arguments4 {
81   bitmap4  oa_share_access;
82   bitmap4  oa_share_deny;
83   bitmap4  oa_share_access_want;
84   bitmap4  oa_open_claim;
85   bitmap4  oa_create_mode;
86 };
87 
88 
89 enum open_args_share_access4 {
90    OPEN_ARGS_SHARE_ACCESS_READ  = 1,
91    OPEN_ARGS_SHARE_ACCESS_WRITE = 2,
92    OPEN_ARGS_SHARE_ACCESS_BOTH  = 3
93 };
94 
95 
96 enum open_args_share_deny4 {
97    OPEN_ARGS_SHARE_DENY_NONE  = 0,
98    OPEN_ARGS_SHARE_DENY_READ  = 1,
99    OPEN_ARGS_SHARE_DENY_WRITE = 2,
100    OPEN_ARGS_SHARE_DENY_BOTH  = 3
101 };
102 
103 
104 enum open_args_share_access_want4 {
105    OPEN_ARGS_SHARE_ACCESS_WANT_ANY_DELEG           = 3,
106    OPEN_ARGS_SHARE_ACCESS_WANT_NO_DELEG            = 4,
107    OPEN_ARGS_SHARE_ACCESS_WANT_CANCEL              = 5,
108    OPEN_ARGS_SHARE_ACCESS_WANT_SIGNAL_DELEG_WHEN_RESRC_AVAIL
109                                                    = 17,
110    OPEN_ARGS_SHARE_ACCESS_WANT_PUSH_DELEG_WHEN_UNCONTENDED
111                                                    = 18,
112    OPEN_ARGS_SHARE_ACCESS_WANT_DELEG_TIMESTAMPS    = 20,
113    OPEN_ARGS_SHARE_ACCESS_WANT_OPEN_XOR_DELEGATION = 21
114 };
115 
116 
117 enum open_args_open_claim4 {
118    OPEN_ARGS_OPEN_CLAIM_NULL          = 0,
119    OPEN_ARGS_OPEN_CLAIM_PREVIOUS      = 1,
120    OPEN_ARGS_OPEN_CLAIM_DELEGATE_CUR  = 2,
121    OPEN_ARGS_OPEN_CLAIM_DELEGATE_PREV = 3,
122    OPEN_ARGS_OPEN_CLAIM_FH            = 4,
123    OPEN_ARGS_OPEN_CLAIM_DELEG_CUR_FH  = 5,
124    OPEN_ARGS_OPEN_CLAIM_DELEG_PREV_FH = 6
125 };
126 
127 
128 enum open_args_createmode4 {
129    OPEN_ARGS_CREATEMODE_UNCHECKED4     = 0,
130    OPEN_ARGS_CREATE_MODE_GUARDED       = 1,
131    OPEN_ARGS_CREATEMODE_EXCLUSIVE4     = 2,
132    OPEN_ARGS_CREATE_MODE_EXCLUSIVE4_1  = 3
133 };
134 
135 
136 typedef open_arguments4 fattr4_open_arguments;
137 pragma public fattr4_open_arguments;
138 
139 
140 %/*
141 % * Determine what OPEN supports.
142 % */
143 const FATTR4_OPEN_ARGUMENTS     = 86;
144 
145 
146 
147 
148 const OPEN4_RESULT_NO_OPEN_STATEID = 0x00000010;
149 
150 
151 /*
152  * attributes for the delegation times being
153  * cached and served by the "client"
154  */
155 typedef nfstime4        fattr4_time_deleg_access;
156 typedef nfstime4        fattr4_time_deleg_modify;
157 pragma public 		fattr4_time_deleg_access;
158 pragma public		fattr4_time_deleg_modify;
159 
160 
161 %/*
162 % * New RECOMMENDED Attribute for
163 % * delegation caching of times
164 % */
165 const FATTR4_TIME_DELEG_ACCESS  = 84;
166 const FATTR4_TIME_DELEG_MODIFY  = 85;
167 
168 
169 
170 /* new flags for share_access field of OPEN4args */
171 const OPEN4_SHARE_ACCESS_WANT_DELEG_MASK        = 0xFF00;
172 const OPEN4_SHARE_ACCESS_WANT_NO_PREFERENCE     = 0x0000;
173 const OPEN4_SHARE_ACCESS_WANT_READ_DELEG        = 0x0100;
174 const OPEN4_SHARE_ACCESS_WANT_WRITE_DELEG       = 0x0200;
175 const OPEN4_SHARE_ACCESS_WANT_ANY_DELEG         = 0x0300;
176 const OPEN4_SHARE_ACCESS_WANT_NO_DELEG          = 0x0400;
177 const OPEN4_SHARE_ACCESS_WANT_CANCEL            = 0x0500;
178 
179 const OPEN4_SHARE_ACCESS_WANT_SIGNAL_DELEG_WHEN_RESRC_AVAIL = 0x10000;
180 const OPEN4_SHARE_ACCESS_WANT_PUSH_DELEG_WHEN_UNCONTENDED = 0x20000;
181 const OPEN4_SHARE_ACCESS_WANT_DELEG_TIMESTAMPS = 0x100000;
182 const OPEN4_SHARE_ACCESS_WANT_OPEN_XOR_DELEGATION = 0x200000;
183 
184 enum open_delegation_type4 {
185        OPEN_DELEGATE_NONE                  = 0,
186        OPEN_DELEGATE_READ                  = 1,
187        OPEN_DELEGATE_WRITE                 = 2,
188        OPEN_DELEGATE_NONE_EXT              = 3, /* new to v4.1 */
189        OPEN_DELEGATE_READ_ATTRS_DELEG      = 4,
190        OPEN_DELEGATE_WRITE_ATTRS_DELEG     = 5
191 };
192 
193 
194 /*
195  * The following content was extracted from draft-ietf-nfsv4-posix-acls
196  */
197 
198 enum aclmodel4 {
199 	ACL_MODEL_NFS4		= 1,
200 	ACL_MODEL_POSIX_DRAFT	= 2,
201 	ACL_MODEL_NONE		= 3
202 };
203 pragma public aclmodel4;
204 
205 enum aclscope4 {
206 	ACL_SCOPE_FILE_OBJECT	= 1,
207 	ACL_SCOPE_FILE_SYSTEM	= 2,
208 	ACL_SCOPE_SERVER	= 3
209 };
210 pragma public aclscope4;
211 
212 enum posixacetag4 {
213 	POSIXACE4_TAG_USER_OBJ	= 1,
214 	POSIXACE4_TAG_USER	= 2,
215 	POSIXACE4_TAG_GROUP_OBJ	= 3,
216 	POSIXACE4_TAG_GROUP	= 4,
217 	POSIXACE4_TAG_MASK	= 5,
218 	POSIXACE4_TAG_OTHER	= 6
219 };
220 pragma public posixacetag4;
221 
222 typedef uint32_t	posixaceperm4;
223 pragma public posixaceperm4;
224 
225 /* Bit definitions for posixaceperm4. */
226 const POSIXACE4_PERM_EXECUTE	= 0x00000001;
227 const POSIXACE4_PERM_WRITE	= 0x00000002;
228 const POSIXACE4_PERM_READ	= 0x00000004;
229 
230 struct posixace4 {
231 	posixacetag4		tag;
232 	posixaceperm4		perm;
233 	utf8str_mixed		who;
234 };
235 
236 typedef aclmodel4	fattr4_acl_trueform;
237 typedef aclscope4	fattr4_acl_trueform_scope;
238 typedef posixace4	fattr4_posix_default_acl<>;
239 typedef posixace4	fattr4_posix_access_acl<>;
240 
241 %/*
242 % * New for POSIX ACL extension
243 % */
244 const FATTR4_ACL_TRUEFORM	= 89;
245 const FATTR4_ACL_TRUEFORM_SCOPE	= 90;
246 const FATTR4_POSIX_DEFAULT_ACL	= 91;
247 const FATTR4_POSIX_ACCESS_ACL	= 92;
248