1 /* NFS part from rfc 1813, NFSACL part is from wireshark sources */ 2 3 const NFS3_FHSIZE = 64; /* Maximum bytes in a V3 file handle */ 4 const NFS3_WRITEVERFSIZE = 8; 5 const NFS3_CREATEVERFSIZE = 8; 6 const NFS3_COOKIEVERFSIZE = 8; 7 8 typedef opaque cookieverf3[NFS3_COOKIEVERFSIZE]; 9 10 /*unsigned hyper can be overridden by giving rpcgen -DU_INT64_PLATTFORM_TYPE=" 11 where rpcgen doesn't know anything about hyper 12 default to unsigned hyper as of rfc 1813 */ 13 #ifndef U_INT64_PLATTFORM_TYPE 14 #define U_INT64_PLATTFORM_TYPE unsigned hyper 15 #endif/*U_INT64_PLATTFORM_TYPE*/ 16 17 typedef U_INT64_PLATTFORM_TYPE uint64; 18 19 typedef uint64 cookie3; 20 21 struct nfs_fh3 { 22 opaque data<NFS3_FHSIZE>; 23 }; 24 25 typedef string filename3<>; 26 27 struct diropargs3 { 28 nfs_fh3 dir; 29 filename3 name; 30 }; 31 32 enum ftype3 { 33 NF3REG = 1, 34 NF3DIR = 2, 35 NF3BLK = 3, 36 NF3CHR = 4, 37 NF3LNK = 5, 38 NF3SOCK = 6, 39 NF3FIFO = 7 40 }; 41 42 typedef uint32_t mode3; 43 44 typedef uint32_t uid3; 45 46 typedef uint32_t gid3; 47 48 typedef uint64 size3; 49 50 typedef uint64 fileid3; 51 52 struct specdata3 { 53 uint32_t specdata1; 54 uint32_t specdata2; 55 }; 56 57 struct nfstime3 { 58 uint32_t seconds; 59 uint32_t nseconds; 60 }; 61 62 struct fattr3 { 63 ftype3 type; 64 mode3 mode; 65 uint32_t nlink; 66 uid3 uid; 67 gid3 gid; 68 size3 size; 69 size3 used; 70 specdata3 rdev; 71 uint64 fsid; 72 fileid3 fileid; 73 nfstime3 atime; 74 nfstime3 mtime; 75 nfstime3 ctime; 76 }; 77 78 union post_op_attr switch (bool attributes_follow) { 79 case TRUE: 80 fattr3 attributes; 81 case FALSE: 82 void; 83 }; 84 85 86 enum nfsstat3 { 87 NFS3_OK = 0, 88 NFS3ERR_PERM = 1, 89 NFS3ERR_NOENT = 2, 90 NFS3ERR_IO = 5, 91 NFS3ERR_NXIO = 6, 92 NFS3ERR_ACCES = 13, 93 NFS3ERR_EXIST = 17, 94 NFS3ERR_XDEV = 18, 95 NFS3ERR_NODEV = 19, 96 NFS3ERR_NOTDIR = 20, 97 NFS3ERR_ISDIR = 21, 98 NFS3ERR_INVAL = 22, 99 NFS3ERR_FBIG = 27, 100 NFS3ERR_NOSPC = 28, 101 NFS3ERR_ROFS = 30, 102 NFS3ERR_MLINK = 31, 103 NFS3ERR_NAMETOOLONG = 63, 104 NFS3ERR_NOTEMPTY = 66, 105 NFS3ERR_DQUOT = 69, 106 NFS3ERR_STALE = 70, 107 NFS3ERR_REMOTE = 71, 108 NFS3ERR_BADHANDLE = 10001, 109 NFS3ERR_NOT_SYNC = 10002, 110 NFS3ERR_BAD_COOKIE = 10003, 111 NFS3ERR_NOTSUPP = 10004, 112 NFS3ERR_TOOSMALL = 10005, 113 NFS3ERR_SERVERFAULT = 10006, 114 NFS3ERR_BADTYPE = 10007, 115 NFS3ERR_JUKEBOX = 10008 116 }; 117 118 enum stable_how { 119 UNSTABLE = 0, 120 DATA_SYNC = 1, 121 FILE_SYNC = 2 122 }; 123 124 typedef uint64 offset3; 125 126 typedef uint32_t count3; 127 128 struct wcc_attr { 129 size3 size; 130 nfstime3 mtime; 131 nfstime3 ctime; 132 }; 133 134 union pre_op_attr switch (bool attributes_follow) { 135 case TRUE: 136 wcc_attr attributes; 137 case FALSE: 138 void; 139 }; 140 141 struct wcc_data { 142 pre_op_attr before; 143 post_op_attr after; 144 }; 145 146 struct WRITE3args { 147 nfs_fh3 file; 148 offset3 offset; 149 count3 count; 150 stable_how stable; 151 opaque data<>; 152 }; 153 154 typedef opaque writeverf3[NFS3_WRITEVERFSIZE]; 155 156 struct WRITE3resok { 157 wcc_data file_wcc; 158 count3 count; 159 stable_how committed; 160 writeverf3 verf; 161 }; 162 163 struct WRITE3resfail { 164 wcc_data file_wcc; 165 }; 166 167 union WRITE3res switch (nfsstat3 status) { 168 case NFS3_OK: 169 WRITE3resok resok; 170 default: 171 WRITE3resfail resfail; 172 }; 173 174 struct LOOKUP3args { 175 diropargs3 what; 176 }; 177 178 struct LOOKUP3resok { 179 nfs_fh3 object; 180 post_op_attr obj_attributes; 181 post_op_attr dir_attributes; 182 }; 183 184 struct LOOKUP3resfail { 185 post_op_attr dir_attributes; 186 }; 187 188 189 190 union LOOKUP3res switch (nfsstat3 status) { 191 case NFS3_OK: 192 LOOKUP3resok resok; 193 default: 194 LOOKUP3resfail resfail; 195 }; 196 197 struct COMMIT3args { 198 nfs_fh3 file; 199 offset3 offset; 200 count3 count; 201 }; 202 203 struct COMMIT3resok { 204 wcc_data file_wcc; 205 writeverf3 verf; 206 }; 207 208 struct COMMIT3resfail { 209 wcc_data file_wcc; 210 }; 211 212 union COMMIT3res switch (nfsstat3 status) { 213 case NFS3_OK: 214 COMMIT3resok resok; 215 default: 216 COMMIT3resfail resfail; 217 }; 218 219 const ACCESS3_READ = 0x0001; 220 const ACCESS3_LOOKUP = 0x0002; 221 const ACCESS3_MODIFY = 0x0004; 222 const ACCESS3_EXTEND = 0x0008; 223 const ACCESS3_DELETE = 0x0010; 224 const ACCESS3_EXECUTE = 0x0020; 225 226 struct ACCESS3args { 227 nfs_fh3 object; 228 uint32_t access; 229 }; 230 231 struct ACCESS3resok { 232 post_op_attr obj_attributes; 233 uint32_t access; 234 }; 235 236 struct ACCESS3resfail { 237 post_op_attr obj_attributes; 238 }; 239 240 union ACCESS3res switch (nfsstat3 status) { 241 case NFS3_OK: 242 ACCESS3resok resok; 243 default: 244 ACCESS3resfail resfail; 245 }; 246 247 struct GETATTR3args { 248 nfs_fh3 object; 249 }; 250 251 struct GETATTR3resok { 252 fattr3 obj_attributes; 253 }; 254 255 union GETATTR3res switch (nfsstat3 status) { 256 case NFS3_OK: 257 GETATTR3resok resok; 258 default: 259 void; 260 }; 261 262 263 264 enum time_how { 265 DONT_CHANGE = 0, 266 SET_TO_SERVER_TIME = 1, 267 SET_TO_CLIENT_TIME = 2 268 }; 269 270 union set_mode3 switch (bool set_it) { 271 case TRUE: 272 mode3 mode; 273 default: 274 void; 275 }; 276 277 union set_uid3 switch (bool set_it) { 278 case TRUE: 279 uid3 uid; 280 default: 281 void; 282 }; 283 284 union set_gid3 switch (bool set_it) { 285 case TRUE: 286 gid3 gid; 287 default: 288 void; 289 }; 290 291 union set_size3 switch (bool set_it) { 292 case TRUE: 293 size3 size; 294 default: 295 void; 296 }; 297 298 union set_atime switch (time_how set_it) { 299 case SET_TO_CLIENT_TIME: 300 nfstime3 atime; 301 default: 302 void; 303 }; 304 305 union set_mtime switch (time_how set_it) { 306 case SET_TO_CLIENT_TIME: 307 nfstime3 mtime; 308 default: 309 void; 310 }; 311 312 struct sattr3 { 313 set_mode3 mode; 314 set_uid3 uid; 315 set_gid3 gid; 316 set_size3 size; 317 set_atime atime; 318 set_mtime mtime; 319 }; 320 321 enum createmode3 { 322 UNCHECKED = 0, 323 GUARDED = 1, 324 EXCLUSIVE = 2 325 }; 326 327 328 typedef opaque createverf3[NFS3_CREATEVERFSIZE]; 329 330 union createhow3 switch (createmode3 mode) { 331 case UNCHECKED: 332 sattr3 obj_attributes; 333 case GUARDED: 334 sattr3 g_obj_attributes; 335 case EXCLUSIVE: 336 createverf3 verf; 337 }; 338 339 struct CREATE3args { 340 diropargs3 where; 341 createhow3 how; 342 }; 343 344 union post_op_fh3 switch (bool handle_follows) { 345 case TRUE: 346 nfs_fh3 handle; 347 case FALSE: 348 void; 349 }; 350 351 struct CREATE3resok { 352 post_op_fh3 obj; 353 post_op_attr obj_attributes; 354 wcc_data dir_wcc; 355 }; 356 357 struct CREATE3resfail { 358 wcc_data dir_wcc; 359 }; 360 361 union CREATE3res switch (nfsstat3 status) { 362 case NFS3_OK: 363 CREATE3resok resok; 364 default: 365 CREATE3resfail resfail; 366 }; 367 368 struct REMOVE3args { 369 diropargs3 object; 370 }; 371 372 struct REMOVE3resok { 373 wcc_data dir_wcc; 374 }; 375 376 struct REMOVE3resfail { 377 wcc_data dir_wcc; 378 }; 379 380 union REMOVE3res switch (nfsstat3 status) { 381 case NFS3_OK: 382 REMOVE3resok resok; 383 default: 384 REMOVE3resfail resfail; 385 }; 386 387 struct READ3args { 388 nfs_fh3 file; 389 offset3 offset; 390 count3 count; 391 }; 392 393 struct READ3resok { 394 post_op_attr file_attributes; 395 count3 count; 396 bool eof; 397 opaque data<>; 398 }; 399 400 struct READ3resfail { 401 post_op_attr file_attributes; 402 }; 403 404 union READ3res switch (nfsstat3 status) { 405 case NFS3_OK: 406 READ3resok resok; 407 default: 408 READ3resfail resfail; 409 }; 410 411 412 const FSF3_LINK = 0x0001; 413 const FSF3_SYMLINK = 0x0002; 414 const FSF3_HOMOGENEOUS = 0x0008; 415 const FSF3_CANSETTIME = 0x0010; 416 417 struct FSINFO3args { 418 nfs_fh3 fsroot; 419 }; 420 421 struct FSINFO3resok { 422 post_op_attr obj_attributes; 423 uint32_t rtmax; 424 uint32_t rtpref; 425 uint32_t rtmult; 426 uint32_t wtmax; 427 uint32_t wtpref; 428 uint32_t wtmult; 429 uint32_t dtpref; 430 size3 maxfilesize; 431 nfstime3 time_delta; 432 uint32_t properties; 433 }; 434 435 struct FSINFO3resfail { 436 post_op_attr obj_attributes; 437 }; 438 439 union FSINFO3res switch (nfsstat3 status) { 440 case NFS3_OK: 441 FSINFO3resok resok; 442 default: 443 FSINFO3resfail resfail; 444 }; 445 446 447 struct FSSTAT3args { 448 nfs_fh3 fsroot; 449 }; 450 451 struct FSSTAT3resok { 452 post_op_attr obj_attributes; 453 size3 tbytes; 454 size3 fbytes; 455 size3 abytes; 456 size3 tfiles; 457 size3 ffiles; 458 size3 afiles; 459 uint32_t invarsec; 460 }; 461 462 struct FSSTAT3resfail { 463 post_op_attr obj_attributes; 464 }; 465 466 union FSSTAT3res switch (nfsstat3 status) { 467 case NFS3_OK: 468 FSSTAT3resok resok; 469 default: 470 FSSTAT3resfail resfail; 471 }; 472 473 struct PATHCONF3args { 474 nfs_fh3 object; 475 }; 476 477 struct PATHCONF3resok { 478 post_op_attr obj_attributes; 479 uint32_t linkmax; 480 uint32_t name_max; 481 bool no_trunc; 482 bool chown_restricted; 483 bool case_insensitive; 484 bool case_preserving; 485 }; 486 487 struct PATHCONF3resfail { 488 post_op_attr obj_attributes; 489 }; 490 491 union PATHCONF3res switch (nfsstat3 status) { 492 case NFS3_OK: 493 PATHCONF3resok resok; 494 default: 495 PATHCONF3resfail resfail; 496 }; 497 498 typedef string nfspath3<>; 499 500 struct symlinkdata3 { 501 sattr3 symlink_attributes; 502 nfspath3 symlink_data; 503 }; 504 505 struct SYMLINK3args { 506 diropargs3 where; 507 symlinkdata3 symlink; 508 }; 509 510 struct SYMLINK3resok { 511 post_op_fh3 obj; 512 post_op_attr obj_attributes; 513 wcc_data dir_wcc; 514 }; 515 516 struct SYMLINK3resfail { 517 wcc_data dir_wcc; 518 }; 519 520 union SYMLINK3res switch (nfsstat3 status) { 521 case NFS3_OK: 522 SYMLINK3resok resok; 523 default: 524 SYMLINK3resfail resfail; 525 }; 526 527 528 struct READLINK3args { 529 nfs_fh3 symlink; 530 }; 531 532 struct READLINK3resok { 533 post_op_attr symlink_attributes; 534 nfspath3 data; 535 }; 536 537 struct READLINK3resfail { 538 post_op_attr symlink_attributes; 539 }; 540 541 union READLINK3res switch (nfsstat3 status) { 542 case NFS3_OK: 543 READLINK3resok resok; 544 default: 545 READLINK3resfail resfail; 546 }; 547 548 549 struct devicedata3 { 550 sattr3 dev_attributes; 551 specdata3 spec; 552 }; 553 554 union mknoddata3 switch (ftype3 type) { 555 case NF3CHR: 556 devicedata3 chr_device; 557 case NF3BLK: 558 devicedata3 blk_device; 559 case NF3SOCK: 560 sattr3 sock_attributes; 561 case NF3FIFO: 562 sattr3 pipe_attributes; 563 default: 564 void; 565 }; 566 567 struct MKNOD3args { 568 diropargs3 where; 569 mknoddata3 what; 570 }; 571 572 struct MKNOD3resok { 573 post_op_fh3 obj; 574 post_op_attr obj_attributes; 575 wcc_data dir_wcc; 576 }; 577 578 struct MKNOD3resfail { 579 wcc_data dir_wcc; 580 }; 581 582 union MKNOD3res switch (nfsstat3 status) { 583 case NFS3_OK: 584 MKNOD3resok resok; 585 default: 586 MKNOD3resfail resfail; 587 }; 588 589 590 struct MKDIR3args { 591 diropargs3 where; 592 sattr3 attributes; 593 }; 594 595 struct MKDIR3resok { 596 post_op_fh3 obj; 597 post_op_attr obj_attributes; 598 wcc_data dir_wcc; 599 }; 600 601 struct MKDIR3resfail { 602 wcc_data dir_wcc; 603 }; 604 605 union MKDIR3res switch (nfsstat3 status) { 606 case NFS3_OK: 607 MKDIR3resok resok; 608 default: 609 MKDIR3resfail resfail; 610 }; 611 612 struct RMDIR3args { 613 diropargs3 object; 614 }; 615 616 struct RMDIR3resok { 617 wcc_data dir_wcc; 618 }; 619 620 struct RMDIR3resfail { 621 wcc_data dir_wcc; 622 }; 623 624 union RMDIR3res switch (nfsstat3 status) { 625 case NFS3_OK: 626 RMDIR3resok resok; 627 default: 628 RMDIR3resfail resfail; 629 }; 630 631 struct RENAME3args { 632 diropargs3 from; 633 diropargs3 to; 634 }; 635 636 struct RENAME3resok { 637 wcc_data fromdir_wcc; 638 wcc_data todir_wcc; 639 }; 640 641 struct RENAME3resfail { 642 wcc_data fromdir_wcc; 643 wcc_data todir_wcc; 644 }; 645 646 union RENAME3res switch (nfsstat3 status) { 647 case NFS3_OK: 648 RENAME3resok resok; 649 default: 650 RENAME3resfail resfail; 651 }; 652 653 struct READDIRPLUS3args { 654 nfs_fh3 dir; 655 cookie3 cookie; 656 cookieverf3 cookieverf; 657 count3 dircount; 658 count3 maxcount; 659 }; 660 661 struct entryplus3 { 662 fileid3 fileid; 663 filename3 name; 664 cookie3 cookie; 665 post_op_attr name_attributes; 666 post_op_fh3 name_handle; 667 entryplus3 *nextentry; 668 }; 669 670 struct dirlistplus3 { 671 entryplus3 *entries; 672 bool eof; 673 }; 674 675 struct READDIRPLUS3resok { 676 post_op_attr dir_attributes; 677 cookieverf3 cookieverf; 678 dirlistplus3 reply; 679 }; 680 681 682 struct READDIRPLUS3resfail { 683 post_op_attr dir_attributes; 684 }; 685 686 union READDIRPLUS3res switch (nfsstat3 status) { 687 case NFS3_OK: 688 READDIRPLUS3resok resok; 689 default: 690 READDIRPLUS3resfail resfail; 691 }; 692 693 struct READDIR3args { 694 nfs_fh3 dir; 695 cookie3 cookie; 696 cookieverf3 cookieverf; 697 count3 count; 698 }; 699 700 701 struct entry3 { 702 fileid3 fileid; 703 filename3 name; 704 cookie3 cookie; 705 entry3 *nextentry; 706 }; 707 708 struct dirlist3 { 709 entry3 *entries; 710 bool eof; 711 }; 712 713 struct READDIR3resok { 714 post_op_attr dir_attributes; 715 cookieverf3 cookieverf; 716 dirlist3 reply; 717 }; 718 719 struct READDIR3resfail { 720 post_op_attr dir_attributes; 721 }; 722 723 union READDIR3res switch (nfsstat3 status) { 724 case NFS3_OK: 725 READDIR3resok resok; 726 default: 727 READDIR3resfail resfail; 728 }; 729 730 struct LINK3args { 731 nfs_fh3 file; 732 diropargs3 link; 733 }; 734 735 struct LINK3resok { 736 post_op_attr file_attributes; 737 wcc_data linkdir_wcc; 738 }; 739 740 struct LINK3resfail { 741 post_op_attr file_attributes; 742 wcc_data linkdir_wcc; 743 }; 744 745 union LINK3res switch (nfsstat3 status) { 746 case NFS3_OK: 747 LINK3resok resok; 748 default: 749 LINK3resfail resfail; 750 }; 751 752 union sattrguard3 switch (bool check) { 753 case TRUE: 754 nfstime3 obj_ctime; 755 case FALSE: 756 void; 757 }; 758 759 struct SETATTR3args { 760 nfs_fh3 object; 761 sattr3 new_attributes; 762 sattrguard3 guard; 763 }; 764 765 struct SETATTR3resok { 766 wcc_data obj_wcc; 767 }; 768 769 struct SETATTR3resfail { 770 wcc_data obj_wcc; 771 }; 772 773 union SETATTR3res switch (nfsstat3 status) { 774 case NFS3_OK: 775 SETATTR3resok resok; 776 default: 777 SETATTR3resfail resfail; 778 }; 779 780 program NFS_PROGRAM { 781 version NFS_V3 { 782 void 783 NFS3_NULL(void) = 0; 784 785 GETATTR3res 786 NFS3_GETATTR(GETATTR3args) = 1; 787 788 SETATTR3res 789 NFS3_SETATTR(SETATTR3args) = 2; 790 791 LOOKUP3res 792 NFS3_LOOKUP(LOOKUP3args) = 3; 793 794 ACCESS3res 795 NFS3_ACCESS(ACCESS3args) = 4; 796 797 READLINK3res 798 NFS3_READLINK(READLINK3args) = 5; 799 800 READ3res 801 NFS3_READ(READ3args) = 6; 802 803 WRITE3res 804 NFS3_WRITE(WRITE3args) = 7; 805 806 CREATE3res 807 NFS3_CREATE(CREATE3args) = 8; 808 809 MKDIR3res 810 NFS3_MKDIR(MKDIR3args) = 9; 811 812 SYMLINK3res 813 NFS3_SYMLINK(SYMLINK3args) = 10; 814 815 MKNOD3res 816 NFS3_MKNOD(MKNOD3args) = 11; 817 818 REMOVE3res 819 NFS3_REMOVE(REMOVE3args) = 12; 820 821 RMDIR3res 822 NFS3_RMDIR(RMDIR3args) = 13; 823 824 RENAME3res 825 NFS3_RENAME(RENAME3args) = 14; 826 827 LINK3res 828 NFS3_LINK(LINK3args) = 15; 829 830 READDIR3res 831 NFS3_READDIR(READDIR3args) = 16; 832 833 READDIRPLUS3res 834 NFS3_READDIRPLUS(READDIRPLUS3args) = 17; 835 836 FSSTAT3res 837 NFS3_FSSTAT(FSSTAT3args) = 18; 838 839 FSINFO3res 840 NFS3_FSINFO(FSINFO3args) = 19; 841 842 PATHCONF3res 843 NFS3_PATHCONF(PATHCONF3args) = 20; 844 845 COMMIT3res 846 NFS3_COMMIT(COMMIT3args) = 21; 847 } = 3; 848 } = 100003; 849 850 851 852 /* NFS ACL definitions based on wireshark souces and network traces */ 853 /* NFSACL interface. Uses same port/process as NFS */ 854 855 enum nfsacl_type { 856 NFSACL_TYPE_USER_OBJ = 0x0001, 857 NFSACL_TYPE_USER = 0x0002, 858 NFSACL_TYPE_GROUP_OBJ = 0x0004, 859 NFSACL_TYPE_GROUP = 0x0008, 860 NFSACL_TYPE_CLASS_OBJ = 0x0010, 861 NFSACL_TYPE_CLASS = 0x0020, 862 NFSACL_TYPE_DEFAULT = 0x1000, 863 NFSACL_TYPE_DEFAULT_USER_OBJ = 0x1001, 864 NFSACL_TYPE_DEFAULT_USER = 0x1002, 865 NFSACL_TYPE_DEFAULT_GROUP_OBJ = 0x1004, 866 NFSACL_TYPE_DEFAULT_GROUP = 0x1008, 867 NFSACL_TYPE_DEFAULT_CLASS_OBJ = 0x1010, 868 NFSACL_TYPE_DEFAULT_OTHER_OBJ = 0x1020 869 }; 870 871 const NFSACL_PERM_READ = 0x04; 872 const NFSACL_PERM_WRITE = 0x02; 873 const NFSACL_PERM_EXEC = 0x01; 874 875 struct nfsacl_ace { 876 enum nfsacl_type type; 877 unsigned int id; 878 unsigned int perm; 879 }; 880 881 const NFSACL_MASK_ACL_ENTRY = 0x0001; 882 const NFSACL_MASK_ACL_COUNT = 0x0002; 883 const NFSACL_MASK_ACL_DEFAULT_ENTRY = 0x0004; 884 const NFSACL_MASK_ACL_DEFAULT_COUNT = 0x0008; 885 886 struct GETACL3args { 887 nfs_fh3 dir; 888 unsigned int mask; 889 }; 890 891 struct GETACL3resok { 892 post_op_attr attr; 893 unsigned int mask; 894 unsigned int ace_count; 895 struct nfsacl_ace ace<>; 896 unsigned int default_ace_count; 897 struct nfsacl_ace default_ace<>; 898 }; 899 900 union GETACL3res switch (nfsstat3 status) { 901 case NFS3_OK: 902 GETACL3resok resok; 903 default: 904 void; 905 }; 906 907 struct SETACL3args { 908 nfs_fh3 dir; 909 unsigned int mask; 910 unsigned int ace_count; 911 struct nfsacl_ace ace<>; 912 unsigned int default_ace_count; 913 struct nfsacl_ace default_ace<>; 914 }; 915 916 struct SETACL3resok { 917 post_op_attr attr; 918 }; 919 920 union SETACL3res switch (nfsstat3 status) { 921 case NFS3_OK: 922 SETACL3resok resok; 923 default: 924 void; 925 }; 926 927 program NFSACL_PROGRAM { 928 version NFSACL_V3 { 929 void 930 NFSACL3_NULL(void) = 0; 931 932 GETACL3res 933 NFSACL3_GETACL(GETACL3args) = 1; 934 935 SETACL3res 936 NFSACL3_SETACL(SETACL3args) = 2; 937 } = 3; 938 } = 100227; 939