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