nfs-ganesha 1.4

fsal_internal.h

Go to the documentation of this file.
00001 
00012 #include  "fsal.h"
00013 #include "FSAL/common_functions.h"
00014 #include "nfs4.h"
00015 
00016 #ifndef FSAL_INTERNAL_H
00017 #define FSAL_INTERNAL_H
00018 /* the following variables must not be defined in fsal_internal.c */
00019 #ifndef FSAL_INTERNAL_C
00020 
00021 #define FSAL_PROXY_OWNER_LEN 256
00022 
00023 /* static filesystem info.
00024  * read access only.
00025  */
00026 extern fsal_staticfsinfo_t global_fs_info;
00027 
00028 #endif
00029 
00030 typedef struct fsal_proxy_internal_fattr__
00031 {
00032   fattr4_type type;
00033   fattr4_change change_time;
00034   fattr4_size size;
00035   fattr4_fsid fsid;
00036   fattr4_filehandle filehandle;
00037   fattr4_fileid fileid;
00038   fattr4_mode mode;
00039   fattr4_numlinks numlinks;
00040   fattr4_owner owner;           /* Needs to points to a string */
00041   fattr4_owner_group owner_group;       /* Needs to points to a string */
00042   fattr4_space_used space_used;
00043   fattr4_time_access time_access;
00044   fattr4_time_metadata time_metadata;
00045   fattr4_time_modify time_modify;
00046   fattr4_rawdev rawdev;
00047   char padowner[MAXNAMLEN];
00048   char padgroup[MAXNAMLEN];
00049   char padfh[NFS4_FHSIZE];
00050 } fsal_proxy_internal_fattr_t;
00051 
00052 typedef struct fsal_proxy_internal_fattr_readdir__
00053 {
00054   fattr4_type type;
00055   fattr4_change change_time;
00056   fattr4_size size;
00057   fattr4_fsid fsid;
00058   fattr4_filehandle filehandle;
00059   fattr4_fileid fileid;
00060   fattr4_mode mode;
00061   fattr4_numlinks numlinks;
00062   fattr4_owner owner;           /* Needs to points to a string */
00063   fattr4_owner_group owner_group;       /* Needs to points to a string */
00064   fattr4_space_used space_used;
00065   fattr4_time_access time_access;
00066   fattr4_time_metadata time_metadata;
00067   fattr4_time_modify time_modify;
00068   fattr4_rawdev rawdev;
00069   char padowner[MAXNAMLEN];
00070   char padgroup[MAXNAMLEN];
00071   char padfh[NFS4_FHSIZE];
00072 } fsal_proxy_internal_fattr_readdir_t;
00073 
00074 void fsal_internal_proxy_setup_fattr(fsal_proxy_internal_fattr_t * pfattr);
00075 void fsal_internal_proxy_setup_readdir_fattr(fsal_proxy_internal_fattr_readdir_t *
00076                                              pfattr);
00077 
00081 fsal_status_t fsal_internal_init_global(fsal_init_info_t * fsal_info,
00082                                         fs_common_initinfo_t * fs_common_info);
00083 
00087 void fsal_increment_nbcall(int function_index, fsal_status_t status);
00088 
00092 void fsal_internal_getstats(fsal_statistics_t * output_stats);
00093 
00097 void TakeTokenFSCall();
00098 void ReleaseTokenFSCall();
00099 
00107 fsal_boolean_t fsal_do_log(fsal_status_t status);
00108 
00109 void fsal_internal_proxy_create_fattr_bitmap(bitmap4 * pbitmap);
00110 void fsal_internal_proxy_create_fattr_readdir_bitmap(bitmap4 * pbitmap);
00111 void fsal_internal_proxy_create_fattr_fsinfo_bitmap(bitmap4 * pbitmap);
00112 void fsal_interval_proxy_fsalattr2bitmap4(fsal_attrib_list_t * pfsalattr,
00113                                           bitmap4 * pbitmap);
00114 
00115 /*
00116  * A few functions dedicated in proxy related information management and conversion 
00117  */
00118 fsal_status_t fsal_internal_set_auth_gss(proxyfsal_op_context_t * p_thr_context);
00119 fsal_status_t fsal_internal_proxy_error_convert(nfsstat4 nfsstatus, int indexfunc);
00120 int fsal_internal_proxy_create_fh(nfs_fh4 * pnfs4_handle,
00121                                   fsal_nodetype_t type,
00122                                   fsal_u64_t fileid, fsal_handle_t * pfsal_handle);
00123 int fsal_internal_proxy_extract_fh(nfs_fh4 * pnfs4_handle, fsal_handle_t * pfsal_handle);
00124 int fsal_internal_proxy_fsal_name_2_utf8(fsal_name_t * pname, utf8string * utf8str);
00125 int fsal_internal_proxy_fsal_path_2_utf8(fsal_path_t * ppath, utf8string * utf8str);
00126 int fsal_internal_proxy_fsal_utf8_2_name(fsal_name_t * pname, utf8string * utf8str);
00127 int fsal_internal_proxy_fsal_utf8_2_path(fsal_path_t * ppath, utf8string * utf8str);
00128 int proxy_Fattr_To_FSAL_attr(fsal_attrib_list_t * pFSAL_attr,
00129                              proxyfsal_handle_t * phandle, fattr4 * Fattr);
00130 int proxy_Fattr_To_FSAL_dynamic_fsinfo(fsal_dynamicfsinfo_t * pdynamicinfo,
00131                                        fattr4 * Fattr);
00132 
00133 fsal_status_t FSAL_proxy_setclientid(proxyfsal_op_context_t * p_context);
00134 fsal_status_t FSAL_proxy_setclientid_renego(proxyfsal_op_context_t * p_context);
00135 
00136 fsal_status_t fsal_proxy_create_rpc_clnt(proxyfsal_op_context_t *);
00137 int fsal_internal_ClientReconnect(proxyfsal_op_context_t * p_thr_context);
00138 fsal_status_t FSAL_proxy_open_confirm(proxyfsal_file_t * pfd);
00139 void *FSAL_proxy_change_user(proxyfsal_op_context_t * p_thr_context);
00140 
00141 /* All the call to FSAL to be wrapped */
00142 fsal_status_t PROXYFSAL_access(fsal_handle_t * p_object_handle,    /* IN */
00143                                fsal_op_context_t * p_context,      /* IN */
00144                                fsal_accessflags_t access_type,  /* IN */
00145                                fsal_attrib_list_t *
00146                                p_object_attributes /* [ IN/OUT ] */ );
00147 
00148 fsal_status_t PROXYFSAL_getattrs(fsal_handle_t * p_filehandle,     /* IN */
00149                                  fsal_op_context_t * p_context,    /* IN */
00150                                  fsal_attrib_list_t * p_object_attributes /* IN/OUT */ );
00151 
00152 fsal_status_t PROXYFSAL_setattrs(fsal_handle_t * p_filehandle,     /* IN */
00153                                  fsal_op_context_t * p_context,    /* IN */
00154                                  fsal_attrib_list_t * p_attrib_set,     /* IN */
00155                                  fsal_attrib_list_t *
00156                                  p_object_attributes /* [ IN/OUT ] */ );
00157 
00158 fsal_status_t PROXYFSAL_BuildExportContext(fsal_export_context_t * p_export_context,       /* OUT */
00159                                            fsal_path_t * p_export_path, /* IN */
00160                                            char *fs_specific_options /* IN */ );
00161 
00162 fsal_status_t PROXYFSAL_InitClientContext(fsal_op_context_t * p_thr_context);
00163 
00164 fsal_status_t PROXYFSAL_create(fsal_handle_t * p_parent_directory_handle,  /* IN */
00165                                fsal_name_t * p_filename,        /* IN */
00166                                fsal_op_context_t * p_context,      /* IN */
00167                                fsal_accessmode_t accessmode,    /* IN */
00168                                fsal_handle_t * p_object_handle,    /* OUT */
00169                                fsal_attrib_list_t *
00170                                p_object_attributes /* [ IN/OUT ] */ );
00171 
00172 fsal_status_t PROXYFSAL_mkdir(fsal_handle_t * p_parent_directory_handle,   /* IN */
00173                               fsal_name_t * p_dirname,  /* IN */
00174                               fsal_op_context_t * p_context,       /* IN */
00175                               fsal_accessmode_t accessmode,     /* IN */
00176                               fsal_handle_t * p_object_handle,     /* OUT */
00177                               fsal_attrib_list_t * p_object_attributes /* [ IN/OUT ] */ );
00178 
00179 fsal_status_t PROXYFSAL_link(fsal_handle_t * p_target_handle,      /* IN */
00180                              fsal_handle_t * p_dir_handle, /* IN */
00181                              fsal_name_t * p_link_name, /* IN */
00182                              fsal_op_context_t * p_context,        /* IN */
00183                              fsal_attrib_list_t * p_attributes /* [ IN/OUT ] */ );
00184 
00185 fsal_status_t PROXYFSAL_mknode(fsal_handle_t * parentdir_handle,   /* IN */
00186                                fsal_name_t * p_node_name,       /* IN */
00187                                fsal_op_context_t * p_context,      /* IN */
00188                                fsal_accessmode_t accessmode,    /* IN */
00189                                fsal_nodetype_t nodetype,        /* IN */
00190                                fsal_dev_t * dev,        /* IN */
00191                                fsal_handle_t * p_object_handle,    /* OUT (handle to the created node) */
00192                                fsal_attrib_list_t * node_attributes /* [ IN/OUT ] */ );
00193 
00194 fsal_status_t PROXYFSAL_opendir(fsal_handle_t * p_dir_handle,      /* IN */
00195                                 fsal_op_context_t * p_context,     /* IN */
00196                                 fsal_dir_t * p_dir_descriptor,     /* OUT */
00197                                 fsal_attrib_list_t * p_dir_attributes /* [ IN/OUT ] */ );
00198 
00199 fsal_status_t PROXYFSAL_readdir(fsal_dir_t * p_dir_descriptor,     /* IN */
00200                                 fsal_cookie_t start_position,      /* IN */
00201                                 fsal_attrib_mask_t get_attr_mask,       /* IN */
00202                                 fsal_mdsize_t buffersize,       /* IN */
00203                                 fsal_dirent_t * p_pdirent,      /* OUT */
00204                                 fsal_cookie_t * p_end_position,    /* OUT */
00205                                 fsal_count_t * p_nb_entries,    /* OUT */
00206                                 fsal_boolean_t * p_end_of_dir /* OUT */ );
00207 
00208 fsal_status_t PROXYFSAL_closedir(fsal_dir_t * p_dir_descriptor /* IN */ );
00209 
00210 fsal_status_t PROXYFSAL_open_by_name(fsal_handle_t * dirhandle,    /* IN */
00211                                      fsal_name_t * filename,    /* IN */
00212                                      fsal_op_context_t * p_context,        /* IN */
00213                                      fsal_openflags_t openflags,        /* IN */
00214                                      fsal_file_t * file_descriptor,        /* OUT */
00215                                      fsal_attrib_list_t *
00216                                      file_attributes /* [ IN/OUT ] */ );
00217 
00218 fsal_status_t PROXYFSAL_open(fsal_handle_t * p_filehandle, /* IN */
00219                              fsal_op_context_t * p_context,        /* IN */
00220                              fsal_openflags_t openflags,        /* IN */
00221                              fsal_file_t * p_file_descriptor,      /* OUT */
00222                              fsal_attrib_list_t * p_file_attributes /* [ IN/OUT ] */ );
00223 
00224 fsal_status_t PROXYFSAL_read(fsal_file_t * p_file_descriptor,      /* IN */
00225                              fsal_seek_t * p_seek_descriptor,   /* [IN] */
00226                              fsal_size_t buffer_size,   /* IN */
00227                              caddr_t buffer,    /* OUT */
00228                              fsal_size_t * p_read_amount,       /* OUT */
00229                              fsal_boolean_t * p_end_of_file /* OUT */ );
00230 
00231 fsal_status_t PROXYFSAL_write(fsal_file_t * p_file_descriptor,     /* IN */
00232                               fsal_op_context_t * p_context,       /* IN */
00233                               fsal_seek_t * p_seek_descriptor,  /* IN */
00234                               fsal_size_t buffer_size,  /* IN */
00235                               caddr_t buffer,   /* IN */
00236                               fsal_size_t * p_write_amount /* OUT */ );
00237 
00238 fsal_status_t PROXYFSAL_commit( fsal_file_t * p_file_descriptor,
00239                               fsal_off_t    offset,
00240                               fsal_size_t   size ) ;
00241 
00242 fsal_status_t PROXYFSAL_close(fsal_file_t * p_file_descriptor /* IN */ );
00243 
00244 fsal_status_t PROXYFSAL_open_by_fileid(fsal_handle_t * filehandle, /* IN */
00245                                        fsal_u64_t fileid,       /* IN */
00246                                        fsal_op_context_t * p_context,      /* IN */
00247                                        fsal_openflags_t openflags,      /* IN */
00248                                        fsal_file_t * file_descriptor,      /* OUT */
00249                                        fsal_attrib_list_t *
00250                                        file_attributes /* [ IN/OUT ] */ );
00251 
00252 fsal_status_t PROXYFSAL_close_by_fileid(fsal_file_t * file_descriptor /* IN */ ,
00253                                         fsal_u64_t fileid);
00254 
00255 fsal_status_t PROXYFSAL_dynamic_fsinfo(fsal_handle_t * p_filehandle,       /* IN */
00256                                        fsal_op_context_t * p_context,      /* IN */
00257                                        fsal_dynamicfsinfo_t * p_dynamicinfo /* OUT */ );
00258 
00259 fsal_status_t PROXYFSAL_Init(fsal_parameter_t * init_info /* IN */ );
00260 
00261 fsal_status_t PROXYFSAL_terminate();
00262 
00263 fsal_status_t PROXYFSAL_test_access(fsal_op_context_t * p_context, /* IN */
00264                                     fsal_accessflags_t access_type,     /* IN */
00265                                     fsal_attrib_list_t * p_object_attributes /* IN */ );
00266 
00267 fsal_status_t PROXYFSAL_setattr_access(fsal_op_context_t * p_context,      /* IN */
00268                                        fsal_attrib_list_t * candidate_attributes,       /* IN */
00269                                        fsal_attrib_list_t * object_attributes /* IN */ );
00270 
00271 fsal_status_t PROXYFSAL_lookup(fsal_handle_t * p_parent_directory_handle,  /* IN */
00272                                fsal_name_t * p_filename,        /* IN */
00273                                fsal_op_context_t * p_context,      /* IN */
00274                                fsal_handle_t * p_object_handle,    /* OUT */
00275                                fsal_attrib_list_t *
00276                                p_object_attributes /* [ IN/OUT ] */ );
00277 
00278 fsal_status_t PROXYFSAL_lookupPath(fsal_path_t * p_path,        /* IN */
00279                                    fsal_op_context_t * p_context,  /* IN */
00280                                    fsal_handle_t * object_handle,  /* OUT */
00281                                    fsal_attrib_list_t *
00282                                    p_object_attributes /* [ IN/OUT ] */ );
00283 
00284 fsal_status_t PROXYFSAL_lookupJunction(fsal_handle_t * p_junction_handle,  /* IN */
00285                                        fsal_op_context_t * p_context,      /* IN */
00286                                        fsal_handle_t * p_fsoot_handle,     /* OUT */
00287                                        fsal_attrib_list_t *
00288                                        p_fsroot_attributes /* [ IN/OUT ] */ );
00289 
00290 fsal_status_t PROXYFSAL_rcp(fsal_handle_t * filehandle,    /* IN */
00291                             fsal_op_context_t * p_context, /* IN */
00292                             fsal_path_t * p_local_path, /* IN */
00293                             fsal_rcpflag_t transfer_opt /* IN */ );
00294 
00295 fsal_status_t PROXYFSAL_rename(fsal_handle_t * p_old_parentdir_handle,     /* IN */
00296                                fsal_name_t * p_old_name,        /* IN */
00297                                fsal_handle_t * p_new_parentdir_handle,     /* IN */
00298                                fsal_name_t * p_new_name,        /* IN */
00299                                fsal_op_context_t * p_context,      /* IN */
00300                                fsal_attrib_list_t * p_src_dir_attributes,       /* [ IN/OUT ] */
00301                                fsal_attrib_list_t *
00302                                p_tgt_dir_attributes /* [ IN/OUT ] */ );
00303 
00304 void PROXYFSAL_get_stats(fsal_statistics_t * stats,     /* OUT */
00305                          fsal_boolean_t reset /* IN */ );
00306 
00307 fsal_status_t PROXYFSAL_readlink(fsal_handle_t * p_linkhandle,     /* IN */
00308                                  fsal_op_context_t * p_context,    /* IN */
00309                                  fsal_path_t * p_link_content,  /* OUT */
00310                                  fsal_attrib_list_t *
00311                                  p_link_attributes /* [ IN/OUT ] */ );
00312 
00313 fsal_status_t PROXYFSAL_symlink(fsal_handle_t * p_parent_directory_handle, /* IN */
00314                                 fsal_name_t * p_linkname,       /* IN */
00315                                 fsal_path_t * p_linkcontent,    /* IN */
00316                                 fsal_op_context_t * p_context,     /* IN */
00317                                 fsal_accessmode_t accessmode,   /* IN (ignored) */
00318                                 fsal_handle_t * p_link_handle,     /* OUT */
00319                                 fsal_attrib_list_t * p_link_attributes /* [ IN/OUT ] */ );
00320 
00321 int PROXYFSAL_handlecmp(fsal_handle_t * handle1, fsal_handle_t * handle2,
00322                         fsal_status_t * status);
00323 
00324 unsigned int PROXYFSAL_Handle_to_HashIndex(fsal_handle_t * p_handle,
00325                                            unsigned int cookie,
00326                                            unsigned int alphabet_len,
00327                                            unsigned int index_size);
00328 
00329 unsigned int PROXYFSAL_Handle_to_RBTIndex(fsal_handle_t * p_handle,
00330                                           unsigned int cookie);
00331 
00332 fsal_status_t PROXYFSAL_DigestHandle(fsal_export_context_t * p_expcontext, /* IN */
00333                                      fsal_digesttype_t output_type,     /* IN */
00334                                      fsal_handle_t * p_in_fsal_handle,     /* IN */
00335                                      struct fsal_handle_desc * fh_desc /* IN/OUT */ );
00336 
00337 fsal_status_t PROXYFSAL_ExpandHandle(fsal_export_context_t * p_expcontext, /* IN */
00338                                      fsal_digesttype_t in_type, /* IN */
00339                                      struct fsal_handle_desc * in_buff);
00340 
00341 fsal_status_t PROXYFSAL_SetDefault_FS_specific_parameter(fsal_parameter_t *
00342                                                          out_parameter);
00343 
00344 fsal_status_t PROXYFSAL_load_FS_specific_parameter_from_conf(config_file_t in_config,
00345                                                              fsal_parameter_t *
00346                                                              out_parameter);
00347 
00348 fsal_status_t PROXYFSAL_truncate(fsal_handle_t * p_filehandle,     /* IN */
00349                                  fsal_op_context_t * p_context,    /* IN */
00350                                  fsal_size_t length,    /* IN */
00351                                  fsal_file_t * file_descriptor,    /* Unused in this FSAL */
00352                                  fsal_attrib_list_t *
00353                                  p_object_attributes /* [ IN/OUT ] */ );
00354 
00355 fsal_status_t PROXYFSAL_unlink(fsal_handle_t * p_parent_directory_handle,  /* IN */
00356                                fsal_name_t * p_object_name,     /* IN */
00357                                fsal_op_context_t * p_context,      /* IN */
00358                                fsal_attrib_list_t *
00359                                p_parent_directory_attributes /* [IN/OUT ] */ );
00360 
00361 char *PROXYFSAL_GetFSName();
00362 
00363 fsal_status_t PROXYFSAL_GetXAttrAttrs(fsal_handle_t * p_objecthandle,      /* IN */
00364                                       fsal_op_context_t * p_context,       /* IN */
00365                                       unsigned int xattr_id,    /* IN */
00366                                       fsal_attrib_list_t * p_attrs);
00367 
00368 fsal_status_t PROXYFSAL_ListXAttrs(fsal_handle_t * p_objecthandle, /* IN */
00369                                    unsigned int cookie, /* IN */
00370                                    fsal_op_context_t * p_context,  /* IN */
00371                                    fsal_xattrent_t * xattrs_tab,        /* IN/OUT */
00372                                    unsigned int xattrs_tabsize, /* IN */
00373                                    unsigned int *p_nb_returned, /* OUT */
00374                                    int *end_of_list /* OUT */ );
00375 
00376 fsal_status_t PROXYFSAL_GetXAttrValueById(fsal_handle_t * p_objecthandle,  /* IN */
00377                                           unsigned int xattr_id,        /* IN */
00378                                           fsal_op_context_t * p_context,   /* IN */
00379                                           caddr_t buffer_addr,  /* IN/OUT */
00380                                           size_t buffer_size,   /* IN */
00381                                           size_t * p_output_size /* OUT */ );
00382 
00383 fsal_status_t PROXYFSAL_GetXAttrIdByName(fsal_handle_t * p_objecthandle,   /* IN */
00384                                          const fsal_name_t * xattr_name,        /* IN */
00385                                          fsal_op_context_t * p_context,    /* IN */
00386                                          unsigned int *pxattr_id /* OUT */ );
00387 
00388 fsal_status_t PROXYFSAL_GetXAttrValueByName(fsal_handle_t * p_objecthandle,        /* IN */
00389                                             const fsal_name_t * xattr_name,     /* IN */
00390                                             fsal_op_context_t * p_context, /* IN */
00391                                             caddr_t buffer_addr,        /* IN/OUT */
00392                                             size_t buffer_size, /* IN */
00393                                             size_t * p_output_size /* OUT */ );
00394 
00395 fsal_status_t PROXYFSAL_SetXAttrValue(fsal_handle_t * p_objecthandle,      /* IN */
00396                                       const fsal_name_t * xattr_name,   /* IN */
00397                                       fsal_op_context_t * p_context,       /* IN */
00398                                       caddr_t buffer_addr,      /* IN */
00399                                       size_t buffer_size,       /* IN */
00400                                       int create /* IN */ );
00401 
00402 fsal_status_t PROXYFSAL_SetXAttrValueById(fsal_handle_t * p_objecthandle,  /* IN */
00403                                           unsigned int xattr_id,        /* IN */
00404                                           fsal_op_context_t * p_context,   /* IN */
00405                                           caddr_t buffer_addr,  /* IN */
00406                                           size_t buffer_size /* IN */ );
00407 
00408 fsal_status_t PROXYFSAL_RemoveXAttrById(fsal_handle_t * p_objecthandle,    /* IN */
00409                                         fsal_op_context_t * p_context,     /* IN */
00410                                         unsigned int xattr_id) /* IN */ ;
00411 
00412 fsal_status_t PROXYFSAL_RemoveXAttrByName(fsal_handle_t * p_objecthandle,  /* IN */
00413                                           fsal_op_context_t * p_context,   /* IN */
00414                                           const fsal_name_t * xattr_name) /* IN */ ;
00415 
00416 int PROXYFSAL_GetXattrOffsetSetable( void ) ;
00417 
00418 unsigned int PROXYFSAL_GetFileno(fsal_file_t * pfile);
00419 
00420 #endif