xref: /plan9/sys/src/cmd/exportfs/exportfs.h (revision 219b2ee8daee37f4aad58d63f21287faa8e4ffdc)
13e12c5d1SDavid du Colombier /*
23e12c5d1SDavid du Colombier  * exportfs.h - definitions for exporting file server
33e12c5d1SDavid du Colombier  */
43e12c5d1SDavid du Colombier 
53e12c5d1SDavid du Colombier #define DEBUG		if(!dbg);else fprint
63e12c5d1SDavid du Colombier #define fidhash(s)	fhash[s%FHASHSIZE]
73e12c5d1SDavid du Colombier 
83e12c5d1SDavid du Colombier typedef struct Fsrpc Fsrpc;
93e12c5d1SDavid du Colombier typedef struct Fid Fid;
103e12c5d1SDavid du Colombier typedef struct File File;
113e12c5d1SDavid du Colombier typedef struct Proc Proc;
123e12c5d1SDavid du Colombier 
133e12c5d1SDavid du Colombier struct Fsrpc
143e12c5d1SDavid du Colombier {
153e12c5d1SDavid du Colombier 	int	busy;		/* Work buffer has pending rpc to service */
163e12c5d1SDavid du Colombier 	int	pid;		/* Pid of slave process executing the rpc */
173e12c5d1SDavid du Colombier 	int	canint;		/* Interrupt gate */
183e12c5d1SDavid du Colombier 	int	flushtag;	/* Tag on which to reply to flush */
193e12c5d1SDavid du Colombier 	Fcall	work;		/* Plan 9 incoming Fcall */
203e12c5d1SDavid du Colombier 	char	buf[MAXFDATA+MAXMSG];	/* 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 	int	offset;		/* current file offset */
273e12c5d1SDavid du Colombier 	File	*f;		/* File attached to this fid */
283e12c5d1SDavid du Colombier 	int	mode;
293e12c5d1SDavid du Colombier 	int	nr;		/* fid number */
30*219b2ee8SDavid du Colombier 	Fsrpc	*mpend;		/* Split transaction mount */
31*219b2ee8SDavid du Colombier 	int	mid;		/* Mount id */
323e12c5d1SDavid du Colombier 	Fid	*next;		/* hash link */
333e12c5d1SDavid du Colombier };
343e12c5d1SDavid du Colombier 
353e12c5d1SDavid du Colombier struct File
363e12c5d1SDavid du Colombier {
373e12c5d1SDavid du Colombier 	char	name[NAMELEN];
383e12c5d1SDavid du Colombier 	Qid	qid;
393e12c5d1SDavid du Colombier 	File	*parent;
403e12c5d1SDavid du Colombier 	File	*child;
413e12c5d1SDavid du Colombier 	File	*childlist;
423e12c5d1SDavid du Colombier };
433e12c5d1SDavid du Colombier 
443e12c5d1SDavid du Colombier struct Proc
453e12c5d1SDavid du Colombier {
463e12c5d1SDavid du Colombier 	int	pid;
473e12c5d1SDavid du Colombier 	int	busy;
483e12c5d1SDavid du Colombier 	Proc	*next;
493e12c5d1SDavid du Colombier };
503e12c5d1SDavid du Colombier 
513e12c5d1SDavid du Colombier enum
523e12c5d1SDavid du Colombier {
53*219b2ee8SDavid du Colombier 	MAXPROC		= 16,
54*219b2ee8SDavid du Colombier 	DIRCHUNK	= (50*DIRLEN),
55*219b2ee8SDavid du Colombier 	FHASHSIZE	= 64,
563e12c5d1SDavid du Colombier 	Nr_workbufs 	= 16,
573e12c5d1SDavid du Colombier 	Fidchunk	= 1000,
58*219b2ee8SDavid du Colombier 	Npsmpt		= 32,
593e12c5d1SDavid du Colombier };
603e12c5d1SDavid du Colombier 
613e12c5d1SDavid du Colombier enum
623e12c5d1SDavid du Colombier {
633e12c5d1SDavid du Colombier 	Ebadfid,
643e12c5d1SDavid du Colombier 	Enotdir,
653e12c5d1SDavid du Colombier 	Edupfid,
663e12c5d1SDavid du Colombier 	Eopen,
673e12c5d1SDavid du Colombier 	Exmnt,
683e12c5d1SDavid du Colombier 	Enoauth,
69*219b2ee8SDavid du Colombier 	Emip,
70*219b2ee8SDavid du Colombier 	Enopsmt,
713e12c5d1SDavid du Colombier };
723e12c5d1SDavid du Colombier 
733e12c5d1SDavid du Colombier Extern Fsrpc	*Workq;
743e12c5d1SDavid du Colombier Extern int  	dbg;
753e12c5d1SDavid du Colombier Extern File	*root;
76*219b2ee8SDavid du Colombier Extern File	*psmpt;
773e12c5d1SDavid du Colombier Extern Fid	**fhash;
783e12c5d1SDavid du Colombier Extern Fid	*fidfree;
793e12c5d1SDavid du Colombier Extern int	qid;
803e12c5d1SDavid du Colombier Extern Proc	*Proclist;
81*219b2ee8SDavid du Colombier Extern char	psmap[Npsmpt];
823e12c5d1SDavid du Colombier 
833e12c5d1SDavid du Colombier /* File system protocol service procedures */
843e12c5d1SDavid du Colombier void Xattach(Fsrpc*);
853e12c5d1SDavid du Colombier void Xauth(Fsrpc*);
863e12c5d1SDavid du Colombier void Xclone(Fsrpc*);
873e12c5d1SDavid du Colombier void Xclunk(Fsrpc*);
883e12c5d1SDavid du Colombier void Xclwalk(Fsrpc*);
893e12c5d1SDavid du Colombier void Xcreate(Fsrpc*);
903e12c5d1SDavid du Colombier void Xflush(Fsrpc*);
913e12c5d1SDavid du Colombier void Xnop(Fsrpc*);
923e12c5d1SDavid du Colombier void Xremove(Fsrpc*);
933e12c5d1SDavid du Colombier void Xsession(Fsrpc*);
943e12c5d1SDavid du Colombier void Xstat(Fsrpc*);
953e12c5d1SDavid du Colombier void Xwalk(Fsrpc*);
963e12c5d1SDavid du Colombier void Xwstat(Fsrpc*);
973e12c5d1SDavid du Colombier void slave(Fsrpc*);
983e12c5d1SDavid du Colombier 
993e12c5d1SDavid du Colombier void	reply(Fcall*, Fcall*, char*);
1003e12c5d1SDavid du Colombier Fid 	*getfid(int);
1013e12c5d1SDavid du Colombier int	freefid(int);
1023e12c5d1SDavid du Colombier Fid	*newfid(int);
1033e12c5d1SDavid du Colombier Fsrpc	*getsbuf(void);
1043e12c5d1SDavid du Colombier void	initroot(void);
1053e12c5d1SDavid du Colombier void	fatal(char*);
1063e12c5d1SDavid du Colombier void	makepath(char*, File*, char*);
1073e12c5d1SDavid du Colombier File	*file(File*, char*);
1083e12c5d1SDavid du Colombier void	slaveopen(Fsrpc*);
1093e12c5d1SDavid du Colombier void	slaveread(Fsrpc*);
1103e12c5d1SDavid du Colombier void	slavewrite(Fsrpc*);
1113e12c5d1SDavid du Colombier void	blockingslave(void);
1123e12c5d1SDavid du Colombier void	reopen(Fid *f);
1133e12c5d1SDavid du Colombier void	fileseek(Fid*, ulong);
1143e12c5d1SDavid du Colombier void	noteproc(int, char*);
1153e12c5d1SDavid du Colombier void	flushaction(void*, char*);
1163e12c5d1SDavid du Colombier void	pushfcall(char*);
117