/* * CDDL HEADER START * * The contents of this file are subject to the terms of the * Common Development and Distribution License (the "License"). * You may not use this file except in compliance with the License. * * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE * or http://www.opensolaris.org/os/licensing. * See the License for the specific language governing permissions * and limitations under the License. * * When distributing Covered Code, include this CDDL HEADER in each * file and include the License file at usr/src/OPENSOLARIS.LICENSE. * If applicable, add the following below this CDDL HEADER, with the * fields enclosed by brackets "[]" replaced with your own identifying * information: Portions Copyright [yyyy] [name of copyright owner] * * CDDL HEADER END */ /* * Copyright 2009 Sun Microsystems, Inc. All rights reserved. * Use is subject to license terms. */ #ifndef _NFS4_ATTR_H #define _NFS4_ATTR_H #ifdef __cplusplus extern "C" { #endif #define FATTR4_WORD0 32 #define FATTR4_WORD1 0 /* * Attributes */ #define FATTR4_SUPPORTED_ATTRS_MASK (1ULL << (FATTR4_WORD0 + 0)) #define FATTR4_TYPE_MASK (1ULL << (FATTR4_WORD0 + 1)) #define FATTR4_FH_EXPIRE_TYPE_MASK (1ULL << (FATTR4_WORD0 + 2)) #define FATTR4_CHANGE_MASK (1ULL << (FATTR4_WORD0 + 3)) #define FATTR4_SIZE_MASK (1ULL << (FATTR4_WORD0 + 4)) #define FATTR4_LINK_SUPPORT_MASK (1ULL << (FATTR4_WORD0 + 5)) #define FATTR4_SYMLINK_SUPPORT_MASK (1ULL << (FATTR4_WORD0 + 6)) #define FATTR4_NAMED_ATTR_MASK (1ULL << (FATTR4_WORD0 + 7)) #define FATTR4_FSID_MASK (1ULL << (FATTR4_WORD0 + 8)) #define FATTR4_UNIQUE_HANDLES_MASK (1ULL << (FATTR4_WORD0 + 9)) #define FATTR4_LEASE_TIME_MASK (1ULL << (FATTR4_WORD0 + 10)) #define FATTR4_RDATTR_ERROR_MASK (1ULL << (FATTR4_WORD0 + 11)) #define FATTR4_ACL_MASK (1ULL << (FATTR4_WORD0 + 12)) #define FATTR4_ACLSUPPORT_MASK (1ULL << (FATTR4_WORD0 + 13)) #define FATTR4_ARCHIVE_MASK (1ULL << (FATTR4_WORD0 + 14)) #define FATTR4_CANSETTIME_MASK (1ULL << (FATTR4_WORD0 + 15)) #define FATTR4_CASE_INSENSITIVE_MASK (1ULL << (FATTR4_WORD0 + 16)) #define FATTR4_CASE_PRESERVING_MASK (1ULL << (FATTR4_WORD0 + 17)) #define FATTR4_CHOWN_RESTRICTED_MASK (1ULL << (FATTR4_WORD0 + 18)) #define FATTR4_FILEHANDLE_MASK (1ULL << (FATTR4_WORD0 + 19)) #define FATTR4_FILEID_MASK (1ULL << (FATTR4_WORD0 + 20)) #define FATTR4_FILES_AVAIL_MASK (1ULL << (FATTR4_WORD0 + 21)) #define FATTR4_FILES_FREE_MASK (1ULL << (FATTR4_WORD0 + 22)) #define FATTR4_FILES_TOTAL_MASK (1ULL << (FATTR4_WORD0 + 23)) #define FATTR4_FS_LOCATIONS_MASK (1ULL << (FATTR4_WORD0 + 24)) #define FATTR4_HIDDEN_MASK (1ULL << (FATTR4_WORD0 + 25)) #define FATTR4_HOMOGENEOUS_MASK (1ULL << (FATTR4_WORD0 + 26)) #define FATTR4_MAXFILESIZE_MASK (1ULL << (FATTR4_WORD0 + 27)) #define FATTR4_MAXLINK_MASK (1ULL << (FATTR4_WORD0 + 28)) #define FATTR4_MAXNAME_MASK (1ULL << (FATTR4_WORD0 + 29)) #define FATTR4_MAXREAD_MASK (1ULL << (FATTR4_WORD0 + 30)) #define FATTR4_MAXWRITE_MASK (1ULL << (FATTR4_WORD0 + 31)) #define FATTR4_MIMETYPE_MASK (1ULL << (FATTR4_WORD1 + 0)) #define FATTR4_MODE_MASK (1ULL << (FATTR4_WORD1 + 1)) #define FATTR4_NO_TRUNC_MASK (1ULL << (FATTR4_WORD1 + 2)) #define FATTR4_NUMLINKS_MASK (1ULL << (FATTR4_WORD1 + 3)) #define FATTR4_OWNER_MASK (1ULL << (FATTR4_WORD1 + 4)) #define FATTR4_OWNER_GROUP_MASK (1ULL << (FATTR4_WORD1 + 5)) #define FATTR4_QUOTA_AVAIL_HARD_MASK (1ULL << (FATTR4_WORD1 + 6)) #define FATTR4_QUOTA_AVAIL_SOFT_MASK (1ULL << (FATTR4_WORD1 + 7)) #define FATTR4_QUOTA_USED_MASK (1ULL << (FATTR4_WORD1 + 8)) #define FATTR4_RAWDEV_MASK (1ULL << (FATTR4_WORD1 + 9)) #define FATTR4_SPACE_AVAIL_MASK (1ULL << (FATTR4_WORD1 + 10)) #define FATTR4_SPACE_FREE_MASK (1ULL << (FATTR4_WORD1 + 11)) #define FATTR4_SPACE_TOTAL_MASK (1ULL << (FATTR4_WORD1 + 12)) #define FATTR4_SPACE_USED_MASK (1ULL << (FATTR4_WORD1 + 13)) #define FATTR4_SYSTEM_MASK (1ULL << (FATTR4_WORD1 + 14)) #define FATTR4_TIME_ACCESS_MASK (1ULL << (FATTR4_WORD1 + 15)) #define FATTR4_TIME_ACCESS_SET_MASK (1ULL << (FATTR4_WORD1 + 16)) #define FATTR4_TIME_BACKUP_MASK (1ULL << (FATTR4_WORD1 + 17)) #define FATTR4_TIME_CREATE_MASK (1ULL << (FATTR4_WORD1 + 18)) #define FATTR4_TIME_DELTA_MASK (1ULL << (FATTR4_WORD1 + 19)) #define FATTR4_TIME_METADATA_MASK (1ULL << (FATTR4_WORD1 + 20)) #define FATTR4_TIME_MODIFY_MASK (1ULL << (FATTR4_WORD1 + 21)) #define FATTR4_TIME_MODIFY_SET_MASK (1ULL << (FATTR4_WORD1 + 22)) #define FATTR4_MOUNTED_ON_FILEID_MASK (1ULL << (FATTR4_WORD1 + 23)) /* * Common bitmap4 of file attributes to be gathered */ #define NFS4_NTOV_ATTR_MASK ( \ FATTR4_TYPE_MASK | \ FATTR4_CHANGE_MASK | \ FATTR4_SIZE_MASK | \ FATTR4_FSID_MASK | \ FATTR4_FILEID_MASK | \ FATTR4_MODE_MASK | \ FATTR4_OWNER_MASK | \ FATTR4_OWNER_GROUP_MASK | \ FATTR4_NUMLINKS_MASK | \ FATTR4_TIME_ACCESS_MASK | \ FATTR4_TIME_MODIFY_MASK | \ FATTR4_TIME_METADATA_MASK | \ FATTR4_RAWDEV_MASK | \ FATTR4_SPACE_USED_MASK | \ FATTR4_MOUNTED_ON_FILEID_MASK) #define NFS4_VATTR_MASK ( \ FATTR4_TYPE_MASK | \ FATTR4_CHANGE_MASK | \ FATTR4_SIZE_MASK | \ FATTR4_FSID_MASK | \ FATTR4_FILEID_MASK | \ FATTR4_MODE_MASK | \ FATTR4_OWNER_MASK | \ FATTR4_OWNER_GROUP_MASK | \ FATTR4_NUMLINKS_MASK | \ FATTR4_TIME_ACCESS_MASK | \ FATTR4_TIME_MODIFY_MASK | \ FATTR4_TIME_METADATA_MASK | \ FATTR4_RAWDEV_MASK | \ FATTR4_SPACE_USED_MASK | \ FATTR4_MOUNTED_ON_FILEID_MASK) #define NFS4_PATHCONF_MASK ( \ NFS4_VATTR_MASK | \ FATTR4_NO_TRUNC_MASK | \ FATTR4_CHOWN_RESTRICTED_MASK | \ FATTR4_CASE_INSENSITIVE_MASK | \ FATTR4_CASE_PRESERVING_MASK | \ FATTR4_NAMED_ATTR_MASK | \ FATTR4_LINK_SUPPORT_MASK | \ FATTR4_SYMLINK_SUPPORT_MASK | \ FATTR4_UNIQUE_HANDLES_MASK | \ FATTR4_CANSETTIME_MASK | \ FATTR4_HOMOGENEOUS_MASK | \ FATTR4_MAXLINK_MASK | \ FATTR4_MAXNAME_MASK | \ FATTR4_MAXFILESIZE_MASK) /* * The corresponding AT_MASK */ #define NFS4_NTOV_ATTR_AT_MASK ( \ AT_TYPE | \ AT_SIZE | \ AT_FSID | \ AT_NODEID | \ AT_MODE | \ AT_UID | \ AT_GID | \ AT_NLINK | \ AT_ATIME | \ AT_MTIME | \ AT_CTIME | \ AT_RDEV | \ AT_NBLOCKS) /* * Common bitmap4 of filesystem attributes to be gathered */ #define NFS4_FS_ATTR_MASK ( \ FATTR4_FILES_AVAIL_MASK | \ FATTR4_FILES_FREE_MASK | \ FATTR4_FILES_TOTAL_MASK | \ FATTR4_SPACE_AVAIL_MASK | \ FATTR4_SPACE_FREE_MASK | \ FATTR4_SPACE_TOTAL_MASK) #define NFS4_STATFS_ATTR_MASK ( \ FATTR4_FILES_AVAIL_MASK | \ FATTR4_FILES_FREE_MASK | \ FATTR4_FILES_TOTAL_MASK | \ FATTR4_SPACE_AVAIL_MASK | \ FATTR4_SPACE_FREE_MASK | \ FATTR4_SPACE_TOTAL_MASK | \ FATTR4_MAXNAME_MASK) /* * The corresponding AT_MASK */ #define NFS4_FS_ATTR_AT_MASK 0 /* * Common bitmap4 to gather attr cache state */ #define NFS4_NTOV_ATTR_CACHE_MASK ( \ FATTR4_TIME_METADATA_MASK | \ FATTR4_TIME_MODIFY_MASK | \ FATTR4_SIZE_MASK) /* * The corresponding AT_MASK */ #define NFS4_NTOV_ATTR_CACHE_AT_MASK ( \ AT_CTIME | \ AT_MTIME | \ AT_SIZE) #define NFS4_VTON_ATTR_MASK ( \ AT_TYPE | \ AT_MODE | \ AT_UID | \ AT_GID | \ AT_NODEID | \ AT_SIZE | \ AT_NLINK | \ AT_ATIME | \ AT_MTIME | \ AT_CTIME | \ AT_RDEV | \ AT_NBLOCKS | \ AT_FSID) #define NFS4_VTON_ATTR_MASK_SET ( \ AT_MODE | \ AT_UID | \ AT_GID | \ AT_SIZE | \ AT_ATIME | \ AT_MTIME) /* solaris-supported, non-vattr_t per-vnode scoped attrs */ #define NFS4_VP_ATTR_MASK ( \ FATTR4_CHANGE_MASK | \ FATTR4_CHOWN_RESTRICTED_MASK | \ FATTR4_FILEHANDLE_MASK | \ FATTR4_MAXFILESIZE_MASK | \ FATTR4_MAXLINK_MASK | \ FATTR4_MAXNAME_MASK | \ FATTR4_MOUNTED_ON_FILEID_MASK) #define FATTR4_FSINFO_MASK ( \ FATTR4_SUPPORTED_ATTRS_MASK | \ FATTR4_TYPE_MASK | \ FATTR4_FH_EXPIRE_TYPE_MASK | \ FATTR4_LINK_SUPPORT_MASK | \ FATTR4_SYMLINK_SUPPORT_MASK | \ FATTR4_FSID_MASK | \ FATTR4_MAXFILESIZE_MASK | \ FATTR4_MAXREAD_MASK | \ FATTR4_MAXWRITE_MASK) /* * These are the support attributes for the NFSv4 server */ #define NFS4_SRV_RDDIR_SUPPORTED_ATTRS ( \ FATTR4_SUPPORTED_ATTRS_MASK | \ FATTR4_TYPE_MASK | \ FATTR4_FH_EXPIRE_TYPE_MASK | \ FATTR4_CHANGE_MASK | \ FATTR4_SIZE_MASK | \ FATTR4_LINK_SUPPORT_MASK | \ FATTR4_SYMLINK_SUPPORT_MASK | \ FATTR4_NAMED_ATTR_MASK | \ FATTR4_FSID_MASK | \ FATTR4_UNIQUE_HANDLES_MASK | \ FATTR4_LEASE_TIME_MASK | \ FATTR4_RDATTR_ERROR_MASK | \ FATTR4_CANSETTIME_MASK | \ FATTR4_CASE_INSENSITIVE_MASK | \ FATTR4_CASE_PRESERVING_MASK | \ FATTR4_CHOWN_RESTRICTED_MASK | \ FATTR4_FILEHANDLE_MASK | \ FATTR4_FILEID_MASK | \ FATTR4_FILES_AVAIL_MASK | \ FATTR4_FILES_FREE_MASK | \ FATTR4_FILES_TOTAL_MASK | \ FATTR4_FS_LOCATIONS_MASK | \ FATTR4_HOMOGENEOUS_MASK | \ FATTR4_MAXFILESIZE_MASK | \ FATTR4_MAXLINK_MASK | \ FATTR4_MAXNAME_MASK | \ FATTR4_MAXREAD_MASK | \ FATTR4_MAXWRITE_MASK | \ FATTR4_MODE_MASK | \ FATTR4_NO_TRUNC_MASK | \ FATTR4_NUMLINKS_MASK | \ FATTR4_OWNER_MASK | \ FATTR4_OWNER_GROUP_MASK | \ FATTR4_RAWDEV_MASK | \ FATTR4_SPACE_AVAIL_MASK | \ FATTR4_SPACE_FREE_MASK | \ FATTR4_SPACE_TOTAL_MASK | \ FATTR4_SPACE_USED_MASK | \ FATTR4_TIME_ACCESS_MASK | \ FATTR4_TIME_DELTA_MASK | \ FATTR4_TIME_METADATA_MASK | \ FATTR4_TIME_MODIFY_MASK | \ FATTR4_MOUNTED_ON_FILEID_MASK \ ) #define FATTR4_FSID_EQ(a, b) \ ((a)->major == (b)->major && (a)->minor == (b)->minor) #define NFS4_MAXNUM_BITWORDS 2 #define NFS4_MAXNUM_ATTRS 56 union nfs4_attr_u { fattr4_supported_attrs supported_attrs; fattr4_type type; fattr4_fh_expire_type fh_expire_type; fattr4_change change; fattr4_size size; fattr4_link_support link_support; fattr4_symlink_support symlink_support; fattr4_named_attr named_attr; fattr4_fsid fsid; fattr4_unique_handles unique_handles; fattr4_lease_time lease_time; fattr4_rdattr_error rdattr_error; fattr4_acl acl; fattr4_aclsupport aclsupport; fattr4_archive archive; fattr4_cansettime cansettime; fattr4_case_insensitive case_insensitive; fattr4_case_preserving case_preserving; fattr4_chown_restricted chown_restricted; fattr4_fileid fileid; fattr4_files_avail files_avail; fattr4_filehandle filehandle; fattr4_files_free files_free; fattr4_files_total files_total; fattr4_fs_locations fs_locations; fattr4_hidden hidden; fattr4_homogeneous homogeneous; fattr4_maxfilesize maxfilesize; fattr4_maxlink maxlink; fattr4_maxname maxname; fattr4_maxread maxread; fattr4_maxwrite maxwrite; fattr4_mimetype mimetype; fattr4_mode mode; fattr4_no_trunc no_trunc; fattr4_numlinks numlinks; fattr4_owner owner; fattr4_owner_group owner_group; fattr4_quota_avail_hard quota_avail_hard; fattr4_quota_avail_soft quota_avail_soft; fattr4_quota_used quota_used; fattr4_rawdev rawdev; fattr4_space_avail space_avail; fattr4_space_free space_free; fattr4_space_total space_total; fattr4_space_used space_used; fattr4_system system; fattr4_time_access time_access; fattr4_time_access_set time_access_set; fattr4_time_backup time_backup; fattr4_time_create time_create; fattr4_time_delta time_delta; fattr4_time_metadata time_metadata; fattr4_time_modify time_modify; fattr4_time_modify_set time_modify_set; fattr4_mounted_on_fileid mounted_on_fileid; }; /* * Error details when processing the getattr response. */ #define NFS4_GETATTR_OP_OK 0 #define NFS4_GETATTR_STATUS_ERR 1 #define NFS4_GETATTR_MANDATTR_ERR 2 #define NFS4_GETATTR_BITMAP_ERR 3 #define NFS4_GETATTR_ATSIZE_ERR 4 #define NFS4_GETATTR_ATUID_ERR 5 #define NFS4_GETATTR_ATGID_ERR 6 #define NFS4_GETATTR_ATATIME_ERR 7 #define NFS4_GETATTR_ATMTIME_ERR 8 #define NFS4_GETATTR_ATCTIME_ERR 9 #define NFS4_GETATTR_RAWDEV_ERR 10 #define NFS4_GETATTR_ATNBLOCK_ERR 11 #define NFS4_GETATTR_MAXFILESIZE_ERR 12 #define NFS4_GETATTR_FHANDLE_ERR 13 #define NFS4_GETATTR_MAXREAD_ERR 14 #define NFS4_GETATTR_MAXWRITE_ERR 15 #define NFS4_GETATTR_NOCACHE_OK 16 typedef struct nfs4_pathconf_info { unsigned pc4_cache_valid:1; /* When in rnode4, is data valid? */ unsigned pc4_no_trunc:1; unsigned pc4_chown_restricted:1; unsigned pc4_case_insensitive:1; unsigned pc4_case_preserving:1; unsigned pc4_xattr_valid:1; unsigned pc4_xattr_exists:1; unsigned pc4_link_support:1; unsigned pc4_symlink_support:1; unsigned pc4_unique_handles:1; unsigned pc4_cansettime:1; unsigned pc4_homogeneous:1; uint_t pc4_link_max; uint_t pc4_name_max; uint_t pc4_filesizebits; } nfs4_pathconf_info_t; /* * Used for client only to process incoming getattr results. */ typedef struct nfs4_ga_ext_res { bitmap4 n4g_suppattrs; nfsstat4 n4g_rdattr_error; fattr4_fh_expire_type n4g_fet; fattr4_lease_time n4g_leasetime; uint64_t n4g_maxfilesize; uint64_t n4g_maxread; uint64_t n4g_maxwrite; nfstime4 n4g_delta; nfs4_pathconf_info_t n4g_pc4; struct statvfs64 n4g_sb; union { nfs_fh4 n4g_fh; struct { uint_t len; char *val; char data[NFS4_FHSIZE]; } nfs_fh4_alt; } n4g_fh_u; /* * Bitmask with valid fields being: * ACL4_SUPPORT_ALLOW_ACL * ACL4_SUPPORT_DENY_ACL * ACL4_SUPPORT_AUDIT_ACL * ACL4_SUPPORT_ALARM_ACL */ fattr4_aclsupport n4g_aclsupport; fattr4_fs_locations n4g_fslocations; } nfs4_ga_ext_res_t; extern bitmap4 rfs4_supported_attrs; #ifdef __cplusplus } #endif #endif /* _NFS4_ATTR_H */