xref: /plan9-contrib/sys/src/cmd/9nfs/dat.h (revision ec59a3ddbfceee0efe34584c2c9981a5e5ff1ec4)
1 enum
2 {
3 	FHSIZE	= 32
4 };
5 
6 typedef struct Accept	Accept;
7 typedef struct Auth	Auth;
8 typedef struct Authunix	Authunix;
9 typedef struct Chalstuff Chalstuff;
10 typedef uchar		Fhandle[FHSIZE];
11 typedef struct Fid	Fid;
12 typedef struct Procmap	Procmap;
13 typedef struct Progmap	Progmap;
14 typedef struct Reject	Reject;
15 typedef struct Rpccall	Rpccall;
16 typedef struct Rpccache	Rpccache;
17 typedef struct Sattr	Sattr;
18 typedef struct Session	Session;
19 typedef struct String	String;
20 typedef struct Strnode	Strnode;
21 typedef struct Unixid	Unixid;
22 typedef struct Unixidmap Unixidmap;
23 typedef struct Unixmap	Unixmap;
24 typedef struct Unixscmap Unixscmap;
25 typedef struct Xfid	Xfid;
26 typedef struct Xfile	Xfile;
27 
28 struct String
29 {
30 	ulong	n;
31 	char *	s;
32 };
33 
34 struct Progmap
35 {
36 	int	progno;
37 	int	vers;
38 	void	(*init)(int, char**);
39 	Procmap *pmap;
40 };
41 
42 struct Procmap
43 {
44 	int	procno;
45 	int	(*procp)(int, Rpccall*, Rpccall*);
46 };
47 
48 struct Auth
49 {
50 	ulong	flavor;
51 	ulong	count;
52 	void *	data;
53 };
54 
55 struct Authunix
56 {
57 	ulong	stamp;
58 	String	mach;
59 	ulong	uid;
60 	ulong	gid;
61 	int	gidlen;
62 	ulong	gids[10];
63 };
64 
65 struct Accept
66 {
67 	Auth	averf;
68 	ulong	astat;
69 	union{
70 		void *	results;	/* SUCCESS */
71 		struct{			/* PROG_MISMATCH */
72 			ulong	plow;	/* acceptable version numbers */
73 			ulong	phigh;
74 		};
75 	};
76 };
77 
78 struct Reject
79 {
80 	ulong	rstat;
81 	union{
82 		struct{			/* RPC_MISMATCH */
83 			ulong	rlow;	/* acceptable  rpc version numbers */
84 			ulong	rhigh;
85 		};
86 		ulong	authstat;	/* AUTH_ERROR */
87 	};
88 };
89 
90 struct Rpccall
91 {
92 	uchar	prefix0[12];
93 	ulong	host;		/* prefixed to RPC message */
94 	uchar	prefix1[12];
95 	ulong	lhost;		/* prefixed to RPC message */
96 	ulong	port;		/* prefixed to RPC message */
97 	ulong	lport;		/* prefixed to RPC message */
98 	ulong	xid;		/* transaction id */
99 	ulong	mtype;		/* CALL or REPLY */
100 	union{
101 		struct{		/* CALL */
102 			ulong	rpcvers;	/* must be equal to two (2) */
103 			ulong	prog;		/* program number */
104 			ulong	vers;		/* program version */
105 			ulong	proc;		/* procedure number */
106 			Auth	cred;		/* authentication credentials */
107 			Auth	verf;		/* authentication verifier */
108 			Unixidmap *up;
109 			char *	user;
110 			void *	args;		/* procedure-specific */
111 		};
112 		struct{		/* REPLY */
113 			ulong	stat;		/* MSG_ACCEPTED or MSG_DENIED */
114 			union{
115 				Accept;
116 				Reject;
117 			};
118 		};
119 	};
120 };
121 
122 struct Rpccache
123 {
124 	Rpccache *prev;
125 	Rpccache *next;
126 	ulong	host;
127 	ulong	port;
128 	ulong	xid;
129 	int	n;
130 	uchar	data[4];
131 };
132 
133 struct Sattr
134 {
135 	ulong	mode;
136 	ulong	uid;
137 	ulong	gid;
138 	ulong	size;
139 	ulong	atime;		/* sec's */
140 	ulong	ausec;		/* microsec's */
141 	ulong	mtime;
142 	ulong	musec;
143 };
144 
145 struct Strnode
146 {
147 	Strnode *next;	/* in hash bucket */
148 	char	str[4];
149 };
150 
151 struct Unixid
152 {
153 	Unixid *next;
154 	char *	name;
155 	int	id;
156 };
157 
158 struct Unixmap
159 {
160 	char *	file;
161 	int	style;
162 	long	timestamp;
163 	Unixid *ids;
164 };
165 
166 struct Unixidmap
167 {
168 	Unixidmap *next;
169 	int	flag;
170 	char *	server;
171 	char *	client;
172 	Reprog *sexp;
173 	Reprog *cexp;
174 	Unixmap	u;
175 	Unixmap	g;
176 };
177 
178 struct Unixscmap
179 {
180 	Unixscmap *next;
181 	char *	server;
182 	ulong	clientip;
183 	Unixidmap *map;
184 };
185 
186 struct Xfile
187 {
188 	Xfile *	next;		/* hash chain */
189 	Session	*s;
190 	Qid		qid;	/* from stat */
191 	Xfile *	parent;
192 	Xfile *	child;		/* if directory */
193 	Xfile *	sib;		/* siblings */
194 	char *	name;		/* path element */
195 	Xfid *	users;
196 };
197 
198 enum
199 {
200 	Oread	= 1,
201 	Owrite	= 2,
202 	Open	= 3,
203 	Trunc	= 4
204 };
205 
206 struct Xfid
207 {
208 	Xfid *	next;		/* Xfile's user list */
209 	Xfile *	xp;
210 	char *	uid;
211 	Fid *	urfid;
212 	Fid *	opfid;
213 	ulong	mode;		/* open mode, if opfid is non-zero */
214 	ulong	offset;
215 };
216 
217 struct Fid
218 {
219 	Fid **	owner;		/* null for root fids */
220 	Fid *	prev;
221 	Fid *	next;
222 	long	tstale;		/* auto-clunk */
223 };
224 
225 enum
226 {
227 	Maxfdata = 8192,
228 	Maxstatdata = 2048,
229 };
230 
231 struct Session
232 {
233 	Session *next;
234 	char *	service;		/* for dial */
235 	int	fd;
236 #define CHALLEN 1
237 	char	cchal[CHALLEN];		/* client challenge */
238 	char	schal[CHALLEN];		/* server challenge */
239 	char	authid[ANAMELEN];	/* server encryption uid */
240 	char	authdom[DOMLEN];	/* server encryption domain */
241 	char *	spec;			/* for attach */
242 	Xfile *	root;			/* to answer mount rpc */
243 	ushort	tag;
244 	Fcall	f;
245 	uchar	data[IOHDRSZ+Maxfdata];
246 	uchar	statbuf[Maxstatdata];
247 	Fid *	free;			/* available */
248 	Fid	list;			/* active, most-recently-used order */
249 	Fid	fids[1000];
250 	int	noauth;
251 };
252 
253 struct Chalstuff
254 {
255 	Chalstuff *next;
256 	Xfid *	xf;
257 	long	tstale;
258 	Chalstate;
259 };
260 
261 extern int	rpcdebug;
262 extern int	p9debug;
263 extern int	chatty;
264 extern void	(*rpcalarm)(void);
265 extern long	starttime;
266 extern long	nfstime;
267 extern char *	config;
268 extern int	staletime;
269 extern int	messagesize;
270 extern char *	commonopts;
271