xref: /titanic_51/usr/src/uts/common/nfs/nfs4_attr.h (revision 2f172c55ef76964744bc62b4500ece87f3089b4d)
17c478bd9Sstevel@tonic-gate /*
27c478bd9Sstevel@tonic-gate  * CDDL HEADER START
37c478bd9Sstevel@tonic-gate  *
47c478bd9Sstevel@tonic-gate  * The contents of this file are subject to the terms of the
5*2f172c55SRobert Thurlow  * Common Development and Distribution License (the "License").
6*2f172c55SRobert Thurlow  * You may not use this file except in compliance with the License.
77c478bd9Sstevel@tonic-gate  *
87c478bd9Sstevel@tonic-gate  * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
97c478bd9Sstevel@tonic-gate  * or http://www.opensolaris.org/os/licensing.
107c478bd9Sstevel@tonic-gate  * See the License for the specific language governing permissions
117c478bd9Sstevel@tonic-gate  * and limitations under the License.
127c478bd9Sstevel@tonic-gate  *
137c478bd9Sstevel@tonic-gate  * When distributing Covered Code, include this CDDL HEADER in each
147c478bd9Sstevel@tonic-gate  * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
157c478bd9Sstevel@tonic-gate  * If applicable, add the following below this CDDL HEADER, with the
167c478bd9Sstevel@tonic-gate  * fields enclosed by brackets "[]" replaced with your own identifying
177c478bd9Sstevel@tonic-gate  * information: Portions Copyright [yyyy] [name of copyright owner]
187c478bd9Sstevel@tonic-gate  *
197c478bd9Sstevel@tonic-gate  * CDDL HEADER END
207c478bd9Sstevel@tonic-gate  */
217c478bd9Sstevel@tonic-gate /*
22*2f172c55SRobert Thurlow  * Copyright 2009 Sun Microsystems, Inc.  All rights reserved.
237c478bd9Sstevel@tonic-gate  * Use is subject to license terms.
247c478bd9Sstevel@tonic-gate  */
257c478bd9Sstevel@tonic-gate 
267c478bd9Sstevel@tonic-gate #ifndef _NFS4_ATTR_H
277c478bd9Sstevel@tonic-gate #define	_NFS4_ATTR_H
287c478bd9Sstevel@tonic-gate 
297c478bd9Sstevel@tonic-gate #ifdef	__cplusplus
307c478bd9Sstevel@tonic-gate extern "C" {
317c478bd9Sstevel@tonic-gate #endif
327c478bd9Sstevel@tonic-gate 
337c478bd9Sstevel@tonic-gate #define	FATTR4_WORD0	32
347c478bd9Sstevel@tonic-gate #define	FATTR4_WORD1	0
357c478bd9Sstevel@tonic-gate 
367c478bd9Sstevel@tonic-gate /*
377c478bd9Sstevel@tonic-gate  * Attributes
387c478bd9Sstevel@tonic-gate  */
397c478bd9Sstevel@tonic-gate #define	FATTR4_SUPPORTED_ATTRS_MASK	(1ULL << (FATTR4_WORD0 + 0))
407c478bd9Sstevel@tonic-gate #define	FATTR4_TYPE_MASK		(1ULL << (FATTR4_WORD0 + 1))
417c478bd9Sstevel@tonic-gate #define	FATTR4_FH_EXPIRE_TYPE_MASK	(1ULL << (FATTR4_WORD0 + 2))
427c478bd9Sstevel@tonic-gate #define	FATTR4_CHANGE_MASK		(1ULL << (FATTR4_WORD0 + 3))
437c478bd9Sstevel@tonic-gate #define	FATTR4_SIZE_MASK		(1ULL << (FATTR4_WORD0 + 4))
447c478bd9Sstevel@tonic-gate #define	FATTR4_LINK_SUPPORT_MASK	(1ULL << (FATTR4_WORD0 + 5))
457c478bd9Sstevel@tonic-gate #define	FATTR4_SYMLINK_SUPPORT_MASK	(1ULL << (FATTR4_WORD0 + 6))
467c478bd9Sstevel@tonic-gate #define	FATTR4_NAMED_ATTR_MASK		(1ULL << (FATTR4_WORD0 + 7))
477c478bd9Sstevel@tonic-gate #define	FATTR4_FSID_MASK		(1ULL << (FATTR4_WORD0 + 8))
487c478bd9Sstevel@tonic-gate #define	FATTR4_UNIQUE_HANDLES_MASK	(1ULL << (FATTR4_WORD0 + 9))
497c478bd9Sstevel@tonic-gate #define	FATTR4_LEASE_TIME_MASK		(1ULL << (FATTR4_WORD0 + 10))
507c478bd9Sstevel@tonic-gate #define	FATTR4_RDATTR_ERROR_MASK	(1ULL << (FATTR4_WORD0 + 11))
517c478bd9Sstevel@tonic-gate #define	FATTR4_ACL_MASK			(1ULL << (FATTR4_WORD0 + 12))
527c478bd9Sstevel@tonic-gate #define	FATTR4_ACLSUPPORT_MASK		(1ULL << (FATTR4_WORD0 + 13))
537c478bd9Sstevel@tonic-gate #define	FATTR4_ARCHIVE_MASK		(1ULL << (FATTR4_WORD0 + 14))
547c478bd9Sstevel@tonic-gate #define	FATTR4_CANSETTIME_MASK		(1ULL << (FATTR4_WORD0 + 15))
557c478bd9Sstevel@tonic-gate #define	FATTR4_CASE_INSENSITIVE_MASK	(1ULL << (FATTR4_WORD0 + 16))
567c478bd9Sstevel@tonic-gate #define	FATTR4_CASE_PRESERVING_MASK	(1ULL << (FATTR4_WORD0 + 17))
577c478bd9Sstevel@tonic-gate #define	FATTR4_CHOWN_RESTRICTED_MASK	(1ULL << (FATTR4_WORD0 + 18))
587c478bd9Sstevel@tonic-gate #define	FATTR4_FILEHANDLE_MASK		(1ULL << (FATTR4_WORD0 + 19))
597c478bd9Sstevel@tonic-gate #define	FATTR4_FILEID_MASK		(1ULL << (FATTR4_WORD0 + 20))
607c478bd9Sstevel@tonic-gate #define	FATTR4_FILES_AVAIL_MASK		(1ULL << (FATTR4_WORD0 + 21))
617c478bd9Sstevel@tonic-gate #define	FATTR4_FILES_FREE_MASK		(1ULL << (FATTR4_WORD0 + 22))
627c478bd9Sstevel@tonic-gate #define	FATTR4_FILES_TOTAL_MASK		(1ULL << (FATTR4_WORD0 + 23))
637c478bd9Sstevel@tonic-gate #define	FATTR4_FS_LOCATIONS_MASK	(1ULL << (FATTR4_WORD0 + 24))
647c478bd9Sstevel@tonic-gate #define	FATTR4_HIDDEN_MASK		(1ULL << (FATTR4_WORD0 + 25))
657c478bd9Sstevel@tonic-gate #define	FATTR4_HOMOGENEOUS_MASK		(1ULL << (FATTR4_WORD0 + 26))
667c478bd9Sstevel@tonic-gate #define	FATTR4_MAXFILESIZE_MASK		(1ULL << (FATTR4_WORD0 + 27))
677c478bd9Sstevel@tonic-gate #define	FATTR4_MAXLINK_MASK		(1ULL << (FATTR4_WORD0 + 28))
687c478bd9Sstevel@tonic-gate #define	FATTR4_MAXNAME_MASK		(1ULL << (FATTR4_WORD0 + 29))
697c478bd9Sstevel@tonic-gate #define	FATTR4_MAXREAD_MASK		(1ULL << (FATTR4_WORD0 + 30))
707c478bd9Sstevel@tonic-gate #define	FATTR4_MAXWRITE_MASK		(1ULL << (FATTR4_WORD0 + 31))
717c478bd9Sstevel@tonic-gate 
727c478bd9Sstevel@tonic-gate #define	FATTR4_MIMETYPE_MASK		(1ULL << (FATTR4_WORD1 + 0))
737c478bd9Sstevel@tonic-gate #define	FATTR4_MODE_MASK		(1ULL << (FATTR4_WORD1 + 1))
747c478bd9Sstevel@tonic-gate #define	FATTR4_NO_TRUNC_MASK		(1ULL << (FATTR4_WORD1 + 2))
757c478bd9Sstevel@tonic-gate #define	FATTR4_NUMLINKS_MASK		(1ULL << (FATTR4_WORD1 + 3))
767c478bd9Sstevel@tonic-gate #define	FATTR4_OWNER_MASK		(1ULL << (FATTR4_WORD1 + 4))
777c478bd9Sstevel@tonic-gate #define	FATTR4_OWNER_GROUP_MASK		(1ULL << (FATTR4_WORD1 + 5))
787c478bd9Sstevel@tonic-gate #define	FATTR4_QUOTA_AVAIL_HARD_MASK	(1ULL << (FATTR4_WORD1 + 6))
797c478bd9Sstevel@tonic-gate #define	FATTR4_QUOTA_AVAIL_SOFT_MASK	(1ULL << (FATTR4_WORD1 + 7))
807c478bd9Sstevel@tonic-gate #define	FATTR4_QUOTA_USED_MASK		(1ULL << (FATTR4_WORD1 + 8))
817c478bd9Sstevel@tonic-gate #define	FATTR4_RAWDEV_MASK		(1ULL << (FATTR4_WORD1 + 9))
827c478bd9Sstevel@tonic-gate #define	FATTR4_SPACE_AVAIL_MASK		(1ULL << (FATTR4_WORD1 + 10))
837c478bd9Sstevel@tonic-gate #define	FATTR4_SPACE_FREE_MASK		(1ULL << (FATTR4_WORD1 + 11))
847c478bd9Sstevel@tonic-gate #define	FATTR4_SPACE_TOTAL_MASK		(1ULL << (FATTR4_WORD1 + 12))
857c478bd9Sstevel@tonic-gate #define	FATTR4_SPACE_USED_MASK		(1ULL << (FATTR4_WORD1 + 13))
867c478bd9Sstevel@tonic-gate #define	FATTR4_SYSTEM_MASK		(1ULL << (FATTR4_WORD1 + 14))
877c478bd9Sstevel@tonic-gate #define	FATTR4_TIME_ACCESS_MASK		(1ULL << (FATTR4_WORD1 + 15))
887c478bd9Sstevel@tonic-gate #define	FATTR4_TIME_ACCESS_SET_MASK	(1ULL << (FATTR4_WORD1 + 16))
897c478bd9Sstevel@tonic-gate #define	FATTR4_TIME_BACKUP_MASK		(1ULL << (FATTR4_WORD1 + 17))
907c478bd9Sstevel@tonic-gate #define	FATTR4_TIME_CREATE_MASK		(1ULL << (FATTR4_WORD1 + 18))
917c478bd9Sstevel@tonic-gate #define	FATTR4_TIME_DELTA_MASK		(1ULL << (FATTR4_WORD1 + 19))
927c478bd9Sstevel@tonic-gate #define	FATTR4_TIME_METADATA_MASK	(1ULL << (FATTR4_WORD1 + 20))
937c478bd9Sstevel@tonic-gate #define	FATTR4_TIME_MODIFY_MASK		(1ULL << (FATTR4_WORD1 + 21))
947c478bd9Sstevel@tonic-gate #define	FATTR4_TIME_MODIFY_SET_MASK	(1ULL << (FATTR4_WORD1 + 22))
957c478bd9Sstevel@tonic-gate #define	FATTR4_MOUNTED_ON_FILEID_MASK	(1ULL << (FATTR4_WORD1 + 23))
967c478bd9Sstevel@tonic-gate 
977c478bd9Sstevel@tonic-gate /*
987c478bd9Sstevel@tonic-gate  * Common bitmap4 of file attributes to be gathered
997c478bd9Sstevel@tonic-gate  */
1007c478bd9Sstevel@tonic-gate #define	NFS4_NTOV_ATTR_MASK (		\
1017c478bd9Sstevel@tonic-gate 	FATTR4_TYPE_MASK |		\
1027c478bd9Sstevel@tonic-gate 	FATTR4_CHANGE_MASK |		\
1037c478bd9Sstevel@tonic-gate 	FATTR4_SIZE_MASK |		\
1047c478bd9Sstevel@tonic-gate 	FATTR4_FSID_MASK |		\
1057c478bd9Sstevel@tonic-gate 	FATTR4_FILEID_MASK |		\
1067c478bd9Sstevel@tonic-gate 	FATTR4_MODE_MASK |		\
1077c478bd9Sstevel@tonic-gate 	FATTR4_OWNER_MASK |		\
1087c478bd9Sstevel@tonic-gate 	FATTR4_OWNER_GROUP_MASK |	\
1097c478bd9Sstevel@tonic-gate 	FATTR4_NUMLINKS_MASK |		\
1107c478bd9Sstevel@tonic-gate 	FATTR4_TIME_ACCESS_MASK |	\
1117c478bd9Sstevel@tonic-gate 	FATTR4_TIME_MODIFY_MASK |	\
1127c478bd9Sstevel@tonic-gate 	FATTR4_TIME_METADATA_MASK |	\
1137c478bd9Sstevel@tonic-gate 	FATTR4_RAWDEV_MASK |		\
1147c478bd9Sstevel@tonic-gate 	FATTR4_SPACE_USED_MASK |	\
1157c478bd9Sstevel@tonic-gate 	FATTR4_MOUNTED_ON_FILEID_MASK)
1167c478bd9Sstevel@tonic-gate 
1177c478bd9Sstevel@tonic-gate #define	NFS4_VATTR_MASK (		\
1187c478bd9Sstevel@tonic-gate 	FATTR4_TYPE_MASK |		\
1197c478bd9Sstevel@tonic-gate 	FATTR4_CHANGE_MASK |		\
1207c478bd9Sstevel@tonic-gate 	FATTR4_SIZE_MASK |		\
1217c478bd9Sstevel@tonic-gate 	FATTR4_FSID_MASK |		\
1227c478bd9Sstevel@tonic-gate 	FATTR4_FILEID_MASK |		\
1237c478bd9Sstevel@tonic-gate 	FATTR4_MODE_MASK |		\
1247c478bd9Sstevel@tonic-gate 	FATTR4_OWNER_MASK |		\
1257c478bd9Sstevel@tonic-gate 	FATTR4_OWNER_GROUP_MASK |	\
1267c478bd9Sstevel@tonic-gate 	FATTR4_NUMLINKS_MASK |		\
1277c478bd9Sstevel@tonic-gate 	FATTR4_TIME_ACCESS_MASK |	\
1287c478bd9Sstevel@tonic-gate 	FATTR4_TIME_MODIFY_MASK |	\
1297c478bd9Sstevel@tonic-gate 	FATTR4_TIME_METADATA_MASK |	\
1307c478bd9Sstevel@tonic-gate 	FATTR4_RAWDEV_MASK |		\
1317c478bd9Sstevel@tonic-gate 	FATTR4_SPACE_USED_MASK |	\
1327c478bd9Sstevel@tonic-gate 	FATTR4_MOUNTED_ON_FILEID_MASK)
1337c478bd9Sstevel@tonic-gate 
1347c478bd9Sstevel@tonic-gate #define	NFS4_PATHCONF_MASK (		\
1357c478bd9Sstevel@tonic-gate 	NFS4_VATTR_MASK |		\
1367c478bd9Sstevel@tonic-gate 	FATTR4_NO_TRUNC_MASK |		\
1377c478bd9Sstevel@tonic-gate 	FATTR4_CHOWN_RESTRICTED_MASK |	\
1387c478bd9Sstevel@tonic-gate 	FATTR4_CASE_INSENSITIVE_MASK |	\
1397c478bd9Sstevel@tonic-gate 	FATTR4_CASE_PRESERVING_MASK |	\
1407c478bd9Sstevel@tonic-gate 	FATTR4_NAMED_ATTR_MASK |	\
1417c478bd9Sstevel@tonic-gate 	FATTR4_LINK_SUPPORT_MASK |	\
1427c478bd9Sstevel@tonic-gate 	FATTR4_SYMLINK_SUPPORT_MASK |	\
1437c478bd9Sstevel@tonic-gate 	FATTR4_UNIQUE_HANDLES_MASK |	\
1447c478bd9Sstevel@tonic-gate 	FATTR4_CANSETTIME_MASK |	\
1457c478bd9Sstevel@tonic-gate 	FATTR4_HOMOGENEOUS_MASK |	\
1467c478bd9Sstevel@tonic-gate 	FATTR4_MAXLINK_MASK |		\
1477c478bd9Sstevel@tonic-gate 	FATTR4_MAXNAME_MASK |		\
1487c478bd9Sstevel@tonic-gate 	FATTR4_MAXFILESIZE_MASK)
1497c478bd9Sstevel@tonic-gate 
1507c478bd9Sstevel@tonic-gate /*
1517c478bd9Sstevel@tonic-gate  * The corresponding AT_MASK
1527c478bd9Sstevel@tonic-gate  */
1537c478bd9Sstevel@tonic-gate #define	NFS4_NTOV_ATTR_AT_MASK (	\
1547c478bd9Sstevel@tonic-gate 	AT_TYPE |			\
1557c478bd9Sstevel@tonic-gate 	AT_SIZE |			\
1567c478bd9Sstevel@tonic-gate 	AT_FSID |			\
1577c478bd9Sstevel@tonic-gate 	AT_NODEID |			\
1587c478bd9Sstevel@tonic-gate 	AT_MODE |			\
1597c478bd9Sstevel@tonic-gate 	AT_UID |			\
1607c478bd9Sstevel@tonic-gate 	AT_GID |			\
1617c478bd9Sstevel@tonic-gate 	AT_NLINK |			\
1627c478bd9Sstevel@tonic-gate 	AT_ATIME |			\
1637c478bd9Sstevel@tonic-gate 	AT_MTIME |			\
1647c478bd9Sstevel@tonic-gate 	AT_CTIME |			\
1657c478bd9Sstevel@tonic-gate 	AT_RDEV |			\
1667c478bd9Sstevel@tonic-gate 	AT_NBLOCKS)
1677c478bd9Sstevel@tonic-gate 
1687c478bd9Sstevel@tonic-gate /*
1697c478bd9Sstevel@tonic-gate  * Common bitmap4 of filesystem attributes to be gathered
1707c478bd9Sstevel@tonic-gate  */
1717c478bd9Sstevel@tonic-gate #define	NFS4_FS_ATTR_MASK (		\
1727c478bd9Sstevel@tonic-gate 	FATTR4_FILES_AVAIL_MASK |	\
1737c478bd9Sstevel@tonic-gate 	FATTR4_FILES_FREE_MASK |	\
1747c478bd9Sstevel@tonic-gate 	FATTR4_FILES_TOTAL_MASK |	\
1757c478bd9Sstevel@tonic-gate 	FATTR4_SPACE_AVAIL_MASK |	\
1767c478bd9Sstevel@tonic-gate 	FATTR4_SPACE_FREE_MASK |	\
1777c478bd9Sstevel@tonic-gate 	FATTR4_SPACE_TOTAL_MASK)
1787c478bd9Sstevel@tonic-gate 
1797c478bd9Sstevel@tonic-gate #define	NFS4_STATFS_ATTR_MASK (		\
1807c478bd9Sstevel@tonic-gate 	FATTR4_FILES_AVAIL_MASK |	\
1817c478bd9Sstevel@tonic-gate 	FATTR4_FILES_FREE_MASK |	\
1827c478bd9Sstevel@tonic-gate 	FATTR4_FILES_TOTAL_MASK |	\
1837c478bd9Sstevel@tonic-gate 	FATTR4_SPACE_AVAIL_MASK |	\
1847c478bd9Sstevel@tonic-gate 	FATTR4_SPACE_FREE_MASK |	\
1857c478bd9Sstevel@tonic-gate 	FATTR4_SPACE_TOTAL_MASK |	\
1867c478bd9Sstevel@tonic-gate 	FATTR4_MAXNAME_MASK)
1877c478bd9Sstevel@tonic-gate 
1887c478bd9Sstevel@tonic-gate /*
1897c478bd9Sstevel@tonic-gate  * The corresponding AT_MASK
1907c478bd9Sstevel@tonic-gate  */
1917c478bd9Sstevel@tonic-gate #define	NFS4_FS_ATTR_AT_MASK	0
1927c478bd9Sstevel@tonic-gate 
1937c478bd9Sstevel@tonic-gate /*
1947c478bd9Sstevel@tonic-gate  * Common bitmap4 to gather attr cache state
1957c478bd9Sstevel@tonic-gate  */
1967c478bd9Sstevel@tonic-gate #define	NFS4_NTOV_ATTR_CACHE_MASK (	\
1977c478bd9Sstevel@tonic-gate 	FATTR4_TIME_METADATA_MASK |	\
1987c478bd9Sstevel@tonic-gate 	FATTR4_TIME_MODIFY_MASK |	\
1997c478bd9Sstevel@tonic-gate 	FATTR4_SIZE_MASK)
2007c478bd9Sstevel@tonic-gate 
2017c478bd9Sstevel@tonic-gate /*
2027c478bd9Sstevel@tonic-gate  * The corresponding AT_MASK
2037c478bd9Sstevel@tonic-gate  */
2047c478bd9Sstevel@tonic-gate #define	NFS4_NTOV_ATTR_CACHE_AT_MASK (	\
2057c478bd9Sstevel@tonic-gate 	AT_CTIME |			\
2067c478bd9Sstevel@tonic-gate 	AT_MTIME |			\
2077c478bd9Sstevel@tonic-gate 	AT_SIZE)
2087c478bd9Sstevel@tonic-gate 
2097c478bd9Sstevel@tonic-gate #define	NFS4_VTON_ATTR_MASK (		\
2107c478bd9Sstevel@tonic-gate 	AT_TYPE |			\
2117c478bd9Sstevel@tonic-gate 	AT_MODE |			\
2127c478bd9Sstevel@tonic-gate 	AT_UID |			\
2137c478bd9Sstevel@tonic-gate 	AT_GID |			\
2147c478bd9Sstevel@tonic-gate 	AT_NODEID |			\
2157c478bd9Sstevel@tonic-gate 	AT_SIZE |			\
2167c478bd9Sstevel@tonic-gate 	AT_NLINK |			\
2177c478bd9Sstevel@tonic-gate 	AT_ATIME |			\
2187c478bd9Sstevel@tonic-gate 	AT_MTIME |			\
2197c478bd9Sstevel@tonic-gate 	AT_CTIME |			\
2207c478bd9Sstevel@tonic-gate 	AT_RDEV |			\
2217c478bd9Sstevel@tonic-gate 	AT_NBLOCKS |			\
2227c478bd9Sstevel@tonic-gate 	AT_FSID)
2237c478bd9Sstevel@tonic-gate 
2247c478bd9Sstevel@tonic-gate #define	NFS4_VTON_ATTR_MASK_SET (	\
2257c478bd9Sstevel@tonic-gate 	AT_MODE |			\
2267c478bd9Sstevel@tonic-gate 	AT_UID |			\
2277c478bd9Sstevel@tonic-gate 	AT_GID |			\
2287c478bd9Sstevel@tonic-gate 	AT_SIZE |			\
2297c478bd9Sstevel@tonic-gate 	AT_ATIME |			\
2307c478bd9Sstevel@tonic-gate 	AT_MTIME)
2317c478bd9Sstevel@tonic-gate 
2327c478bd9Sstevel@tonic-gate /* solaris-supported, non-vattr_t per-vnode scoped attrs */
2337c478bd9Sstevel@tonic-gate #define	NFS4_VP_ATTR_MASK (		\
2347c478bd9Sstevel@tonic-gate 	FATTR4_CHANGE_MASK |		\
2357c478bd9Sstevel@tonic-gate 	FATTR4_CHOWN_RESTRICTED_MASK |	\
2367c478bd9Sstevel@tonic-gate 	FATTR4_FILEHANDLE_MASK |	\
2377c478bd9Sstevel@tonic-gate 	FATTR4_MAXFILESIZE_MASK |	\
2387c478bd9Sstevel@tonic-gate 	FATTR4_MAXLINK_MASK |		\
2397c478bd9Sstevel@tonic-gate 	FATTR4_MAXNAME_MASK |		\
2407c478bd9Sstevel@tonic-gate 	FATTR4_MOUNTED_ON_FILEID_MASK)
2417c478bd9Sstevel@tonic-gate 
2427c478bd9Sstevel@tonic-gate #define	FATTR4_FSINFO_MASK (		\
2437c478bd9Sstevel@tonic-gate 	FATTR4_SUPPORTED_ATTRS_MASK |	\
2447c478bd9Sstevel@tonic-gate 	FATTR4_TYPE_MASK |		\
2457c478bd9Sstevel@tonic-gate 	FATTR4_FH_EXPIRE_TYPE_MASK |	\
2467c478bd9Sstevel@tonic-gate 	FATTR4_LINK_SUPPORT_MASK |	\
2477c478bd9Sstevel@tonic-gate 	FATTR4_SYMLINK_SUPPORT_MASK |	\
2487c478bd9Sstevel@tonic-gate 	FATTR4_FSID_MASK |		\
2497c478bd9Sstevel@tonic-gate 	FATTR4_MAXFILESIZE_MASK |	\
2507c478bd9Sstevel@tonic-gate 	FATTR4_MAXREAD_MASK |		\
2517c478bd9Sstevel@tonic-gate 	FATTR4_MAXWRITE_MASK)
2527c478bd9Sstevel@tonic-gate 
2537c478bd9Sstevel@tonic-gate /*
2547c478bd9Sstevel@tonic-gate  * These are the support attributes for the NFSv4 server
2557c478bd9Sstevel@tonic-gate  */
2567c478bd9Sstevel@tonic-gate #define	NFS4_SRV_RDDIR_SUPPORTED_ATTRS (	\
2577c478bd9Sstevel@tonic-gate 	FATTR4_SUPPORTED_ATTRS_MASK |	\
2587c478bd9Sstevel@tonic-gate 	FATTR4_TYPE_MASK |		\
2597c478bd9Sstevel@tonic-gate 	FATTR4_FH_EXPIRE_TYPE_MASK |	\
2607c478bd9Sstevel@tonic-gate 	FATTR4_CHANGE_MASK |		\
2617c478bd9Sstevel@tonic-gate 	FATTR4_SIZE_MASK |		\
2627c478bd9Sstevel@tonic-gate 	FATTR4_LINK_SUPPORT_MASK |	\
2637c478bd9Sstevel@tonic-gate 	FATTR4_SYMLINK_SUPPORT_MASK |	\
2647c478bd9Sstevel@tonic-gate 	FATTR4_NAMED_ATTR_MASK |	\
2657c478bd9Sstevel@tonic-gate 	FATTR4_FSID_MASK |		\
2667c478bd9Sstevel@tonic-gate 	FATTR4_UNIQUE_HANDLES_MASK |	\
2677c478bd9Sstevel@tonic-gate 	FATTR4_LEASE_TIME_MASK |	\
2687c478bd9Sstevel@tonic-gate 	FATTR4_RDATTR_ERROR_MASK |	\
2697c478bd9Sstevel@tonic-gate 	FATTR4_CANSETTIME_MASK |	\
2707c478bd9Sstevel@tonic-gate 	FATTR4_CASE_INSENSITIVE_MASK |	\
2717c478bd9Sstevel@tonic-gate 	FATTR4_CASE_PRESERVING_MASK |	\
2727c478bd9Sstevel@tonic-gate 	FATTR4_CHOWN_RESTRICTED_MASK |	\
2737c478bd9Sstevel@tonic-gate 	FATTR4_FILEHANDLE_MASK |	\
2747c478bd9Sstevel@tonic-gate 	FATTR4_FILEID_MASK |		\
2757c478bd9Sstevel@tonic-gate 	FATTR4_FILES_AVAIL_MASK |	\
2767c478bd9Sstevel@tonic-gate 	FATTR4_FILES_FREE_MASK |	\
2777c478bd9Sstevel@tonic-gate 	FATTR4_FILES_TOTAL_MASK |	\
2787c478bd9Sstevel@tonic-gate 	FATTR4_HOMOGENEOUS_MASK |	\
2797c478bd9Sstevel@tonic-gate 	FATTR4_MAXFILESIZE_MASK |	\
2807c478bd9Sstevel@tonic-gate 	FATTR4_MAXLINK_MASK |		\
2817c478bd9Sstevel@tonic-gate 	FATTR4_MAXNAME_MASK |		\
2827c478bd9Sstevel@tonic-gate 	FATTR4_MAXREAD_MASK |		\
2837c478bd9Sstevel@tonic-gate 	FATTR4_MAXWRITE_MASK |		\
2847c478bd9Sstevel@tonic-gate 	FATTR4_MODE_MASK |		\
2857c478bd9Sstevel@tonic-gate 	FATTR4_NO_TRUNC_MASK |		\
2867c478bd9Sstevel@tonic-gate 	FATTR4_NUMLINKS_MASK |		\
2877c478bd9Sstevel@tonic-gate 	FATTR4_OWNER_MASK |		\
2887c478bd9Sstevel@tonic-gate 	FATTR4_OWNER_GROUP_MASK |	\
2897c478bd9Sstevel@tonic-gate 	FATTR4_RAWDEV_MASK |		\
2907c478bd9Sstevel@tonic-gate 	FATTR4_SPACE_AVAIL_MASK |	\
2917c478bd9Sstevel@tonic-gate 	FATTR4_SPACE_FREE_MASK |	\
2927c478bd9Sstevel@tonic-gate 	FATTR4_SPACE_TOTAL_MASK |	\
2937c478bd9Sstevel@tonic-gate 	FATTR4_SPACE_USED_MASK |	\
2947c478bd9Sstevel@tonic-gate 	FATTR4_TIME_ACCESS_MASK |	\
2957c478bd9Sstevel@tonic-gate 	FATTR4_TIME_DELTA_MASK |	\
2967c478bd9Sstevel@tonic-gate 	FATTR4_TIME_METADATA_MASK |	\
2977c478bd9Sstevel@tonic-gate 	FATTR4_TIME_MODIFY_MASK |	\
2987c478bd9Sstevel@tonic-gate 	FATTR4_MOUNTED_ON_FILEID_MASK	\
2997c478bd9Sstevel@tonic-gate )
3007c478bd9Sstevel@tonic-gate 
3017c478bd9Sstevel@tonic-gate 
3027c478bd9Sstevel@tonic-gate #define	FATTR4_FSID_EQ(a, b)	\
3037c478bd9Sstevel@tonic-gate 	((a)->major == (b)->major && (a)->minor == (b)->minor)
3047c478bd9Sstevel@tonic-gate 
3057c478bd9Sstevel@tonic-gate #define	NFS4_MAXNUM_BITWORDS	2
3067c478bd9Sstevel@tonic-gate #define	NFS4_MAXNUM_ATTRS	56
3077c478bd9Sstevel@tonic-gate 
3087c478bd9Sstevel@tonic-gate union nfs4_attr_u {
3097c478bd9Sstevel@tonic-gate 	fattr4_supported_attrs		supported_attrs;
3107c478bd9Sstevel@tonic-gate 	fattr4_type			type;
3117c478bd9Sstevel@tonic-gate 	fattr4_fh_expire_type		fh_expire_type;
3127c478bd9Sstevel@tonic-gate 	fattr4_change			change;
3137c478bd9Sstevel@tonic-gate 	fattr4_size			size;
3147c478bd9Sstevel@tonic-gate 	fattr4_link_support		link_support;
3157c478bd9Sstevel@tonic-gate 	fattr4_symlink_support		symlink_support;
3167c478bd9Sstevel@tonic-gate 	fattr4_named_attr		named_attr;
3177c478bd9Sstevel@tonic-gate 	fattr4_fsid			fsid;
3187c478bd9Sstevel@tonic-gate 	fattr4_unique_handles		unique_handles;
3197c478bd9Sstevel@tonic-gate 	fattr4_lease_time		lease_time;
3207c478bd9Sstevel@tonic-gate 	fattr4_rdattr_error		rdattr_error;
3217c478bd9Sstevel@tonic-gate 	fattr4_acl			acl;
3227c478bd9Sstevel@tonic-gate 	fattr4_aclsupport		aclsupport;
3237c478bd9Sstevel@tonic-gate 	fattr4_archive			archive;
3247c478bd9Sstevel@tonic-gate 	fattr4_cansettime		cansettime;
3257c478bd9Sstevel@tonic-gate 	fattr4_case_insensitive		case_insensitive;
3267c478bd9Sstevel@tonic-gate 	fattr4_case_preserving		case_preserving;
3277c478bd9Sstevel@tonic-gate 	fattr4_chown_restricted		chown_restricted;
3287c478bd9Sstevel@tonic-gate 	fattr4_fileid			fileid;
3297c478bd9Sstevel@tonic-gate 	fattr4_files_avail		files_avail;
3307c478bd9Sstevel@tonic-gate 	fattr4_filehandle		filehandle;
3317c478bd9Sstevel@tonic-gate 	fattr4_files_free		files_free;
3327c478bd9Sstevel@tonic-gate 	fattr4_files_total		files_total;
3337c478bd9Sstevel@tonic-gate 	fattr4_fs_locations		fs_locations;
3347c478bd9Sstevel@tonic-gate 	fattr4_hidden			hidden;
3357c478bd9Sstevel@tonic-gate 	fattr4_homogeneous		homogeneous;
3367c478bd9Sstevel@tonic-gate 	fattr4_maxfilesize		maxfilesize;
3377c478bd9Sstevel@tonic-gate 	fattr4_maxlink			maxlink;
3387c478bd9Sstevel@tonic-gate 	fattr4_maxname			maxname;
3397c478bd9Sstevel@tonic-gate 	fattr4_maxread			maxread;
3407c478bd9Sstevel@tonic-gate 	fattr4_maxwrite			maxwrite;
3417c478bd9Sstevel@tonic-gate 	fattr4_mimetype			mimetype;
3427c478bd9Sstevel@tonic-gate 	fattr4_mode			mode;
3437c478bd9Sstevel@tonic-gate 	fattr4_no_trunc			no_trunc;
3447c478bd9Sstevel@tonic-gate 	fattr4_numlinks			numlinks;
3457c478bd9Sstevel@tonic-gate 	fattr4_owner			owner;
3467c478bd9Sstevel@tonic-gate 	fattr4_owner_group		owner_group;
3477c478bd9Sstevel@tonic-gate 	fattr4_quota_avail_hard		quota_avail_hard;
3487c478bd9Sstevel@tonic-gate 	fattr4_quota_avail_soft		quota_avail_soft;
3497c478bd9Sstevel@tonic-gate 	fattr4_quota_used		quota_used;
3507c478bd9Sstevel@tonic-gate 	fattr4_rawdev			rawdev;
3517c478bd9Sstevel@tonic-gate 	fattr4_space_avail		space_avail;
3527c478bd9Sstevel@tonic-gate 	fattr4_space_free		space_free;
3537c478bd9Sstevel@tonic-gate 	fattr4_space_total		space_total;
3547c478bd9Sstevel@tonic-gate 	fattr4_space_used		space_used;
3557c478bd9Sstevel@tonic-gate 	fattr4_system			system;
3567c478bd9Sstevel@tonic-gate 	fattr4_time_access		time_access;
3577c478bd9Sstevel@tonic-gate 	fattr4_time_access_set		time_access_set;
3587c478bd9Sstevel@tonic-gate 	fattr4_time_backup		time_backup;
3597c478bd9Sstevel@tonic-gate 	fattr4_time_create		time_create;
3607c478bd9Sstevel@tonic-gate 	fattr4_time_delta		time_delta;
3617c478bd9Sstevel@tonic-gate 	fattr4_time_metadata		time_metadata;
3627c478bd9Sstevel@tonic-gate 	fattr4_time_modify		time_modify;
3637c478bd9Sstevel@tonic-gate 	fattr4_time_modify_set		time_modify_set;
3647c478bd9Sstevel@tonic-gate 	fattr4_mounted_on_fileid	mounted_on_fileid;
3657c478bd9Sstevel@tonic-gate };
3667c478bd9Sstevel@tonic-gate 
3677c478bd9Sstevel@tonic-gate /*
3687c478bd9Sstevel@tonic-gate  * Error details when processing the getattr response.
3697c478bd9Sstevel@tonic-gate  */
3707c478bd9Sstevel@tonic-gate #define	NFS4_GETATTR_OP_OK		0
3717c478bd9Sstevel@tonic-gate #define	NFS4_GETATTR_STATUS_ERR		1
3727c478bd9Sstevel@tonic-gate #define	NFS4_GETATTR_MANDATTR_ERR	2
3737c478bd9Sstevel@tonic-gate #define	NFS4_GETATTR_BITMAP_ERR		3
3747c478bd9Sstevel@tonic-gate #define	NFS4_GETATTR_ATSIZE_ERR		4
3757c478bd9Sstevel@tonic-gate #define	NFS4_GETATTR_ATUID_ERR		5
3767c478bd9Sstevel@tonic-gate #define	NFS4_GETATTR_ATGID_ERR		6
3777c478bd9Sstevel@tonic-gate #define	NFS4_GETATTR_ATATIME_ERR	7
3787c478bd9Sstevel@tonic-gate #define	NFS4_GETATTR_ATMTIME_ERR	8
3797c478bd9Sstevel@tonic-gate #define	NFS4_GETATTR_ATCTIME_ERR	9
3807c478bd9Sstevel@tonic-gate #define	NFS4_GETATTR_RAWDEV_ERR		10
3817c478bd9Sstevel@tonic-gate #define	NFS4_GETATTR_ATNBLOCK_ERR	11
3827c478bd9Sstevel@tonic-gate #define	NFS4_GETATTR_MAXFILESIZE_ERR	12
3837c478bd9Sstevel@tonic-gate #define	NFS4_GETATTR_FHANDLE_ERR	13
3847c478bd9Sstevel@tonic-gate #define	NFS4_GETATTR_MAXREAD_ERR	14
3857c478bd9Sstevel@tonic-gate #define	NFS4_GETATTR_MAXWRITE_ERR	15
3867c478bd9Sstevel@tonic-gate #define	NFS4_GETATTR_NOCACHE_OK		16
3877c478bd9Sstevel@tonic-gate 
3887c478bd9Sstevel@tonic-gate typedef struct nfs4_pathconf_info {
3897c478bd9Sstevel@tonic-gate 	unsigned pc4_cache_valid:1;	/* When in rnode4, is data valid? */
3907c478bd9Sstevel@tonic-gate 	unsigned pc4_no_trunc:1;
3917c478bd9Sstevel@tonic-gate 	unsigned pc4_chown_restricted:1;
3927c478bd9Sstevel@tonic-gate 	unsigned pc4_case_insensitive:1;
3937c478bd9Sstevel@tonic-gate 	unsigned pc4_case_preserving:1;
3947c478bd9Sstevel@tonic-gate 	unsigned pc4_xattr_valid:1;
3957c478bd9Sstevel@tonic-gate 	unsigned pc4_xattr_exists:1;
3967c478bd9Sstevel@tonic-gate 	unsigned pc4_link_support:1;
3977c478bd9Sstevel@tonic-gate 	unsigned pc4_symlink_support:1;
3987c478bd9Sstevel@tonic-gate 	unsigned pc4_unique_handles:1;
3997c478bd9Sstevel@tonic-gate 	unsigned pc4_cansettime:1;
4007c478bd9Sstevel@tonic-gate 	unsigned pc4_homogeneous:1;
4017c478bd9Sstevel@tonic-gate 	uint_t	pc4_link_max;
4027c478bd9Sstevel@tonic-gate 	uint_t	pc4_name_max;
4037c478bd9Sstevel@tonic-gate 	uint_t	pc4_filesizebits;
4047c478bd9Sstevel@tonic-gate } nfs4_pathconf_info_t;
4057c478bd9Sstevel@tonic-gate 
4067c478bd9Sstevel@tonic-gate /*
4077c478bd9Sstevel@tonic-gate  * Used for client only to process incoming getattr results.
4087c478bd9Sstevel@tonic-gate  */
4097c478bd9Sstevel@tonic-gate typedef struct nfs4_ga_ext_res {
4107c478bd9Sstevel@tonic-gate 	bitmap4				n4g_suppattrs;
4117c478bd9Sstevel@tonic-gate 	nfsstat4			n4g_rdattr_error;
4127c478bd9Sstevel@tonic-gate 	fattr4_fh_expire_type		n4g_fet;
4137c478bd9Sstevel@tonic-gate 	fattr4_lease_time		n4g_leasetime;
4147c478bd9Sstevel@tonic-gate 	uint64_t			n4g_maxfilesize;
4157c478bd9Sstevel@tonic-gate 	uint64_t			n4g_maxread;
4167c478bd9Sstevel@tonic-gate 	uint64_t			n4g_maxwrite;
4177c478bd9Sstevel@tonic-gate 	nfstime4			n4g_delta;
4187c478bd9Sstevel@tonic-gate 	nfs4_pathconf_info_t		n4g_pc4;
4197c478bd9Sstevel@tonic-gate 	struct statvfs64		n4g_sb;
4207c478bd9Sstevel@tonic-gate 	union {
4217c478bd9Sstevel@tonic-gate 		nfs_fh4 n4g_fh;
4227c478bd9Sstevel@tonic-gate 		struct {
4237c478bd9Sstevel@tonic-gate 			uint_t len;
4247c478bd9Sstevel@tonic-gate 			char *val;
4257c478bd9Sstevel@tonic-gate 			char data[NFS4_FHSIZE];
4267c478bd9Sstevel@tonic-gate 		} nfs_fh4_alt;
4277c478bd9Sstevel@tonic-gate 	} n4g_fh_u;
4287c478bd9Sstevel@tonic-gate 	/*
4297c478bd9Sstevel@tonic-gate 	 * Bitmask with valid fields being:
4307c478bd9Sstevel@tonic-gate 	 * ACL4_SUPPORT_ALLOW_ACL
4317c478bd9Sstevel@tonic-gate 	 * ACL4_SUPPORT_DENY_ACL
4327c478bd9Sstevel@tonic-gate 	 * ACL4_SUPPORT_AUDIT_ACL
4337c478bd9Sstevel@tonic-gate 	 * ACL4_SUPPORT_ALARM_ACL
4347c478bd9Sstevel@tonic-gate 	 */
4357c478bd9Sstevel@tonic-gate 	fattr4_aclsupport		n4g_aclsupport;
436*2f172c55SRobert Thurlow 	fattr4_fs_locations		n4g_fslocations;
4377c478bd9Sstevel@tonic-gate } nfs4_ga_ext_res_t;
4387c478bd9Sstevel@tonic-gate 
4397c478bd9Sstevel@tonic-gate extern bitmap4 rfs4_supported_attrs;
4407c478bd9Sstevel@tonic-gate 
4417c478bd9Sstevel@tonic-gate #ifdef	__cplusplus
4427c478bd9Sstevel@tonic-gate }
4437c478bd9Sstevel@tonic-gate #endif
4447c478bd9Sstevel@tonic-gate 
4457c478bd9Sstevel@tonic-gate #endif /* _NFS4_ATTR_H */
446