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