xref: /plan9-contrib/sys/src/cmd/exportfs/exportfs.h (revision 61b17cc6b921f626d2c0a0d5982f2e19948a8fce)
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 {
17*61b17cc6SDavid du Colombier 	Fsrpc	*next;		/* freelist */
183e12c5d1SDavid du Colombier 	int	flushtag;	/* Tag on which to reply to flush */
193e12c5d1SDavid du Colombier 	Fcall	work;		/* Plan 9 incoming Fcall */
20*61b17cc6SDavid du Colombier 	uchar	buf[];		/* Data buffer */
213e12c5d1SDavid du Colombier };
223e12c5d1SDavid du Colombier 
233e12c5d1SDavid du Colombier struct Fid
243e12c5d1SDavid du Colombier {
253e12c5d1SDavid du Colombier 	int	fid;		/* system fd for i/o */
263e12c5d1SDavid du Colombier 	File	*f;		/* File attached to this fid */
273e12c5d1SDavid du Colombier 	int	mode;
283e12c5d1SDavid du Colombier 	int	nr;		/* fid number */
29219b2ee8SDavid du Colombier 	int	mid;		/* Mount id */
303e12c5d1SDavid du Colombier 	Fid	*next;		/* hash link */
31a960ed1cSDavid du Colombier 
32a960ed1cSDavid du Colombier 	/* for preaddir -- ARRGH! */
33a960ed1cSDavid du Colombier 	Dir	*dir;		/* buffer for reading directories */
34a960ed1cSDavid du Colombier 	int	ndir;		/* number of entries in dir */
35a960ed1cSDavid du Colombier 	int	cdir;		/* number of consumed entries in dir */
36a960ed1cSDavid du Colombier 	int	gdir;		/* glue index */
37a960ed1cSDavid du Colombier 	vlong	offset;		/* offset in virtual directory */
383e12c5d1SDavid du Colombier };
393e12c5d1SDavid du Colombier 
403e12c5d1SDavid du Colombier struct File
413e12c5d1SDavid du Colombier {
429a747e4fSDavid du Colombier 	char	*name;
437dd7cddfSDavid du Colombier 	int	ref;
443e12c5d1SDavid du Colombier 	Qid	qid;
457dd7cddfSDavid du Colombier 	Qidtab	*qidt;
467dd7cddfSDavid du Colombier 	int	inval;
473e12c5d1SDavid du Colombier 	File	*parent;
483e12c5d1SDavid du Colombier 	File	*child;
493e12c5d1SDavid du Colombier 	File	*childlist;
503e12c5d1SDavid du Colombier };
513e12c5d1SDavid du Colombier 
523e12c5d1SDavid du Colombier struct Proc
533e12c5d1SDavid du Colombier {
54*61b17cc6SDavid du Colombier 	Lock;
55*61b17cc6SDavid du Colombier 	Fsrpc	*busy;
563e12c5d1SDavid du Colombier 	Proc	*next;
57*61b17cc6SDavid du Colombier 	int	pid;
583e12c5d1SDavid du Colombier };
593e12c5d1SDavid du Colombier 
607dd7cddfSDavid du Colombier struct Qidtab
617dd7cddfSDavid du Colombier {
627dd7cddfSDavid du Colombier 	int	ref;
637dd7cddfSDavid du Colombier 	int	type;
647dd7cddfSDavid du Colombier 	int	dev;
659a747e4fSDavid du Colombier 	vlong	path;
669a747e4fSDavid du Colombier 	vlong	uniqpath;
677dd7cddfSDavid du Colombier 	Qidtab	*next;
687dd7cddfSDavid du Colombier };
697dd7cddfSDavid du Colombier 
703e12c5d1SDavid du Colombier enum
713e12c5d1SDavid du Colombier {
72219b2ee8SDavid du Colombier 	FHASHSIZE	= 64,
733e12c5d1SDavid du Colombier 	Fidchunk	= 1000,
74219b2ee8SDavid du Colombier 	Npsmpt		= 32,
757dd7cddfSDavid du Colombier 	Nqidbits		= 5,
767dd7cddfSDavid du Colombier 	Nqidtab		= (1<<Nqidbits),
773e12c5d1SDavid du Colombier };
783e12c5d1SDavid du Colombier 
799a747e4fSDavid du Colombier char Ebadfid[];
809a747e4fSDavid du Colombier char Enotdir[];
819a747e4fSDavid du Colombier char Edupfid[];
829a747e4fSDavid du Colombier char Eopen[];
839a747e4fSDavid du Colombier char Enomem[];
849a747e4fSDavid du Colombier char Emip[];
859a747e4fSDavid du Colombier char Enopsmt[];
863e12c5d1SDavid du Colombier 
873e12c5d1SDavid du Colombier Extern int  	dbg;
883e12c5d1SDavid du Colombier Extern File	*root;
89219b2ee8SDavid du Colombier Extern File	*psmpt;
903e12c5d1SDavid du Colombier Extern Fid	**fhash;
913e12c5d1SDavid du Colombier Extern Fid	*fidfree;
923e12c5d1SDavid du Colombier Extern Proc	*Proclist;
93219b2ee8SDavid du Colombier Extern char	psmap[Npsmpt];
947dd7cddfSDavid du Colombier Extern Qidtab	*qidtab[Nqidtab];
959a747e4fSDavid du Colombier Extern ulong	messagesize;
969a747e4fSDavid du Colombier Extern char	Enomem[];
979a747e4fSDavid du Colombier Extern int	srvfd;
98a960ed1cSDavid du Colombier Extern char*	patternfile;
993e12c5d1SDavid du Colombier 
1003e12c5d1SDavid du Colombier /* File system protocol service procedures */
1013e12c5d1SDavid du Colombier void Xattach(Fsrpc*);
1023e12c5d1SDavid du Colombier void Xauth(Fsrpc*);
1033e12c5d1SDavid du Colombier void Xclunk(Fsrpc*);
1043e12c5d1SDavid du Colombier void Xcreate(Fsrpc*);
1053e12c5d1SDavid du Colombier void Xflush(Fsrpc*);
1063e12c5d1SDavid du Colombier void Xnop(Fsrpc*);
1073e12c5d1SDavid du Colombier void Xremove(Fsrpc*);
1083e12c5d1SDavid du Colombier void Xstat(Fsrpc*);
1099a747e4fSDavid du Colombier void Xversion(Fsrpc*);
1103e12c5d1SDavid du Colombier void Xwalk(Fsrpc*);
1113e12c5d1SDavid du Colombier void Xwstat(Fsrpc*);
1123e12c5d1SDavid du Colombier void slave(Fsrpc*);
1133e12c5d1SDavid du Colombier 
1143e12c5d1SDavid du Colombier void	reply(Fcall*, Fcall*, char*);
1153e12c5d1SDavid du Colombier Fid 	*getfid(int);
1163e12c5d1SDavid du Colombier int	freefid(int);
1173e12c5d1SDavid du Colombier Fid	*newfid(int);
1183e12c5d1SDavid du Colombier Fsrpc	*getsbuf(void);
119*61b17cc6SDavid du Colombier void	putsbuf(Fsrpc*);
1203e12c5d1SDavid du Colombier void	initroot(void);
1219a747e4fSDavid du Colombier void	fatal(char*, ...);
1229a747e4fSDavid du Colombier char*	makepath(File*, char*);
1233e12c5d1SDavid du Colombier File	*file(File*, char*);
1247dd7cddfSDavid du Colombier void	freefile(File*);
1253e12c5d1SDavid du Colombier void	slaveopen(Fsrpc*);
1263e12c5d1SDavid du Colombier void	slaveread(Fsrpc*);
1273e12c5d1SDavid du Colombier void	slavewrite(Fsrpc*);
128*61b17cc6SDavid du Colombier void	blockingslave(Proc*);
1293e12c5d1SDavid du Colombier void	reopen(Fid *f);
1303e12c5d1SDavid du Colombier void	noteproc(int, char*);
1313e12c5d1SDavid du Colombier void	flushaction(void*, char*);
1323e12c5d1SDavid du Colombier void	pushfcall(char*);
1337dd7cddfSDavid du Colombier Qidtab* uniqueqid(Dir*);
1347dd7cddfSDavid du Colombier void	freeqid(Qidtab*);
1359a747e4fSDavid du Colombier char*	estrdup(char*);
1369a747e4fSDavid du Colombier void*	emallocz(uint);
1379a747e4fSDavid du Colombier int	readmessage(int, char*, int);
138a960ed1cSDavid du Colombier void	exclusions(void);
139a960ed1cSDavid du Colombier int	excludefile(char*);
140a960ed1cSDavid du Colombier int	preaddir(Fid*, uchar*, int, vlong);
141