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