nfs-ganesha 1.4

fsal_types.h

Go to the documentation of this file.
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 */