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