Blob


1 /*
2 * SUN NFSv3 Mounter. See RFC 1813
3 */
5 #include <u.h>
6 #include <libc.h>
7 #include <thread.h>
8 #include <sunrpc.h>
9 #include <nfs3.h>
11 void
12 nfsmount3tnullprint(Fmt *fmt, NfsMount3TNull *x)
13 {
14 USED(x);
15 fmtprint(fmt, "%s\n", "NfsMount3TNull");
16 }
17 uint
18 nfsmount3tnullsize(NfsMount3TNull *x)
19 {
20 uint a;
21 USED(x);
22 a = 0;
23 return a;
24 }
25 int
26 nfsmount3tnullpack(uchar *a, uchar *ea, uchar **pa, NfsMount3TNull *x)
27 {
28 USED(ea);
29 USED(x);
30 *pa = a;
31 return 0;
32 }
33 int
34 nfsmount3tnullunpack(uchar *a, uchar *ea, uchar **pa, NfsMount3TNull *x)
35 {
36 USED(ea);
37 USED(x);
38 *pa = a;
39 return 0;
40 }
41 void
42 nfsmount3rnullprint(Fmt *fmt, NfsMount3RNull *x)
43 {
44 USED(x);
45 fmtprint(fmt, "%s\n", "NfsMount3RNull");
46 }
47 uint
48 nfsmount3rnullsize(NfsMount3RNull *x)
49 {
50 uint a;
51 USED(x);
52 a = 0;
53 return a;
54 }
55 int
56 nfsmount3rnullpack(uchar *a, uchar *ea, uchar **pa, NfsMount3RNull *x)
57 {
58 USED(ea);
59 USED(x);
60 *pa = a;
61 return 0;
62 }
63 int
64 nfsmount3rnullunpack(uchar *a, uchar *ea, uchar **pa, NfsMount3RNull *x)
65 {
66 USED(ea);
67 USED(x);
68 *pa = a;
69 return 0;
70 }
71 void
72 nfsmount3tmntprint(Fmt *fmt, NfsMount3TMnt *x)
73 {
74 fmtprint(fmt, "%s\n", "NfsMount3TMnt");
75 fmtprint(fmt, "\t%s=", "path");
76 fmtprint(fmt, "\"%s\"", x->path);
77 fmtprint(fmt, "\n");
78 }
79 uint
80 nfsmount3tmntsize(NfsMount3TMnt *x)
81 {
82 uint a;
83 USED(x);
84 a = 0 + sunstringsize(x->path);
85 return a;
86 }
87 int
88 nfsmount3tmntpack(uchar *a, uchar *ea, uchar **pa, NfsMount3TMnt *x)
89 {
90 if(sunstringpack(a, ea, &a, &x->path, 1024) < 0) goto Err;
91 *pa = a;
92 return 0;
93 Err:
94 *pa = ea;
95 return -1;
96 }
97 int
98 nfsmount3tmntunpack(uchar *a, uchar *ea, uchar **pa, NfsMount3TMnt *x)
99 {
100 if(sunstringunpack(a, ea, &a, &x->path, 1024) < 0) goto Err;
101 *pa = a;
102 return 0;
103 Err:
104 *pa = ea;
105 return -1;
107 void
108 nfsmount3rmntprint(Fmt *fmt, NfsMount3RMnt *x)
110 fmtprint(fmt, "%s\n", "NfsMount3RMnt");
111 fmtprint(fmt, "\t%s=", "status");
112 fmtprint(fmt, "%ud", x->status);
113 fmtprint(fmt, "\n");
114 switch(x->status){
115 case 0:
116 fmtprint(fmt, "\t%s=", "handle");
117 fmtprint(fmt, "%.*H", x->len, x->handle);
118 fmtprint(fmt, "\n");
119 break;
122 uint
123 nfsmount3rmntsize(NfsMount3RMnt *x)
125 uint a;
126 USED(x);
127 a = 0 + 4;
128 switch(x->status){
129 case 0:
130 a = a + sunvaropaquesize(x->len);
131 a = a + 4 + 4 * x->nauth;
132 break;
134 a = a;
135 return a;
137 uint
138 nfsmount1rmntsize(NfsMount3RMnt *x)
140 uint a;
141 USED(x);
142 a = 0 + 4;
143 switch(x->status){
144 case 0:
145 a = a + NfsMount1HandleSize;
146 break;
148 return a;
151 int
152 nfsmount3rmntpack(uchar *a, uchar *ea, uchar **pa, NfsMount3RMnt *x)
154 int i;
155 if(sunuint32pack(a, ea, &a, &x->status) < 0) goto Err;
156 switch(x->status){
157 case 0:
158 if(sunvaropaquepack(a, ea, &a, &x->handle, &x->len, NfsMount3MaxHandleSize) < 0) goto Err;
159 if(sunuint32pack(a, ea, &a, &x->nauth) < 0) goto Err;
160 for(i=0; i<x->nauth; i++)
161 if(sunuint32pack(a, ea, &a, &x->auth[i]) < 0) goto Err;
162 break;
164 *pa = a;
165 return 0;
166 Err:
167 *pa = ea;
168 return -1;
170 int
171 nfsmount1rmntpack(uchar *a, uchar *ea, uchar **pa, NfsMount3RMnt *x)
173 if(sunuint32pack(a, ea, &a, &x->status) < 0) goto Err;
174 switch(x->status){
175 case 0:
176 if(x->len != NfsMount1HandleSize)
177 goto Err;
178 if(sunfixedopaquepack(a, ea, &a, x->handle, NfsMount1HandleSize) < 0) goto Err;
179 if(x->nauth != 0)
180 goto Err;
181 break;
183 *pa = a;
184 return 0;
185 Err:
186 *pa = ea;
187 return -1;
189 int
190 nfsmount1rmntunpack(uchar *a, uchar *ea, uchar **pa, NfsMount3RMnt *x)
192 if(sunuint32unpack(a, ea, &a, &x->status) < 0) goto Err;
193 switch(x->status){
194 case 0:
195 x->len = NfsMount1HandleSize;
196 x->nauth = 0;
197 x->auth = 0;
198 if(sunfixedopaqueunpack(a, ea, &a, x->handle, NfsMount1HandleSize) < 0) goto Err;
199 if(x->nauth != 0)
200 goto Err;
201 break;
203 *pa = a;
204 return 0;
205 Err:
206 *pa = ea;
207 return -1;
210 int
211 nfsmount3rmntunpack(uchar *a, uchar *ea, uchar **pa, NfsMount3RMnt *x)
213 int i;
215 if(sunuint32unpack(a, ea, &a, &x->status) < 0) goto Err;
216 switch(x->status){
217 case 0:
218 if(sunvaropaqueunpack(a, ea, &a, &x->handle, &x->len, NfsMount3MaxHandleSize) < 0) goto Err;
219 if(sunuint32unpack(a, ea, &a, &x->nauth) < 0) goto Err;
220 x->auth = (u32int*)a;
221 for(i=0; i<x->nauth; i++)
222 if(sunuint32unpack(a, ea, &a, &x->auth[i]) < 0) goto Err;
223 break;
225 *pa = a;
226 return 0;
227 Err:
228 *pa = ea;
229 return -1;
231 void
232 nfsmount3tdumpprint(Fmt *fmt, NfsMount3TDump *x)
234 USED(x);
235 fmtprint(fmt, "%s\n", "NfsMount3TDump");
237 uint
238 nfsmount3tdumpsize(NfsMount3TDump *x)
240 uint a;
241 USED(x);
242 a = 0;
243 return a;
245 int
246 nfsmount3tdumppack(uchar *a, uchar *ea, uchar **pa, NfsMount3TDump *x)
248 USED(ea);
249 USED(x);
250 *pa = a;
251 return 0;
253 int
254 nfsmount3tdumpunpack(uchar *a, uchar *ea, uchar **pa, NfsMount3TDump *x)
256 USED(ea);
257 USED(x);
258 *pa = a;
259 return 0;
261 void
262 nfsmount3entryprint(Fmt *fmt, NfsMount3Entry *x)
264 fmtprint(fmt, "%s\n", "NfsMount3Entry");
265 fmtprint(fmt, "\t%s=", "host");
266 fmtprint(fmt, "\"%s\"", x->host);
267 fmtprint(fmt, "\n");
268 fmtprint(fmt, "\t%s=", "path");
269 fmtprint(fmt, "\"%s\"", x->path);
270 fmtprint(fmt, "\n");
272 uint
273 nfsmount3entrysize(NfsMount3Entry *x)
275 uint a;
276 USED(x);
277 a = 0 + sunstringsize(x->host) + sunstringsize(x->path);
278 return a;
280 int
281 nfsmount3entrypack(uchar *a, uchar *ea, uchar **pa, NfsMount3Entry *x)
283 u1int one;
285 one = 1;
286 if(sunuint1pack(a, ea, &a, &one) < 0) goto Err;
287 if(sunstringpack(a, ea, &a, &x->host, 255) < 0) goto Err;
288 if(sunstringpack(a, ea, &a, &x->path, 1024) < 0) goto Err;
289 *pa = a;
290 return 0;
291 Err:
292 *pa = ea;
293 return -1;
295 int
296 nfsmount3entryunpack(uchar *a, uchar *ea, uchar **pa, NfsMount3Entry *x)
298 u1int one;
300 if(sunuint1unpack(a, ea, &a, &one) < 0 || one != 1) goto Err;
301 if(sunstringunpack(a, ea, &a, &x->host, NfsMount3MaxNameSize) < 0) goto Err;
302 if(sunstringunpack(a, ea, &a, &x->path, NfsMount3MaxPathSize) < 0) goto Err;
303 *pa = a;
304 return 0;
305 Err:
306 *pa = ea;
307 return -1;
309 void
310 nfsmount3rdumpprint(Fmt *fmt, NfsMount3RDump *x)
312 USED(x);
313 fmtprint(fmt, "%s\n", "NfsMount3RDump");
315 uint
316 nfsmount3rdumpsize(NfsMount3RDump *x)
318 uint a;
319 USED(x);
320 a = 0;
321 a += x->count;
322 a += 4;
323 return a;
325 int
326 nfsmount3rdumppack(uchar *a, uchar *ea, uchar **pa, NfsMount3RDump *x)
328 u1int zero;
330 zero = 0;
331 if(a+x->count > ea) goto Err;
332 memmove(a, x->data, x->count);
333 a += x->count;
334 if(sunuint1pack(a, ea, &a, &zero) < 0)
335 goto Err;
336 *pa = a;
337 return 0;
338 Err:
339 *pa = ea;
340 return -1;
342 int
343 nfsmount3rdumpunpack(uchar *a, uchar *ea, uchar **pa, NfsMount3RDump *x)
345 int i;
346 uchar *oa;
347 u1int u1;
348 u32int u32;
350 oa = a;
351 for(i=0;; i++){
352 if(sunuint1unpack(a, ea, &a, &u1) < 0)
353 goto Err;
354 if(u1 == 0)
355 break;
356 if(sunuint32unpack(a, ea, &a, &u32) < 0
357 || u32 > NfsMount3MaxNameSize
358 || (a+=u32) >= ea
359 || sunuint32unpack(a, ea, &a, &u32) < 0
360 || u32 > NfsMount3MaxPathSize
361 || (a+=u32) >= ea)
362 goto Err;
364 x->count = (a-4) - oa;
365 x->data = oa;
366 *pa = a;
367 return 0;
368 Err:
369 *pa = ea;
370 return -1;
372 void
373 nfsmount3tumntprint(Fmt *fmt, NfsMount3TUmnt *x)
375 fmtprint(fmt, "%s\n", "NfsMount3TUmnt");
376 fmtprint(fmt, "\t%s=", "path");
377 fmtprint(fmt, "\"%s\"", x->path);
378 fmtprint(fmt, "\n");
380 uint
381 nfsmount3tumntsize(NfsMount3TUmnt *x)
383 uint a;
384 USED(x);
385 a = 0 + sunstringsize(x->path);
386 return a;
388 int
389 nfsmount3tumntpack(uchar *a, uchar *ea, uchar **pa, NfsMount3TUmnt *x)
391 if(sunstringpack(a, ea, &a, &x->path, 1024) < 0) goto Err;
392 *pa = a;
393 return 0;
394 Err:
395 *pa = ea;
396 return -1;
398 int
399 nfsmount3tumntunpack(uchar *a, uchar *ea, uchar **pa, NfsMount3TUmnt *x)
401 if(sunstringunpack(a, ea, &a, &x->path, 1024) < 0) goto Err;
402 *pa = a;
403 return 0;
404 Err:
405 *pa = ea;
406 return -1;
408 void
409 nfsmount3rumntprint(Fmt *fmt, NfsMount3RUmnt *x)
411 USED(x);
412 fmtprint(fmt, "%s\n", "NfsMount3RUmnt");
414 uint
415 nfsmount3rumntsize(NfsMount3RUmnt *x)
417 uint a;
418 USED(x);
419 a = 0;
420 return a;
422 int
423 nfsmount3rumntpack(uchar *a, uchar *ea, uchar **pa, NfsMount3RUmnt *x)
425 USED(ea);
426 USED(x);
427 *pa = a;
428 return 0;
430 int
431 nfsmount3rumntunpack(uchar *a, uchar *ea, uchar **pa, NfsMount3RUmnt *x)
433 USED(ea);
434 USED(x);
435 *pa = a;
436 return 0;
438 void
439 nfsmount3tumntallprint(Fmt *fmt, NfsMount3TUmntall *x)
441 USED(x);
442 fmtprint(fmt, "%s\n", "NfsMount3TUmntall");
444 uint
445 nfsmount3tumntallsize(NfsMount3TUmntall *x)
447 uint a;
448 USED(x);
449 a = 0;
450 return a;
452 int
453 nfsmount3tumntallpack(uchar *a, uchar *ea, uchar **pa, NfsMount3TUmntall *x)
455 USED(ea);
456 USED(x);
457 *pa = a;
458 return 0;
460 int
461 nfsmount3tumntallunpack(uchar *a, uchar *ea, uchar **pa, NfsMount3TUmntall *x)
463 USED(ea);
464 USED(x);
465 *pa = a;
466 return 0;
468 void
469 nfsmount3rumntallprint(Fmt *fmt, NfsMount3RUmntall *x)
471 USED(x);
472 fmtprint(fmt, "%s\n", "NfsMount3RUmntall");
474 uint
475 nfsmount3rumntallsize(NfsMount3RUmntall *x)
477 uint a;
478 USED(x);
479 a = 0;
480 return a;
482 int
483 nfsmount3rumntallpack(uchar *a, uchar *ea, uchar **pa, NfsMount3RUmntall *x)
485 USED(ea);
486 USED(x);
487 *pa = a;
488 return 0;
490 int
491 nfsmount3rumntallunpack(uchar *a, uchar *ea, uchar **pa, NfsMount3RUmntall *x)
493 USED(ea);
494 USED(x);
495 *pa = a;
496 return 0;
498 void
499 nfsmount3texportprint(Fmt *fmt, NfsMount3TExport *x)
501 USED(x);
502 fmtprint(fmt, "%s\n", "NfsMount3TExport");
504 uint
505 nfsmount3texportsize(NfsMount3TExport *x)
507 uint a;
508 USED(x);
509 a = 0;
510 return a;
512 int
513 nfsmount3texportpack(uchar *a, uchar *ea, uchar **pa, NfsMount3TExport *x)
515 USED(ea);
516 USED(x);
517 *pa = a;
518 return 0;
520 int
521 nfsmount3texportunpack(uchar *a, uchar *ea, uchar **pa, NfsMount3TExport *x)
523 USED(ea);
524 USED(x);
525 *pa = a;
526 return 0;
528 void
529 nfsmount3rexportprint(Fmt *fmt, NfsMount3RExport *x)
531 USED(x);
532 fmtprint(fmt, "%s\n", "NfsMount3RExport");
533 fmtprint(fmt, "\n");
535 uint
536 nfsmount3rexportsize(NfsMount3RExport *x)
538 uint a;
539 USED(x);
540 a = 0;
541 a += x->count;
542 a += 4; /* end of export list */
543 return a;
545 int
546 nfsmount3rexportpack(uchar *a, uchar *ea, uchar **pa, NfsMount3RExport *x)
548 u1int zero;
550 zero = 0;
551 if(a+x->count > ea) goto Err;
552 memmove(a, x->data, x->count);
553 a += x->count;
554 if(sunuint1pack(a, ea, &a, &zero) < 0)
555 goto Err;
556 *pa = a;
557 return 0;
558 Err:
559 *pa = ea;
560 return -1;
562 int
563 nfsmount3rexportunpack(uchar *a, uchar *ea, uchar **pa, NfsMount3RExport *x)
565 int ng, ne;
566 uchar *oa;
567 u1int u1;
568 u32int u32;
570 oa = a;
571 ng = 0;
572 for(ne=0;; ne++){
573 if(sunuint1unpack(a, ea, &a, &u1) < 0)
574 goto Err;
575 if(u1 == 0)
576 break;
577 if(sunuint32unpack(a, ea, &a, &u32) < 0
578 || (a += (u32+3)&~3) >= ea)
579 goto Err;
580 for(;; ng++){
581 if(sunuint1unpack(a, ea, &a, &u1) < 0)
582 goto Err;
583 if(u1 == 0)
584 break;
585 if(sunuint32unpack(a, ea, &a, &u32) < 0
586 || (a += (u32+3)&~3) >= ea)
587 goto Err;
590 x->data = oa;
591 x->count = (a-4) - oa;
592 *pa = a;
593 return 0;
594 Err:
595 *pa = ea;
596 return -1;
598 uint
599 nfsmount3exportgroupsize(uchar *a)
601 int ng;
602 u1int have;
603 u32int n;
605 a += 4;
606 sunuint32unpack(a, a+4, &a, &n);
607 a += (n+3)&~3;
608 ng = 0;
609 for(;;){
610 sunuint1unpack(a, a+4, &a, &have);
611 if(have == 0)
612 break;
613 ng++;
614 sunuint32unpack(a, a+4, &a, &n);
615 a += (n+3)&~3;
617 return ng;
619 int
620 nfsmount3exportunpack(uchar *a, uchar *ea, uchar **pa, char **gp, char ***pgp, NfsMount3Export *x)
622 int ng;
623 u1int u1;
625 if(sunuint1unpack(a, ea, &a, &u1) < 0 || u1 != 1) goto Err;
626 if(sunstringunpack(a, ea, &a, &x->path, NfsMount3MaxPathSize) < 0) goto Err;
627 x->g = gp;
628 ng = 0;
629 for(;;){
630 if(sunuint1unpack(a, ea, &a, &u1) < 0) goto Err;
631 if(u1 == 0)
632 break;
633 if(sunstringunpack(a, ea, &a, &gp[ng++], NfsMount3MaxNameSize) < 0) goto Err;
635 x->ng = ng;
636 *pgp = gp+ng;
637 *pa = a;
638 return 0;
640 Err:
641 *pa = ea;
642 return -1;
644 uint
645 nfsmount3exportsize(NfsMount3Export *x)
647 int i;
648 uint a;
650 a = 4 + sunstringsize(x->path);
651 for(i=0; i<x->ng; i++)
652 a += 4 + sunstringsize(x->g[i]);
653 a += 4;
654 return a;
656 int
657 nfsmount3exportpack(uchar *a, uchar *ea, uchar **pa, NfsMount3Export *x)
659 int i;
660 u1int u1;
662 u1 = 1;
663 if(sunuint1pack(a, ea, &a, &u1) < 0) goto Err;
664 if(sunstringpack(a, ea, &a, &x->path, NfsMount3MaxPathSize) < 0) goto Err;
665 for(i=0; i<x->ng; i++){
666 if(sunuint1pack(a, ea, &a, &u1) < 0) goto Err;
667 if(sunstringpack(a, ea, &a, &x->g[i], NfsMount3MaxNameSize) < 0) goto Err;
669 u1 = 0;
670 if(sunuint1pack(a, ea, &a, &u1) < 0) goto Err;
671 *pa = a;
672 return 0;
674 Err:
675 *pa = ea;
676 return -1;
679 typedef int (*P)(uchar*, uchar*, uchar**, SunCall*);
680 typedef void (*F)(Fmt*, SunCall*);
681 typedef uint (*S)(SunCall*);
683 static SunProc proc3[] = {
684 (P)nfsmount3tnullpack, (P)nfsmount3tnullunpack, (S)nfsmount3tnullsize, (F)nfsmount3tnullprint, sizeof(NfsMount3TNull),
685 (P)nfsmount3rnullpack, (P)nfsmount3rnullunpack, (S)nfsmount3rnullsize, (F)nfsmount3rnullprint, sizeof(NfsMount3RNull),
686 (P)nfsmount3tmntpack, (P)nfsmount3tmntunpack, (S)nfsmount3tmntsize, (F)nfsmount3tmntprint, sizeof(NfsMount3TMnt),
687 (P)nfsmount3rmntpack, (P)nfsmount3rmntunpack, (S)nfsmount3rmntsize, (F)nfsmount3rmntprint, sizeof(NfsMount3RMnt),
688 (P)nfsmount3tdumppack, (P)nfsmount3tdumpunpack, (S)nfsmount3tdumpsize, (F)nfsmount3tdumpprint, sizeof(NfsMount3TDump),
689 (P)nfsmount3rdumppack, (P)nfsmount3rdumpunpack, (S)nfsmount3rdumpsize, (F)nfsmount3rdumpprint, sizeof(NfsMount3RDump),
690 (P)nfsmount3tumntpack, (P)nfsmount3tumntunpack, (S)nfsmount3tumntsize, (F)nfsmount3tumntprint, sizeof(NfsMount3TUmnt),
691 (P)nfsmount3rumntpack, (P)nfsmount3rumntunpack, (S)nfsmount3rumntsize, (F)nfsmount3rumntprint, sizeof(NfsMount3RUmnt),
692 (P)nfsmount3tumntallpack, (P)nfsmount3tumntallunpack, (S)nfsmount3tumntallsize, (F)nfsmount3tumntallprint, sizeof(NfsMount3TUmntall),
693 (P)nfsmount3rumntallpack, (P)nfsmount3rumntallunpack, (S)nfsmount3rumntallsize, (F)nfsmount3rumntallprint, sizeof(NfsMount3RUmntall),
694 (P)nfsmount3texportpack, (P)nfsmount3texportunpack, (S)nfsmount3texportsize, (F)nfsmount3texportprint, sizeof(NfsMount3TExport),
695 (P)nfsmount3rexportpack, (P)nfsmount3rexportunpack, (S)nfsmount3rexportsize, (F)nfsmount3rexportprint, sizeof(NfsMount3RExport),
696 };
698 static SunProc proc1[] = {
699 (P)nfsmount3tnullpack, (P)nfsmount3tnullunpack, (S)nfsmount3tnullsize, (F)nfsmount3tnullprint, sizeof(NfsMount3TNull),
700 (P)nfsmount3rnullpack, (P)nfsmount3rnullunpack, (S)nfsmount3rnullsize, (F)nfsmount3rnullprint, sizeof(NfsMount3RNull),
701 (P)nfsmount3tmntpack, (P)nfsmount3tmntunpack, (S)nfsmount3tmntsize, (F)nfsmount3tmntprint, sizeof(NfsMount3TMnt),
702 (P)nfsmount1rmntpack, (P)nfsmount1rmntunpack, (S)nfsmount1rmntsize, (F)nfsmount3rmntprint, sizeof(NfsMount3RMnt),
703 (P)nfsmount3tdumppack, (P)nfsmount3tdumpunpack, (S)nfsmount3tdumpsize, (F)nfsmount3tdumpprint, sizeof(NfsMount3TDump),
704 (P)nfsmount3rdumppack, (P)nfsmount3rdumpunpack, (S)nfsmount3rdumpsize, (F)nfsmount3rdumpprint, sizeof(NfsMount3RDump),
705 (P)nfsmount3tumntpack, (P)nfsmount3tumntunpack, (S)nfsmount3tumntsize, (F)nfsmount3tumntprint, sizeof(NfsMount3TUmnt),
706 (P)nfsmount3rumntpack, (P)nfsmount3rumntunpack, (S)nfsmount3rumntsize, (F)nfsmount3rumntprint, sizeof(NfsMount3RUmnt),
707 (P)nfsmount3tumntallpack, (P)nfsmount3tumntallunpack, (S)nfsmount3tumntallsize, (F)nfsmount3tumntallprint, sizeof(NfsMount3TUmntall),
708 (P)nfsmount3rumntallpack, (P)nfsmount3rumntallunpack, (S)nfsmount3rumntallsize, (F)nfsmount3rumntallprint, sizeof(NfsMount3RUmntall),
709 (P)nfsmount3texportpack, (P)nfsmount3texportunpack, (S)nfsmount3texportsize, (F)nfsmount3texportprint, sizeof(NfsMount3TExport),
710 (P)nfsmount3rexportpack, (P)nfsmount3rexportunpack, (S)nfsmount3rexportsize, (F)nfsmount3rexportprint, sizeof(NfsMount3RExport),
711 };
713 SunProg nfsmount3prog =
715 NfsMount3Program,
716 NfsMount3Version,
717 proc3,
718 nelem(proc3),
719 };
721 SunProg nfsmount1prog =
723 NfsMount1Program,
724 NfsMount1Version,
725 proc1,
726 nelem(proc1),
727 };