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