Subversion Repositories planix.SVN

Rev

Rev 2 | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
2 - 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
	/* corresponds to Udphdr */
93
	uchar	prefix0[12];
94
	ulong	host;		/* ipv4 subset: prefixed to RPC message */
95
	uchar	prefix1[12];
96
	ulong	lhost;		/* ipv4 subset: prefixed to RPC message */
97
	/* ignore ifcaddr */
98
	ulong	port;		/* prefixed to RPC message */
99
	ulong	lport;		/* prefixed to RPC message */
100
 
101
	ulong	xid;		/* transaction id */
102
	ulong	mtype;		/* CALL or REPLY */
103
	union{
104
		struct{		/* CALL */
105
			ulong	rpcvers;	/* must be equal to two (2) */
106
			ulong	prog;		/* program number */
107
			ulong	vers;		/* program version */
108
			ulong	proc;		/* procedure number */
109
			Auth	cred;		/* authentication credentials */
110
			Auth	verf;		/* authentication verifier */
111
			Unixidmap *up;
112
			char *	user;
113
			void *	args;		/* procedure-specific */
114
		};
115
		struct{		/* REPLY */
116
			ulong	stat;		/* MSG_ACCEPTED or MSG_DENIED */
117
			union{
118
				Accept;
119
				Reject;
120
			};
121
		};
122
	};
123
};
124
 
125
struct Rpccache
126
{
127
	Rpccache *prev;
128
	Rpccache *next;
129
	ulong	host;
130
	ulong	port;
131
	ulong	xid;
132
	int	n;
133
	uchar	data[4];
134
};
135
 
136
struct Sattr
137
{
138
	ulong	mode;
139
	ulong	uid;
140
	ulong	gid;
141
	ulong	size;
142
	ulong	atime;		/* sec's */
143
	ulong	ausec;		/* microsec's */
144
	ulong	mtime;
145
	ulong	musec;
146
};
147
 
148
struct Strnode
149
{
150
	Strnode *next;	/* in hash bucket */
151
	char	str[4];
152
};
153
 
154
struct Unixid
155
{
156
	Unixid *next;
157
	char *	name;
158
	int	id;
159
};
160
 
161
struct Unixmap
162
{
163
	char *	file;
164
	int	style;
165
	long	timestamp;
166
	Unixid *ids;
167
};
168
 
169
struct Unixidmap
170
{
171
	Unixidmap *next;
172
	int	flag;
173
	char *	server;
174
	char *	client;
175
	Reprog *sexp;
176
	Reprog *cexp;
177
	Unixmap	u;
178
	Unixmap	g;
179
};
180
 
181
struct Unixscmap
182
{
183
	Unixscmap *next;
184
	char *	server;
185
	ulong	clientip;
186
	Unixidmap *map;
187
};
188
 
189
struct Xfile
190
{
191
	Xfile *	next;		/* hash chain */
192
	Session	*s;
193
	Qid		qid;	/* from stat */
194
	Xfile *	parent;
195
	Xfile *	child;		/* if directory */
196
	Xfile *	sib;		/* siblings */
197
	char *	name;		/* path element */
198
	Xfid *	users;
199
};
200
 
201
enum
202
{
203
	Oread	= 1,
204
	Owrite	= 2,
205
	Open	= 3,
206
	Trunc	= 4
207
};
208
 
209
struct Xfid
210
{
211
	Xfid *	next;		/* Xfile's user list */
212
	Xfile *	xp;
213
	char *	uid;
214
	Fid *	urfid;
215
	Fid *	opfid;
216
	ulong	mode;		/* open mode, if opfid is non-zero */
217
	ulong	offset;
218
};
219
 
220
struct Fid
221
{
222
	Fid **	owner;		/* null for root fids */
223
	Fid *	prev;
224
	Fid *	next;
225
	long	tstale;		/* auto-clunk */
226
};
227
 
228
enum
229
{
230
	Maxfdata = 8192,
231
	Maxstatdata = 2048,
232
};
233
 
234
struct Session
235
{
236
	Session *next;
237
	char *	service;		/* for dial */
238
	int	fd;
239
#define CHALLEN 1
240
	char	cchal[CHALLEN];		/* client challenge */
241
	char	schal[CHALLEN];		/* server challenge */
242
	char	authid[ANAMELEN];	/* server encryption uid */
243
	char	authdom[DOMLEN];	/* server encryption domain */
244
	char *	spec;			/* for attach */
245
	Xfile *	root;			/* to answer mount rpc */
246
	ushort	tag;
247
	Fcall	f;
248
	uchar	data[IOHDRSZ+Maxfdata];
249
	uchar	statbuf[Maxstatdata];
250
	Fid *	free;			/* available */
251
	Fid	list;			/* active, most-recently-used order */
252
	Fid	fids[1000];
253
	int	noauth;
254
};
255
 
256
struct Chalstuff
257
{
258
	Chalstuff *next;
259
	Xfid *	xf;
260
	long	tstale;
261
	Chalstate;
262
};
263
 
264
extern int	rpcdebug;
265
extern int	p9debug;
266
extern int	chatty;
267
extern void	(*rpcalarm)(void);
268
extern long	starttime;
269
extern long	nfstime;
270
extern char *	config;
271
extern int	staletime;
272
extern int	messagesize;
273
extern char *	commonopts;