nfs-ganesha 1.4
|
00001 /* 00002 * 00003 * 00004 * Copyright CEA/DAM/DIF (2008) 00005 * contributeur : Philippe DENIEL philippe.deniel@cea.fr 00006 * Thomas LEIBOVICI thomas.leibovici@cea.fr 00007 * 00008 * 00009 * This program is free software; you can redistribute it and/or 00010 * modify it under the terms of the GNU Lesser General Public 00011 * License as published by the Free Software Foundation; either 00012 * version 3 of the License, or (at your option) any later version. 00013 * 00014 * This program is distributed in the hope that it will be useful, 00015 * but WITHOUT ANY WARRANTY; without even the implied warranty of 00016 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 00017 * Lesser General Public License for more details. 00018 * 00019 * You should have received a copy of the GNU Lesser General Public 00020 * License along with this library; if not, write to the Free Software 00021 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA 00022 * 00023 * --------------------------------------- 00024 */ 00025 00035 #ifndef _FSAL_TYPES_H 00036 #define _FSAL_TYPES_H 00037 00038 #ifndef TRUE 00039 #define TRUE 1 00040 #endif 00041 #ifndef FALSE 00042 #define FALSE 0 00043 #endif 00044 00045 #ifdef _USE_NFS4_ACL 00046 #include <openssl/md5.h> 00047 #endif /* _USE_NFS4_ACL */ 00048 #ifdef _PNFS 00049 #include "nfs4.h" 00050 #endif /* _PNFS */ 00051 00052 #ifdef _SOLARIS 00053 #ifndef MAXNAMLEN 00054 #define MAXNAMLEN 512 00055 #endif 00056 typedef unsigned int u_int32_t; 00057 typedef unsigned short int u_int16_t; 00058 typedef unsigned long long int u_int64_t; 00059 #endif 00060 00061 /* 00062 * labels in the config file 00063 */ 00064 00065 #define CONF_LABEL_FSAL "FSAL" 00066 #define CONF_LABEL_FS_COMMON "FileSystem" 00067 00068 /* other includes */ 00069 #include <sys/types.h> 00070 #include <sys/param.h> 00071 #include <dirent.h> /* for MAXNAMLEN */ 00072 #include "config_parsing.h" 00073 #include "err_fsal.h" 00074 #include "RW_Lock.h" 00075 #include "ganesha_rpc.h" 00076 00077 /* Forward declarations */ 00078 typedef struct fsal_staticfsinfo_t fsal_staticfsinfo_t; 00079 00080 /* FSAL function indexes, and names */ 00081 00082 #define INDEX_FSAL_lookup 0 00083 #define INDEX_FSAL_access 1 00084 #define INDEX_FSAL_create 2 00085 #define INDEX_FSAL_mkdir 3 00086 #define INDEX_FSAL_truncate 4 00087 #define INDEX_FSAL_getattrs 5 00088 #define INDEX_FSAL_setattrs 6 00089 #define INDEX_FSAL_link 7 00090 #define INDEX_FSAL_opendir 8 00091 #define INDEX_FSAL_readdir 9 00092 #define INDEX_FSAL_closedir 10 00093 #define INDEX_FSAL_open 11 00094 #define INDEX_FSAL_read 12 00095 #define INDEX_FSAL_write 13 00096 #define INDEX_FSAL_close 14 00097 #define INDEX_FSAL_readlink 15 00098 #define INDEX_FSAL_symlink 16 00099 #define INDEX_FSAL_rename 17 00100 #define INDEX_FSAL_unlink 18 00101 #define INDEX_FSAL_mknode 19 00102 #define INDEX_FSAL_unused_20 20 00103 #define INDEX_FSAL_dynamic_fsinfo 21 00104 #define INDEX_FSAL_rcp 22 00105 #define INDEX_FSAL_Init 23 00106 #define INDEX_FSAL_get_stats 24 00107 #define INDEX_FSAL_unused_25 25 00108 #define INDEX_FSAL_unused_26 26 00109 #define INDEX_FSAL_unused_27 27 00110 #define INDEX_FSAL_BuildExportContext 28 00111 #define INDEX_FSAL_InitClientContext 29 00112 #define INDEX_FSAL_GetClientContext 30 00113 #define INDEX_FSAL_lookupPath 31 00114 #define INDEX_FSAL_lookupJunction 32 00115 #define INDEX_FSAL_test_access 33 00116 #define INDEX_FSAL_rmdir 34 00117 #define INDEX_FSAL_CleanObjectResources 35 00118 #define INDEX_FSAL_open_by_name 36 00119 #define INDEX_FSAL_open_by_fileid 37 00120 #define INDEX_FSAL_ListXAttrs 38 00121 #define INDEX_FSAL_GetXAttrValue 39 00122 #define INDEX_FSAL_SetXAttrValue 40 00123 #define INDEX_FSAL_GetXAttrAttrs 41 00124 #define INDEX_FSAL_close_by_fileid 42 00125 #define INDEX_FSAL_setattr_access 43 00126 #define INDEX_FSAL_merge_attrs 44 00127 #define INDEX_FSAL_rename_access 45 00128 #define INDEX_FSAL_unlink_access 46 00129 #define INDEX_FSAL_link_access 47 00130 #define INDEX_FSAL_create_access 48 00131 #define INDEX_FSAL_unused_49 49 00132 #define INDEX_FSAL_CleanUpExportContext 50 00133 #define INDEX_FSAL_getextattrs 51 00134 #define INDEX_FSAL_commit 52 00135 #define INDEX_FSAL_getattrs_descriptor 53 00136 #define INDEX_FSAL_lock_op 54 00137 #define INDEX_FSAL_UP_init 55 00138 #define INDEX_FSAL_UP_addfilter 56 00139 #define INDEX_FSAL_UP_getevents 57 00140 #define INDEX_FSAL_unused_58 58 00141 #define INDEX_FSAL_layoutget 59 00142 #define INDEX_FSAL_layoutreturn 60 00143 #define INDEX_FSAL_layoutcommit 61 00144 #define INDEX_FSAL_getdeviceinfo 62 00145 #define INDEX_FSAL_getdevicelist 63 00146 #define INDEX_FSAL_ds_read 64 00147 #define INDEX_FSAL_ds_write 65 00148 #define INDEX_FSAL_ds_commit 66 00149 #define INDEX_FSAL_share_op 67 00150 00151 /* number of FSAL functions */ 00152 #define FSAL_NB_FUNC 68 00153 00154 /* Cookie to be used in FSAL_ListXAttrs() to bypass RO xattr */ 00155 #define FSAL_XATTR_RW_COOKIE ~0 00156 00157 extern const char *fsal_function_names[]; 00158 00159 typedef unsigned long long fsal_u64_t; 00160 typedef unsigned int fsal_uint_t; 00161 typedef unsigned short fsal_ushort_t; 00162 typedef int fsal_boolean_t; 00164 typedef size_t fsal_size_t; 00165 typedef off_t fsal_off_t; 00166 typedef unsigned long fsal_mdsize_t; 00167 typedef unsigned long fsal_count_t; 00168 typedef uid_t fsal_uid_t; 00169 typedef gid_t fsal_gid_t; 00170 typedef mode_t fsal_accessmode_t; 00172 typedef struct fsal_time__ 00173 { 00174 fsal_uint_t seconds; 00175 fsal_uint_t nseconds; 00176 } fsal_time_t; 00179 typedef enum fsal_initflag__ 00180 { 00181 FSAL_INIT_FS_DEFAULT = 0, 00182 FSAL_INIT_FORCE_VALUE, 00183 FSAL_INIT_MAX_LIMIT, 00184 FSAL_INIT_MIN_LIMIT 00185 /* Note : for booleans, we considerate that TRUE > FALSE */ 00186 } fsal_initflag_t; 00187 00189 typedef enum fsal_nodetype__ 00190 { 00191 FSAL_TYPE_FIFO = 0x1, 00192 FSAL_TYPE_CHR = 0x2, 00193 FSAL_TYPE_DIR = 0x4, 00194 FSAL_TYPE_BLK = 0x6, 00195 FSAL_TYPE_FILE = 0x8, 00196 FSAL_TYPE_LNK = 0xA, 00197 FSAL_TYPE_SOCK = 0xC, 00198 FSAL_TYPE_XATTR = 0xE, 00199 FSAL_TYPE_JUNCTION = 0xF 00200 } fsal_nodetype_t; 00201 00202 /* --------------- 00203 * FS dependant : 00204 * --------------*/ 00205 00206 /* export object 00207 * Created by fsal and referenced by the export list 00208 */ 00209 00210 /* handle descriptor 00211 * used primarily to extract the bits of a file object handle from 00212 * protocol buffers and for calculating hashes. 00213 * This points into a buffer allocated and passed by the caller. 00214 * len is set to the buffer size when passed. It is updated to 00215 * the actual copy length on return. 00216 */ 00217 00218 struct fsal_handle_desc { 00219 size_t len; /* actual valid length of handle [IN/OUT]*/ 00220 caddr_t start; /* first octet/byte of embedded handle */ 00221 }; 00222 00223 /* prefered readdir size */ 00224 #define FSAL_READDIR_SIZE 2048 00225 00226 #define FSAL_MAX_NAME_LEN NAME_MAX 00227 #define FSAL_MAX_PATH_LEN PATH_MAX 00228 00229 #define FSAL_NGROUPS_MAX 32 00230 00233 /* Used to record the uid and gid of the client that made a request. */ 00234 struct user_cred { 00235 uid_t caller_uid; 00236 gid_t caller_gid; 00237 unsigned int caller_glen; 00238 gid_t *caller_garray; 00239 }; 00240 00241 /* deprecated and replaced by user_cred 00242 * used mainly in the fsal_op_context_t which is itself deprecated 00243 */ 00244 00245 struct user_credentials { 00246 uid_t user; 00247 gid_t group; 00248 int nbgroups; 00249 gid_t alt_groups[FSAL_NGROUPS_MAX]; 00250 sockaddr_t caller_addr; 00251 }; 00252 00253 typedef struct fsal_name__ 00254 { 00255 char name[FSAL_MAX_NAME_LEN]; 00256 unsigned int len; 00257 } fsal_name_t; 00258 00261 typedef struct fsal_path__ 00262 { 00263 char path[FSAL_MAX_PATH_LEN]; 00264 unsigned int len; 00265 } fsal_path_t; 00266 00267 static const fsal_name_t FSAL_DOT = { ".", 1 }; 00268 static const fsal_name_t FSAL_DOT_DOT = { "..", 2 }; 00269 00270 #define FSAL_NAME_INITIALIZER {"",0} 00271 #define FSAL_PATH_INITIALIZER {"",0} 00272 00273 #ifdef _USE_GHOSTFS 00274 #include "FSAL/FSAL_GHOST_FS/fsal_types.h" 00275 #elif defined(_USE_HPSS) 00276 #include "FSAL/FSAL_HPSS/fsal_types.h" 00277 #elif defined ( _USE_PROXY ) 00278 #include "FSAL/FSAL_PROXY/fsal_types.h" 00279 #elif defined ( _USE_POSIX ) 00280 #include "FSAL/FSAL_POSIX/fsal_types.h" 00281 #include "FSAL/FSAL_POSIX/posixdb.h" 00282 #elif defined ( _USE_SNMP ) 00283 #include "FSAL/FSAL_SNMP/fsal_types.h" 00284 #elif defined ( _USE_FUSE ) 00285 #include "FSAL/FSAL_FUSELIKE/fsal_types.h" 00286 #elif defined ( _USE_LUSTRE ) 00287 #include "FSAL/FSAL_LUSTRE/fsal_types.h" 00288 #elif defined ( _USE_XFS ) 00289 #include "FSAL/FSAL_XFS/fsal_types.h" 00290 #elif defined ( _USE_GPFS ) 00291 #include "FSAL/FSAL_GPFS/fsal_types.h" 00292 #elif defined ( _USE_VFS ) 00293 #include "FSAL/FSAL_VFS/fsal_types.h" 00294 #elif defined ( _USE_ZFS ) 00295 #include "FSAL/FSAL_ZFS/fsal_types.h" 00296 #elif defined ( _USE_CEPH ) 00297 #include "FSAL/FSAL_CEPH/fsal_types.h" 00298 #elif defined ( _USE_TEMPLATE ) /* <- place here your own define */ 00299 #include "FSAL/FSAL_TEMPLATE/fsal_types.h" 00300 #else /* no _USE_<filesystem> flag ! */ 00301 #error "No filesystem compilation flag set for the FSAL." 00302 #endif /* _USE_GHOSTFS */ 00303 00304 #include "fsal_glue.h" 00305 00306 /*--------- end of FS dependant definitions ---------*/ 00307 00310 typedef struct fsal_fsid__ 00311 { 00312 fsal_u64_t major; 00313 fsal_u64_t minor; 00314 } fsal_fsid_t; 00315 00318 typedef struct fsal_dev__ 00319 { 00320 dev_t major; 00321 dev_t minor; 00322 } fsal_dev_t; 00323 00324 /* The maximum ACLs that a file can support */ 00325 /* #define FSAL_MAX_ACL 10 */ 00326 #define FSAL_MAX_ACL 2 00327 00328 /* constants for specifying which ACL types are supported */ 00329 00330 typedef fsal_ushort_t fsal_aclsupp_t; 00331 #define FSAL_ACLSUPPORT_ALLOW 0x01 00332 #define FSAL_ACLSUPPORT_DENY 0x02 00333 00336 typedef unsigned int fsal_acetype_t; 00337 00338 #define FSAL_ACE_TYPE_ALLOW 0 00339 #define FSAL_ACE_TYPE_DENY 1 00340 #define FSAL_ACE_TYPE_AUDIT 2 00341 #define FSAL_ACE_TYPE_ALARM 3 00342 00343 00346 typedef unsigned int fsal_aceflag_t; 00347 00348 #define FSAL_ACE_FLAG_FILE_INHERIT 0x00000001 00349 #define FSAL_ACE_FLAG_DIR_INHERIT 0x00000002 00350 #define FSAL_ACE_FLAG_NO_PROPAGATE 0x00000004 00351 #define FSAL_ACE_FLAG_INHERIT_ONLY 0x00000008 00352 #define FSAL_ACE_FLAG_SUCCESSFUL 0x00000010 00353 #define FSAL_ACE_FLAG_FAILED 0x00000020 00354 #define FSAL_ACE_FLAG_GROUP_ID 0x00000040 00355 #define FSAL_ACE_FLAG_INHERITED 0x00000080 00356 00359 #define FSAL_ACE_IFLAG_EXCLUDE_FILES 0x40000000 00360 #define FSAL_ACE_IFLAG_EXCLUDE_DIRS 0x20000000 00361 #define FSAL_ACE_IFLAG_SPECIAL_ID 0x80000000 00362 00363 #define FSAL_ACE_FLAG_INHERIT (FSAL_ACE_FLAG_FILE_INHERIT | FSAL_ACE_FLAG_DIR_INHERIT |\ 00364 FSAL_ACE_FLAG_INHERIT_ONLY) 00365 00368 typedef fsal_uint_t fsal_aceperm_t; 00369 00370 #define FSAL_ACE_PERM_READ_DATA 0x00000001 00371 #define FSAL_ACE_PERM_LIST_DIR 0x00000001 00372 #define FSAL_ACE_PERM_WRITE_DATA 0x00000002 00373 #define FSAL_ACE_PERM_ADD_FILE 0x00000002 00374 #define FSAL_ACE_PERM_APPEND_DATA 0x00000004 00375 #define FSAL_ACE_PERM_ADD_SUBDIRECTORY 0x00000004 00376 #define FSAL_ACE_PERM_READ_NAMED_ATTR 0x00000008 00377 #define FSAL_ACE_PERM_WRITE_NAMED_ATTR 0x00000010 00378 #define FSAL_ACE_PERM_EXECUTE 0x00000020 00379 #define FSAL_ACE_PERM_DELETE_CHILD 0x00000040 00380 #define FSAL_ACE_PERM_READ_ATTR 0x00000080 00381 #define FSAL_ACE_PERM_WRITE_ATTR 0x00000100 00382 #define FSAL_ACE_PERM_DELETE 0x00010000 00383 #define FSAL_ACE_PERM_READ_ACL 0x00020000 00384 #define FSAL_ACE_PERM_WRITE_ACL 0x00040000 00385 #define FSAL_ACE_PERM_WRITE_OWNER 0x00080000 00386 #define FSAL_ACE_PERM_SYNCHRONIZE 0x00100000 00387 00390 #define FSAL_ACE_NORMAL_WHO 0 00391 #define FSAL_ACE_SPECIAL_OWNER 1 00392 #define FSAL_ACE_SPECIAL_GROUP 2 00393 #define FSAL_ACE_SPECIAL_EVERYONE 3 00394 00395 typedef struct fsal_ace__ 00396 { 00397 00398 fsal_acetype_t type; 00399 fsal_aceperm_t perm; 00400 00401 fsal_aceflag_t flag; 00402 fsal_aceflag_t iflag; /* Internal flags. */ 00403 union 00404 { 00405 fsal_uid_t uid; 00406 fsal_gid_t gid; 00407 } who; 00408 00409 } fsal_ace_t; 00410 00411 typedef struct fsal_acl__ 00412 { 00413 fsal_uint_t naces; 00414 fsal_ace_t *aces; 00415 rw_lock_t lock; 00416 fsal_uint_t ref; 00417 } fsal_acl_t; 00418 00419 typedef struct fsal_acl_data__ 00420 { 00421 fsal_uint_t naces; 00422 fsal_ace_t *aces; 00423 } fsal_acl_data_t; 00424 00425 #ifndef _USE_NFS4_ACL 00426 #define MD5_DIGEST_LENGTH 16 00427 #endif 00428 00429 typedef struct fsal_acl_key__ 00430 { 00431 char digest[MD5_DIGEST_LENGTH]; 00432 } fsal_acl_key_t; 00433 00434 /* Macros for NFS4 ACE flags, masks, and special who values. */ 00435 00436 #define GET_FSAL_ACE_TYPE(ACE) (ACE).type 00437 #define GET_FSAL_ACE_PERM(ACE) (ACE).perm 00438 #define GET_FSAL_ACE_FLAG(ACE) (ACE).flag 00439 #define GET_FSAL_ACE_IFLAG(ACE) (ACE).iflag 00440 #define GET_FSAL_ACE_USER(ACE) (ACE).who.uid 00441 #define GET_FSAL_ACE_GROUP(ACE) (ACE).who.gid 00442 00443 #define IS_FSAL_ACE_BIT(WORD, BIT) (0 != ((WORD) & (BIT))) 00444 #define IS_FSAL_ACE_ALL_BITS(WORD, BITS) (BITS == ((WORD) & (BITS))) 00445 00446 #define IS_FSAL_ACE_TYPE(ACE, VALUE) ((GET_FSAL_ACE_TYPE(ACE)) == (VALUE)) 00447 #define IS_FSAL_ACE_USER(ACE, VALUE) ((GET_FSAL_ACE_USER(ACE)) == (VALUE)) 00448 #define IS_FSAL_ACE_GROUP(ACE, VALUE) ((GET_FSAL_ACE_GROUP(ACE)) == (VALUE)) 00449 00450 #define IS_FSAL_ACE_ALLOW(ACE) IS_FSAL_ACE_TYPE(ACE, FSAL_ACE_TYPE_ALLOW) 00451 #define IS_FSAL_ACE_DENY(ACE) IS_FSAL_ACE_TYPE(ACE, FSAL_ACE_TYPE_DENY) 00452 #define IS_FSAL_ACE_AUDIT(ACE) IS_FSAL_ACE_TYPE(ACE, FSAL_ACE_TYPE_AUDIT) 00453 #define IS_FSAL_ACE_ALRAM(ACE) IS_FSAL_ACE_TYPE(ACE, FSAL_ACE_TYPE_ALARM) 00454 00455 #define IS_FSAL_ACE_FILE_INHERIT(ACE) IS_FSAL_ACE_BIT(GET_FSAL_ACE_FLAG(ACE),FSAL_ACE_FLAG_FILE_INHERIT) 00456 #define IS_FSAL_ACE_DIR_INHERIT(ACE) IS_FSAL_ACE_BIT(GET_FSAL_ACE_FLAG(ACE),FSAL_ACE_FLAG_DIR_INHERIT) 00457 #define IS_FSAL_ACE_NO_PROPAGATE(ACE) IS_FSAL_ACE_BIT(GET_FSAL_ACE_FLAG(ACE),FSAL_ACE_FLAG_NO_PROPAGATE) 00458 #define IS_FSAL_ACE_INHERIT_ONLY(ACE) IS_FSAL_ACE_BIT(GET_FSAL_ACE_FLAG(ACE),FSAL_ACE_FLAG_INHERIT_ONLY) 00459 #define IS_FSAL_ACE_FLAG_SUCCESSFUL(ACE) IS_FSAL_ACE_BIT(GET_FSAL_ACE_FLAG(ACE),FSAL_ACE_FLAG_SUCCESSFUL) 00460 #define IS_FSAL_ACE_AUDIT_FAILURE(ACE) IS_FSAL_ACE_BIT(GET_FSAL_ACE_FLAG(ACE),FSAL_ACE_FLAG_FAILED) 00461 #define IS_FSAL_ACE_GROUP_ID(ACE) IS_FSAL_ACE_BIT(GET_FSAL_ACE_FLAG(ACE),FSAL_ACE_FLAG_GROUP_ID) 00462 #define IS_FSAL_ACE_INHERIT(ACE) IS_FSAL_ACE_BIT(GET_FSAL_ACE_FLAG(ACE),FSAL_ACE_FLAG_INHERIT) 00463 #define IS_FSAL_ACE_INHERTED(ACE) IS_FSAL_ACE_BIT(GET_FSAL_ACE_FLAG(ACE),FSAL_ACE_FLAG_INHERITED) 00464 00465 #define GET_FSAL_ACE_WHO_TYPE(ACE) IS_FSAL_ACE_GROUP_ID(ACE) ? "gid" : "uid" 00466 #define GET_FSAL_ACE_WHO(ACE) IS_FSAL_ACE_GROUP_ID(ACE) ? (ACE).who.gid : (ACE).who.uid 00467 00468 #define IS_FSAL_ACE_SPECIAL_OWNER(ACE) IS_FSAL_ACE_USER(ACE,FSAL_ACE_SPECIAL_OWNER) 00469 #define IS_FSAL_ACE_SPECIAL_GROUP(ACE) IS_FSAL_ACE_USER(ACE,FSAL_ACE_SPECIAL_GROUP) 00470 #define IS_FSAL_ACE_SPECIAL_EVERYONE(ACE) IS_FSAL_ACE_USER(ACE,FSAL_ACE_SPECIAL_EVERYONE) 00471 00472 /* Macros for internal NFS4 ACE flags. */ 00473 00474 #define IS_FSAL_ACE_SPECIAL_ID(ACE) IS_FSAL_ACE_BIT(GET_FSAL_ACE_IFLAG(ACE),FSAL_ACE_IFLAG_SPECIAL_ID) 00475 #define IS_FSAL_FILE_APPLICABLE(ACE) \ 00476 (!IS_FSAL_ACE_BIT(GET_FSAL_ACE_IFLAG(ACE),FSAL_ACE_IFLAG_EXCLUDE_FILES)) 00477 #define IS_FSAL_DIR_APPLICABLE(ACE) \ 00478 (!IS_FSAL_ACE_BIT(GET_FSAL_ACE_IFLAG(ACE),FSAL_ACE_IFLAG_EXCLUDE_DIRS)) 00479 00480 /* Macros for NFS4 ACE permissions. */ 00481 00482 #define IS_FSAL_ACE_READ_DATA(ACE) IS_FSAL_ACE_BIT(GET_FSAL_ACE_PERM(ACE),FSAL_ACE_PERM_READ_DATA) 00483 #define IS_FSAL_ACE_LIST_DIR(ACE) IS_FSAL_ACE_BIT(GET_FSAL_ACE_PERM(ACE),FSAL_ACE_PERM_LIST_DIR) 00484 #define IS_FSAL_ACE_WRITE_DATA(ACE) IS_FSAL_ACE_BIT(GET_FSAL_ACE_PERM(ACE),FSAL_ACE_PERM_WRITE_DATA) 00485 #define IS_FSAL_ACE_ADD_FIILE(ACE) IS_FSAL_ACE_BIT(GET_FSAL_ACE_PERM(ACE),FSAL_ACE_PERM_ADD_FILE) 00486 #define IS_FSAL_ACE_APPEND_DATA(ACE) IS_FSAL_ACE_BIT(GET_FSAL_ACE_PERM(ACE),FSAL_ACE_PERM_APPEND_DATA) 00487 #define IS_FSAL_ACE_ADD_SUBDIRECTORY(ACE) IS_FSAL_ACE_BIT(GET_FSAL_ACE_PERM(ACE),FSAL_ACE_PERM_ADD_SUBDIRECTORY) 00488 #define IS_FSAL_ACE_READ_NAMED_ATTR(ACE) IS_FSAL_ACE_BIT(GET_FSAL_ACE_PERM(ACE),FSAL_ACE_PERM_READ_NAMED_ATTR) 00489 #define IS_FSAL_ACE_WRITE_NAMED_ATTR(ACE) IS_FSAL_ACE_BIT(GET_FSAL_ACE_PERM(ACE),FSAL_ACE_PERM_WRITE_NAMED_ATTR) 00490 #define IS_FSAL_ACE_EXECUTE(ACE) IS_FSAL_ACE_BIT(GET_FSAL_ACE_PERM(ACE),FSAL_ACE_PERM_EXECUTE) 00491 #define IS_FSAL_ACE_DELETE_CHILD(ACE) IS_FSAL_ACE_BIT(GET_FSAL_ACE_PERM(ACE),FSAL_ACE_PERM_DELETE_CHILD) 00492 #define IS_FSAL_ACE_READ_ATTR(ACE) IS_FSAL_ACE_BIT(GET_FSAL_ACE_PERM(ACE),FSAL_ACE_PERM_READ_ATTR) 00493 #define IS_FSAL_ACE_WRITE_ATTR(ACE) IS_FSAL_ACE_BIT(GET_FSAL_ACE_PERM(ACE),FSAL_ACE_PERM_WRITE_ATTR) 00494 #define IS_FSAL_ACE_DELETE(ACE) IS_FSAL_ACE_BIT(GET_FSAL_ACE_PERM(ACE),FSAL_ACE_PERM_DELETE) 00495 #define IS_FSAL_ACE_READ_ACL(ACE) IS_FSAL_ACE_BIT(GET_FSAL_ACE_PERM(ACE),FSAL_ACE_PERM_READ_ACL) 00496 #define IS_FSAL_ACE_WRITE_ACL(ACE) IS_FSAL_ACE_BIT(GET_FSAL_ACE_PERM(ACE),FSAL_ACE_PERM_WRITE_ACL) 00497 #define IS_FSAL_ACE_WRITE_OWNER(ACE) IS_FSAL_ACE_BIT(GET_FSAL_ACE_PERM(ACE),FSAL_ACE_PERM_WRITE_OWNER) 00498 #define IS_FSAL_ACE_SYNCHRONIZE(ACE) IS_FSAL_ACE_BIT(GET_FSAL_ACE_PERM(ACE),FSAL_ACE_PERM_SYNCHRONIZE) 00499 00502 #define FSAL_MODE_SUID 04000 /* set uid bit */ 00503 #define FSAL_MODE_SGID 02000 /* set gid bit */ 00504 #define FSAL_MODE_SVTX 01000 /* sticky bit */ 00505 00506 #define FSAL_MODE_RWXU 00700 /* all permissions for owner */ 00507 00508 #define FSAL_MODE_RUSR 00400 /* read permission for owner */ 00509 #define FSAL_MODE_WUSR 00200 /* write permission for owner */ 00510 #define FSAL_MODE_XUSR 00100 /* exec permission for owner */ 00511 00512 #define FSAL_MODE_RWXG 00070 /* all permissions for group */ 00513 00514 #define FSAL_MODE_RGRP 00040 /* read permission for group */ 00515 #define FSAL_MODE_WGRP 00020 /* write permission for group */ 00516 #define FSAL_MODE_XGRP 00010 /* exec permission for group */ 00517 00518 #define FSAL_MODE_RWXO 00007 /* all permissions for other */ 00519 00520 #define FSAL_MODE_ROTH 00004 /* read permission for other */ 00521 #define FSAL_MODE_WOTH 00002 /* write permission for other */ 00522 #define FSAL_MODE_XOTH 00001 /* exec permission for other */ 00523 00529 typedef fsal_u64_t fsal_attrib_mask_t; 00530 00535 /* supported attributes */ 00536 #define FSAL_ATTR_SUPPATTR ((fsal_attrib_mask_t) 0x0000000000000001LL ) 00537 /* file type */ 00538 #define FSAL_ATTR_TYPE ((fsal_attrib_mask_t) 0x0000000000000002LL ) 00539 /* file size */ 00540 #define FSAL_ATTR_SIZE ((fsal_attrib_mask_t) 0x0000000000000004LL ) 00541 /* filesystem id */ 00542 #define FSAL_ATTR_FSID ((fsal_attrib_mask_t) 0x0000000000000008LL ) 00543 /* ACL */ 00544 #define FSAL_ATTR_ACL ((fsal_attrib_mask_t) 0x0000000000000020LL ) 00545 /* file id */ 00546 #define FSAL_ATTR_FILEID ((fsal_attrib_mask_t) 0x0000000000000040LL ) 00547 /* Access permission flag */ 00548 #define FSAL_ATTR_MODE ((fsal_attrib_mask_t) 0x0000000000000080LL ) 00549 /* Number of hard links */ 00550 #define FSAL_ATTR_NUMLINKS ((fsal_attrib_mask_t) 0x0000000000000100LL ) 00551 /* owner ID */ 00552 #define FSAL_ATTR_OWNER ((fsal_attrib_mask_t) 0x0000000000000200LL ) 00553 /* group ID */ 00554 #define FSAL_ATTR_GROUP ((fsal_attrib_mask_t) 0x0000000000000400LL ) 00555 /* ID of device for block special or character special files*/ 00556 #define FSAL_ATTR_RAWDEV ((fsal_attrib_mask_t) 0x0000000000000800LL ) 00557 /* Access time */ 00558 #define FSAL_ATTR_ATIME ((fsal_attrib_mask_t) 0x0000000000001000LL ) 00559 /* Creation time */ 00560 #define FSAL_ATTR_CREATION ((fsal_attrib_mask_t) 0x0000000000002000LL ) 00561 /* Metadata modification time */ 00562 #define FSAL_ATTR_CTIME ((fsal_attrib_mask_t) 0x0000000000004000LL ) 00563 /* data modification time */ 00564 #define FSAL_ATTR_MTIME ((fsal_attrib_mask_t) 0x0000000000008000LL ) 00565 /* space used by this file. */ 00566 #define FSAL_ATTR_SPACEUSED ((fsal_attrib_mask_t) 0x0000000000010000LL ) 00567 /* Mounted on fileid */ 00568 #define FSAL_ATTR_MOUNTFILEID ((fsal_attrib_mask_t) 0x0000000000020000LL ) 00569 00570 /* NFS4 change_time like attribute */ 00571 #define FSAL_ATTR_CHGTIME ((fsal_attrib_mask_t) 0x0000000000040000LL ) 00572 00573 /* This bit indicates that an error occured during getting object attributes */ 00574 #define FSAL_ATTR_RDATTR_ERR ((fsal_attrib_mask_t) 0x8000000000000000LL ) 00575 00576 /* Generation number */ 00577 #define FSAL_ATTR_GENERATION ((fsal_attrib_mask_t) 0x0000000000080000LL ) 00578 00579 /* Change attribute */ 00580 #define FSAL_ATTR_CHANGE ((fsal_attrib_mask_t) 0x0000000000100000LL ) 00581 00582 00583 /* "classic" attributes sets : */ 00584 00585 /* NFSv4 Mandatory attributes */ 00586 00587 #define FSAL_ATTRS_MANDATORY ( FSAL_ATTR_SUPPATTR | FSAL_ATTR_TYPE | \ 00588 FSAL_ATTR_SIZE | FSAL_ATTR_FSID | FSAL_ATTR_CHGTIME ) 00589 00590 /* attributes that are returned by the POSIX stat function */ 00591 00592 #define FSAL_ATTRS_POSIX ( FSAL_ATTR_MODE | FSAL_ATTR_FILEID | \ 00593 FSAL_ATTR_FSID | FSAL_ATTR_RAWDEV | \ 00594 FSAL_ATTR_NUMLINKS | FSAL_ATTR_OWNER |\ 00595 FSAL_ATTR_GROUP | FSAL_ATTR_SIZE | \ 00596 FSAL_ATTR_ATIME | FSAL_ATTR_MTIME | \ 00597 FSAL_ATTR_CTIME | FSAL_ATTR_SPACEUSED ) 00598 00599 00602 typedef struct fsal_attrib_list__ 00603 { 00604 00605 fsal_attrib_mask_t asked_attributes; 00611 fsal_attrib_mask_t supported_attributes; 00612 fsal_nodetype_t type; 00613 fsal_size_t filesize; 00614 fsal_fsid_t fsid; 00615 fsal_acl_t *acl; 00616 fsal_u64_t fileid; 00617 fsal_accessmode_t mode; 00618 fsal_count_t numlinks; 00619 fsal_uid_t owner; 00620 fsal_gid_t group; 00621 fsal_dev_t rawdev; 00622 fsal_time_t atime; 00623 fsal_time_t creation; 00624 fsal_time_t ctime; 00625 fsal_time_t mtime; 00626 fsal_time_t chgtime; 00627 fsal_size_t spaceused; 00628 fsal_u64_t change; 00629 fsal_u64_t mounted_on_fileid; 00630 00631 } fsal_attrib_list_t; 00632 00635 typedef struct fsal_extattrib_list__ 00636 { 00637 fsal_attrib_mask_t asked_attributes; 00642 fsal_uint_t generation ; 00643 } fsal_extattrib_list_t ; 00644 00647 typedef fsal_uint_t fsal_accessflags_t; 00648 00649 #define FSAL_OWNER_OK 0x08000000 /* Allow owner override */ 00650 #define FSAL_R_OK 0x04000000 /* Test for Read permission */ 00651 #define FSAL_W_OK 0x02000000 /* Test for Write permission */ 00652 #define FSAL_X_OK 0x01000000 /* Test for execute permission */ 00653 #define FSAL_F_OK 0x10000000 /* Test for existence of File */ 00654 #define FSAL_ACCESS_OK 0x00000000 /* Allow */ 00655 00656 #define FSAL_ACCESS_FLAG_BIT_MASK 0x80000000 00657 #define FSAL_MODE_BIT_MASK 0x7F000000 00658 #define FSAL_ACE4_BIT_MASK 0x00FFFFFF 00659 00660 #define FSAL_MODE_MASK(access) (access & FSAL_MODE_BIT_MASK) 00661 #define FSAL_ACE4_MASK(access) (access & FSAL_ACE4_BIT_MASK) 00662 00663 #define FSAL_MODE_MASK_FLAG 0x00000000 00664 #define FSAL_ACE4_MASK_FLAG 0x80000000 00665 00666 #define FSAL_MODE_MASK_SET(access) (access | FSAL_MODE_MASK_FLAG) 00667 #define FSAL_ACE4_MASK_SET(access) (access | FSAL_ACE4_MASK_FLAG) 00668 00669 #define IS_FSAL_MODE_MASK_VALID(access) ((access & FSAL_ACCESS_FLAG_BIT_MASK) == FSAL_MODE_MASK_FLAG) 00670 #define IS_FSAL_ACE4_MASK_VALID(access) ((access & FSAL_ACCESS_FLAG_BIT_MASK) == FSAL_ACE4_MASK_FLAG) 00671 00672 #define IS_FSAL_DIR(filetype) (filetype == FSAL_TYPE_DIR) 00673 00674 #define FSAL_WRITE_ACCESS (FSAL_MODE_MASK_SET(FSAL_W_OK) | \ 00675 FSAL_ACE4_MASK_SET(FSAL_ACE_PERM_WRITE_DATA | \ 00676 FSAL_ACE_PERM_APPEND_DATA)) 00677 #define FSAL_READ_ACCESS (FSAL_MODE_MASK_SET(FSAL_R_OK) | \ 00678 FSAL_ACE4_MASK_SET(FSAL_ACE_PERM_READ_DATA)) 00679 00680 00683 typedef struct fsal_dirent__ 00684 { 00685 00686 fsal_handle_t handle; 00687 fsal_name_t name; 00688 fsal_cookie_t cookie; 00690 fsal_attrib_list_t attributes; 00691 struct fsal_dirent__ *nextentry; 00693 } fsal_dirent_t; 00694 00697 typedef fsal_ushort_t fsal_openflags_t; 00698 00699 #define FSAL_O_CLOSED 0x0000 /* read only */ 00700 #define FSAL_O_RDONLY 0x0001 /* read only */ 00701 #define FSAL_O_RDWR 0x0002 /* read/write */ 00702 #define FSAL_O_WRONLY 0x0004 /* write only */ 00703 #define FSAL_O_APPEND 0x0008 /* append */ 00704 #define FSAL_O_TRUNC 0x0010 /* truncate */ 00705 #define FSAL_O_CREATE 0x0020 /* create */ 00706 #define FSAL_O_SYNC 0x0040 /* sync */ 00707 00718 typedef enum fsal_seektype__ 00719 { 00720 FSAL_SEEK_SET, 00721 FSAL_SEEK_CUR, 00722 FSAL_SEEK_END 00723 } fsal_seektype_t; 00724 00725 /* 00726 * Debug formatting 00727 */ 00728 static inline const char *format_seek_whence(fsal_seektype_t whence) 00729 { 00730 switch (whence) { 00731 case FSAL_SEEK_SET: 00732 return "SEEK_SET"; 00733 case FSAL_SEEK_CUR: 00734 return "SEEK_CUR"; 00735 case FSAL_SEEK_END: 00736 return "SEEK_END"; 00737 default: 00738 return "ERROR"; 00739 } 00740 } 00741 00742 00743 typedef struct fsal_seek__ 00744 { 00745 fsal_seektype_t whence; 00746 fsal_off_t offset; 00747 } fsal_seek_t; 00748 00751 typedef fsal_ushort_t fsal_fhexptype_t; 00752 00753 /* filehandle never expires until 00754 * the object is deleted : */ 00755 #define FSAL_EXPTYPE_PERSISTENT 0x0001 00756 00757 /* filehandle may expire at any time 00758 * except as specified in 00759 * FSAL_EXPTYPE_NOEXP_OPEN flag if used : */ 00760 #define FSAL_EXPTYPE_VOLATILE 0x0002 00761 00762 /* if used toghether with FSAL_EXPTYPE_VOLATILE 00763 * an handle can't expired when it is opened : */ 00764 #define FSAL_EXPTYPE_NOEXP_OPEN 0x0004 00765 00766 /* An handle can expire on migration 00767 * (redundant if FSAL_EXPTYPE_VOLATILE is specified). */ 00768 #define FSAL_EXPTYPE_MIGRATE 0x0008 00769 00770 /* An handle can expire on renaming object 00771 * (redundant if FSAL_EXPTYPE_VOLATILE is specified). */ 00772 #define FSAL_EXPTYPE_RENAME 0x0010 00773 00776 #define SET_INTEGER_PARAM( cfg, p_init_info, _field ) \ 00777 switch( (p_init_info)->behaviors._field ){ \ 00778 case FSAL_INIT_FORCE_VALUE : \ 00779 /* force the value in any case */ \ 00780 cfg._field = (p_init_info)->values._field; \ 00781 break; \ 00782 case FSAL_INIT_MAX_LIMIT : \ 00783 /* check the higher limit */ \ 00784 if ( cfg._field > (p_init_info)->values._field ) \ 00785 cfg._field = (p_init_info)->values._field ; \ 00786 break; \ 00787 case FSAL_INIT_MIN_LIMIT : \ 00788 /* check the lower limit */ \ 00789 if ( cfg._field < (p_init_info)->values._field ) \ 00790 cfg._field = (p_init_info)->values._field ; \ 00791 break; \ 00792 case FSAL_INIT_FS_DEFAULT: \ 00793 default: \ 00794 /* In the other cases, we keep the default value. */ \ 00795 break; \ 00796 } 00797 00798 #define SET_BITMAP_PARAM( cfg, p_init_info, _field ) \ 00799 switch( (p_init_info)->behaviors._field ){ \ 00800 case FSAL_INIT_FORCE_VALUE : \ 00801 /* force the value in any case */ \ 00802 cfg._field = (p_init_info)->values._field; \ 00803 break; \ 00804 case FSAL_INIT_MAX_LIMIT : \ 00805 /* proceed a bit AND */ \ 00806 cfg._field &= (p_init_info)->values._field ; \ 00807 break; \ 00808 case FSAL_INIT_MIN_LIMIT : \ 00809 /* proceed a bit OR */ \ 00810 cfg._field |= (p_init_info)->values._field ; \ 00811 break; \ 00812 case FSAL_INIT_FS_DEFAULT: \ 00813 default: \ 00814 /* In the other cases, we keep the default value. */ \ 00815 break; \ 00816 } 00817 00818 #define SET_BOOLEAN_PARAM( cfg, p_init_info, _field ) \ 00819 switch( (p_init_info)->behaviors._field ){ \ 00820 case FSAL_INIT_FORCE_VALUE : \ 00821 /* force the value in any case */ \ 00822 cfg._field = (p_init_info)->values._field; \ 00823 break; \ 00824 case FSAL_INIT_MAX_LIMIT : \ 00825 /* proceed a boolean AND */ \ 00826 cfg._field = cfg._field && (p_init_info)->values._field ; \ 00827 break; \ 00828 case FSAL_INIT_MIN_LIMIT : \ 00829 /* proceed a boolean OR */ \ 00830 cfg._field = cfg._field && (p_init_info)->values._field ; \ 00831 break; \ 00832 case FSAL_INIT_FS_DEFAULT: \ 00833 default: \ 00834 /* In the other cases, we keep the default value. */ \ 00835 break; \ 00836 } 00837 00838 struct fsal_staticfsinfo_t 00839 { 00840 00841 fsal_size_t maxfilesize; 00842 fsal_count_t maxlink; 00843 fsal_mdsize_t maxnamelen; 00844 fsal_mdsize_t maxpathlen; 00845 fsal_boolean_t no_trunc; 00846 fsal_boolean_t chown_restricted; 00847 fsal_boolean_t case_insensitive; 00848 fsal_boolean_t case_preserving; 00849 fsal_fhexptype_t fh_expire_type; 00850 fsal_boolean_t link_support; 00851 fsal_boolean_t symlink_support; 00852 fsal_boolean_t lock_support; 00853 fsal_boolean_t lock_support_owner; 00854 fsal_boolean_t lock_support_async_block; 00855 fsal_boolean_t named_attr; 00856 fsal_boolean_t unique_handles; 00857 fsal_time_t lease_time; 00858 fsal_aclsupp_t acl_support; 00859 fsal_boolean_t cansettime; 00861 fsal_boolean_t homogenous; 00864 fsal_attrib_mask_t supported_attrs; 00868 fsal_size_t maxread; 00869 fsal_size_t maxwrite; 00871 fsal_accessmode_t umask; 00874 fsal_boolean_t auth_exportpath_xdev; 00879 fsal_accessmode_t xattr_access_rights; 00882 fsal_boolean_t accesscheck_support; 00885 fsal_boolean_t share_support; 00886 fsal_boolean_t share_support_owner; 00887 #ifdef _PNFS_MDS 00888 fsal_boolean_t pnfs_supported; 00889 fattr4_fs_layout_types fs_layout_types; 00892 fsal_size_t layout_blksize; 00894 int max_segment_count; 00897 fsal_size_t loc_buffer_size; 00900 fsal_size_t dsaddr_buffer_size; 00905 #endif /* _PNFS_MDS */ 00906 00907 }; 00908 00909 00912 typedef struct fsal_dynamicfsinfo__ 00913 { 00914 00915 fsal_size_t total_bytes; 00916 fsal_size_t free_bytes; 00917 fsal_size_t avail_bytes; 00918 fsal_u64_t total_files; 00919 fsal_u64_t free_files; 00920 fsal_u64_t avail_files; 00921 fsal_time_t time_delta; 00922 00923 } fsal_dynamicfsinfo_t; 00924 00927 typedef fsal_ushort_t fsal_rcpflag_t; 00928 00929 /* Copies the file from the filesystem to a local path. */ 00930 #define FSAL_RCP_FS_TO_LOCAL 0x0001 00931 00932 /* Copies the file from local path to the filesystem. */ 00933 #define FSAL_RCP_LOCAL_TO_FS 0x0002 00934 00935 /* create the target local file if it doesn't exist */ 00936 #define FSAL_RCP_LOCAL_CREAT 0x0010 00937 00938 /* error if the target local file already exists */ 00939 #define FSAL_RCP_LOCAL_EXCL 0x0020 00940 00943 typedef struct fs_common_initinfo__ 00944 { 00945 00946 /* specifies the behavior for each init value. */ 00947 struct _behavior_ 00948 { 00949 #ifdef _PNFS_MDS 00950 fsal_initflag_t 00951 maxfilesize, maxlink, maxnamelen, maxpathlen, 00952 no_trunc, chown_restricted, case_insensitive, 00953 case_preserving, fh_expire_type, link_support, symlink_support, lock_support, 00954 lock_support_owner, lock_support_async_block, 00955 named_attr, unique_handles, lease_time, acl_support, cansettime, 00956 homogenous, supported_attrs, maxread, maxwrite, umask, 00957 auth_exportpath_xdev, xattr_access_rights, accesscheck_support, 00958 share_support, share_support_owner, pnfs_supported, 00959 fs_layout_types, layout_blksize; 00960 #else /* !_PNFS_MDS */ 00961 fsal_initflag_t 00962 maxfilesize, maxlink, maxnamelen, maxpathlen, 00963 no_trunc, chown_restricted, case_insensitive, 00964 case_preserving, fh_expire_type, link_support, symlink_support, lock_support, 00965 lock_support_owner, lock_support_async_block, 00966 named_attr, unique_handles, lease_time, acl_support, cansettime, 00967 homogenous, supported_attrs, maxread, maxwrite, umask, 00968 auth_exportpath_xdev, xattr_access_rights, accesscheck_support, 00969 share_support, share_support_owner; 00970 #endif /* !_PNFS_MDS */ 00971 } behaviors; 00972 00973 /* specifies the values to be set if behavior <> FSAL_INIT_FS_DEFAULT */ 00974 fsal_staticfsinfo_t values; 00975 00976 } fs_common_initinfo_t; 00977 00980 typedef struct fsal_init_info__ 00981 { 00982 unsigned int max_fs_calls; 00983 } fsal_init_info_t; 00984 00987 typedef struct fsal_parameter__ 00988 { 00989 00990 fsal_init_info_t fsal_info; 00991 fs_common_initinfo_t fs_common_info; 00992 fs_specific_initinfo_t fs_specific_info; 00994 } fsal_parameter_t; 00995 00998 typedef struct func_fsal_stats__ { 00999 unsigned int nb_call[FSAL_NB_FUNC]; 01000 unsigned int nb_success[FSAL_NB_FUNC]; 01001 unsigned int nb_err_retryable[FSAL_NB_FUNC]; 01002 unsigned int nb_err_unrecover[FSAL_NB_FUNC]; 01003 } func_fsal_stats_t; 01004 01005 typedef struct fsal_statistics__ 01006 { 01007 func_fsal_stats_t func_stats; 01008 } fsal_statistics_t; 01009 01012 typedef struct fsal_status__ 01013 { 01014 fsal_errors_t major; 01015 int minor; 01016 } fsal_status_t; 01017 01018 /* No error constant */ 01019 static fsal_status_t __attribute__ ((__unused__)) FSAL_STATUS_NO_ERROR = 01020 { 01021 ERR_FSAL_NO_ERROR, 0}; 01022 01025 typedef struct fsal_buffdesc__ 01026 { 01027 unsigned int len; 01028 char *pointer; 01029 } fsal_buffdesc_t; 01030 01031 /* quotas */ 01032 typedef struct fsal_quota__ 01033 { 01034 u_int bhardlimit; 01035 u_int bsoftlimit; 01036 u_int curblocks; 01037 u_int fhardlimit; 01038 u_int fsoftlimit; 01039 u_int curfiles; 01040 u_int btimeleft; 01041 u_int ftimeleft; 01042 u_int bsize; 01043 } fsal_quota_t; 01044 01045 typedef enum fsal_quota_type__ 01046 { 01047 FSAL_QUOTA_BLOCKS = 1, 01048 FSAL_QUOTA_INODES = 2 01049 } fsal_quota_type_t ; 01050 01051 /* output digest sizes */ 01052 01053 #define FSAL_DIGEST_SIZE_HDLV2 29 01054 #define FSAL_DIGEST_SIZE_HDLV3 61 01055 01056 #ifdef _USE_PROXY 01057 #define FSAL_DIGEST_SIZE_HDLV4 108 01058 #else 01059 #define FSAL_DIGEST_SIZE_HDLV4 61 01060 #endif /* _USE_FSAL_PROXY */ 01061 01062 01063 01064 #define FSAL_DIGEST_SIZE_FILEID2 (sizeof(int)) 01065 #define FSAL_DIGEST_SIZE_FILEID3 (sizeof(fsal_u64_t)) 01066 #define FSAL_DIGEST_SIZE_FILEID4 (sizeof(fsal_u64_t)) 01067 01068 #if defined(_USE_HPSS) || defined(_USE_POSIX) 01069 /* In HPSS, the file handle contains object type. */ 01070 #define FSAL_DIGEST_SIZE_NODETYPE (sizeof(fsal_nodetype_t)) 01071 01072 #endif 01073 01074 /* digest types */ 01075 01076 typedef enum fsal_digesttype_t 01077 { 01078 FSAL_DIGEST_SIZEOF, /* just tell me how big... */ 01079 /* NFS handles */ 01080 FSAL_DIGEST_NFSV2, 01081 FSAL_DIGEST_NFSV3, 01082 FSAL_DIGEST_NFSV4, 01083 01084 /* unic file identifier (for digest only) */ 01085 FSAL_DIGEST_FILEID2, 01086 FSAL_DIGEST_FILEID3, 01087 FSAL_DIGEST_FILEID4 01088 #if defined(_USE_HPSS) || defined(_USE_POSIX) 01089 /* In HPSS, the object type can be 01090 * extracted from the handle. 01091 */ 01092 , FSAL_DIGEST_NODETYPE 01093 #endif 01094 } fsal_digesttype_t; 01095 01096 typedef enum fsal_lock_op_t 01097 { 01098 FSAL_OP_LOCKT, /* test if this lock may be applied */ 01099 FSAL_OP_LOCK, /* request a non-blocking lock */ 01100 FSAL_OP_LOCKB, /* request a blocking lock (NEW) */ 01101 FSAL_OP_UNLOCK, /* release a lock */ 01102 FSAL_OP_CANCEL /* cancel a blocking lock (NEW) */ 01103 01104 } fsal_lock_op_t; 01105 01106 typedef enum fsal_lock_t 01107 { 01108 FSAL_LOCK_R, 01109 FSAL_LOCK_W, 01110 FSAL_NO_LOCK 01111 } fsal_lock_t; 01112 01113 typedef struct fsal_lock_param_t 01114 { 01115 fsal_lock_t lock_type; 01116 fsal_off_t lock_start; 01117 fsal_size_t lock_length; 01118 } fsal_lock_param_t; 01119 01120 typedef struct fsal_share_param_t 01121 { 01122 unsigned int share_access; 01123 unsigned int share_deny; 01124 } fsal_share_param_t; 01125 01126 #endif /* _FSAL_TYPES_H */