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