1 %/* This file is copied from RFC1813 2 % * Copyright 1995 Sun Micrososystems (I assume) 3 % */ 4 5 const NFS3_FHSIZE = 64; 6 const NFS3_COOKIEVERFSIZE = 8; 7 const NFS3_CREATEVERFSIZE = 8; 8 const NFS3_WRITEVERFSIZE = 8; 9 10 const ACCESS3_READ = 0x0001; 11 const ACCESS3_LOOKUP = 0x0002; 12 const ACCESS3_MODIFY = 0x0004; 13 const ACCESS3_EXTEND = 0x0008; 14 const ACCESS3_DELETE = 0x0010; 15 const ACCESS3_EXECUTE = 0x0020; 16 17 const FSF3_LINK = 0x0001; 18 const FSF3_SYMLINK = 0x0002; 19 const FSF3_HOMOGENEOUS = 0x0008; 20 const FSF3_CANSETTIME = 0x0010; 21 22 typedef unsigned hyper uint64; 23 typedef hyper int64; 24 typedef unsigned long uint32; 25 typedef long int32; 26 typedef string filename3<>; 27 typedef string nfspath3<>; 28 typedef uint64 fileid3; 29 typedef uint64 cookie3; 30 typedef opaque cookieverf3[NFS3_COOKIEVERFSIZE]; 31 typedef opaque createverf3[NFS3_CREATEVERFSIZE]; 32 typedef opaque writeverf3[NFS3_WRITEVERFSIZE]; 33 typedef uint32 uid3; 34 typedef uint32 gid3; 35 typedef uint64 size3; 36 typedef uint64 offset3; 37 typedef uint32 mode3; 38 typedef uint32 count3; 39 40 enum nfsstat3 { 41 NFS3_OK = 0, 42 NFS3ERR_PERM = 1, 43 NFS3ERR_NOENT = 2, 44 NFS3ERR_IO = 5, 45 NFS3ERR_NXIO = 6, 46 NFS3ERR_ACCES = 13, 47 NFS3ERR_EXIST = 17, 48 NFS3ERR_XDEV = 18, 49 NFS3ERR_NODEV = 19, 50 NFS3ERR_NOTDIR = 20, 51 NFS3ERR_ISDIR = 21, 52 NFS3ERR_INVAL = 22, 53 NFS3ERR_FBIG = 27, 54 NFS3ERR_NOSPC = 28, 55 NFS3ERR_ROFS = 30, 56 NFS3ERR_MLINK = 31, 57 NFS3ERR_NAMETOOLONG = 63, 58 NFS3ERR_NOTEMPTY = 66, 59 NFS3ERR_DQUOT = 69, 60 NFS3ERR_STALE = 70, 61 NFS3ERR_REMOTE = 71, 62 NFS3ERR_BADHANDLE = 10001, 63 NFS3ERR_NOT_SYNC = 10002, 64 NFS3ERR_BAD_COOKIE = 10003, 65 NFS3ERR_NOTSUPP = 10004, 66 NFS3ERR_TOOSMALL = 10005, 67 NFS3ERR_SERVERFAULT = 10006, 68 NFS3ERR_BADTYPE = 10007, 69 NFS3ERR_JUKEBOX = 10008 70 }; 71 72 enum ftype3 { 73 NFS3REG = 1, 74 NFS3DIR = 2, 75 NFS3BLK = 3, 76 NFS3CHR = 4, 77 NFS3LNK = 5, 78 NFS3SOCK = 6, 79 NFS3FIFO = 7 80 }; 81 enum stable_how { 82 UNSTABLE = 0, 83 DATA_SYNC = 1, 84 FILE_SYNC = 2 85 }; 86 87 enum createmode3 { 88 UNCHECKED = 0, 89 GUARDED = 1, 90 EXCLUSIVE = 2 91 }; 92 93 struct specdata3 { 94 uint32 specdata1; 95 uint32 specdata2; 96 }; 97 98 struct nfs_fh3 { 99 opaque data<NFS3_FHSIZE>; 100 }; 101 102 struct nfstime3 { 103 uint32 seconds; 104 uint32 nseconds; 105 }; 106 107 struct fattr3 { 108 ftype3 type; 109 mode3 mode; 110 uint32 nlink; 111 uid3 uid; 112 gid3 gid; 113 size3 size; 114 size3 used; 115 specdata3 rdev; 116 uint64 fsid; 117 fileid3 fileid; 118 nfstime3 atime; 119 nfstime3 mtime; 120 nfstime3 ctime; 121 }; 122 123 union post_op_attr switch (bool attributes_follow) { 124 case TRUE: 125 fattr3 attributes; 126 case FALSE: 127 void; 128 }; 129 130 struct wcc_attr { 131 size3 size; 132 nfstime3 mtime; 133 nfstime3 ctime; 134 }; 135 136 union pre_op_attr switch (bool attributes_follow) { 137 case TRUE: 138 wcc_attr attributes; 139 case FALSE: 140 void; 141 }; 142 143 struct wcc_data { 144 pre_op_attr before; 145 post_op_attr after; 146 }; 147 148 union post_op_fh3 switch (bool handle_follows) { 149 case TRUE: 150 nfs_fh3 handle; 151 case FALSE: 152 void; 153 }; 154 155 enum time_how { 156 DONT_CHANGE = 0, 157 SET_TO_SERVER_TIME = 1, 158 SET_TO_CLIENT_TIME = 2 159 }; 160 161 union set_mode3 switch (bool set_it) { 162 case TRUE: 163 mode3 mode; 164 default: 165 void; 166 }; 167 168 union set_uid3 switch (bool set_it) { 169 case TRUE: 170 uid3 uid; 171 default: 172 void; 173 }; 174 175 union set_gid3 switch (bool set_it) { 176 case TRUE: 177 gid3 gid; 178 default: 179 void; 180 }; 181 182 union set_size3 switch (bool set_it) { 183 case TRUE: 184 size3 size; 185 default: 186 void; 187 }; 188 189 union set_atime switch (time_how set_it) { 190 case SET_TO_CLIENT_TIME: 191 nfstime3 atime; 192 default: 193 void; 194 }; 195 196 union set_mtime switch (time_how set_it) { 197 case SET_TO_CLIENT_TIME: 198 nfstime3 mtime; 199 default: 200 void; 201 }; 202 203 struct sattr3 { 204 set_mode3 mode; 205 set_uid3 uid; 206 set_gid3 gid; 207 set_size3 size; 208 set_atime atime; 209 set_mtime mtime; 210 }; 211 212 struct diropargs3 { 213 nfs_fh3 dir; 214 filename3 name; 215 }; 216 217 218 struct GETATTR3args { 219 nfs_fh3 object; 220 }; 221 222 struct GETATTR3resok { 223 fattr3 obj_attributes; 224 }; 225 226 union GETATTR3res switch (nfsstat3 status) { 227 case NFS3_OK: 228 GETATTR3resok resok; 229 default: 230 void; 231 }; 232 233 union sattrguard3 switch (bool check) { 234 case TRUE: 235 nfstime3 obj_ctime; 236 case FALSE: 237 void; 238 }; 239 240 struct SETATTR3args { 241 nfs_fh3 object; 242 sattr3 new_attributes; 243 sattrguard3 guard; 244 }; 245 246 struct SETATTR3resok { 247 wcc_data obj_wcc; 248 }; 249 250 struct SETATTR3resfail { 251 wcc_data obj_wcc; 252 }; 253 254 union SETATTR3res switch (nfsstat3 status) { 255 case NFS3_OK: 256 SETATTR3resok resok; 257 default: 258 SETATTR3resfail resfail; 259 }; 260 261 struct LOOKUP3args { 262 diropargs3 what; 263 }; 264 265 struct LOOKUP3resok { 266 nfs_fh3 object; 267 post_op_attr obj_attributes; 268 post_op_attr dir_attributes; 269 }; 270 271 struct LOOKUP3resfail { 272 post_op_attr dir_attributes; 273 }; 274 275 union LOOKUP3res switch (nfsstat3 status) { 276 case NFS3_OK: 277 LOOKUP3resok resok; 278 default: 279 LOOKUP3resfail resfail; 280 }; 281 282 struct ACCESS3args { 283 nfs_fh3 object; 284 uint32 access; 285 }; 286 287 struct ACCESS3resok { 288 post_op_attr obj_attributes; 289 uint32 access; 290 }; 291 292 struct ACCESS3resfail { 293 post_op_attr obj_attributes; 294 }; 295 296 union ACCESS3res switch (nfsstat3 status) { 297 case NFS3_OK: 298 ACCESS3resok resok; 299 default: 300 ACCESS3resfail resfail; 301 }; 302 303 struct READLINK3args { 304 nfs_fh3 symlink; 305 }; 306 307 struct READLINK3resok { 308 post_op_attr symlink_attributes; 309 nfspath3 data; 310 }; 311 312 struct READLINK3resfail { 313 post_op_attr symlink_attributes; 314 }; 315 316 union READLINK3res switch (nfsstat3 status) { 317 case NFS3_OK: 318 READLINK3resok resok; 319 default: 320 READLINK3resfail resfail; 321 }; 322 323 struct READ3args { 324 nfs_fh3 file; 325 offset3 offset; 326 count3 count; 327 }; 328 329 struct READ3resok { 330 post_op_attr file_attributes; 331 count3 count; 332 bool eof; 333 opaque data<>; 334 }; 335 336 struct READ3resfail { 337 post_op_attr file_attributes; 338 }; 339 340 union READ3res switch (nfsstat3 status) { 341 case NFS3_OK: 342 READ3resok resok; 343 default: 344 READ3resfail resfail; 345 }; 346 347 struct WRITE3args { 348 nfs_fh3 file; 349 offset3 offset; 350 count3 count; 351 stable_how stable; 352 opaque data<>; 353 }; 354 355 struct WRITE3resok { 356 wcc_data file_wcc; 357 count3 count; 358 stable_how committed; 359 writeverf3 verf; 360 }; 361 362 struct WRITE3resfail { 363 wcc_data file_wcc; 364 }; 365 366 union WRITE3res switch (nfsstat3 status) { 367 case NFS3_OK: 368 WRITE3resok resok; 369 default: 370 WRITE3resfail resfail; 371 }; 372 373 374 union createhow3 switch (createmode3 mode) { 375 case UNCHECKED: 376 case GUARDED: 377 sattr3 obj_attributes; 378 case EXCLUSIVE: 379 createverf3 verf; 380 }; 381 382 struct CREATE3args { 383 diropargs3 where; 384 createhow3 how; 385 }; 386 387 struct CREATE3resok { 388 post_op_fh3 obj; 389 post_op_attr obj_attributes; 390 wcc_data dir_wcc; 391 }; 392 393 struct CREATE3resfail { 394 wcc_data dir_wcc; 395 }; 396 397 union CREATE3res switch (nfsstat3 status) { 398 case NFS3_OK: 399 CREATE3resok resok; 400 default: 401 CREATE3resfail resfail; 402 }; 403 404 struct MKDIR3args { 405 diropargs3 where; 406 sattr3 attributes; 407 }; 408 409 struct MKDIR3resok { 410 post_op_fh3 obj; 411 post_op_attr obj_attributes; 412 wcc_data dir_wcc; 413 }; 414 415 struct MKDIR3resfail { 416 wcc_data dir_wcc; 417 }; 418 419 union MKDIR3res switch (nfsstat3 status) { 420 case NFS3_OK: 421 MKDIR3resok resok; 422 default: 423 MKDIR3resfail resfail; 424 }; 425 426 struct symlinkdata3 { 427 sattr3 symlink_attributes; 428 nfspath3 symlink_data; 429 }; 430 431 struct SYMLINK3args { 432 diropargs3 where; 433 symlinkdata3 symlink; 434 }; 435 436 struct SYMLINK3resok { 437 post_op_fh3 obj; 438 post_op_attr obj_attributes; 439 wcc_data dir_wcc; 440 }; 441 442 struct SYMLINK3resfail { 443 wcc_data dir_wcc; 444 }; 445 446 union SYMLINK3res switch (nfsstat3 status) { 447 case NFS3_OK: 448 SYMLINK3resok resok; 449 default: 450 SYMLINK3resfail resfail; 451 }; 452 453 struct devicedata3 { 454 sattr3 dev_attributes; 455 specdata3 spec; 456 }; 457 458 union mknoddata3 switch (ftype3 type) { 459 case NFS3CHR: 460 case NFS3BLK: 461 devicedata3 device; 462 case NFS3SOCK: 463 case NFS3FIFO: 464 sattr3 pipe_attributes; 465 default: 466 void; 467 }; 468 469 struct MKNOD3args { 470 diropargs3 where; 471 mknoddata3 what; 472 }; 473 474 struct MKNOD3resok { 475 post_op_fh3 obj; 476 post_op_attr obj_attributes; 477 wcc_data dir_wcc; 478 }; 479 480 struct MKNOD3resfail { 481 wcc_data dir_wcc; 482 }; 483 484 union MKNOD3res switch (nfsstat3 status) { 485 case NFS3_OK: 486 MKNOD3resok resok; 487 default: 488 MKNOD3resfail resfail; 489 }; 490 491 struct REMOVE3args { 492 diropargs3 object; 493 }; 494 495 struct REMOVE3resok { 496 wcc_data dir_wcc; 497 }; 498 499 struct REMOVE3resfail { 500 wcc_data dir_wcc; 501 }; 502 503 union REMOVE3res switch (nfsstat3 status) { 504 case NFS3_OK: 505 REMOVE3resok resok; 506 default: 507 REMOVE3resfail resfail; 508 }; 509 510 struct RMDIR3args { 511 diropargs3 object; 512 }; 513 514 struct RMDIR3resok { 515 wcc_data dir_wcc; 516 }; 517 518 struct RMDIR3resfail { 519 wcc_data dir_wcc; 520 }; 521 522 union RMDIR3res switch (nfsstat3 status) { 523 case NFS3_OK: 524 RMDIR3resok resok; 525 default: 526 RMDIR3resfail resfail; 527 }; 528 529 struct RENAME3args { 530 diropargs3 from; 531 diropargs3 to; 532 }; 533 534 struct RENAME3resok { 535 wcc_data fromdir_wcc; 536 wcc_data todir_wcc; 537 }; 538 539 struct RENAME3resfail { 540 wcc_data fromdir_wcc; 541 wcc_data todir_wcc; 542 }; 543 544 union RENAME3res switch (nfsstat3 status) { 545 case NFS3_OK: 546 RENAME3resok resok; 547 default: 548 RENAME3resfail resfail; 549 }; 550 struct LINK3args { 551 nfs_fh3 file; 552 diropargs3 link; 553 }; 554 555 struct LINK3resok { 556 post_op_attr file_attributes; 557 wcc_data linkdir_wcc; 558 }; 559 560 struct LINK3resfail { 561 post_op_attr file_attributes; 562 wcc_data linkdir_wcc; 563 }; 564 565 union LINK3res switch (nfsstat3 status) { 566 case NFS3_OK: 567 LINK3resok resok; 568 default: 569 LINK3resfail resfail; 570 }; 571 572 struct READDIR3args { 573 nfs_fh3 dir; 574 cookie3 cookie; 575 cookieverf3 cookieverf; 576 count3 count; 577 }; 578 579 struct entry3 { 580 fileid3 fileid; 581 filename3 name; 582 cookie3 cookie; 583 entry3 *nextentry; 584 }; 585 586 struct dirlist3 { 587 entry3 *entries; 588 bool eof; 589 }; 590 591 struct READDIR3resok { 592 post_op_attr dir_attributes; 593 cookieverf3 cookieverf; 594 dirlist3 reply; 595 }; 596 597 struct READDIR3resfail { 598 post_op_attr dir_attributes; 599 }; 600 601 union READDIR3res switch (nfsstat3 status) { 602 case NFS3_OK: 603 READDIR3resok resok; 604 default: 605 READDIR3resfail resfail; 606 }; 607 608 struct READDIRPLUS3args { 609 nfs_fh3 dir; 610 cookie3 cookie; 611 cookieverf3 cookieverf; 612 count3 dircount; 613 count3 maxcount; 614 }; 615 616 struct entryplus3 { 617 fileid3 fileid; 618 filename3 name; 619 cookie3 cookie; 620 post_op_attr name_attributes; 621 post_op_fh3 name_handle; 622 entryplus3 *nextentry; 623 }; 624 625 struct dirlistplus3 { 626 entryplus3 *entries; 627 bool eof; 628 }; 629 630 struct READDIRPLUS3resok { 631 post_op_attr dir_attributes; 632 cookieverf3 cookieverf; 633 dirlistplus3 reply; 634 }; 635 636 struct READDIRPLUS3resfail { 637 post_op_attr dir_attributes; 638 }; 639 640 union READDIRPLUS3res switch (nfsstat3 status) { 641 case NFS3_OK: 642 READDIRPLUS3resok resok; 643 default: 644 READDIRPLUS3resfail resfail; 645 }; 646 647 struct FSSTAT3args { 648 nfs_fh3 fsroot; 649 }; 650 651 struct FSSTAT3resok { 652 post_op_attr obj_attributes; 653 size3 tbytes; 654 size3 fbytes; 655 size3 abytes; 656 size3 tfiles; 657 size3 ffiles; 658 size3 afiles; 659 uint32 invarsec; 660 }; 661 662 struct FSSTAT3resfail { 663 post_op_attr obj_attributes; 664 }; 665 666 union FSSTAT3res switch (nfsstat3 status) { 667 case NFS3_OK: 668 FSSTAT3resok resok; 669 default: 670 FSSTAT3resfail resfail; 671 }; 672 673 struct FSINFO3args { 674 nfs_fh3 fsroot; 675 }; 676 677 struct FSINFO3resok { 678 post_op_attr obj_attributes; 679 uint32 rtmax; 680 uint32 rtpref; 681 uint32 rtmult; 682 uint32 wtmax; 683 uint32 wtpref; 684 uint32 wtmult; 685 uint32 dtpref; 686 size3 maxfilesize; 687 nfstime3 time_delta; 688 uint32 properties; 689 }; 690 691 struct FSINFO3resfail { 692 post_op_attr obj_attributes; 693 }; 694 695 union FSINFO3res switch (nfsstat3 status) { 696 case NFS3_OK: 697 FSINFO3resok resok; 698 default: 699 FSINFO3resfail resfail; 700 }; 701 702 struct PATHCONF3args { 703 nfs_fh3 object; 704 }; 705 706 struct PATHCONF3resok { 707 post_op_attr obj_attributes; 708 uint32 linkmax; 709 uint32 name_max; 710 bool no_trunc; 711 bool chown_restricted; 712 bool case_insensitive; 713 bool case_preserving; 714 }; 715 716 struct PATHCONF3resfail { 717 post_op_attr obj_attributes; 718 }; 719 720 union PATHCONF3res switch (nfsstat3 status) { 721 case NFS3_OK: 722 PATHCONF3resok resok; 723 default: 724 PATHCONF3resfail resfail; 725 }; 726 727 struct COMMIT3args { 728 nfs_fh3 file; 729 offset3 offset; 730 count3 count; 731 }; 732 733 struct COMMIT3resok { 734 wcc_data file_wcc; 735 writeverf3 verf; 736 }; 737 738 struct COMMIT3resfail { 739 wcc_data file_wcc; 740 }; 741 742 union COMMIT3res switch (nfsstat3 status) { 743 case NFS3_OK: 744 COMMIT3resok resok; 745 default: 746 COMMIT3resfail resfail; 747 }; 748 749 program NFS_PROGRAM { 750 version NFS_V3 { 751 void NFSPROC3_NULL(void) = 0; 752 GETATTR3res NFSPROC3_GETATTR(GETATTR3args) = 1; 753 SETATTR3res NFSPROC3_SETATTR(SETATTR3args) = 2; 754 LOOKUP3res NFSPROC3_LOOKUP(LOOKUP3args) = 3; 755 ACCESS3res NFSPROC3_ACCESS(ACCESS3args) = 4; 756 READLINK3res NFSPROC3_READLINK(READLINK3args) = 5; 757 READ3res NFSPROC3_READ(READ3args) = 6; 758 WRITE3res NFSPROC3_WRITE(WRITE3args) = 7; 759 CREATE3res NFSPROC3_CREATE(CREATE3args) = 8; 760 MKDIR3res NFSPROC3_MKDIR(MKDIR3args) = 9; 761 SYMLINK3res NFSPROC3_SYMLINK(SYMLINK3args) = 10; 762 MKNOD3res NFSPROC3_MKNOD(MKNOD3args) = 11; 763 REMOVE3res NFSPROC3_REMOVE(REMOVE3args) = 12; 764 RMDIR3res NFSPROC3_RMDIR(RMDIR3args) = 13; 765 RENAME3res NFSPROC3_RENAME(RENAME3args) = 14; 766 LINK3res NFSPROC3_LINK(LINK3args) = 15; 767 READDIR3res NFSPROC3_READDIR(READDIR3args) = 16; 768 READDIRPLUS3res NFSPROC3_READDIRPLUS(READDIRPLUS3args) = 17; 769 FSSTAT3res NFSPROC3_FSSTAT(FSSTAT3args) = 18; 770 FSINFO3res NFSPROC3_FSINFO(FSINFO3args) = 19; 771 PATHCONF3res NFSPROC3_PATHCONF(PATHCONF3args) = 20; 772 COMMIT3res NFSPROC3_COMMIT(COMMIT3args) = 21; 773 } = 3; 774 } = 100003; 775