xref: /plan9/sys/src/cmd/exportfs/exportfs.h (revision 74f16c8187aab477889167f2422d0597b1b7d0ff)
13e12c5d1SDavid du Colombier /*
23e12c5d1SDavid du Colombier  * exportfs.h - definitions for exporting file server
33e12c5d1SDavid du Colombier  */
43e12c5d1SDavid du Colombier 
59a747e4fSDavid du Colombier #define DEBUG		if(!dbg){}else fprint
67dd7cddfSDavid du Colombier #define DFD		9
73e12c5d1SDavid du Colombier #define fidhash(s)	fhash[s%FHASHSIZE]
83e12c5d1SDavid du Colombier 
93e12c5d1SDavid du Colombier typedef struct Fsrpc Fsrpc;
103e12c5d1SDavid du Colombier typedef struct Fid Fid;
113e12c5d1SDavid du Colombier typedef struct File File;
123e12c5d1SDavid du Colombier typedef struct Proc Proc;
137dd7cddfSDavid du Colombier typedef struct Qidtab Qidtab;
143e12c5d1SDavid du Colombier 
153e12c5d1SDavid du Colombier struct Fsrpc
163e12c5d1SDavid du Colombier {
173e12c5d1SDavid du Colombier 	int	busy;		/* Work buffer has pending rpc to service */
18*74f16c81SDavid du Colombier 	uintptr	pid;		/* Pid of slave process executing the rpc */
193e12c5d1SDavid du Colombier 	int	canint;		/* Interrupt gate */
203e12c5d1SDavid du Colombier 	int	flushtag;	/* Tag on which to reply to flush */
213e12c5d1SDavid du Colombier 	Fcall	work;		/* Plan 9 incoming Fcall */
229a747e4fSDavid du Colombier 	uchar	*buf;		/* Data buffer */
233e12c5d1SDavid du Colombier };
243e12c5d1SDavid du Colombier 
253e12c5d1SDavid du Colombier struct Fid
263e12c5d1SDavid du Colombier {
273e12c5d1SDavid du Colombier 	int	fid;		/* system fd for i/o */
283e12c5d1SDavid du Colombier 	File	*f;		/* File attached to this fid */
293e12c5d1SDavid du Colombier 	int	mode;
303e12c5d1SDavid du Colombier 	int	nr;		/* fid number */
31219b2ee8SDavid du Colombier 	int	mid;		/* Mount id */
323e12c5d1SDavid du Colombier 	Fid	*next;		/* hash link */
33a960ed1cSDavid du Colombier 
34a960ed1cSDavid du Colombier 	/* for preaddir -- ARRGH! */
35a960ed1cSDavid du Colombier 	Dir	*dir;		/* buffer for reading directories */
36a960ed1cSDavid du Colombier 	int	ndir;		/* number of entries in dir */
37a960ed1cSDavid du Colombier 	int	cdir;		/* number of consumed entries in dir */
38a960ed1cSDavid du Colombier 	int	gdir;		/* glue index */
39a960ed1cSDavid du Colombier 	vlong	offset;		/* offset in virtual directory */
403e12c5d1SDavid du Colombier };
413e12c5d1SDavid du Colombier 
423e12c5d1SDavid du Colombier struct File
433e12c5d1SDavid du Colombier {
449a747e4fSDavid du Colombier 	char	*name;
457dd7cddfSDavid du Colombier 	int	ref;
463e12c5d1SDavid du Colombier 	Qid	qid;
477dd7cddfSDavid du Colombier 	Qidtab	*qidt;
487dd7cddfSDavid du Colombier 	int	inval;
493e12c5d1SDavid du Colombier 	File	*parent;
503e12c5d1SDavid du Colombier 	File	*child;
513e12c5d1SDavid du Colombier 	File	*childlist;
523e12c5d1SDavid du Colombier };
533e12c5d1SDavid du Colombier 
543e12c5d1SDavid du Colombier struct Proc
553e12c5d1SDavid du Colombier {
56*74f16c81SDavid du Colombier 	uintptr	pid;
573e12c5d1SDavid du Colombier 	int	busy;
583e12c5d1SDavid du Colombier 	Proc	*next;
593e12c5d1SDavid du Colombier };
603e12c5d1SDavid du Colombier 
617dd7cddfSDavid du Colombier struct Qidtab
627dd7cddfSDavid du Colombier {
637dd7cddfSDavid du Colombier 	int	ref;
647dd7cddfSDavid du Colombier 	int	type;
657dd7cddfSDavid du Colombier 	int	dev;
669a747e4fSDavid du Colombier 	vlong	path;
679a747e4fSDavid du Colombier 	vlong	uniqpath;
687dd7cddfSDavid du Colombier 	Qidtab	*next;
697dd7cddfSDavid du Colombier };
707dd7cddfSDavid du Colombier 
713e12c5d1SDavid du Colombier enum
723e12c5d1SDavid du Colombier {
7380ee5cbfSDavid du Colombier 	MAXPROC		= 50,
74219b2ee8SDavid du Colombier 	FHASHSIZE	= 64,
7580ee5cbfSDavid du Colombier 	Nr_workbufs 	= 50,
763e12c5d1SDavid du Colombier 	Fidchunk	= 1000,
77219b2ee8SDavid du Colombier 	Npsmpt		= 32,
787dd7cddfSDavid du Colombier 	Nqidbits		= 5,
797dd7cddfSDavid du Colombier 	Nqidtab		= (1<<Nqidbits),
803e12c5d1SDavid du Colombier };
813e12c5d1SDavid du Colombier 
829a747e4fSDavid du Colombier char Ebadfid[];
839a747e4fSDavid du Colombier char Enotdir[];
849a747e4fSDavid du Colombier char Edupfid[];
859a747e4fSDavid du Colombier char Eopen[];
869a747e4fSDavid du Colombier char Exmnt[];
879a747e4fSDavid du Colombier char Enomem[];
889a747e4fSDavid du Colombier char Emip[];
899a747e4fSDavid du Colombier char Enopsmt[];
903e12c5d1SDavid du Colombier 
913e12c5d1SDavid du Colombier Extern Fsrpc	*Workq;
923e12c5d1SDavid du Colombier Extern int  	dbg;
933e12c5d1SDavid du Colombier Extern File	*root;
94219b2ee8SDavid du Colombier Extern File	*psmpt;
953e12c5d1SDavid du Colombier Extern Fid	**fhash;
963e12c5d1SDavid du Colombier Extern Fid	*fidfree;
973e12c5d1SDavid du Colombier Extern Proc	*Proclist;
98219b2ee8SDavid du Colombier Extern char	psmap[Npsmpt];
997dd7cddfSDavid du Colombier Extern Qidtab	*qidtab[Nqidtab];
1009a747e4fSDavid du Colombier Extern ulong	messagesize;
1019a747e4fSDavid du Colombier Extern char	Enomem[];
1029a747e4fSDavid du Colombier Extern int	srvfd;
103a960ed1cSDavid du Colombier Extern char*	patternfile;
1043e12c5d1SDavid du Colombier 
1053e12c5d1SDavid du Colombier /* File system protocol service procedures */
1063e12c5d1SDavid du Colombier void Xattach(Fsrpc*);
1073e12c5d1SDavid du Colombier void Xauth(Fsrpc*);
1083e12c5d1SDavid du Colombier void Xclunk(Fsrpc*);
1093e12c5d1SDavid du Colombier void Xcreate(Fsrpc*);
1103e12c5d1SDavid du Colombier void Xflush(Fsrpc*);
1113e12c5d1SDavid du Colombier void Xnop(Fsrpc*);
1123e12c5d1SDavid du Colombier void Xremove(Fsrpc*);
1133e12c5d1SDavid du Colombier void Xstat(Fsrpc*);
1149a747e4fSDavid du Colombier void Xversion(Fsrpc*);
1153e12c5d1SDavid du Colombier void Xwalk(Fsrpc*);
1163e12c5d1SDavid du Colombier void Xwstat(Fsrpc*);
1173e12c5d1SDavid du Colombier void slave(Fsrpc*);
1183e12c5d1SDavid du Colombier 
1193e12c5d1SDavid du Colombier void	reply(Fcall*, Fcall*, char*);
1203e12c5d1SDavid du Colombier Fid 	*getfid(int);
1213e12c5d1SDavid du Colombier int	freefid(int);
1223e12c5d1SDavid du Colombier Fid	*newfid(int);
1233e12c5d1SDavid du Colombier Fsrpc	*getsbuf(void);
1243e12c5d1SDavid du Colombier void	initroot(void);
1259a747e4fSDavid du Colombier void	fatal(char*, ...);
1269a747e4fSDavid du Colombier char*	makepath(File*, char*);
1273e12c5d1SDavid du Colombier File	*file(File*, char*);
1287dd7cddfSDavid du Colombier void	freefile(File*);
1293e12c5d1SDavid du Colombier void	slaveopen(Fsrpc*);
1303e12c5d1SDavid du Colombier void	slaveread(Fsrpc*);
1313e12c5d1SDavid du Colombier void	slavewrite(Fsrpc*);
1323e12c5d1SDavid du Colombier void	blockingslave(void);
1333e12c5d1SDavid du Colombier void	reopen(Fid *f);
1343e12c5d1SDavid du Colombier void	noteproc(int, char*);
1353e12c5d1SDavid du Colombier void	flushaction(void*, char*);
1363e12c5d1SDavid du Colombier void	pushfcall(char*);
1377dd7cddfSDavid du Colombier Qidtab* uniqueqid(Dir*);
1387dd7cddfSDavid du Colombier void	freeqid(Qidtab*);
1399a747e4fSDavid du Colombier char*	estrdup(char*);
1409a747e4fSDavid du Colombier void*	emallocz(uint);
1419a747e4fSDavid du Colombier int	readmessage(int, char*, int);
142a960ed1cSDavid du Colombier void	exclusions(void);
143a960ed1cSDavid du Colombier int	excludefile(char*);
144a960ed1cSDavid du Colombier int	preaddir(Fid*, uchar*, int, vlong);
145