xref: /plan9/sys/src/cmd/exportfs/exportfs.h (revision 74f16c8187aab477889167f2422d0597b1b7d0ff)
1 /*
2  * exportfs.h - definitions for exporting file server
3  */
4 
5 #define DEBUG		if(!dbg){}else fprint
6 #define DFD		9
7 #define fidhash(s)	fhash[s%FHASHSIZE]
8 
9 typedef struct Fsrpc Fsrpc;
10 typedef struct Fid Fid;
11 typedef struct File File;
12 typedef struct Proc Proc;
13 typedef struct Qidtab Qidtab;
14 
15 struct Fsrpc
16 {
17 	int	busy;		/* Work buffer has pending rpc to service */
18 	uintptr	pid;		/* Pid of slave process executing the rpc */
19 	int	canint;		/* Interrupt gate */
20 	int	flushtag;	/* Tag on which to reply to flush */
21 	Fcall	work;		/* Plan 9 incoming Fcall */
22 	uchar	*buf;		/* Data buffer */
23 };
24 
25 struct Fid
26 {
27 	int	fid;		/* system fd for i/o */
28 	File	*f;		/* File attached to this fid */
29 	int	mode;
30 	int	nr;		/* fid number */
31 	int	mid;		/* Mount id */
32 	Fid	*next;		/* hash link */
33 
34 	/* for preaddir -- ARRGH! */
35 	Dir	*dir;		/* buffer for reading directories */
36 	int	ndir;		/* number of entries in dir */
37 	int	cdir;		/* number of consumed entries in dir */
38 	int	gdir;		/* glue index */
39 	vlong	offset;		/* offset in virtual directory */
40 };
41 
42 struct File
43 {
44 	char	*name;
45 	int	ref;
46 	Qid	qid;
47 	Qidtab	*qidt;
48 	int	inval;
49 	File	*parent;
50 	File	*child;
51 	File	*childlist;
52 };
53 
54 struct Proc
55 {
56 	uintptr	pid;
57 	int	busy;
58 	Proc	*next;
59 };
60 
61 struct Qidtab
62 {
63 	int	ref;
64 	int	type;
65 	int	dev;
66 	vlong	path;
67 	vlong	uniqpath;
68 	Qidtab	*next;
69 };
70 
71 enum
72 {
73 	MAXPROC		= 50,
74 	FHASHSIZE	= 64,
75 	Nr_workbufs 	= 50,
76 	Fidchunk	= 1000,
77 	Npsmpt		= 32,
78 	Nqidbits		= 5,
79 	Nqidtab		= (1<<Nqidbits),
80 };
81 
82 char Ebadfid[];
83 char Enotdir[];
84 char Edupfid[];
85 char Eopen[];
86 char Exmnt[];
87 char Enomem[];
88 char Emip[];
89 char Enopsmt[];
90 
91 Extern Fsrpc	*Workq;
92 Extern int  	dbg;
93 Extern File	*root;
94 Extern File	*psmpt;
95 Extern Fid	**fhash;
96 Extern Fid	*fidfree;
97 Extern Proc	*Proclist;
98 Extern char	psmap[Npsmpt];
99 Extern Qidtab	*qidtab[Nqidtab];
100 Extern ulong	messagesize;
101 Extern char	Enomem[];
102 Extern int	srvfd;
103 Extern char*	patternfile;
104 
105 /* File system protocol service procedures */
106 void Xattach(Fsrpc*);
107 void Xauth(Fsrpc*);
108 void Xclunk(Fsrpc*);
109 void Xcreate(Fsrpc*);
110 void Xflush(Fsrpc*);
111 void Xnop(Fsrpc*);
112 void Xremove(Fsrpc*);
113 void Xstat(Fsrpc*);
114 void Xversion(Fsrpc*);
115 void Xwalk(Fsrpc*);
116 void Xwstat(Fsrpc*);
117 void slave(Fsrpc*);
118 
119 void	reply(Fcall*, Fcall*, char*);
120 Fid 	*getfid(int);
121 int	freefid(int);
122 Fid	*newfid(int);
123 Fsrpc	*getsbuf(void);
124 void	initroot(void);
125 void	fatal(char*, ...);
126 char*	makepath(File*, char*);
127 File	*file(File*, char*);
128 void	freefile(File*);
129 void	slaveopen(Fsrpc*);
130 void	slaveread(Fsrpc*);
131 void	slavewrite(Fsrpc*);
132 void	blockingslave(void);
133 void	reopen(Fid *f);
134 void	noteproc(int, char*);
135 void	flushaction(void*, char*);
136 void	pushfcall(char*);
137 Qidtab* uniqueqid(Dir*);
138 void	freeqid(Qidtab*);
139 char*	estrdup(char*);
140 void*	emallocz(uint);
141 int	readmessage(int, char*, int);
142 void	exclusions(void);
143 int	excludefile(char*);
144 int	preaddir(Fid*, uchar*, int, vlong);
145