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