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> 9 typedef 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 21 typedef 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 34 struct 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 43 struct fs_node { 44 int mode; 45 ino_t vnid; 46 struct nfs_fhandle fhandle; 47 struct fs_node *next; 48 }; 49 50 struct 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 73 void fs_nspaceInit (struct fs_nspace *nspace); 74 void fs_nspaceDestroy (struct fs_nspace *nspace); 75 76 struct fs_file_cookie 77 { 78 int omode; 79 off_t original_size; 80 struct stat st; 81 }; 82 83 typedef struct fs_nspace fs_nspace; 84 typedef struct fs_node fs_node; 85 typedef struct nfs_cookie nfs_cookie; 86 typedef struct fs_file_cookie fs_file_cookie; 87 typedef struct nfs_fhandle nfs_fhandle; 88 89 status_t create_socket(fs_nspace *ns); 90 status_t init_postoffice(fs_nspace *ns); 91 void shutdown_postoffice(fs_nspace *ns); 92 status_t postoffice_func(fs_nspace *ns); 93 94 extern uint8 *send_rpc_call(fs_nspace *ns, const struct sockaddr_in *addr, int32 prog, int32 vers, int32 proc, const struct XDROutPacket *packet); 95 extern bool is_successful_reply(struct XDRInPacket *reply); 96 extern status_t get_remote_address(fs_nspace *ns, int32 prog, int32 vers, int32 prot, struct sockaddr_in *addr); 97 extern status_t nfs_mount(fs_nspace *ns, const char *path, nfs_fhandle *fhandle); 98 extern status_t map_nfs_to_system_error(status_t nfsstatus); 99 extern void get_nfs_attr(struct XDRInPacket *reply, struct stat *st); 100 extern status_t nfs_lookup(fs_nspace *ns, const nfs_fhandle *dir, const char *filename, nfs_fhandle *fhandle, struct stat *st); 101 extern status_t nfs_truncate_file(fs_nspace *ns, const nfs_fhandle *fhandle, struct stat *st); 102 103 nfs_fhandle handle_from_vnid (fs_nspace *ns, ino_t vnid); 104 105 extern status_t nfs_getattr(fs_nspace *ns, const nfs_fhandle *fhandle, struct stat *st); 106 extern void insert_node(fs_nspace *ns, fs_node *node); 107 extern void remove_node(fs_nspace *ns, ino_t vnid); 108 109 enum { 110 C_ERROR_STALE = B_ERRORS_END + 1 111 }; 112 113 114 extern fs_volume_ops sNFSVolumeOps; 115 extern fs_vnode_ops sNFSVnodeOps; 116 117 #define USE_SYSTEM_AUTHENTICATION 1 118 119 #endif /* _NFS_ADD_ON_H */ 120