1 0 stevel /* 2 0 stevel * CDDL HEADER START 3 0 stevel * 4 0 stevel * The contents of this file are subject to the terms of the 5 0 stevel * Common Development and Distribution License, Version 1.0 only 6 0 stevel * (the "License"). You may not use this file except in compliance 7 0 stevel * with the License. 8 0 stevel * 9 0 stevel * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE 10 0 stevel * or http://www.opensolaris.org/os/licensing. 11 0 stevel * See the License for the specific language governing permissions 12 0 stevel * and limitations under the License. 13 0 stevel * 14 0 stevel * When distributing Covered Code, include this CDDL HEADER in each 15 0 stevel * file and include the License file at usr/src/OPENSOLARIS.LICENSE. 16 0 stevel * If applicable, add the following below this CDDL HEADER, with the 17 0 stevel * fields enclosed by brackets "[]" replaced with your own identifying 18 0 stevel * information: Portions Copyright [yyyy] [name of copyright owner] 19 0 stevel * 20 0 stevel * CDDL HEADER END 21 0 stevel */ 22 0 stevel /* 23 0 stevel * Copyright 2004 Sun Microsystems, Inc. All rights reserved. 24 0 stevel * Use is subject to license terms. 25 0 stevel */ 26 0 stevel 27 0 stevel %#pragma ident "%Z%%M% %I% %E% SMI" 28 0 stevel 29 0 stevel #ifdef RPC_HDR 30 0 stevel % 31 0 stevel %/* 32 0 stevel % * Definitions for uint64, int64, uint32, and int32 33 0 stevel % */ 34 0 stevel %#include <rpc/rpc_sztypes.h> 35 0 stevel % 36 0 stevel #endif 37 0 stevel 38 0 stevel const NFS_PORT = 2049; 39 0 stevel const NFS_MAXDATA = 8192; 40 0 stevel const NFS_MAXPATHLEN = 1024; 41 0 stevel const NFS_MAXNAMLEN = 255; 42 0 stevel const NFS_FHSIZE = 32; 43 0 stevel const NFS_COOKIESIZE = 4; 44 0 stevel const NFS_FIFO_DEV = -1; /* size kludge for named pipes */ 45 0 stevel 46 0 stevel /* 47 0 stevel * File types 48 0 stevel */ 49 0 stevel const NFSMODE_FMT = 0170000; /* type of file */ 50 0 stevel const NFSMODE_DIR = 0040000; /* directory */ 51 0 stevel const NFSMODE_CHR = 0020000; /* character special */ 52 0 stevel const NFSMODE_BLK = 0060000; /* block special */ 53 0 stevel const NFSMODE_REG = 0100000; /* regular */ 54 0 stevel const NFSMODE_LNK = 0120000; /* symbolic link */ 55 0 stevel const NFSMODE_SOCK = 0140000; /* socket */ 56 0 stevel const NFSMODE_FIFO = 0010000; /* fifo */ 57 0 stevel 58 0 stevel /* 59 0 stevel * Error status 60 0 stevel */ 61 0 stevel enum nfsstat { 62 0 stevel NFS_OK= 0, /* no error */ 63 0 stevel NFSERR_PERM=1, /* Not owner */ 64 0 stevel NFSERR_NOENT=2, /* No such file or directory */ 65 0 stevel NFSERR_IO=5, /* I/O error */ 66 0 stevel NFSERR_NXIO=6, /* No such device or address */ 67 0 stevel NFSERR_ACCES=13, /* Permission denied */ 68 0 stevel NFSERR_EXIST=17, /* File exists */ 69 0 stevel NFSERR_XDEV=18, /* Cross-device link */ 70 0 stevel NFSERR_NODEV=19, /* No such device */ 71 0 stevel NFSERR_NOTDIR=20, /* Not a directory*/ 72 0 stevel NFSERR_ISDIR=21, /* Is a directory */ 73 0 stevel NFSERR_INVAL=22, /* Invalid argument */ 74 0 stevel NFSERR_FBIG=27, /* File too large */ 75 0 stevel NFSERR_NOSPC=28, /* No space left on device */ 76 0 stevel NFSERR_ROFS=30, /* Read-only file system */ 77 0 stevel NFSERR_OPNOTSUPP=45, /* Operation not supported */ 78 0 stevel NFSERR_NAMETOOLONG=63, /* File name too long */ 79 0 stevel NFSERR_NOTEMPTY=66, /* Directory not empty */ 80 0 stevel NFSERR_DQUOT=69, /* Disc quota exceeded */ 81 0 stevel NFSERR_STALE=70, /* Stale NFS file handle */ 82 0 stevel NFSERR_REMOTE=71, /* Object is remote */ 83 0 stevel NFSERR_WFLUSH=72 /* write cache flushed */ 84 0 stevel }; 85 0 stevel 86 0 stevel /* 87 0 stevel * File types 88 0 stevel */ 89 0 stevel enum ftype { 90 0 stevel NFNON = 0, /* non-file */ 91 0 stevel NFREG = 1, /* regular file */ 92 0 stevel NFDIR = 2, /* directory */ 93 0 stevel NFBLK = 3, /* block special */ 94 0 stevel NFCHR = 4, /* character special */ 95 0 stevel NFLNK = 5, /* symbolic link */ 96 0 stevel NFSOCK = 6, /* unix domain sockets */ 97 0 stevel NFBAD = 7, /* unused */ 98 0 stevel NFFIFO = 8 /* named pipe */ 99 0 stevel }; 100 0 stevel 101 0 stevel /* 102 0 stevel * File access handle 103 0 stevel */ 104 0 stevel struct nfs_fh { 105 0 stevel opaque data[NFS_FHSIZE]; 106 0 stevel }; 107 0 stevel 108 0 stevel /* 109 0 stevel * Timeval 110 0 stevel */ 111 0 stevel struct nfstime { 112 0 stevel unsigned seconds; 113 0 stevel unsigned useconds; 114 0 stevel }; 115 0 stevel 116 0 stevel 117 0 stevel /* 118 0 stevel * File attributes 119 0 stevel */ 120 0 stevel struct fattr { 121 0 stevel ftype type; /* file type */ 122 0 stevel unsigned mode; /* protection mode bits */ 123 0 stevel unsigned nlink; /* # hard links */ 124 0 stevel unsigned uid; /* owner user id */ 125 0 stevel unsigned gid; /* owner group id */ 126 0 stevel unsigned size; /* file size in bytes */ 127 0 stevel unsigned blocksize; /* prefered block size */ 128 0 stevel unsigned rdev; /* special device # */ 129 0 stevel unsigned blocks; /* Kb of disk used by file */ 130 0 stevel unsigned fsid; /* device # */ 131 0 stevel unsigned fileid; /* inode # */ 132 0 stevel nfstime atime; /* time of last access */ 133 0 stevel nfstime mtime; /* time of last modification */ 134 0 stevel nfstime ctime; /* time of last change */ 135 0 stevel }; 136 0 stevel 137 0 stevel /* 138 0 stevel * File attributes which can be set 139 0 stevel */ 140 0 stevel struct sattr { 141 0 stevel unsigned mode; /* protection mode bits */ 142 0 stevel unsigned uid; /* owner user id */ 143 0 stevel unsigned gid; /* owner group id */ 144 0 stevel unsigned size; /* file size in bytes */ 145 0 stevel nfstime atime; /* time of last access */ 146 0 stevel nfstime mtime; /* time of last modification */ 147 0 stevel }; 148 0 stevel 149 0 stevel 150 0 stevel typedef string filename<NFS_MAXNAMLEN>; 151 0 stevel typedef string nfspath<NFS_MAXPATHLEN>; 152 0 stevel 153 0 stevel /* 154 0 stevel * Reply status with file attributes 155 0 stevel */ 156 0 stevel union attrstat switch (nfsstat status) { 157 0 stevel case NFS_OK: 158 0 stevel fattr attributes; 159 0 stevel default: 160 0 stevel void; 161 0 stevel }; 162 0 stevel 163 0 stevel struct sattrargs { 164 0 stevel nfs_fh file; 165 0 stevel sattr attributes; 166 0 stevel }; 167 0 stevel 168 0 stevel /* 169 0 stevel * Arguments for directory operations 170 0 stevel */ 171 0 stevel struct diropargs { 172 0 stevel nfs_fh dir; /* directory file handle */ 173 0 stevel filename name; /* name (up to NFS_MAXNAMLEN bytes) */ 174 0 stevel }; 175 0 stevel 176 0 stevel struct diropokres { 177 0 stevel nfs_fh file; 178 0 stevel fattr attributes; 179 0 stevel }; 180 0 stevel 181 0 stevel /* 182 0 stevel * Results from directory operation 183 0 stevel */ 184 0 stevel union diropres switch (nfsstat status) { 185 0 stevel case NFS_OK: 186 0 stevel diropokres diropres; 187 0 stevel default: 188 0 stevel void; 189 0 stevel }; 190 0 stevel 191 0 stevel union readlinkres switch (nfsstat status) { 192 0 stevel case NFS_OK: 193 0 stevel nfspath data; 194 0 stevel default: 195 0 stevel void; 196 0 stevel }; 197 0 stevel 198 0 stevel /* 199 0 stevel * Arguments to remote read 200 0 stevel */ 201 0 stevel struct readargs { 202 0 stevel nfs_fh file; /* handle for file */ 203 0 stevel unsigned offset; /* byte offset in file */ 204 0 stevel unsigned count; /* immediate read count */ 205 0 stevel unsigned totalcount; /* total read count (from this offset)*/ 206 0 stevel }; 207 0 stevel 208 0 stevel /* 209 0 stevel * Status OK portion of remote read reply 210 0 stevel */ 211 0 stevel struct readokres { 212 0 stevel fattr attributes; /* attributes, need for pagin*/ 213 0 stevel opaque data<NFS_MAXDATA>; 214 0 stevel }; 215 0 stevel 216 0 stevel union readres switch (nfsstat status) { 217 0 stevel case NFS_OK: 218 0 stevel readokres reply; 219 0 stevel default: 220 0 stevel void; 221 0 stevel }; 222 0 stevel 223 0 stevel /* 224 0 stevel * Arguments to remote write 225 0 stevel */ 226 0 stevel struct writeargs { 227 0 stevel nfs_fh file; /* handle for file */ 228 0 stevel unsigned beginoffset; /* beginning byte offset in file */ 229 0 stevel unsigned offset; /* current byte offset in file */ 230 0 stevel unsigned totalcount; /* total write count (to this offset)*/ 231 0 stevel opaque data<NFS_MAXDATA>; 232 0 stevel }; 233 0 stevel 234 0 stevel struct createargs { 235 0 stevel diropargs where; 236 0 stevel sattr attributes; 237 0 stevel }; 238 0 stevel 239 0 stevel struct renameargs { 240 0 stevel diropargs from; 241 0 stevel diropargs to; 242 0 stevel }; 243 0 stevel 244 0 stevel struct linkargs { 245 0 stevel nfs_fh from; 246 0 stevel diropargs to; 247 0 stevel }; 248 0 stevel 249 0 stevel struct symlinkargs { 250 0 stevel diropargs from; 251 0 stevel nfspath to; 252 0 stevel sattr attributes; 253 0 stevel }; 254 0 stevel 255 0 stevel 256 0 stevel typedef opaque nfscookie[NFS_COOKIESIZE]; 257 0 stevel 258 0 stevel /* 259 0 stevel * Arguments to readdir 260 0 stevel */ 261 0 stevel struct readdirargs { 262 0 stevel nfs_fh dir; /* directory handle */ 263 0 stevel nfscookie cookie; 264 0 stevel unsigned count; /* number of directory bytes to read */ 265 0 stevel }; 266 0 stevel 267 0 stevel struct entry { 268 0 stevel unsigned fileid; 269 0 stevel filename name; 270 0 stevel nfscookie cookie; 271 0 stevel entry *nextentry; 272 0 stevel }; 273 0 stevel 274 0 stevel struct dirlist { 275 0 stevel entry *entries; 276 0 stevel bool eof; 277 0 stevel }; 278 0 stevel 279 0 stevel union readdirres switch (nfsstat status) { 280 0 stevel case NFS_OK: 281 0 stevel dirlist reply; 282 0 stevel default: 283 0 stevel void; 284 0 stevel }; 285 0 stevel 286 0 stevel struct statfsokres { 287 0 stevel unsigned tsize; /* preferred transfer size in bytes */ 288 0 stevel unsigned bsize; /* fundamental file system block size */ 289 0 stevel unsigned blocks; /* total blocks in file system */ 290 0 stevel unsigned bfree; /* free blocks in fs */ 291 0 stevel unsigned bavail; /* free blocks avail to non-superuser */ 292 0 stevel }; 293 0 stevel 294 0 stevel union statfsres switch (nfsstat status) { 295 0 stevel case NFS_OK: 296 0 stevel statfsokres reply; 297 0 stevel default: 298 0 stevel void; 299 0 stevel }; 300 0 stevel 301 0 stevel /* 302 0 stevel * Remote file service routines 303 0 stevel */ 304 0 stevel program NFS_PROGRAM { 305 0 stevel version NFS_VERSION { 306 0 stevel void 307 0 stevel NFSPROC_NULL(void) = 0; 308 0 stevel 309 0 stevel attrstat 310 0 stevel NFSPROC_GETATTR(nfs_fh) = 1; 311 0 stevel 312 0 stevel attrstat 313 0 stevel NFSPROC_SETATTR(sattrargs) = 2; 314 0 stevel 315 0 stevel void 316 0 stevel NFSPROC_ROOT(void) = 3; 317 0 stevel 318 0 stevel diropres 319 0 stevel NFSPROC_LOOKUP(diropargs) = 4; 320 0 stevel 321 0 stevel readlinkres 322 0 stevel NFSPROC_READLINK(nfs_fh) = 5; 323 0 stevel 324 0 stevel readres 325 0 stevel NFSPROC_READ(readargs) = 6; 326 0 stevel 327 0 stevel void 328 0 stevel NFSPROC_WRITECACHE(void) = 7; 329 0 stevel 330 0 stevel attrstat 331 0 stevel NFSPROC_WRITE(writeargs) = 8; 332 0 stevel 333 0 stevel diropres 334 0 stevel NFSPROC_CREATE(createargs) = 9; 335 0 stevel 336 0 stevel nfsstat 337 0 stevel NFSPROC_REMOVE(diropargs) = 10; 338 0 stevel 339 0 stevel nfsstat 340 0 stevel NFSPROC_RENAME(renameargs) = 11; 341 0 stevel 342 0 stevel nfsstat 343 0 stevel NFSPROC_LINK(linkargs) = 12; 344 0 stevel 345 0 stevel nfsstat 346 0 stevel NFSPROC_SYMLINK(symlinkargs) = 13; 347 0 stevel 348 0 stevel diropres 349 0 stevel NFSPROC_MKDIR(createargs) = 14; 350 0 stevel 351 0 stevel nfsstat 352 0 stevel NFSPROC_RMDIR(diropargs) = 15; 353 0 stevel 354 0 stevel readdirres 355 0 stevel NFSPROC_READDIR(readdirargs) = 16; 356 0 stevel 357 0 stevel statfsres 358 0 stevel NFSPROC_STATFS(nfs_fh) = 17; 359 0 stevel } = 2; 360 0 stevel } = 100003; 361 0 stevel 362 0 stevel /* 363 0 stevel * Version 3 declarations and definitions. 364 0 stevel */ 365 0 stevel 366 0 stevel /* 367 0 stevel * Sizes 368 0 stevel */ 369 0 stevel const NFS3_FHSIZE = 64; 370 0 stevel const NFS3_COOKIEVERFSIZE = 8; 371 0 stevel const NFS3_CREATEVERFSIZE = 8; 372 0 stevel const NFS3_WRITEVERFSIZE = 8; 373 0 stevel 374 0 stevel /* 375 0 stevel * Basic data types 376 0 stevel */ 377 0 stevel typedef string filename3<>; 378 0 stevel typedef string nfspath3<>; 379 0 stevel typedef uint64 fileid3; 380 0 stevel typedef uint64 cookie3; 381 0 stevel typedef opaque cookieverf3[NFS3_COOKIEVERFSIZE]; 382 0 stevel typedef opaque createverf3[NFS3_CREATEVERFSIZE]; 383 0 stevel typedef opaque writeverf3[NFS3_WRITEVERFSIZE]; 384 0 stevel typedef uint32 uid3; 385 0 stevel typedef uint32 gid3; 386 0 stevel typedef uint64 size3; 387 0 stevel typedef uint64 offset3; 388 0 stevel typedef uint32 mode3; 389 0 stevel typedef uint32 count3; 390 0 stevel 391 0 stevel /* 392 0 stevel * Error status 393 0 stevel */ 394 0 stevel enum nfsstat3 { 395 0 stevel NFS3_OK = 0, 396 0 stevel NFS3ERR_PERM = 1, 397 0 stevel NFS3ERR_NOENT = 2, 398 0 stevel NFS3ERR_IO = 5, 399 0 stevel NFS3ERR_NXIO = 6, 400 0 stevel NFS3ERR_ACCES = 13, 401 0 stevel NFS3ERR_EXIST = 17, 402 0 stevel NFS3ERR_XDEV = 18, 403 0 stevel NFS3ERR_NODEV = 19, 404 0 stevel NFS3ERR_NOTDIR = 20, 405 0 stevel NFS3ERR_ISDIR = 21, 406 0 stevel NFS3ERR_INVAL = 22, 407 0 stevel NFS3ERR_FBIG = 27, 408 0 stevel NFS3ERR_NOSPC = 28, 409 0 stevel NFS3ERR_ROFS = 30, 410 0 stevel NFS3ERR_MLINK = 31, 411 0 stevel NFS3ERR_NAMETOOLONG = 63, 412 0 stevel NFS3ERR_NOTEMPTY = 66, 413 0 stevel NFS3ERR_DQUOT = 69, 414 0 stevel NFS3ERR_STALE = 70, 415 0 stevel NFS3ERR_REMOTE = 71, 416 0 stevel NFS3ERR_BADHANDLE = 10001, 417 0 stevel NFS3ERR_NOT_SYNC = 10002, 418 0 stevel NFS3ERR_BAD_COOKIE = 10003, 419 0 stevel NFS3ERR_NOTSUPP = 10004, 420 0 stevel NFS3ERR_TOOSMALL = 10005, 421 0 stevel NFS3ERR_SERVERFAULT = 10006, 422 0 stevel NFS3ERR_BADTYPE = 10007, 423 0 stevel NFS3ERR_JUKEBOX = 10008 424 0 stevel }; 425 0 stevel 426 0 stevel /* 427 0 stevel * File types 428 0 stevel */ 429 0 stevel enum ftype3 { 430 0 stevel NF3REG = 1, 431 0 stevel NF3DIR = 2, 432 0 stevel NF3BLK = 3, 433 0 stevel NF3CHR = 4, 434 0 stevel NF3LNK = 5, 435 0 stevel NF3SOCK = 6, 436 0 stevel NF3FIFO = 7 437 0 stevel }; 438 0 stevel 439 0 stevel struct specdata3 { 440 0 stevel uint32 specdata1; 441 0 stevel uint32 specdata2; 442 0 stevel }; 443 0 stevel 444 0 stevel /* 445 0 stevel * File access handle 446 0 stevel */ 447 0 stevel struct nfs_fh3 { 448 0 stevel opaque data<NFS3_FHSIZE>; 449 0 stevel }; 450 0 stevel 451 0 stevel /* 452 0 stevel * Timeval 453 0 stevel */ 454 0 stevel struct nfstime3 { 455 0 stevel uint32 seconds; 456 0 stevel uint32 nseconds; 457 0 stevel }; 458 0 stevel 459 0 stevel /* 460 0 stevel * File attributes 461 0 stevel */ 462 0 stevel struct fattr3 { 463 0 stevel ftype3 type; 464 0 stevel mode3 mode; 465 0 stevel uint32 nlink; 466 0 stevel uid3 uid; 467 0 stevel gid3 gid; 468 0 stevel size3 size; 469 0 stevel size3 used; 470 0 stevel specdata3 rdev; 471 0 stevel uint64 fsid; 472 0 stevel fileid3 fileid; 473 0 stevel nfstime3 atime; 474 0 stevel nfstime3 mtime; 475 0 stevel nfstime3 ctime; 476 0 stevel }; 477 0 stevel 478 0 stevel /* 479 0 stevel * File attributes 480 0 stevel */ 481 0 stevel union post_op_attr switch (bool attributes_follow) { 482 0 stevel case TRUE: 483 0 stevel fattr3 attributes; 484 0 stevel case FALSE: 485 0 stevel void; 486 0 stevel }; 487 0 stevel 488 0 stevel struct wcc_attr { 489 0 stevel size3 size; 490 0 stevel nfstime3 mtime; 491 0 stevel nfstime3 ctime; 492 0 stevel }; 493 0 stevel 494 0 stevel union pre_op_attr switch (bool attributes_follow) { 495 0 stevel case TRUE: 496 0 stevel wcc_attr attributes; 497 0 stevel case FALSE: 498 0 stevel void; 499 0 stevel }; 500 0 stevel 501 0 stevel struct wcc_data { 502 0 stevel pre_op_attr before; 503 0 stevel post_op_attr after; 504 0 stevel }; 505 0 stevel 506 0 stevel union post_op_fh3 switch (bool handle_follows) { 507 0 stevel case TRUE: 508 0 stevel nfs_fh3 handle; 509 0 stevel case FALSE: 510 0 stevel void; 511 0 stevel }; 512 0 stevel 513 0 stevel enum time_how { 514 0 stevel DONT_CHANGE = 0, 515 0 stevel SET_TO_SERVER_TIME = 1, 516 0 stevel SET_TO_CLIENT_TIME = 2 517 0 stevel }; 518 0 stevel 519 0 stevel union set_mode3 switch (bool set_it) { 520 0 stevel case TRUE: 521 0 stevel mode3 mode; 522 0 stevel default: 523 0 stevel void; 524 0 stevel }; 525 0 stevel 526 0 stevel union set_uid3 switch (bool set_it) { 527 0 stevel case TRUE: 528 0 stevel uid3 uid; 529 0 stevel default: 530 0 stevel void; 531 0 stevel }; 532 0 stevel 533 0 stevel union set_gid3 switch (bool set_it) { 534 0 stevel case TRUE: 535 0 stevel gid3 gid; 536 0 stevel default: 537 0 stevel void; 538 0 stevel }; 539 0 stevel 540 0 stevel union set_size3 switch (bool set_it) { 541 0 stevel case TRUE: 542 0 stevel size3 size; 543 0 stevel default: 544 0 stevel void; 545 0 stevel }; 546 0 stevel 547 0 stevel union set_atime switch (time_how set_it) { 548 0 stevel case SET_TO_CLIENT_TIME: 549 0 stevel nfstime3 atime; 550 0 stevel default: 551 0 stevel void; 552 0 stevel }; 553 0 stevel 554 0 stevel union set_mtime switch (time_how set_it) { 555 0 stevel case SET_TO_CLIENT_TIME: 556 0 stevel nfstime3 mtime; 557 0 stevel default: 558 0 stevel void; 559 0 stevel }; 560 0 stevel 561 0 stevel struct sattr3 { 562 0 stevel set_mode3 mode; 563 0 stevel set_uid3 uid; 564 0 stevel set_gid3 gid; 565 0 stevel set_size3 size; 566 0 stevel set_atime atime; 567 0 stevel set_mtime mtime; 568 0 stevel }; 569 0 stevel 570 0 stevel struct diropargs3 { 571 0 stevel nfs_fh3 dir; 572 0 stevel filename3 name; 573 0 stevel }; 574 0 stevel 575 0 stevel /* 576 0 stevel * GETATTR: Get file attributes 577 0 stevel */ 578 0 stevel struct GETATTR3args { 579 0 stevel nfs_fh3 object; 580 0 stevel }; 581 0 stevel 582 0 stevel struct GETATTR3resok { 583 0 stevel fattr3 obj_attributes; 584 0 stevel }; 585 0 stevel 586 0 stevel union GETATTR3res switch (nfsstat3 status) { 587 0 stevel case NFS3_OK: 588 0 stevel GETATTR3resok resok; 589 0 stevel default: 590 0 stevel void; 591 0 stevel }; 592 0 stevel 593 0 stevel /* 594 0 stevel * SETATTR: Set file attributes 595 0 stevel */ 596 0 stevel union sattrguard3 switch (bool check) { 597 0 stevel case TRUE: 598 0 stevel nfstime3 obj_ctime; 599 0 stevel case FALSE: 600 0 stevel void; 601 0 stevel }; 602 0 stevel 603 0 stevel struct SETATTR3args { 604 0 stevel nfs_fh3 object; 605 0 stevel sattr3 new_attributes; 606 0 stevel sattrguard3 guard; 607 0 stevel }; 608 0 stevel 609 0 stevel struct SETATTR3resok { 610 0 stevel wcc_data obj_wcc; 611 0 stevel }; 612 0 stevel 613 0 stevel struct SETATTR3resfail { 614 0 stevel wcc_data obj_wcc; 615 0 stevel }; 616 0 stevel 617 0 stevel union SETATTR3res switch (nfsstat3 status) { 618 0 stevel case NFS3_OK: 619 0 stevel SETATTR3resok resok; 620 0 stevel default: 621 0 stevel SETATTR3resfail resfail; 622 0 stevel }; 623 0 stevel 624 0 stevel /* 625 0 stevel * LOOKUP: Lookup filename 626 0 stevel */ 627 0 stevel struct LOOKUP3args { 628 0 stevel diropargs3 what; 629 0 stevel }; 630 0 stevel 631 0 stevel struct LOOKUP3resok { 632 0 stevel nfs_fh3 object; 633 0 stevel post_op_attr obj_attributes; 634 0 stevel post_op_attr dir_attributes; 635 0 stevel }; 636 0 stevel 637 0 stevel struct LOOKUP3resfail { 638 0 stevel post_op_attr dir_attributes; 639 0 stevel }; 640 0 stevel 641 0 stevel union LOOKUP3res switch (nfsstat3 status) { 642 0 stevel case NFS3_OK: 643 0 stevel LOOKUP3resok resok; 644 0 stevel default: 645 0 stevel LOOKUP3resfail resfail; 646 0 stevel }; 647 0 stevel 648 0 stevel /* 649 0 stevel * ACCESS: Check access permission 650 0 stevel */ 651 0 stevel const ACCESS3_READ = 0x0001; 652 0 stevel const ACCESS3_LOOKUP = 0x0002; 653 0 stevel const ACCESS3_MODIFY = 0x0004; 654 0 stevel const ACCESS3_EXTEND = 0x0008; 655 0 stevel const ACCESS3_DELETE = 0x0010; 656 0 stevel const ACCESS3_EXECUTE = 0x0020; 657 0 stevel 658 0 stevel struct ACCESS3args { 659 0 stevel nfs_fh3 object; 660 0 stevel uint32 access; 661 0 stevel }; 662 0 stevel 663 0 stevel struct ACCESS3resok { 664 0 stevel post_op_attr obj_attributes; 665 0 stevel uint32 access; 666 0 stevel }; 667 0 stevel 668 0 stevel struct ACCESS3resfail { 669 0 stevel post_op_attr obj_attributes; 670 0 stevel }; 671 0 stevel 672 0 stevel union ACCESS3res switch (nfsstat3 status) { 673 0 stevel case NFS3_OK: 674 0 stevel ACCESS3resok resok; 675 0 stevel default: 676 0 stevel ACCESS3resfail resfail; 677 0 stevel }; 678 0 stevel 679 0 stevel /* 680 0 stevel * READLINK: Read from symbolic link 681 0 stevel */ 682 0 stevel struct READLINK3args { 683 0 stevel nfs_fh3 symlink; 684 0 stevel }; 685 0 stevel 686 0 stevel struct READLINK3resok { 687 0 stevel post_op_attr symlink_attributes; 688 0 stevel nfspath3 data; 689 0 stevel }; 690 0 stevel 691 0 stevel struct READLINK3resfail { 692 0 stevel post_op_attr symlink_attributes; 693 0 stevel }; 694 0 stevel 695 0 stevel union READLINK3res switch (nfsstat3 status) { 696 0 stevel case NFS3_OK: 697 0 stevel READLINK3resok resok; 698 0 stevel default: 699 0 stevel READLINK3resfail resfail; 700 0 stevel }; 701 0 stevel 702 0 stevel /* 703 0 stevel * READ: Read from file 704 0 stevel */ 705 0 stevel struct READ3args { 706 0 stevel nfs_fh3 file; 707 0 stevel offset3 offset; 708 0 stevel count3 count; 709 0 stevel }; 710 0 stevel 711 0 stevel struct READ3resok { 712 0 stevel post_op_attr file_attributes; 713 0 stevel count3 count; 714 0 stevel bool eof; 715 0 stevel opaque data<>; 716 0 stevel }; 717 0 stevel 718 0 stevel struct READ3resfail { 719 0 stevel post_op_attr file_attributes; 720 0 stevel }; 721 0 stevel 722 0 stevel union READ3res switch (nfsstat3 status) { 723 0 stevel case NFS3_OK: 724 0 stevel READ3resok resok; 725 0 stevel default: 726 0 stevel READ3resfail resfail; 727 0 stevel }; 728 0 stevel 729 0 stevel /* 730 0 stevel * WRITE: Write to file 731 0 stevel */ 732 0 stevel enum stable_how { 733 0 stevel UNSTABLE = 0, 734 0 stevel DATA_SYNC = 1, 735 0 stevel FILE_SYNC = 2 736 0 stevel }; 737 0 stevel 738 0 stevel struct WRITE3args { 739 0 stevel nfs_fh3 file; 740 0 stevel offset3 offset; 741 0 stevel count3 count; 742 0 stevel stable_how stable; 743 0 stevel opaque data<>; 744 0 stevel }; 745 0 stevel 746 0 stevel struct WRITE3resok { 747 0 stevel wcc_data file_wcc; 748 0 stevel count3 count; 749 0 stevel stable_how committed; 750 0 stevel writeverf3 verf; 751 0 stevel }; 752 0 stevel 753 0 stevel struct WRITE3resfail { 754 0 stevel wcc_data file_wcc; 755 0 stevel }; 756 0 stevel 757 0 stevel union WRITE3res switch (nfsstat3 status) { 758 0 stevel case NFS3_OK: 759 0 stevel WRITE3resok resok; 760 0 stevel default: 761 0 stevel WRITE3resfail resfail; 762 0 stevel }; 763 0 stevel 764 0 stevel /* 765 0 stevel * CREATE: Create a file 766 0 stevel */ 767 0 stevel enum createmode3 { 768 0 stevel UNCHECKED = 0, 769 0 stevel GUARDED = 1, 770 0 stevel EXCLUSIVE = 2 771 0 stevel }; 772 0 stevel 773 0 stevel union createhow3 switch (createmode3 mode) { 774 0 stevel case UNCHECKED: 775 0 stevel case GUARDED: 776 0 stevel sattr3 obj_attributes; 777 0 stevel case EXCLUSIVE: 778 0 stevel createverf3 verf; 779 0 stevel }; 780 0 stevel 781 0 stevel struct CREATE3args { 782 0 stevel diropargs3 where; 783 0 stevel createhow3 how; 784 0 stevel }; 785 0 stevel 786 0 stevel struct CREATE3resok { 787 0 stevel post_op_fh3 obj; 788 0 stevel post_op_attr obj_attributes; 789 0 stevel wcc_data dir_wcc; 790 0 stevel }; 791 0 stevel 792 0 stevel struct CREATE3resfail { 793 0 stevel wcc_data dir_wcc; 794 0 stevel }; 795 0 stevel 796 0 stevel union CREATE3res switch (nfsstat3 status) { 797 0 stevel case NFS3_OK: 798 0 stevel CREATE3resok resok; 799 0 stevel default: 800 0 stevel CREATE3resfail resfail; 801 0 stevel }; 802 0 stevel 803 0 stevel /* 804 0 stevel * MKDIR: Create a directory 805 0 stevel */ 806 0 stevel struct MKDIR3args { 807 0 stevel diropargs3 where; 808 0 stevel sattr3 attributes; 809 0 stevel }; 810 0 stevel 811 0 stevel struct MKDIR3resok { 812 0 stevel post_op_fh3 obj; 813 0 stevel post_op_attr obj_attributes; 814 0 stevel wcc_data dir_wcc; 815 0 stevel }; 816 0 stevel 817 0 stevel struct MKDIR3resfail { 818 0 stevel wcc_data dir_wcc; 819 0 stevel }; 820 0 stevel 821 0 stevel union MKDIR3res switch (nfsstat3 status) { 822 0 stevel case NFS3_OK: 823 0 stevel MKDIR3resok resok; 824 0 stevel default: 825 0 stevel MKDIR3resfail resfail; 826 0 stevel }; 827 0 stevel 828 0 stevel /* 829 0 stevel * SYMLINK: Create a symbolic link 830 0 stevel */ 831 0 stevel struct symlinkdata3 { 832 0 stevel sattr3 symlink_attributes; 833 0 stevel nfspath3 symlink_data; 834 0 stevel }; 835 0 stevel 836 0 stevel struct SYMLINK3args { 837 0 stevel diropargs3 where; 838 0 stevel symlinkdata3 symlink; 839 0 stevel }; 840 0 stevel 841 0 stevel struct SYMLINK3resok { 842 0 stevel post_op_fh3 obj; 843 0 stevel post_op_attr obj_attributes; 844 0 stevel wcc_data dir_wcc; 845 0 stevel }; 846 0 stevel 847 0 stevel struct SYMLINK3resfail { 848 0 stevel wcc_data dir_wcc; 849 0 stevel }; 850 0 stevel 851 0 stevel union SYMLINK3res switch (nfsstat3 status) { 852 0 stevel case NFS3_OK: 853 0 stevel SYMLINK3resok resok; 854 0 stevel default: 855 0 stevel SYMLINK3resfail resfail; 856 0 stevel }; 857 0 stevel 858 0 stevel /* 859 0 stevel * MKNOD: Create a special file 860 0 stevel */ 861 0 stevel struct devicedata3 { 862 0 stevel sattr3 dev_attributes; 863 0 stevel specdata3 spec; 864 0 stevel }; 865 0 stevel 866 0 stevel union mknoddata3 switch (ftype3 type) { 867 0 stevel case NF3CHR: 868 0 stevel case NF3BLK: 869 0 stevel devicedata3 device; 870 0 stevel case NF3SOCK: 871 0 stevel case NF3FIFO: 872 0 stevel sattr3 pipe_attributes; 873 0 stevel default: 874 0 stevel void; 875 0 stevel }; 876 0 stevel 877 0 stevel struct MKNOD3args { 878 0 stevel diropargs3 where; 879 0 stevel mknoddata3 what; 880 0 stevel }; 881 0 stevel 882 0 stevel struct MKNOD3resok { 883 0 stevel post_op_fh3 obj; 884 0 stevel post_op_attr obj_attributes; 885 0 stevel wcc_data dir_wcc; 886 0 stevel }; 887 0 stevel 888 0 stevel struct MKNOD3resfail { 889 0 stevel wcc_data dir_wcc; 890 0 stevel }; 891 0 stevel 892 0 stevel union MKNOD3res switch (nfsstat3 status) { 893 0 stevel case NFS3_OK: 894 0 stevel MKNOD3resok resok; 895 0 stevel default: 896 0 stevel MKNOD3resfail resfail; 897 0 stevel }; 898 0 stevel 899 0 stevel /* 900 0 stevel * REMOVE: Remove a file 901 0 stevel */ 902 0 stevel struct REMOVE3args { 903 0 stevel diropargs3 object; 904 0 stevel }; 905 0 stevel 906 0 stevel struct REMOVE3resok { 907 0 stevel wcc_data dir_wcc; 908 0 stevel }; 909 0 stevel 910 0 stevel struct REMOVE3resfail { 911 0 stevel wcc_data dir_wcc; 912 0 stevel }; 913 0 stevel 914 0 stevel union REMOVE3res switch (nfsstat3 status) { 915 0 stevel case NFS3_OK: 916 0 stevel REMOVE3resok resok; 917 0 stevel default: 918 0 stevel REMOVE3resfail resfail; 919 0 stevel }; 920 0 stevel 921 0 stevel /* 922 0 stevel * RMDIR: Remove a directory 923 0 stevel */ 924 0 stevel struct RMDIR3args { 925 0 stevel diropargs3 object; 926 0 stevel }; 927 0 stevel 928 0 stevel struct RMDIR3resok { 929 0 stevel wcc_data dir_wcc; 930 0 stevel }; 931 0 stevel 932 0 stevel struct RMDIR3resfail { 933 0 stevel wcc_data dir_wcc; 934 0 stevel }; 935 0 stevel 936 0 stevel union RMDIR3res switch (nfsstat3 status) { 937 0 stevel case NFS3_OK: 938 0 stevel RMDIR3resok resok; 939 0 stevel default: 940 0 stevel RMDIR3resfail resfail; 941 0 stevel }; 942 0 stevel 943 0 stevel /* 944 0 stevel * RENAME: Rename a file or directory 945 0 stevel */ 946 0 stevel struct RENAME3args { 947 0 stevel diropargs3 from; 948 0 stevel diropargs3 to; 949 0 stevel }; 950 0 stevel 951 0 stevel struct RENAME3resok { 952 0 stevel wcc_data fromdir_wcc; 953 0 stevel wcc_data todir_wcc; 954 0 stevel }; 955 0 stevel 956 0 stevel struct RENAME3resfail { 957 0 stevel wcc_data fromdir_wcc; 958 0 stevel wcc_data todir_wcc; 959 0 stevel }; 960 0 stevel 961 0 stevel union RENAME3res switch (nfsstat3 status) { 962 0 stevel case NFS3_OK: 963 0 stevel RENAME3resok resok; 964 0 stevel default: 965 0 stevel RENAME3resfail resfail; 966 0 stevel }; 967 0 stevel 968 0 stevel /* 969 0 stevel * LINK: Create link to an object 970 0 stevel */ 971 0 stevel struct LINK3args { 972 0 stevel nfs_fh3 file; 973 0 stevel diropargs3 link; 974 0 stevel }; 975 0 stevel 976 0 stevel struct LINK3resok { 977 0 stevel post_op_attr file_attributes; 978 0 stevel wcc_data linkdir_wcc; 979 0 stevel }; 980 0 stevel 981 0 stevel struct LINK3resfail { 982 0 stevel post_op_attr file_attributes; 983 0 stevel wcc_data linkdir_wcc; 984 0 stevel }; 985 0 stevel 986 0 stevel union LINK3res switch (nfsstat3 status) { 987 0 stevel case NFS3_OK: 988 0 stevel LINK3resok resok; 989 0 stevel default: 990 0 stevel LINK3resfail resfail; 991 0 stevel }; 992 0 stevel 993 0 stevel /* 994 0 stevel * READDIR: Read from directory 995 0 stevel */ 996 0 stevel struct READDIR3args { 997 0 stevel nfs_fh3 dir; 998 0 stevel cookie3 cookie; 999 0 stevel cookieverf3 cookieverf; 1000 0 stevel count3 count; 1001 0 stevel }; 1002 0 stevel 1003 0 stevel struct entry3 { 1004 0 stevel fileid3 fileid; 1005 0 stevel filename3 name; 1006 0 stevel cookie3 cookie; 1007 0 stevel entry3 *nextentry; 1008 0 stevel }; 1009 0 stevel 1010 0 stevel struct dirlist3 { 1011 0 stevel entry3 *entries; 1012 0 stevel bool eof; 1013 0 stevel }; 1014 0 stevel 1015 0 stevel struct READDIR3resok { 1016 0 stevel post_op_attr dir_attributes; 1017 0 stevel cookieverf3 cookieverf; 1018 0 stevel dirlist3 reply; 1019 0 stevel }; 1020 0 stevel 1021 0 stevel struct READDIR3resfail { 1022 0 stevel post_op_attr dir_attributes; 1023 0 stevel }; 1024 0 stevel 1025 0 stevel union READDIR3res switch (nfsstat3 status) { 1026 0 stevel case NFS3_OK: 1027 0 stevel READDIR3resok resok; 1028 0 stevel default: 1029 0 stevel READDIR3resfail resfail; 1030 0 stevel }; 1031 0 stevel 1032 0 stevel /* 1033 0 stevel * READDIRPLUS: Extended read from a directory 1034 0 stevel */ 1035 0 stevel struct READDIRPLUS3args { 1036 0 stevel nfs_fh3 dir; 1037 0 stevel cookie3 cookie; 1038 0 stevel cookieverf3 cookieverf; 1039 0 stevel count3 dircount; 1040 0 stevel count3 maxcount; 1041 0 stevel }; 1042 0 stevel 1043 0 stevel struct entryplus3 { 1044 0 stevel fileid3 fileid; 1045 0 stevel filename3 name; 1046 0 stevel cookie3 cookie; 1047 0 stevel post_op_attr name_attributes; 1048 0 stevel post_op_fh3 name_handle; 1049 0 stevel entryplus3 *nextentry; 1050 0 stevel }; 1051 0 stevel 1052 0 stevel struct dirlistplus3 { 1053 0 stevel entryplus3 *entries; 1054 0 stevel bool eof; 1055 0 stevel }; 1056 0 stevel 1057 0 stevel struct READDIRPLUS3resok { 1058 0 stevel post_op_attr dir_attributes; 1059 0 stevel cookieverf3 cookieverf; 1060 0 stevel dirlistplus3 reply; 1061 0 stevel }; 1062 0 stevel 1063 0 stevel struct READDIRPLUS3resfail { 1064 0 stevel post_op_attr dir_attributes; 1065 0 stevel }; 1066 0 stevel 1067 0 stevel union READDIRPLUS3res switch (nfsstat3 status) { 1068 0 stevel case NFS3_OK: 1069 0 stevel READDIRPLUS3resok resok; 1070 0 stevel default: 1071 0 stevel READDIRPLUS3resfail resfail; 1072 0 stevel }; 1073 0 stevel 1074 0 stevel /* 1075 0 stevel * FSSTAT: Get dynamic file system information 1076 0 stevel */ 1077 0 stevel struct FSSTAT3args { 1078 0 stevel nfs_fh3 fsroot; 1079 0 stevel }; 1080 0 stevel 1081 0 stevel struct FSSTAT3resok { 1082 0 stevel post_op_attr obj_attributes; 1083 0 stevel size3 tbytes; 1084 0 stevel size3 fbytes; 1085 0 stevel size3 abytes; 1086 0 stevel size3 tfiles; 1087 0 stevel size3 ffiles; 1088 0 stevel size3 afiles; 1089 0 stevel uint32 invarsec; 1090 0 stevel }; 1091 0 stevel 1092 0 stevel struct FSSTAT3resfail { 1093 0 stevel post_op_attr obj_attributes; 1094 0 stevel }; 1095 0 stevel 1096 0 stevel union FSSTAT3res switch (nfsstat3 status) { 1097 0 stevel case NFS3_OK: 1098 0 stevel FSSTAT3resok resok; 1099 0 stevel default: 1100 0 stevel FSSTAT3resfail resfail; 1101 0 stevel }; 1102 0 stevel 1103 0 stevel /* 1104 0 stevel * FSINFO: Get static file system information 1105 0 stevel */ 1106 0 stevel 1107 0 stevel const FSF3_LINK = 0x0001; 1108 0 stevel const FSF3_SYMLINK = 0x0002; 1109 0 stevel const FSF3_HOMOGENEOUS = 0x0008; 1110 0 stevel const FSF3_CANSETTIME = 0x0010; 1111 0 stevel 1112 0 stevel struct FSINFO3args { 1113 0 stevel nfs_fh3 fsroot; 1114 0 stevel }; 1115 0 stevel 1116 0 stevel struct FSINFO3resok { 1117 0 stevel post_op_attr obj_attributes; 1118 0 stevel uint32 rtmax; 1119 0 stevel uint32 rtpref; 1120 0 stevel uint32 rtmult; 1121 0 stevel uint32 wtmax; 1122 0 stevel uint32 wtpref; 1123 0 stevel uint32 wtmult; 1124 0 stevel uint32 dtpref; 1125 0 stevel size3 maxfilesize; 1126 0 stevel nfstime3 time_delta; 1127 0 stevel uint32 properties; 1128 0 stevel }; 1129 0 stevel 1130 0 stevel struct FSINFO3resfail { 1131 0 stevel post_op_attr obj_attributes; 1132 0 stevel }; 1133 0 stevel 1134 0 stevel union FSINFO3res switch (nfsstat3 status) { 1135 0 stevel case NFS3_OK: 1136 0 stevel FSINFO3resok resok; 1137 0 stevel default: 1138 0 stevel FSINFO3resfail resfail; 1139 0 stevel }; 1140 0 stevel 1141 0 stevel /* 1142 0 stevel * PATHCONF: Retrieve POSIX information 1143 0 stevel */ 1144 0 stevel struct PATHCONF3args { 1145 0 stevel nfs_fh3 object; 1146 0 stevel }; 1147 0 stevel 1148 0 stevel struct PATHCONF3resok { 1149 0 stevel post_op_attr obj_attributes; 1150 0 stevel uint32 linkmax; 1151 0 stevel uint32 name_max; 1152 0 stevel bool no_trunc; 1153 0 stevel bool chown_restricted; 1154 0 stevel bool case_insensitive; 1155 0 stevel bool case_preserving; 1156 0 stevel }; 1157 0 stevel 1158 0 stevel struct PATHCONF3resfail { 1159 0 stevel post_op_attr obj_attributes; 1160 0 stevel }; 1161 0 stevel 1162 0 stevel union PATHCONF3res switch (nfsstat3 status) { 1163 0 stevel case NFS3_OK: 1164 0 stevel PATHCONF3resok resok; 1165 0 stevel default: 1166 0 stevel PATHCONF3resfail resfail; 1167 0 stevel }; 1168 0 stevel 1169 0 stevel /* 1170 0 stevel * COMMIT: Commit cached data on a server to stable storage 1171 0 stevel */ 1172 0 stevel struct COMMIT3args { 1173 0 stevel nfs_fh3 file; 1174 0 stevel offset3 offset; 1175 0 stevel count3 count; 1176 0 stevel }; 1177 0 stevel 1178 0 stevel struct COMMIT3resok { 1179 0 stevel wcc_data file_wcc; 1180 0 stevel writeverf3 verf; 1181 0 stevel }; 1182 0 stevel 1183 0 stevel struct COMMIT3resfail { 1184 0 stevel wcc_data file_wcc; 1185 0 stevel }; 1186 0 stevel 1187 0 stevel union COMMIT3res switch (nfsstat3 status) { 1188 0 stevel case NFS3_OK: 1189 0 stevel COMMIT3resok resok; 1190 0 stevel default: 1191 0 stevel COMMIT3resfail resfail; 1192 0 stevel }; 1193 0 stevel 1194 0 stevel /* 1195 0 stevel * Remote file service routines 1196 0 stevel */ 1197 0 stevel program NFS3_PROGRAM { 1198 0 stevel version NFS_V3 { 1199 0 stevel void 1200 0 stevel NFSPROC3_NULL(void) = 0; 1201 0 stevel 1202 0 stevel GETATTR3res 1203 0 stevel NFSPROC3_GETATTR(GETATTR3args) = 1; 1204 0 stevel 1205 0 stevel SETATTR3res 1206 0 stevel NFSPROC3_SETATTR(SETATTR3args) = 2; 1207 0 stevel 1208 0 stevel LOOKUP3res 1209 0 stevel NFSPROC3_LOOKUP(LOOKUP3args) = 3; 1210 0 stevel 1211 0 stevel ACCESS3res 1212 0 stevel NFSPROC3_ACCESS(ACCESS3args) = 4; 1213 0 stevel 1214 0 stevel READLINK3res 1215 0 stevel NFSPROC3_READLINK(READLINK3args) = 5; 1216 0 stevel 1217 0 stevel READ3res 1218 0 stevel NFSPROC3_READ(READ3args) = 6; 1219 0 stevel 1220 0 stevel WRITE3res 1221 0 stevel NFSPROC3_WRITE(WRITE3args) = 7; 1222 0 stevel 1223 0 stevel CREATE3res 1224 0 stevel NFSPROC3_CREATE(CREATE3args) = 8; 1225 0 stevel 1226 0 stevel MKDIR3res 1227 0 stevel NFSPROC3_MKDIR(MKDIR3args) = 9; 1228 0 stevel 1229 0 stevel SYMLINK3res 1230 0 stevel NFSPROC3_SYMLINK(SYMLINK3args) = 10; 1231 0 stevel 1232 0 stevel MKNOD3res 1233 0 stevel NFSPROC3_MKNOD(MKNOD3args) = 11; 1234 0 stevel 1235 0 stevel REMOVE3res 1236 0 stevel NFSPROC3_REMOVE(REMOVE3args) = 12; 1237 0 stevel 1238 0 stevel RMDIR3res 1239 0 stevel NFSPROC3_RMDIR(RMDIR3args) = 13; 1240 0 stevel 1241 0 stevel RENAME3res 1242 0 stevel NFSPROC3_RENAME(RENAME3args) = 14; 1243 0 stevel 1244 0 stevel LINK3res 1245 0 stevel NFSPROC3_LINK(LINK3args) = 15; 1246 0 stevel 1247 0 stevel READDIR3res 1248 0 stevel NFSPROC3_READDIR(READDIR3args) = 16; 1249 0 stevel 1250 0 stevel READDIRPLUS3res 1251 0 stevel NFSPROC3_READDIRPLUS(READDIRPLUS3args) = 17; 1252 0 stevel 1253 0 stevel FSSTAT3res 1254 0 stevel NFSPROC3_FSSTAT(FSSTAT3args) = 18; 1255 0 stevel 1256 0 stevel FSINFO3res 1257 0 stevel NFSPROC3_FSINFO(FSINFO3args) = 19; 1258 0 stevel 1259 0 stevel PATHCONF3res 1260 0 stevel NFSPROC3_PATHCONF(PATHCONF3args) = 20; 1261 0 stevel 1262 0 stevel COMMIT3res 1263 0 stevel NFSPROC3_COMMIT(COMMIT3args) = 21; 1264 0 stevel } = 3; 1265 0 stevel } = 100003; 1266