Warning: Attempt to read property "date" on null in /usr/local/www/websvn.planix.org/blame.php on line 247

Warning: Attempt to read property "msg" on null in /usr/local/www/websvn.planix.org/blame.php on line 247
WebSVN – planix.SVN – Blame – /os/branches/feature-vt/sys/include/sunrpc.h – Rev 2

Subversion Repositories planix.SVN

Rev

Go to most recent revision | Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
2 - 1
/*
2
 * Sun RPC; see RFC 1057
3
 */
4
 
5
#pragma lib "libsunrpc.a"
6
#pragma src "/sys/src/libsunrpc"
7
 
8
typedef uchar u1int;
9
 
10
typedef struct SunAuthInfo SunAuthInfo;
11
typedef struct SunAuthUnix SunAuthUnix;
12
typedef struct SunRpc SunRpc;
13
typedef struct SunCall SunCall;
14
 
15
enum
16
{
17
	/* Authinfo.flavor */
18
	SunAuthNone = 0,
19
	SunAuthSys,
20
	SunAuthShort,
21
	SunAuthDes,
22
};
23
 
24
typedef enum {
25
	SunAcceptError = 0x10000,
26
	SunRejectError = 0x20000,
27
	SunAuthError = 0x40000,
28
 
29
	/* Reply.status */
30
	SunSuccess = 0,
31
 
32
	SunProgUnavail = SunAcceptError | 1,
33
	SunProgMismatch,
34
	SunProcUnavail,
35
	SunGarbageArgs,
36
	SunSystemErr,
37
 
38
	SunRpcMismatch = SunRejectError | 0,
39
 
40
	SunAuthBadCred = SunAuthError | 1,
41
	SunAuthRejectedCred,
42
	SunAuthBadVerf,
43
	SunAuthRejectedVerf,
44
	SunAuthTooWeak,
45
	SunAuthInvalidResp,
46
	SunAuthFailed,
47
} SunStatus;
48
 
49
struct SunAuthInfo
50
{
51
	uint flavor;
52
	uchar *data;
53
	uint ndata;
54
};
55
 
56
struct SunAuthUnix
57
{
58
	u32int stamp;
59
	char *sysname;
60
	u32int uid;
61
	u32int gid;
62
	u32int g[16];
63
	u32int ng;
64
};
65
 
66
struct SunRpc
67
{
68
	u32int xid;
69
	uint iscall;
70
 
71
	/*
72
	 * only sent on wire in call
73
	 * caller fills in for the reply unpackers.
74
	 */
75
	u32int proc;
76
 
77
	/* call */
78
	// uint proc;
79
	u32int prog, vers;
80
	SunAuthInfo cred;
81
	SunAuthInfo verf;
82
	uchar *data;
83
	uint ndata;
84
 
85
	/* reply */
86
	u32int status;
87
	// SunAuthInfo verf;
88
	u32int low, high;
89
	// uchar *data;
90
	// uint ndata;
91
};
92
 
93
typedef enum
94
{
95
	SunCallTypeTNull,
96
	SunCallTypeRNull,
97
} SunCallType;
98
 
99
struct SunCall
100
{
101
	SunRpc rpc;
102
	SunCallType type;
103
};
104
 
105
void sunErrstr(SunStatus);
106
 
107
void sunRpcPrint(Fmt*, SunRpc*);
108
uint sunRpcSize(SunRpc*);
109
SunStatus sunRpcPack(uchar*, uchar*, uchar**, SunRpc*);
110
SunStatus sunRpcUnpack(uchar*, uchar*, uchar**, SunRpc*);
111
 
112
void sunAuthInfoPrint(Fmt*, SunAuthInfo*);
113
uint sunAuthInfoSize(SunAuthInfo*);
114
int sunAuthInfoPack(uchar*, uchar*, uchar**, SunAuthInfo*);
115
int sunAuthInfoUnpack(uchar*, uchar*, uchar**, SunAuthInfo*);
116
 
117
void sunAuthUnixPrint(Fmt*, SunAuthUnix*);
118
uint sunAuthUnixSize(SunAuthUnix*);
119
int sunAuthUnixPack(uchar*, uchar*, uchar**, SunAuthUnix*);
120
int sunAuthUnixUnpack(uchar*, uchar*, uchar**, SunAuthUnix*);
121
 
122
int sunEnumPack(uchar*, uchar*, uchar**, int*);
123
int sunEnumUnpack(uchar*, uchar*, uchar**, int*);
124
int sunUint1Pack(uchar*, uchar*, uchar**, u1int*);
125
int sunUint1Unpack(uchar*, uchar*, uchar**, u1int*);
126
 
127
int sunStringPack(uchar*, uchar*, uchar**, char**, u32int);
128
int sunStringUnpack(uchar*, uchar*, uchar**, char**, u32int);
129
uint sunStringSize(char*);
130
 
131
int sunUint32Pack(uchar*, uchar*, uchar**, u32int*);
132
int sunUint32Unpack(uchar*, uchar*, uchar**, u32int*);
133
int sunUint64Pack(uchar*, uchar*, uchar**, u64int*);
134
int sunUint64Unpack(uchar*, uchar*, uchar**, u64int*);
135
 
136
int sunVarOpaquePack(uchar*, uchar*, uchar**, uchar**, u32int*, u32int);
137
int sunVarOpaqueUnpack(uchar*, uchar*, uchar**, uchar**, u32int*, u32int);
138
uint sunVarOpaqueSize(u32int);
139
 
140
int sunFixedOpaquePack(uchar*, uchar*, uchar**, uchar*, u32int);
141
int sunFixedOpaqueUnpack(uchar*, uchar*, uchar**, uchar*, u32int);
142
uint sunFixedOpaqueSize(u32int);
143
 
144
/*
145
 * Sun RPC Program
146
 */
147
typedef struct SunProc SunProc;
148
typedef struct SunProg SunProg;
149
struct SunProg
150
{
151
	uint prog;
152
	uint vers;
153
	SunProc *proc;
154
	int nproc;
155
};
156
 
157
struct SunProc
158
{
159
	int (*pack)(uchar*, uchar*, uchar**, SunCall*);
160
	int (*unpack)(uchar*, uchar*, uchar**, SunCall*);
161
	uint (*size)(SunCall*);
162
	void (*fmt)(Fmt*, SunCall*);
163
	uint sizeoftype;
164
};
165
 
166
SunStatus sunCallPack(SunProg*, uchar*, uchar*, uchar**, SunCall*);
167
SunStatus sunCallUnpack(SunProg*, uchar*, uchar*, uchar**, SunCall*);
168
SunStatus sunCallUnpackAlloc(SunProg*, SunCallType, uchar*, uchar*, uchar**, SunCall**);
169
uint sunCallSize(SunProg*, SunCall*);
170
void sunCallSetup(SunCall*, SunProg*, uint);
171
 
172
/*
173
 * Formatting
174
 */
175
#pragma varargck type "B" SunRpc*
176
#pragma varargck type "C" SunCall*
177
 
178
int	sunRpcFmt(Fmt*);
179
int	sunCallFmt(Fmt*);
180
void	sunFmtInstall(SunProg*);
181
 
182
 
183
/*
184
 * Sun RPC Server
185
 */
186
typedef struct SunMsg SunMsg;
187
typedef struct SunSrv SunSrv;
188
 
189
enum
190
{
191
	SunStackSize = 8192,
192
};
193
 
194
struct SunMsg
195
{
196
	uchar *data;
197
	int count;
198
	SunSrv *srv;
199
	SunRpc rpc;
200
	SunProg *pg;
201
	SunCall *call;
202
	Channel *creply;	/* chan(SunMsg*) */
203
};
204
 
205
struct SunSrv
206
{
207
	int chatty;
208
	int cacheReplies;
209
	int alwaysReject;
210
	SunProg **map;
211
	Channel *crequest;
212
 
213
/* implementation use only */
214
	Channel **cdispatch;
215
	SunProg **prog;
216
	int nprog;
217
	void *cache;
218
	Channel *creply;
219
	Channel *cthread;
220
};
221
 
222
SunSrv *sunSrv(void);
223
 
224
void	sunSrvProg(SunSrv *srv, SunProg *prog, Channel *c);
225
int	sunSrvAnnounce(SunSrv *srv, char *address);
226
int	sunSrvUdp(SunSrv *srv, char *address);
227
int	sunSrvNet(SunSrv *srv, char *address);
228
int	sunSrvFd(SunSrv *srv, int fd);
229
void	sunSrvThreadCreate(SunSrv *srv, void (*fn)(void*), void*);
230
void	sunSrvClose(SunSrv*);
231
 
232
int	sunMsgReply(SunMsg*, SunCall*);
233
int	sunMsgDrop(SunMsg*);
234
int	sunMsgReplyError(SunMsg*, SunStatus);
235
 
236
/*
237
 * Sun RPC Client
238
 */
239
typedef struct SunClient SunClient;
240
 
241
struct SunClient
242
{
243
	int		fd;
244
	int		chatty;
245
	int		needcount;
246
	ulong	maxwait;
247
	ulong	xidgen;
248
	int		nsend;
249
	int		nresend;
250
	struct {
251
		ulong min;
252
		ulong max;
253
		ulong avg;
254
	} rtt;
255
	Channel	*dying;
256
	Channel	*rpcchan;
257
	Channel	*timerchan;
258
	Channel	*flushchan;
259
	Channel	*readchan;
260
	SunProg	**prog;
261
	int		nprog;
262
	int 		timertid;
263
	int 		nettid;
264
};
265
 
266
SunClient	*sunDial(char*);
267
 
268
int	sunClientRpc(SunClient*, ulong, SunCall*, SunCall*, uchar**);
269
void	sunClientClose(SunClient*);
270
void	sunClientFlushRpc(SunClient*, ulong);
271
void	sunClientProg(SunClient*, SunProg*);
272
 
273
 
274
/*
275
 * Provided by callers.
276
 * Should remove dependence on this, but hard.
277
 */
278
void	*emalloc(ulong);
279
void *erealloc(void*, ulong);
280
 
281
 
282
/*
283
 * Sun RPC port mapper; see RFC 1057 Appendix A
284
 */
285
 
286
typedef struct PortMap PortMap;
287
typedef struct PortTNull PortTNull;
288
typedef struct PortRNull PortRNull;
289
typedef struct PortTSet PortTSet;
290
typedef struct PortRSet PortRSet;
291
typedef struct PortTUnset PortTUnset;
292
typedef struct PortRUnset PortRUnset;
293
typedef struct PortTGetport PortTGetport;
294
typedef struct PortRGetport PortRGetport;
295
typedef struct PortTDump PortTDump;
296
typedef struct PortRDump PortRDump;
297
typedef struct PortTCallit PortTCallit;
298
typedef struct PortRCallit PortRCallit;
299
 
300
typedef enum
301
{
302
	PortCallTNull,
303
	PortCallRNull,
304
	PortCallTSet,
305
	PortCallRSet,
306
	PortCallTUnset,
307
	PortCallRUnset,
308
	PortCallTGetport,
309
	PortCallRGetport,
310
	PortCallTDump,
311
	PortCallRDump,
312
	PortCallTCallit,
313
	PortCallRCallit,
314
} PortCallType;
315
 
316
enum
317
{
318
	PortProgram	= 100000,
319
	PortVersion	= 2,
320
 
321
	PortProtoTcp	= 6,	/* protocol number for TCP/IP */
322
	PortProtoUdp	= 17	/* protocol number for UDP/IP */
323
};
324
 
325
struct PortMap {
326
	u32int prog;
327
	u32int vers;
328
	u32int prot;
329
	u32int port;
330
};
331
 
332
struct PortTNull {
333
	SunCall call;
334
};
335
 
336
struct PortRNull {
337
	SunCall call;
338
};
339
 
340
struct PortTSet {
341
	SunCall call;
342
	PortMap map;
343
};
344
 
345
struct PortRSet {
346
	SunCall call;
347
	u1int b;
348
};
349
 
350
struct PortTUnset {
351
	SunCall call;
352
	PortMap map;
353
};
354
 
355
struct PortRUnset {
356
	SunCall call;
357
	u1int b;
358
};
359
 
360
struct PortTGetport {
361
	SunCall call;
362
	PortMap map;
363
};
364
 
365
struct PortRGetport {
366
	SunCall call;
367
	u32int port;
368
};
369
 
370
struct PortTDump {
371
	SunCall call;
372
};
373
 
374
struct PortRDump {
375
	SunCall call;
376
	PortMap *map;
377
	int nmap;
378
};
379
 
380
struct PortTCallit {
381
	SunCall call;
382
	u32int prog;
383
	u32int vers;
384
	u32int proc;
385
	uchar *data;
386
	u32int count;
387
};
388
 
389
struct PortRCallit {
390
	SunCall call;
391
	u32int port;
392
	uchar *data;
393
	u32int count;
394
};
395
 
396
extern SunProg portProg;