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