nfs-ganesha 1.4
|
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