1 /*
2  * NFS mounter V3;  see RFC 1813
3  */
4 /*
5 #pragma lib "libsunrpc.a"
6 #pragma src "/sys/src/libsunrpc"
7 */
8 #define _NFS3H_ /* sorry */
9 
10 enum {
11 	NfsMount1HandleSize = 32,
12 	NfsMount3MaxPathSize = 1024,
13 	NfsMount3MaxNameSize = 255,
14 	NfsMount3MaxHandleSize = 64,
15 	NfsMount3Program = 100005,
16 	NfsMount3Version = 3,
17 	NfsMount1Program = 100005,
18 	NfsMount1Version = 1
19 };
20 typedef struct NfsMount3TNull NfsMount3TNull;
21 typedef struct NfsMount3RNull NfsMount3RNull;
22 typedef struct NfsMount3TMnt NfsMount3TMnt;
23 typedef struct NfsMount3RMnt NfsMount3RMnt;
24 typedef struct NfsMount3TDump NfsMount3TDump;
25 typedef struct NfsMount3Entry NfsMount3Entry;
26 typedef struct NfsMount3RDump NfsMount3RDump;
27 typedef struct NfsMount3TUmnt NfsMount3TUmnt;
28 typedef struct NfsMount3RUmnt NfsMount3RUmnt;
29 typedef struct NfsMount3Export NfsMount3Export;
30 typedef struct NfsMount3TUmntall NfsMount3TUmntall;
31 typedef struct NfsMount3RUmntall NfsMount3RUmntall;
32 typedef struct NfsMount3TExport NfsMount3TExport;
33 typedef struct NfsMount3RExport NfsMount3RExport;
34 
35 typedef enum
36 {
37 	NfsMount3CallTNull,
38 	NfsMount3CallRNull,
39 	NfsMount3CallTMnt,
40 	NfsMount3CallRMnt,
41 	NfsMount3CallTDump,
42 	NfsMount3CallRDump,
43 	NfsMount3CallTUmnt,
44 	NfsMount3CallRUmnt,
45 	NfsMount3CallTUmntall,
46 	NfsMount3CallRUmntall,
47 	NfsMount3CallTExport,
48 	NfsMount3CallRExport
49 } NfsMount3CallType;
50 
51 struct NfsMount3TNull {
52 	SunCall call;
53 };
54 
55 struct NfsMount3RNull {
56 	SunCall call;
57 };
58 
59 struct NfsMount3TMnt {
60 	SunCall call;
61 	char *path;
62 };
63 
64 struct NfsMount3RMnt {
65 	SunCall call;
66 	uint status;
67 	uchar *handle;
68 	uint len;
69 	u32int *auth;
70 	u32int nauth;
71 };
72 
73 struct NfsMount3TDump {
74 	SunCall call;
75 };
76 
77 struct NfsMount3Entry {
78 	char *host;
79 	char *path;
80 };
81 
82 struct NfsMount3RDump {
83 	SunCall call;
84 	uchar *data;
85 	u32int count;
86 };
87 
88 struct NfsMount3TUmnt {
89 	SunCall call;
90 	char *path;
91 };
92 
93 struct NfsMount3RUmnt {
94 	SunCall call;
95 };
96 
97 struct NfsMount3Export {
98 	char *path;
99 	char **g;
100 	u32int ng;
101 };
102 
103 struct NfsMount3TUmntall {
104 	SunCall call;
105 };
106 
107 struct NfsMount3RUmntall {
108 	SunCall call;
109 };
110 
111 struct NfsMount3TExport {
112 	SunCall call;
113 };
114 
115 struct NfsMount3RExport {
116 	SunCall call;
117 	uchar *data;
118 	u32int count;
119 };
120 
121 uint nfsmount3exportgroupsize(uchar*);
122 uint nfsmount3exportsize(NfsMount3Export*);
123 int nfsmount3exportpack(uchar*, uchar*, uchar**, NfsMount3Export*);
124 int nfsmount3exportunpack(uchar*, uchar*, uchar**, char**, char***, NfsMount3Export*);
125 int nfsmount3entrypack(uchar*, uchar*, uchar**, NfsMount3Entry*);
126 int nfsmount3entryunpack(uchar*, uchar*, uchar**, NfsMount3Entry*);
127 uint nfsmount3entrysize(NfsMount3Entry*);
128 
129 extern SunProg nfsmount3prog;
130 
131 /*
132  * NFS V3; see RFC 1813
133  */
134 enum {
135 	Nfs3MaxHandleSize = 64,
136 	Nfs3CookieVerfSize = 8,
137 	Nfs3CreateVerfSize = 8,
138 	Nfs3WriteVerfSize = 8,
139 	Nfs3AccessRead = 1,
140 	Nfs3AccessLookup = 2,
141 	Nfs3AccessModify = 4,
142 	Nfs3AccessExtend = 8,
143 	Nfs3AccessDelete = 16,
144 	Nfs3AccessExecute = 32,
145 	Nfs3FsHasLinks = 1,
146 	Nfs3FsHasSymlinks = 2,
147 	Nfs3FsHomogeneous = 8,
148 	Nfs3FsCanSetTime = 16,
149 
150 	Nfs3Version = 3,
151 	Nfs3Program = 100003
152 };
153 typedef enum
154 {
155 	Nfs3Ok = 0,
156 	Nfs3ErrNotOwner = 1,
157 	Nfs3ErrNoEnt = 2,
158 	Nfs3ErrIo = 5,
159 	Nfs3ErrNxio = 6,
160 	Nfs3ErrNoMem = 12,
161 	Nfs3ErrAcces = 13,
162 	Nfs3ErrExist = 17,
163 	Nfs3ErrXDev = 18,
164 	Nfs3ErrNoDev = 19,
165 	Nfs3ErrNotDir = 20,
166 	Nfs3ErrIsDir = 21,
167 	Nfs3ErrInval = 22,
168 	Nfs3ErrFbig = 27,
169 	Nfs3ErrNoSpc = 28,
170 	Nfs3ErrRoFs = 30,
171 	Nfs3ErrMLink = 31,
172 	Nfs3ErrNameTooLong = 63,
173 	Nfs3ErrNotEmpty = 66,
174 	Nfs3ErrDQuot = 69,
175 	Nfs3ErrStale = 70,
176 	Nfs3ErrRemote = 71,
177 	Nfs3ErrBadHandle = 10001,
178 	Nfs3ErrNotSync = 10002,
179 	Nfs3ErrBadCookie = 10003,
180 	Nfs3ErrNotSupp = 10004,
181 	Nfs3ErrTooSmall = 10005,
182 	Nfs3ErrServerFault = 10006,
183 	Nfs3ErrBadType = 10007,
184 	Nfs3ErrJukebox = 10008,
185 	Nfs3ErrFprintNotFound = 10009,
186 	Nfs3ErrAborted = 10010
187 } Nfs3Status;
188 
189 void nfs3errstr(Nfs3Status);
190 
191 typedef enum
192 {
193 	Nfs3FileReg = 1,
194 	Nfs3FileDir = 2,
195 	Nfs3FileBlock = 3,
196 	Nfs3FileChar = 4,
197 	Nfs3FileSymlink = 5,
198 	Nfs3FileSocket = 6,
199 	Nfs3FileFifo = 7
200 } Nfs3FileType;
201 
202 enum
203 {
204 	Nfs3ModeSetUid = 0x800,
205 	Nfs3ModeSetGid = 0x400,
206 	Nfs3ModeSticky = 0x200
207 };
208 
209 typedef enum
210 {
211 	Nfs3CallTNull,
212 	Nfs3CallRNull,
213 	Nfs3CallTGetattr,
214 	Nfs3CallRGetattr,
215 	Nfs3CallTSetattr,
216 	Nfs3CallRSetattr,
217 	Nfs3CallTLookup,
218 	Nfs3CallRLookup,
219 	Nfs3CallTAccess,
220 	Nfs3CallRAccess,
221 	Nfs3CallTReadlink,
222 	Nfs3CallRReadlink,
223 	Nfs3CallTRead,
224 	Nfs3CallRRead,
225 	Nfs3CallTWrite,
226 	Nfs3CallRWrite,
227 	Nfs3CallTCreate,
228 	Nfs3CallRCreate,
229 	Nfs3CallTMkdir,
230 	Nfs3CallRMkdir,
231 	Nfs3CallTSymlink,
232 	Nfs3CallRSymlink,
233 	Nfs3CallTMknod,
234 	Nfs3CallRMknod,
235 	Nfs3CallTRemove,
236 	Nfs3CallRRemove,
237 	Nfs3CallTRmdir,
238 	Nfs3CallRRmdir,
239 	Nfs3CallTRename,
240 	Nfs3CallRRename,
241 	Nfs3CallTLink,
242 	Nfs3CallRLink,
243 	Nfs3CallTReadDir,
244 	Nfs3CallRReadDir,
245 	Nfs3CallTReadDirPlus,
246 	Nfs3CallRReadDirPlus,
247 	Nfs3CallTFsStat,
248 	Nfs3CallRFsStat,
249 	Nfs3CallTFsInfo,
250 	Nfs3CallRFsInfo,
251 	Nfs3CallTPathconf,
252 	Nfs3CallRPathconf,
253 	Nfs3CallTCommit,
254 	Nfs3CallRCommit
255 } Nfs3CallType;
256 
257 typedef struct Nfs3Handle Nfs3Handle;
258 typedef struct Nfs3Time Nfs3Time;
259 typedef struct Nfs3Attr Nfs3Attr;
260 typedef struct Nfs3WccAttr Nfs3WccAttr;
261 typedef struct Nfs3Wcc Nfs3Wcc;
262 typedef enum
263 {
264 	Nfs3SetTimeDont = 0,
265 	Nfs3SetTimeServer = 1,
266 	Nfs3SetTimeClient = 2
267 } Nfs3SetTime;
268 
269 typedef struct Nfs3SetAttr Nfs3SetAttr;
270 typedef struct Nfs3TNull Nfs3TNull;
271 typedef struct Nfs3RNull Nfs3RNull;
272 typedef struct Nfs3TGetattr Nfs3TGetattr;
273 typedef struct Nfs3RGetattr Nfs3RGetattr;
274 typedef struct Nfs3TSetattr Nfs3TSetattr;
275 typedef struct Nfs3RSetattr Nfs3RSetattr;
276 typedef struct Nfs3TLookup Nfs3TLookup;
277 typedef struct Nfs3RLookup Nfs3RLookup;
278 typedef struct Nfs3TAccess Nfs3TAccess;
279 typedef struct Nfs3RAccess Nfs3RAccess;
280 typedef struct Nfs3TReadlink Nfs3TReadlink;
281 typedef struct Nfs3RReadlink Nfs3RReadlink;
282 typedef struct Nfs3TRead Nfs3TRead;
283 typedef struct Nfs3RRead Nfs3RRead;
284 typedef enum
285 {
286 	Nfs3SyncNone = 0,
287 	Nfs3SyncData = 1,
288 	Nfs3SyncFile = 2
289 } Nfs3Sync;
290 
291 typedef struct Nfs3TWrite Nfs3TWrite;
292 typedef struct Nfs3RWrite Nfs3RWrite;
293 typedef enum
294 {
295 	Nfs3CreateUnchecked = 0,
296 	Nfs3CreateGuarded = 1,
297 	Nfs3CreateExclusive = 2
298 } Nfs3Create;
299 
300 typedef struct Nfs3TCreate Nfs3TCreate;
301 typedef struct Nfs3RCreate Nfs3RCreate;
302 typedef struct Nfs3TMkdir Nfs3TMkdir;
303 typedef struct Nfs3RMkdir Nfs3RMkdir;
304 typedef struct Nfs3TSymlink Nfs3TSymlink;
305 typedef struct Nfs3RSymlink Nfs3RSymlink;
306 typedef struct Nfs3TMknod Nfs3TMknod;
307 typedef struct Nfs3RMknod Nfs3RMknod;
308 typedef struct Nfs3TRemove Nfs3TRemove;
309 typedef struct Nfs3RRemove Nfs3RRemove;
310 typedef struct Nfs3TRmdir Nfs3TRmdir;
311 typedef struct Nfs3RRmdir Nfs3RRmdir;
312 typedef struct Nfs3TRename Nfs3TRename;
313 typedef struct Nfs3RRename Nfs3RRename;
314 typedef struct Nfs3TLink Nfs3TLink;
315 typedef struct Nfs3RLink Nfs3RLink;
316 typedef struct Nfs3TReadDir Nfs3TReadDir;
317 typedef struct Nfs3Entry Nfs3Entry;
318 typedef struct Nfs3RReadDir Nfs3RReadDir;
319 typedef struct Nfs3TReadDirPlus Nfs3TReadDirPlus;
320 typedef struct Nfs3EntryPlus Nfs3EntryPlus;
321 typedef struct Nfs3RReadDirPlus Nfs3RReadDirPlus;
322 typedef struct Nfs3TFsStat Nfs3TFsStat;
323 typedef struct Nfs3RFsStat Nfs3RFsStat;
324 typedef struct Nfs3TFsInfo Nfs3TFsInfo;
325 typedef struct Nfs3RFsInfo Nfs3RFsInfo;
326 typedef struct Nfs3TPathconf Nfs3TPathconf;
327 typedef struct Nfs3RPathconf Nfs3RPathconf;
328 typedef struct Nfs3TCommit Nfs3TCommit;
329 typedef struct Nfs3RCommit Nfs3RCommit;
330 
331 struct Nfs3Handle {
332 	uchar h[Nfs3MaxHandleSize];
333 	u32int len;
334 };
335 
336 struct Nfs3Time {
337 	u32int sec;
338 	u32int nsec;
339 };
340 
341 struct Nfs3Attr {
342 	Nfs3FileType type;
343 	u32int mode;
344 	u32int nlink;
345 	u32int uid;
346 	u32int gid;
347 	u64int size;
348 	u64int used;
349 	u32int major;
350 	u32int minor;
351 	u64int fsid;
352 	u64int fileid;
353 	Nfs3Time atime;
354 	Nfs3Time mtime;
355 	Nfs3Time ctime;
356 };
357 
358 struct Nfs3WccAttr {
359 	u64int size;
360 	Nfs3Time mtime;
361 	Nfs3Time ctime;
362 };
363 
364 struct Nfs3Wcc {
365 	u1int haveWccAttr;
366 	Nfs3WccAttr wccAttr;
367 	u1int haveAttr;
368 	Nfs3Attr attr;
369 };
370 
371 struct Nfs3SetAttr {
372 	u1int setMode;
373 	u32int mode;
374 	u1int setUid;
375 	u32int uid;
376 	u1int setGid;
377 	u32int gid;
378 	u1int setSize;
379 	u64int size;
380 	Nfs3SetTime setAtime;
381 	Nfs3Time atime;
382 	Nfs3SetTime setMtime;
383 	Nfs3Time mtime;
384 };
385 
386 struct Nfs3TNull {
387 	SunCall call;
388 };
389 
390 struct Nfs3RNull {
391 	SunCall call;
392 };
393 
394 struct Nfs3TGetattr {
395 	SunCall call;
396 	Nfs3Handle handle;
397 };
398 
399 struct Nfs3RGetattr {
400 	SunCall call;
401 	Nfs3Status status;
402 	Nfs3Attr attr;
403 };
404 
405 struct Nfs3TSetattr {
406 	SunCall call;
407 	Nfs3Handle handle;
408 	Nfs3SetAttr attr;
409 	u1int checkCtime;
410 	Nfs3Time ctime;
411 };
412 
413 struct Nfs3RSetattr {
414 	SunCall call;
415 	Nfs3Status status;
416 	Nfs3Wcc wcc;
417 };
418 
419 struct Nfs3TLookup {
420 	SunCall call;
421 	Nfs3Handle handle;
422 	char *name;
423 };
424 
425 struct Nfs3RLookup {
426 	SunCall call;
427 	Nfs3Status status;
428 	Nfs3Handle handle;
429 	u1int haveAttr;
430 	Nfs3Attr attr;
431 	u1int haveDirAttr;
432 	Nfs3Attr dirAttr;
433 };
434 
435 struct Nfs3TAccess {
436 	SunCall call;
437 	Nfs3Handle handle;
438 	u32int access;
439 };
440 
441 struct Nfs3RAccess {
442 	SunCall call;
443 	Nfs3Status status;
444 	u1int haveAttr;
445 	Nfs3Attr attr;
446 	u32int access;
447 };
448 
449 struct Nfs3TReadlink {
450 	SunCall call;
451 	Nfs3Handle handle;
452 };
453 
454 struct Nfs3RReadlink {
455 	SunCall call;
456 	Nfs3Status status;
457 	u1int haveAttr;
458 	Nfs3Attr attr;
459 	char *data;
460 };
461 
462 struct Nfs3TRead {
463 	SunCall call;
464 	Nfs3Handle handle;
465 	u64int offset;
466 	u32int count;
467 };
468 
469 struct Nfs3RRead {
470 	SunCall call;
471 	Nfs3Status status;
472 	u1int haveAttr;
473 	Nfs3Attr attr;
474 	u32int count;
475 	u1int eof;
476 	uchar *data;
477 	u32int ndata;
478 };
479 
480 struct Nfs3TWrite {
481 	SunCall call;
482 	Nfs3Handle handle;
483 	u64int offset;
484 	u32int count;
485 	Nfs3Sync stable;
486 	uchar *data;
487 	u32int ndata;
488 };
489 
490 struct Nfs3RWrite {
491 	SunCall call;
492 	Nfs3Status status;
493 	Nfs3Wcc wcc;
494 	u32int count;
495 	Nfs3Sync committed;
496 	uchar verf[Nfs3WriteVerfSize];
497 };
498 
499 struct Nfs3TCreate {
500 	SunCall call;
501 	Nfs3Handle handle;
502 	char *name;
503 	Nfs3Create mode;
504 	Nfs3SetAttr attr;
505 	uchar verf[Nfs3CreateVerfSize];
506 };
507 
508 struct Nfs3RCreate {
509 	SunCall call;
510 	Nfs3Status status;
511 	u1int haveHandle;
512 	Nfs3Handle handle;
513 	u1int haveAttr;
514 	Nfs3Attr attr;
515 	Nfs3Wcc dirWcc;
516 };
517 
518 struct Nfs3TMkdir {
519 	SunCall call;
520 	Nfs3Handle handle;
521 	char *name;
522 	Nfs3SetAttr attr;
523 };
524 
525 struct Nfs3RMkdir {
526 	SunCall call;
527 	Nfs3Status status;
528 	u1int haveHandle;
529 	Nfs3Handle handle;
530 	u1int haveAttr;
531 	Nfs3Attr attr;
532 	Nfs3Wcc dirWcc;
533 };
534 
535 struct Nfs3TSymlink {
536 	SunCall call;
537 	Nfs3Handle handle;
538 	char *name;
539 	Nfs3SetAttr attr;
540 	char *data;
541 };
542 
543 struct Nfs3RSymlink {
544 	SunCall call;
545 	Nfs3Status status;
546 	u1int haveHandle;
547 	Nfs3Handle handle;
548 	u1int haveAttr;
549 	Nfs3Attr attr;
550 	Nfs3Wcc dirWcc;
551 };
552 
553 struct Nfs3TMknod {
554 	SunCall call;
555 	Nfs3Handle handle;
556 	char *name;
557 	Nfs3FileType type;
558 	Nfs3SetAttr attr;
559 	u32int major;
560 	u32int minor;
561 };
562 
563 struct Nfs3RMknod {
564 	SunCall call;
565 	Nfs3Status status;
566 	u1int haveHandle;
567 	Nfs3Handle handle;
568 	u1int haveAttr;
569 	Nfs3Attr attr;
570 	Nfs3Wcc dirWcc;
571 };
572 
573 struct Nfs3TRemove {
574 	SunCall call;
575 	Nfs3Handle handle;
576 	char *name;
577 };
578 
579 struct Nfs3RRemove {
580 	SunCall call;
581 	Nfs3Status status;
582 	Nfs3Wcc wcc;
583 };
584 
585 struct Nfs3TRmdir {
586 	SunCall call;
587 	Nfs3Handle handle;
588 	char *name;
589 };
590 
591 struct Nfs3RRmdir {
592 	SunCall call;
593 	Nfs3Status status;
594 	Nfs3Wcc wcc;
595 };
596 
597 struct Nfs3TRename {
598 	SunCall call;
599 	struct {
600 		Nfs3Handle handle;
601 		char *name;
602 	} from;
603 	struct {
604 		Nfs3Handle handle;
605 		char *name;
606 	} to;
607 };
608 
609 struct Nfs3RRename {
610 	SunCall call;
611 	Nfs3Status status;
612 	Nfs3Wcc fromWcc;
613 	Nfs3Wcc toWcc;
614 };
615 
616 struct Nfs3TLink {
617 	SunCall call;
618 	Nfs3Handle handle;
619 	struct {
620 		Nfs3Handle handle;
621 		char *name;
622 	} link;
623 };
624 
625 struct Nfs3RLink {
626 	SunCall call;
627 	Nfs3Status status;
628 	u1int haveAttr;
629 	Nfs3Attr attr;
630 	Nfs3Wcc dirWcc;
631 };
632 
633 struct Nfs3TReadDir {
634 	SunCall call;
635 	Nfs3Handle handle;
636 	u64int cookie;
637 	uchar verf[Nfs3CookieVerfSize];
638 	u32int count;
639 };
640 
641 struct Nfs3RReadDir {
642 	SunCall call;
643 	Nfs3Status status;
644 	u1int haveAttr;
645 	Nfs3Attr attr;
646 	uchar verf[Nfs3CookieVerfSize];
647 	uchar *data;
648 	u32int count;
649 	u1int eof;
650 };
651 
652 struct Nfs3TReadDirPlus {
653 	SunCall call;
654 	Nfs3Handle handle;
655 	u64int cookie;
656 	uchar verf[Nfs3CookieVerfSize];
657 	u32int dirCount;
658 	u32int maxCount;
659 };
660 
661 struct Nfs3Entry {
662 	u64int fileid;
663 	char *name;
664 	uint namelen;
665 	u64int cookie;
666 	u1int haveAttr;
667 	Nfs3Attr attr;
668 	u1int haveHandle;
669 	Nfs3Handle handle;
670 };
671 
672 struct Nfs3RReadDirPlus {
673 	SunCall call;
674 	Nfs3Status status;
675 	u1int haveAttr;
676 	Nfs3Attr attr;
677 	uchar verf[Nfs3CookieVerfSize];
678 	uchar *data;
679 	u32int count;
680 	u1int eof;
681 };
682 
683 struct Nfs3TFsStat {
684 	SunCall call;
685 	Nfs3Handle handle;
686 };
687 
688 struct Nfs3RFsStat {
689 	SunCall call;
690 	Nfs3Status status;
691 	u1int haveAttr;
692 	Nfs3Attr attr;
693 	u64int totalBytes;
694 	u64int freeBytes;
695 	u64int availBytes;
696 	u64int totalFiles;
697 	u64int freeFiles;
698 	u64int availFiles;
699 	u32int invarSec;
700 };
701 
702 struct Nfs3TFsInfo {
703 	SunCall call;
704 	Nfs3Handle handle;
705 };
706 
707 struct Nfs3RFsInfo {
708 	SunCall call;
709 	Nfs3Status status;
710 	u1int haveAttr;
711 	Nfs3Attr attr;
712 	u32int readMax;
713 	u32int readPref;
714 	u32int readMult;
715 	u32int writeMax;
716 	u32int writePref;
717 	u32int writeMult;
718 	u32int readDirPref;
719 	u64int maxFileSize;
720 	Nfs3Time timePrec;
721 	u32int flags;
722 };
723 
724 struct Nfs3TPathconf {
725 	SunCall call;
726 	Nfs3Handle handle;
727 };
728 
729 struct Nfs3RPathconf {
730 	SunCall call;
731 	Nfs3Status status;
732 	u1int haveAttr;
733 	Nfs3Attr attr;
734 	u32int maxLink;
735 	u32int maxName;
736 	u1int noTrunc;
737 	u1int chownRestricted;
738 	u1int caseInsensitive;
739 	u1int casePreserving;
740 };
741 
742 struct Nfs3TCommit {
743 	SunCall call;
744 	Nfs3Handle handle;
745 	u64int offset;
746 	u32int count;
747 };
748 
749 struct Nfs3RCommit {
750 	SunCall call;
751 	Nfs3Status status;
752 	Nfs3Wcc wcc;
753 	uchar verf[Nfs3WriteVerfSize];
754 };
755 
756 char *nfs3statusstr(Nfs3Status);
757 char *nfs3typestr(SunCallType);
758 char *nfs3settimestr(Nfs3SetTime);
759 char *nfs3syncstr(Nfs3Sync);
760 
761 void nfs3handleprint(Fmt*, Nfs3Handle*);
762 u32int nfs3handlesize(Nfs3Handle*);
763 int nfs3handlepack(uchar*, uchar*, uchar**, Nfs3Handle*);
764 int nfs3handleunpack(uchar*, uchar*, uchar**, Nfs3Handle*);
765 
766 void nfs3timeprint(Fmt*, Nfs3Time*);
767 u32int nfs3timesize(Nfs3Time*);
768 int nfs3timepack(uchar*, uchar*, uchar**, Nfs3Time*);
769 int nfs3timeunpack(uchar*, uchar*, uchar**, Nfs3Time*);
770 
771 void nfs3attrprint(Fmt*, Nfs3Attr*);
772 u32int nfs3attrsize(Nfs3Attr*);
773 int nfs3attrpack(uchar*, uchar*, uchar**, Nfs3Attr*);
774 int nfs3attrunpack(uchar*, uchar*, uchar**, Nfs3Attr*);
775 
776 void nfs3wccattrprint(Fmt*, Nfs3WccAttr*);
777 u32int nfs3wccattrsize(Nfs3WccAttr*);
778 int nfs3wccattrpack(uchar*, uchar*, uchar**, Nfs3WccAttr*);
779 int nfs3wccattrunpack(uchar*, uchar*, uchar**, Nfs3WccAttr*);
780 
781 void nfs3wccprint(Fmt*, Nfs3Wcc*);
782 u32int nfs3wccsize(Nfs3Wcc*);
783 int nfs3wccpack(uchar*, uchar*, uchar**, Nfs3Wcc*);
784 int nfs3wccunpack(uchar*, uchar*, uchar**, Nfs3Wcc*);
785 
786 void nfs3setattrprint(Fmt*, Nfs3SetAttr*);
787 u32int nfs3setattrsize(Nfs3SetAttr*);
788 int nfs3setattrpack(uchar*, uchar*, uchar**, Nfs3SetAttr*);
789 int nfs3setattrunpack(uchar*, uchar*, uchar**, Nfs3SetAttr*);
790 
791 extern SunProg nfs3prog;
792 
793 void nfs3entryprint(Fmt*, Nfs3Entry*);
794 u32int nfs3entrysize(Nfs3Entry*);
795 int nfs3entrypack(uchar*, uchar*, uchar**, Nfs3Entry*);
796 int nfs3entryunpack(uchar*, uchar*, uchar**, Nfs3Entry*);
797 
798 void nfs3entryplusprint(Fmt*, Nfs3Entry*);
799 u32int nfs3entryplussize(Nfs3Entry*);
800 int nfs3entrypluspack(uchar*, uchar*, uchar**, Nfs3Entry*);
801 int nfs3entryplusunpack(uchar*, uchar*, uchar**, Nfs3Entry*);
802 
803