xref: /haiku/src/add-ons/kernel/file_systems/nfs/nfs_add_on.h (revision c90684742e7361651849be4116d0e5de3a817194)
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