Blame


1 004aa293 2005-07-13 devnull /*
2 004aa293 2005-07-13 devnull * Simple read-only NFS v3 server.
3 004aa293 2005-07-13 devnull * Runs every request in its own thread.
4 004aa293 2005-07-13 devnull * Expects client to provide the fsxxx routines in nfs3srv.h.
5 004aa293 2005-07-13 devnull */
6 004aa293 2005-07-13 devnull #include <u.h>
7 004aa293 2005-07-13 devnull #include <libc.h>
8 004aa293 2005-07-13 devnull #include <thread.h>
9 004aa293 2005-07-13 devnull #include <sunrpc.h>
10 004aa293 2005-07-13 devnull #include <nfs3.h>
11 004aa293 2005-07-13 devnull #include "nfs3srv.h"
12 004aa293 2005-07-13 devnull
13 004aa293 2005-07-13 devnull static SunStatus
14 004aa293 2005-07-13 devnull authunixunpack(SunRpc *rpc, SunAuthUnix *au)
15 004aa293 2005-07-13 devnull {
16 004aa293 2005-07-13 devnull uchar *p, *ep;
17 004aa293 2005-07-13 devnull SunAuthInfo *ai;
18 004aa293 2005-07-13 devnull
19 004aa293 2005-07-13 devnull ai = &rpc->cred;
20 004aa293 2005-07-13 devnull if(ai->flavor != SunAuthSys)
21 004aa293 2005-07-13 devnull return SunAuthTooWeak;
22 004aa293 2005-07-13 devnull p = ai->data;
23 004aa293 2005-07-13 devnull ep = p+ai->ndata;
24 004aa293 2005-07-13 devnull if(sunauthunixunpack(p, ep, &p, au) < 0)
25 004aa293 2005-07-13 devnull return SunGarbageArgs;
26 004aa293 2005-07-13 devnull if(au->uid == 0)
27 004aa293 2005-07-13 devnull au->uid = -1;
28 004aa293 2005-07-13 devnull if(au->gid == 0)
29 004aa293 2005-07-13 devnull au->gid = -1;
30 004aa293 2005-07-13 devnull
31 004aa293 2005-07-13 devnull return SunSuccess;
32 004aa293 2005-07-13 devnull }
33 004aa293 2005-07-13 devnull
34 004aa293 2005-07-13 devnull static int
35 004aa293 2005-07-13 devnull rnull(SunMsg *m)
36 004aa293 2005-07-13 devnull {
37 004aa293 2005-07-13 devnull NfsMount3RNull rx;
38 004aa293 2005-07-13 devnull
39 004aa293 2005-07-13 devnull memset(&rx, 0, sizeof rx);
40 004aa293 2005-07-13 devnull return sunmsgreply(m, &rx.call);
41 004aa293 2005-07-13 devnull }
42 004aa293 2005-07-13 devnull
43 004aa293 2005-07-13 devnull static int
44 004aa293 2005-07-13 devnull rmnt(SunMsg *m)
45 004aa293 2005-07-13 devnull {
46 004aa293 2005-07-13 devnull Nfs3Handle nh;
47 004aa293 2005-07-13 devnull NfsMount3RMnt rx;
48 004aa293 2005-07-13 devnull SunAuthUnix au;
49 004aa293 2005-07-13 devnull int ok;
50 004aa293 2005-07-13 devnull
51 004aa293 2005-07-13 devnull if((ok = authunixunpack(&m->rpc, &au)) != SunSuccess)
52 004aa293 2005-07-13 devnull return sunmsgreplyerror(m, ok);
53 004aa293 2005-07-13 devnull
54 004aa293 2005-07-13 devnull /* ignore file system path and return the dump tree */
55 004aa293 2005-07-13 devnull
56 004aa293 2005-07-13 devnull memset(&rx, 0, sizeof rx);
57 004aa293 2005-07-13 devnull rx.nauth = 0;
58 004aa293 2005-07-13 devnull rx.status = 0;
59 004aa293 2005-07-13 devnull memset(&nh, 0, sizeof nh);
60 004aa293 2005-07-13 devnull fsgetroot(&nh);
61 004aa293 2005-07-13 devnull rx.handle = nh.h;
62 004aa293 2005-07-13 devnull rx.len = nh.len;
63 004aa293 2005-07-13 devnull
64 004aa293 2005-07-13 devnull return sunmsgreply(m, &rx.call);
65 004aa293 2005-07-13 devnull }
66 004aa293 2005-07-13 devnull
67 004aa293 2005-07-13 devnull static int
68 004aa293 2005-07-13 devnull rumnt(SunMsg *m)
69 004aa293 2005-07-13 devnull {
70 004aa293 2005-07-13 devnull NfsMount3RUmnt rx;
71 004aa293 2005-07-13 devnull
72 004aa293 2005-07-13 devnull /* ignore */
73 004aa293 2005-07-13 devnull
74 004aa293 2005-07-13 devnull memset(&rx, 0, sizeof rx);
75 004aa293 2005-07-13 devnull return sunmsgreply(m, &rx.call);
76 004aa293 2005-07-13 devnull }
77 004aa293 2005-07-13 devnull
78 004aa293 2005-07-13 devnull static int
79 004aa293 2005-07-13 devnull rumntall(SunMsg *m)
80 004aa293 2005-07-13 devnull {
81 004aa293 2005-07-13 devnull NfsMount3RUmntall rx;
82 004aa293 2005-07-13 devnull
83 004aa293 2005-07-13 devnull /* ignore */
84 004aa293 2005-07-13 devnull
85 004aa293 2005-07-13 devnull memset(&rx, 0, sizeof rx);
86 004aa293 2005-07-13 devnull return sunmsgreply(m, &rx.call);
87 004aa293 2005-07-13 devnull }
88 004aa293 2005-07-13 devnull
89 004aa293 2005-07-13 devnull static int
90 004aa293 2005-07-13 devnull rexport(SunMsg *m)
91 004aa293 2005-07-13 devnull {
92 004aa293 2005-07-13 devnull NfsMount3RExport rx;
93 004aa293 2005-07-13 devnull
94 004aa293 2005-07-13 devnull /* ignore */
95 004aa293 2005-07-13 devnull
96 004aa293 2005-07-13 devnull memset(&rx, 0, sizeof rx);
97 004aa293 2005-07-13 devnull rx.count = 0;
98 004aa293 2005-07-13 devnull return sunmsgreply(m, &rx.call);
99 004aa293 2005-07-13 devnull }
100 004aa293 2005-07-13 devnull
101 004aa293 2005-07-13 devnull static void
102 004aa293 2005-07-13 devnull rmount3(void *v)
103 004aa293 2005-07-13 devnull {
104 004aa293 2005-07-13 devnull SunMsg *m;
105 004aa293 2005-07-13 devnull
106 004aa293 2005-07-13 devnull m = v;
107 004aa293 2005-07-13 devnull switch(m->call->type){
108 004aa293 2005-07-13 devnull default:
109 004aa293 2005-07-13 devnull sunmsgreplyerror(m, SunProcUnavail);
110 004aa293 2005-07-13 devnull case NfsMount3CallTNull:
111 004aa293 2005-07-13 devnull rnull(m);
112 004aa293 2005-07-13 devnull break;
113 004aa293 2005-07-13 devnull case NfsMount3CallTMnt:
114 004aa293 2005-07-13 devnull rmnt(m);
115 004aa293 2005-07-13 devnull break;
116 004aa293 2005-07-13 devnull case NfsMount3CallTDump:
117 004aa293 2005-07-13 devnull rmnt(m);
118 004aa293 2005-07-13 devnull break;
119 004aa293 2005-07-13 devnull case NfsMount3CallTUmnt:
120 004aa293 2005-07-13 devnull rumnt(m);
121 004aa293 2005-07-13 devnull break;
122 004aa293 2005-07-13 devnull case NfsMount3CallTUmntall:
123 004aa293 2005-07-13 devnull rumntall(m);
124 004aa293 2005-07-13 devnull break;
125 004aa293 2005-07-13 devnull case NfsMount3CallTExport:
126 004aa293 2005-07-13 devnull rexport(m);
127 004aa293 2005-07-13 devnull break;
128 004aa293 2005-07-13 devnull }
129 004aa293 2005-07-13 devnull }
130 004aa293 2005-07-13 devnull
131 004aa293 2005-07-13 devnull void
132 004aa293 2005-07-13 devnull mount3proc(void *v)
133 004aa293 2005-07-13 devnull {
134 004aa293 2005-07-13 devnull Channel *c;
135 004aa293 2005-07-13 devnull SunMsg *m;
136 004aa293 2005-07-13 devnull
137 004aa293 2005-07-13 devnull threadsetname("mount1");
138 004aa293 2005-07-13 devnull c = v;
139 004aa293 2005-07-13 devnull while((m=recvp(c)) != nil)
140 004aa293 2005-07-13 devnull threadcreate(rmount3, m, SunStackSize);
141 004aa293 2005-07-13 devnull }
142 004aa293 2005-07-13 devnull
143 004aa293 2005-07-13 devnull static int
144 004aa293 2005-07-13 devnull senderror(SunMsg *m, SunCall *rc, Nfs3Status status)
145 004aa293 2005-07-13 devnull {
146 004aa293 2005-07-13 devnull /* knows that status is first field in all replies */
147 004aa293 2005-07-13 devnull ((Nfs3RGetattr*)rc)->status = status;
148 004aa293 2005-07-13 devnull return sunmsgreply(m, rc);
149 004aa293 2005-07-13 devnull }
150 004aa293 2005-07-13 devnull
151 004aa293 2005-07-13 devnull static int
152 004aa293 2005-07-13 devnull rnull0(SunMsg *m)
153 004aa293 2005-07-13 devnull {
154 004aa293 2005-07-13 devnull Nfs3RNull rx;
155 004aa293 2005-07-13 devnull
156 004aa293 2005-07-13 devnull memset(&rx, 0, sizeof rx);
157 004aa293 2005-07-13 devnull return sunmsgreply(m, &rx.call);
158 004aa293 2005-07-13 devnull }
159 004aa293 2005-07-13 devnull
160 004aa293 2005-07-13 devnull static int
161 004aa293 2005-07-13 devnull rgetattr(SunMsg *m)
162 004aa293 2005-07-13 devnull {
163 004aa293 2005-07-13 devnull Nfs3TGetattr *tx = (Nfs3TGetattr*)m->call;
164 004aa293 2005-07-13 devnull Nfs3RGetattr rx;
165 004aa293 2005-07-13 devnull SunAuthUnix au;
166 004aa293 2005-07-13 devnull int ok;
167 004aa293 2005-07-13 devnull
168 004aa293 2005-07-13 devnull if((ok = authunixunpack(&m->rpc, &au)) != SunSuccess)
169 004aa293 2005-07-13 devnull return sunmsgreplyerror(m, ok);
170 004aa293 2005-07-13 devnull
171 004aa293 2005-07-13 devnull memset(&rx, 0, sizeof rx);
172 004aa293 2005-07-13 devnull rx.status = fsgetattr(&au, &tx->handle, &rx.attr);
173 004aa293 2005-07-13 devnull return sunmsgreply(m, &rx.call);
174 004aa293 2005-07-13 devnull }
175 004aa293 2005-07-13 devnull
176 004aa293 2005-07-13 devnull static int
177 004aa293 2005-07-13 devnull rlookup(SunMsg *m)
178 004aa293 2005-07-13 devnull {
179 004aa293 2005-07-13 devnull Nfs3TLookup *tx = (Nfs3TLookup*)m->call;
180 004aa293 2005-07-13 devnull Nfs3RLookup rx;
181 004aa293 2005-07-13 devnull SunAuthUnix au;
182 004aa293 2005-07-13 devnull int ok;
183 004aa293 2005-07-13 devnull
184 004aa293 2005-07-13 devnull if((ok = authunixunpack(&m->rpc, &au)) != SunSuccess)
185 004aa293 2005-07-13 devnull return sunmsgreplyerror(m, ok);
186 004aa293 2005-07-13 devnull
187 004aa293 2005-07-13 devnull memset(&rx, 0, sizeof rx);
188 004aa293 2005-07-13 devnull rx.status = fsgetattr(&au, &tx->handle, &rx.dirAttr);
189 004aa293 2005-07-13 devnull if(rx.status != Nfs3Ok)
190 004aa293 2005-07-13 devnull return sunmsgreply(m, &rx.call);
191 004aa293 2005-07-13 devnull rx.haveDirAttr = 1;
192 004aa293 2005-07-13 devnull rx.status = fslookup(&au, &tx->handle, tx->name, &rx.handle);
193 004aa293 2005-07-13 devnull if(rx.status != Nfs3Ok)
194 004aa293 2005-07-13 devnull return sunmsgreply(m, &rx.call);
195 004aa293 2005-07-13 devnull rx.status = fsgetattr(&au, &rx.handle, &rx.attr);
196 004aa293 2005-07-13 devnull if(rx.status != Nfs3Ok)
197 004aa293 2005-07-13 devnull return sunmsgreply(m, &rx.call);
198 004aa293 2005-07-13 devnull rx.haveAttr = 1;
199 004aa293 2005-07-13 devnull return sunmsgreply(m, &rx.call);
200 004aa293 2005-07-13 devnull }
201 004aa293 2005-07-13 devnull
202 004aa293 2005-07-13 devnull static int
203 004aa293 2005-07-13 devnull raccess(SunMsg *m)
204 004aa293 2005-07-13 devnull {
205 004aa293 2005-07-13 devnull Nfs3TAccess *tx = (Nfs3TAccess*)m->call;
206 004aa293 2005-07-13 devnull Nfs3RAccess rx;
207 004aa293 2005-07-13 devnull SunAuthUnix au;
208 004aa293 2005-07-13 devnull int ok;
209 004aa293 2005-07-13 devnull
210 004aa293 2005-07-13 devnull if((ok = authunixunpack(&m->rpc, &au)) != SunSuccess)
211 004aa293 2005-07-13 devnull return sunmsgreplyerror(m, ok);
212 004aa293 2005-07-13 devnull
213 004aa293 2005-07-13 devnull memset(&rx, 0, sizeof rx);
214 004aa293 2005-07-13 devnull rx.haveAttr = 1;
215 004aa293 2005-07-13 devnull rx.status = fsaccess(&au, &tx->handle, tx->access, &rx.access, &rx.attr);
216 004aa293 2005-07-13 devnull return sunmsgreply(m, &rx.call);
217 004aa293 2005-07-13 devnull }
218 004aa293 2005-07-13 devnull
219 004aa293 2005-07-13 devnull static int
220 004aa293 2005-07-13 devnull rreadlink(SunMsg *m)
221 004aa293 2005-07-13 devnull {
222 004aa293 2005-07-13 devnull Nfs3RReadlink rx;
223 004aa293 2005-07-13 devnull Nfs3TReadlink *tx = (Nfs3TReadlink*)m->call;
224 004aa293 2005-07-13 devnull SunAuthUnix au;
225 004aa293 2005-07-13 devnull int ok;
226 004aa293 2005-07-13 devnull
227 004aa293 2005-07-13 devnull if((ok = authunixunpack(&m->rpc, &au)) != SunSuccess)
228 004aa293 2005-07-13 devnull return sunmsgreplyerror(m, ok);
229 004aa293 2005-07-13 devnull
230 004aa293 2005-07-13 devnull memset(&rx, 0, sizeof rx);
231 004aa293 2005-07-13 devnull rx.haveAttr = 0;
232 004aa293 2005-07-13 devnull rx.data = nil;
233 004aa293 2005-07-13 devnull rx.status = fsreadlink(&au, &tx->handle, &rx.data);
234 004aa293 2005-07-13 devnull sunmsgreply(m, &rx.call);
235 004aa293 2005-07-13 devnull free(rx.data);
236 004aa293 2005-07-13 devnull return 0;
237 004aa293 2005-07-13 devnull }
238 004aa293 2005-07-13 devnull
239 004aa293 2005-07-13 devnull static int
240 004aa293 2005-07-13 devnull rread(SunMsg *m)
241 004aa293 2005-07-13 devnull {
242 004aa293 2005-07-13 devnull Nfs3TRead *tx = (Nfs3TRead*)m->call;
243 004aa293 2005-07-13 devnull Nfs3RRead rx;
244 004aa293 2005-07-13 devnull SunAuthUnix au;
245 004aa293 2005-07-13 devnull int ok;
246 004aa293 2005-07-13 devnull
247 004aa293 2005-07-13 devnull if((ok = authunixunpack(&m->rpc, &au)) != SunSuccess)
248 004aa293 2005-07-13 devnull return sunmsgreplyerror(m, ok);
249 004aa293 2005-07-13 devnull
250 004aa293 2005-07-13 devnull memset(&rx, 0, sizeof rx);
251 004aa293 2005-07-13 devnull rx.haveAttr = 0;
252 004aa293 2005-07-13 devnull rx.data = nil;
253 004aa293 2005-07-13 devnull rx.status = fsreadfile(&au, &tx->handle, tx->count, tx->offset, &rx.data, &rx.count, &rx.eof);
254 004aa293 2005-07-13 devnull if(rx.status == Nfs3Ok)
255 004aa293 2005-07-13 devnull rx.ndata = rx.count;
256 004aa293 2005-07-13 devnull
257 004aa293 2005-07-13 devnull sunmsgreply(m, &rx.call);
258 004aa293 2005-07-13 devnull free(rx.data);
259 004aa293 2005-07-13 devnull return 0;
260 004aa293 2005-07-13 devnull }
261 004aa293 2005-07-13 devnull
262 004aa293 2005-07-13 devnull static int
263 004aa293 2005-07-13 devnull rreaddir(SunMsg *m)
264 004aa293 2005-07-13 devnull {
265 004aa293 2005-07-13 devnull Nfs3TReadDir *tx = (Nfs3TReadDir*)m->call;
266 004aa293 2005-07-13 devnull Nfs3RReadDir rx;
267 004aa293 2005-07-13 devnull SunAuthUnix au;
268 004aa293 2005-07-13 devnull int ok;
269 004aa293 2005-07-13 devnull
270 004aa293 2005-07-13 devnull if((ok = authunixunpack(&m->rpc, &au)) != SunSuccess)
271 004aa293 2005-07-13 devnull return sunmsgreplyerror(m, ok);
272 004aa293 2005-07-13 devnull
273 004aa293 2005-07-13 devnull memset(&rx, 0, sizeof rx);
274 004aa293 2005-07-13 devnull rx.status = fsreaddir(&au, &tx->handle, tx->count, tx->cookie, &rx.data, &rx.count, &rx.eof);
275 004aa293 2005-07-13 devnull sunmsgreply(m, &rx.call);
276 004aa293 2005-07-13 devnull free(rx.data);
277 004aa293 2005-07-13 devnull return 0;
278 004aa293 2005-07-13 devnull }
279 004aa293 2005-07-13 devnull
280 004aa293 2005-07-13 devnull static int
281 004aa293 2005-07-13 devnull rreaddirplus(SunMsg *m)
282 004aa293 2005-07-13 devnull {
283 004aa293 2005-07-13 devnull Nfs3RReadDirPlus rx;
284 004aa293 2005-07-13 devnull
285 004aa293 2005-07-13 devnull memset(&rx, 0, sizeof rx);
286 004aa293 2005-07-13 devnull rx.status = Nfs3ErrNotSupp;
287 004aa293 2005-07-13 devnull sunmsgreply(m, &rx.call);
288 004aa293 2005-07-13 devnull return 0;
289 004aa293 2005-07-13 devnull }
290 004aa293 2005-07-13 devnull
291 004aa293 2005-07-13 devnull static int
292 004aa293 2005-07-13 devnull rfsstat(SunMsg *m)
293 004aa293 2005-07-13 devnull {
294 004aa293 2005-07-13 devnull Nfs3RFsStat rx;
295 004aa293 2005-07-13 devnull
296 004aa293 2005-07-13 devnull /* just make something up */
297 004aa293 2005-07-13 devnull memset(&rx, 0, sizeof rx);
298 004aa293 2005-07-13 devnull rx.status = Nfs3Ok;
299 004aa293 2005-07-13 devnull rx.haveAttr = 0;
300 004aa293 2005-07-13 devnull rx.totalBytes = 1000000000;
301 004aa293 2005-07-13 devnull rx.freeBytes = 0;
302 004aa293 2005-07-13 devnull rx.availBytes = 0;
303 004aa293 2005-07-13 devnull rx.totalFiles = 100000;
304 004aa293 2005-07-13 devnull rx.freeFiles = 0;
305 004aa293 2005-07-13 devnull rx.availFiles = 0;
306 004aa293 2005-07-13 devnull rx.invarSec = 0;
307 004aa293 2005-07-13 devnull return sunmsgreply(m, &rx.call);
308 004aa293 2005-07-13 devnull }
309 004aa293 2005-07-13 devnull
310 004aa293 2005-07-13 devnull static int
311 004aa293 2005-07-13 devnull rfsinfo(SunMsg *m)
312 004aa293 2005-07-13 devnull {
313 004aa293 2005-07-13 devnull Nfs3RFsInfo rx;
314 004aa293 2005-07-13 devnull
315 004aa293 2005-07-13 devnull /* just make something up */
316 004aa293 2005-07-13 devnull memset(&rx, 0, sizeof rx);
317 004aa293 2005-07-13 devnull rx.status = Nfs3Ok;
318 004aa293 2005-07-13 devnull rx.haveAttr = 0;
319 004aa293 2005-07-13 devnull rx.readMax = MaxDataSize;
320 004aa293 2005-07-13 devnull rx.readPref = MaxDataSize;
321 004aa293 2005-07-13 devnull rx.readMult = MaxDataSize;
322 004aa293 2005-07-13 devnull rx.writeMax = MaxDataSize;
323 004aa293 2005-07-13 devnull rx.writePref = MaxDataSize;
324 004aa293 2005-07-13 devnull rx.writeMult = MaxDataSize;
325 004aa293 2005-07-13 devnull rx.readDirPref = MaxDataSize;
326 004aa293 2005-07-13 devnull rx.maxFileSize = 1LL<<60;
327 004aa293 2005-07-13 devnull rx.timePrec.sec = 1;
328 004aa293 2005-07-13 devnull rx.timePrec.nsec = 0;
329 004aa293 2005-07-13 devnull rx.flags = Nfs3FsHomogeneous|Nfs3FsCanSetTime;
330 004aa293 2005-07-13 devnull return sunmsgreply(m, &rx.call);
331 004aa293 2005-07-13 devnull }
332 004aa293 2005-07-13 devnull
333 004aa293 2005-07-13 devnull static int
334 004aa293 2005-07-13 devnull rpathconf(SunMsg *m)
335 004aa293 2005-07-13 devnull {
336 004aa293 2005-07-13 devnull Nfs3RPathconf rx;
337 004aa293 2005-07-13 devnull
338 004aa293 2005-07-13 devnull memset(&rx, 0, sizeof rx);
339 004aa293 2005-07-13 devnull rx.status = Nfs3Ok;
340 004aa293 2005-07-13 devnull rx.haveAttr = 0;
341 004aa293 2005-07-13 devnull rx.maxLink = 1;
342 004aa293 2005-07-13 devnull rx.maxName = 1024;
343 004aa293 2005-07-13 devnull rx.noTrunc = 1;
344 004aa293 2005-07-13 devnull rx.chownRestricted = 0;
345 004aa293 2005-07-13 devnull rx.caseInsensitive = 0;
346 004aa293 2005-07-13 devnull rx.casePreserving = 1;
347 004aa293 2005-07-13 devnull return sunmsgreply(m, &rx.call);
348 004aa293 2005-07-13 devnull }
349 004aa293 2005-07-13 devnull
350 004aa293 2005-07-13 devnull static int
351 004aa293 2005-07-13 devnull rrofs(SunMsg *m)
352 004aa293 2005-07-13 devnull {
353 004aa293 2005-07-13 devnull uchar buf[512]; /* clumsy hack*/
354 004aa293 2005-07-13 devnull
355 004aa293 2005-07-13 devnull memset(buf, 0, sizeof buf);
356 004aa293 2005-07-13 devnull return senderror(m, (SunCall*)buf, Nfs3ErrRoFs);
357 004aa293 2005-07-13 devnull }
358 004aa293 2005-07-13 devnull
359 004aa293 2005-07-13 devnull
360 004aa293 2005-07-13 devnull static void
361 004aa293 2005-07-13 devnull rnfs3(void *v)
362 004aa293 2005-07-13 devnull {
363 004aa293 2005-07-13 devnull SunMsg *m;
364 004aa293 2005-07-13 devnull
365 004aa293 2005-07-13 devnull m = v;
366 004aa293 2005-07-13 devnull switch(m->call->type){
367 004aa293 2005-07-13 devnull default:
368 004aa293 2005-07-13 devnull abort();
369 004aa293 2005-07-13 devnull case Nfs3CallTNull:
370 004aa293 2005-07-13 devnull rnull0(m);
371 004aa293 2005-07-13 devnull break;
372 004aa293 2005-07-13 devnull case Nfs3CallTGetattr:
373 004aa293 2005-07-13 devnull rgetattr(m);
374 004aa293 2005-07-13 devnull break;
375 004aa293 2005-07-13 devnull case Nfs3CallTLookup:
376 004aa293 2005-07-13 devnull rlookup(m);
377 004aa293 2005-07-13 devnull break;
378 004aa293 2005-07-13 devnull case Nfs3CallTAccess:
379 004aa293 2005-07-13 devnull raccess(m);
380 004aa293 2005-07-13 devnull break;
381 004aa293 2005-07-13 devnull case Nfs3CallTReadlink:
382 004aa293 2005-07-13 devnull rreadlink(m);
383 004aa293 2005-07-13 devnull break;
384 004aa293 2005-07-13 devnull case Nfs3CallTRead:
385 004aa293 2005-07-13 devnull rread(m);
386 004aa293 2005-07-13 devnull break;
387 004aa293 2005-07-13 devnull case Nfs3CallTReadDir:
388 004aa293 2005-07-13 devnull rreaddir(m);
389 004aa293 2005-07-13 devnull break;
390 004aa293 2005-07-13 devnull case Nfs3CallTReadDirPlus:
391 004aa293 2005-07-13 devnull rreaddirplus(m);
392 004aa293 2005-07-13 devnull break;
393 004aa293 2005-07-13 devnull case Nfs3CallTFsStat:
394 004aa293 2005-07-13 devnull rfsstat(m);
395 004aa293 2005-07-13 devnull break;
396 004aa293 2005-07-13 devnull case Nfs3CallTFsInfo:
397 004aa293 2005-07-13 devnull rfsinfo(m);
398 004aa293 2005-07-13 devnull break;
399 004aa293 2005-07-13 devnull case Nfs3CallTPathconf:
400 004aa293 2005-07-13 devnull rpathconf(m);
401 004aa293 2005-07-13 devnull break;
402 004aa293 2005-07-13 devnull case Nfs3CallTSetattr:
403 004aa293 2005-07-13 devnull case Nfs3CallTWrite:
404 004aa293 2005-07-13 devnull case Nfs3CallTCreate:
405 004aa293 2005-07-13 devnull case Nfs3CallTMkdir:
406 004aa293 2005-07-13 devnull case Nfs3CallTSymlink:
407 004aa293 2005-07-13 devnull case Nfs3CallTMknod:
408 004aa293 2005-07-13 devnull case Nfs3CallTRemove:
409 004aa293 2005-07-13 devnull case Nfs3CallTRmdir:
410 004aa293 2005-07-13 devnull case Nfs3CallTLink:
411 004aa293 2005-07-13 devnull case Nfs3CallTCommit:
412 004aa293 2005-07-13 devnull rrofs(m);
413 004aa293 2005-07-13 devnull break;
414 004aa293 2005-07-13 devnull }
415 004aa293 2005-07-13 devnull }
416 004aa293 2005-07-13 devnull
417 004aa293 2005-07-13 devnull void
418 004aa293 2005-07-13 devnull nfs3proc(void *v)
419 004aa293 2005-07-13 devnull {
420 004aa293 2005-07-13 devnull Channel *c;
421 004aa293 2005-07-13 devnull SunMsg *m;
422 004aa293 2005-07-13 devnull
423 004aa293 2005-07-13 devnull c = v;
424 004aa293 2005-07-13 devnull threadsetname("nfs3");
425 004aa293 2005-07-13 devnull while((m = recvp(c)) != nil)
426 004aa293 2005-07-13 devnull threadcreate(rnfs3, m, SunStackSize);
427 004aa293 2005-07-13 devnull }
428 004aa293 2005-07-13 devnull