1#ifndef _NFS_ADD_ON_H 2#define _NFS_ADD_ON_H 3 4/* wrappers */ 5#ifdef __HAIKU__ 6# include <fs_interface.h> 7# include <fs_info.h> 8# include <NodeMonitor.h> 9typedef dev_t nspace_id; 10# define WSTAT_MODE B_STAT_MODE 11# define WSTAT_UID B_STAT_UID 12# define WSTAT_GID B_STAT_GID 13# define WSTAT_SIZE B_STAT_SIZE 14# define WSTAT_ATIME B_STAT_ACCESS_TIME 15# define WSTAT_MTIME B_STAT_MODIFICATION_TIME 16# define WSTAT_CRTIME B_STAT_CREATION_TIME 17#endif 18 19#include "RPCPendingCalls.h" 20#include "XDROutPacket.h" 21#include "XDRInPacket.h" 22#include "nfs.h" 23 24#include <Errors.h> 25#include <sys/stat.h> 26#include <SupportDefs.h> 27 28 29struct mount_nfs_params { 30 unsigned int serverIP; 31 char *server; 32 char *_export; 33 uid_t uid; 34 gid_t gid; 35 char *hostname; 36}; 37 38struct fs_node { 39 int mode; 40 ino_t vnid; 41 struct nfs_fhandle fhandle; 42 struct fs_node *next; 43}; 44 45struct fs_nspace { 46 nspace_id nsid; 47 48 thread_id tid; 49 bool quit; 50 int s; 51 struct RPCPendingCalls pendingCalls; 52 53 struct sockaddr_in mountAddr,nfsAddr; 54 55 int32 xid; 56 57 ino_t rootid; 58 59 sem_id sem; 60 struct fs_node *first; 61 62 struct mount_nfs_params params; 63 64 bigtime_t last_rfsstat; 65 66}; 67 68void fs_nspaceInit (struct fs_nspace *nspace); 69void fs_nspaceDestroy (struct fs_nspace *nspace); 70 71struct fs_file_cookie 72{ 73 int omode; 74 off_t original_size; 75 struct stat st; 76}; 77 78typedef struct fs_nspace fs_nspace; 79typedef struct fs_node fs_node; 80typedef struct nfs_cookie nfs_cookie; 81typedef struct fs_file_cookie fs_file_cookie; 82typedef struct nfs_fhandle nfs_fhandle; 83 84status_t create_socket(fs_nspace *ns); 85status_t init_postoffice(fs_nspace *ns); 86void shutdown_postoffice(fs_nspace *ns); 87status_t postoffice_func(fs_nspace *ns); 88 89extern uint8 *send_rpc_call(fs_nspace *ns, const struct sockaddr_in *addr, int32 prog, int32 vers, int32 proc, const struct XDROutPacket *packet); 90extern bool is_successful_reply(struct XDRInPacket *reply); 91extern status_t get_remote_address(fs_nspace *ns, int32 prog, int32 vers, int32 prot, struct sockaddr_in *addr); 92extern status_t nfs_mount(fs_nspace *ns, const char *path, nfs_fhandle *fhandle); 93extern status_t map_nfs_to_system_error(status_t nfsstatus); 94extern void get_nfs_attr(struct XDRInPacket *reply, struct stat *st); 95extern status_t nfs_lookup(fs_nspace *ns, const nfs_fhandle *dir, const char *filename, nfs_fhandle *fhandle, struct stat *st); 96extern status_t nfs_truncate_file(fs_nspace *ns, const nfs_fhandle *fhandle, struct stat *st); 97 98nfs_fhandle handle_from_vnid (fs_nspace *ns, ino_t vnid); 99 100extern status_t nfs_getattr(fs_nspace *ns, const nfs_fhandle *fhandle, struct stat *st); 101extern void insert_node(fs_nspace *ns, fs_node *node); 102extern void remove_node(fs_nspace *ns, ino_t vnid); 103 104enum { 105 C_ERROR_STALE = B_ERRORS_END + 1 106}; 107 108 109extern fs_volume_ops sNFSVolumeOps; 110extern fs_vnode_ops sNFSVnodeOps; 111 112#define USE_SYSTEM_AUTHENTICATION 1 113 114#endif /* _NFS_ADD_ON_H */ 115