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 /*
57  * Timeval
58  */
59 struct nfstime4 {
60 	int64_t		seconds;
61 	uint32_t	nseconds;
62 };
63 
64 
65 /*
66  * The following content was extracted from draft-ietf-nfsv4-delstid
67  */
68 
69 typedef bool            fattr4_offline;
70 
71 
72 const FATTR4_OFFLINE            = 83;
73 
74 
75 struct open_arguments4 {
76   bitmap4  oa_share_access;
77   bitmap4  oa_share_deny;
78   bitmap4  oa_share_access_want;
79   bitmap4  oa_open_claim;
80   bitmap4  oa_create_mode;
81 };
82 
83 
84 enum open_args_share_access4 {
85    OPEN_ARGS_SHARE_ACCESS_READ  = 1,
86    OPEN_ARGS_SHARE_ACCESS_WRITE = 2,
87    OPEN_ARGS_SHARE_ACCESS_BOTH  = 3
88 };
89 
90 
91 enum open_args_share_deny4 {
92    OPEN_ARGS_SHARE_DENY_NONE  = 0,
93    OPEN_ARGS_SHARE_DENY_READ  = 1,
94    OPEN_ARGS_SHARE_DENY_WRITE = 2,
95    OPEN_ARGS_SHARE_DENY_BOTH  = 3
96 };
97 
98 
99 enum open_args_share_access_want4 {
100    OPEN_ARGS_SHARE_ACCESS_WANT_ANY_DELEG           = 3,
101    OPEN_ARGS_SHARE_ACCESS_WANT_NO_DELEG            = 4,
102    OPEN_ARGS_SHARE_ACCESS_WANT_CANCEL              = 5,
103    OPEN_ARGS_SHARE_ACCESS_WANT_SIGNAL_DELEG_WHEN_RESRC_AVAIL
104                                                    = 17,
105    OPEN_ARGS_SHARE_ACCESS_WANT_PUSH_DELEG_WHEN_UNCONTENDED
106                                                    = 18,
107    OPEN_ARGS_SHARE_ACCESS_WANT_DELEG_TIMESTAMPS    = 20,
108    OPEN_ARGS_SHARE_ACCESS_WANT_OPEN_XOR_DELEGATION = 21
109 };
110 
111 
112 enum open_args_open_claim4 {
113    OPEN_ARGS_OPEN_CLAIM_NULL          = 0,
114    OPEN_ARGS_OPEN_CLAIM_PREVIOUS      = 1,
115    OPEN_ARGS_OPEN_CLAIM_DELEGATE_CUR  = 2,
116    OPEN_ARGS_OPEN_CLAIM_DELEGATE_PREV = 3,
117    OPEN_ARGS_OPEN_CLAIM_FH            = 4,
118    OPEN_ARGS_OPEN_CLAIM_DELEG_CUR_FH  = 5,
119    OPEN_ARGS_OPEN_CLAIM_DELEG_PREV_FH = 6
120 };
121 
122 
123 enum open_args_createmode4 {
124    OPEN_ARGS_CREATEMODE_UNCHECKED4     = 0,
125    OPEN_ARGS_CREATE_MODE_GUARDED       = 1,
126    OPEN_ARGS_CREATEMODE_EXCLUSIVE4     = 2,
127    OPEN_ARGS_CREATE_MODE_EXCLUSIVE4_1  = 3
128 };
129 
130 
131 typedef open_arguments4 fattr4_open_arguments;
132 pragma public fattr4_open_arguments;
133 
134 
135 %/*
136 % * Determine what OPEN supports.
137 % */
138 const FATTR4_OPEN_ARGUMENTS     = 86;
139 
140 
141 
142 
143 const OPEN4_RESULT_NO_OPEN_STATEID = 0x00000010;
144 
145 
146 /*
147  * attributes for the delegation times being
148  * cached and served by the "client"
149  */
150 typedef nfstime4        fattr4_time_deleg_access;
151 typedef nfstime4        fattr4_time_deleg_modify;
152 pragma public 		fattr4_time_deleg_access;
153 pragma public		fattr4_time_deleg_modify;
154 
155 
156 %/*
157 % * New RECOMMENDED Attribute for
158 % * delegation caching of times
159 % */
160 const FATTR4_TIME_DELEG_ACCESS  = 84;
161 const FATTR4_TIME_DELEG_MODIFY  = 85;
162 
163 
164 
165 /* new flags for share_access field of OPEN4args */
166 const OPEN4_SHARE_ACCESS_WANT_DELEG_MASK        = 0xFF00;
167 const OPEN4_SHARE_ACCESS_WANT_NO_PREFERENCE     = 0x0000;
168 const OPEN4_SHARE_ACCESS_WANT_READ_DELEG        = 0x0100;
169 const OPEN4_SHARE_ACCESS_WANT_WRITE_DELEG       = 0x0200;
170 const OPEN4_SHARE_ACCESS_WANT_ANY_DELEG         = 0x0300;
171 const OPEN4_SHARE_ACCESS_WANT_NO_DELEG          = 0x0400;
172 const OPEN4_SHARE_ACCESS_WANT_CANCEL            = 0x0500;
173 
174 const OPEN4_SHARE_ACCESS_WANT_SIGNAL_DELEG_WHEN_RESRC_AVAIL = 0x10000;
175 const OPEN4_SHARE_ACCESS_WANT_PUSH_DELEG_WHEN_UNCONTENDED = 0x20000;
176 const OPEN4_SHARE_ACCESS_WANT_DELEG_TIMESTAMPS = 0x100000;
177 const OPEN4_SHARE_ACCESS_WANT_OPEN_XOR_DELEGATION = 0x200000;
178 
179 enum open_delegation_type4 {
180        OPEN_DELEGATE_NONE                  = 0,
181        OPEN_DELEGATE_READ                  = 1,
182        OPEN_DELEGATE_WRITE                 = 2,
183        OPEN_DELEGATE_NONE_EXT              = 3, /* new to v4.1 */
184        OPEN_DELEGATE_READ_ATTRS_DELEG      = 4,
185        OPEN_DELEGATE_WRITE_ATTRS_DELEG     = 5
186 };
187