d25372dc8e65a9ed019a88fdf659ca61313f1b31jcduff/*
d25372dc8e65a9ed019a88fdf659ca61313f1b31jcduff * CDDL HEADER START
d25372dc8e65a9ed019a88fdf659ca61313f1b31jcduff *
d25372dc8e65a9ed019a88fdf659ca61313f1b31jcduff * The contents of this file are subject to the terms of the
d25372dc8e65a9ed019a88fdf659ca61313f1b31jcduff * Common Development and Distribution License, Version 1.0 only
d25372dc8e65a9ed019a88fdf659ca61313f1b31jcduff * (the "License"). You may not use this file except in compliance
d25372dc8e65a9ed019a88fdf659ca61313f1b31jcduff * with the License.
d25372dc8e65a9ed019a88fdf659ca61313f1b31jcduff *
8cf870d281dc8c242f083d14dfef05f24aa5fceeJnRouvignac * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
8cf870d281dc8c242f083d14dfef05f24aa5fceeJnRouvignac * or http://www.opensolaris.org/os/licensing.
d25372dc8e65a9ed019a88fdf659ca61313f1b31jcduff * See the License for the specific language governing permissions
d25372dc8e65a9ed019a88fdf659ca61313f1b31jcduff * and limitations under the License.
d25372dc8e65a9ed019a88fdf659ca61313f1b31jcduff *
d25372dc8e65a9ed019a88fdf659ca61313f1b31jcduff * When distributing Covered Code, include this CDDL HEADER in each
8cf870d281dc8c242f083d14dfef05f24aa5fceeJnRouvignac * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
8cf870d281dc8c242f083d14dfef05f24aa5fceeJnRouvignac * If applicable, add the following below this CDDL HEADER, with the
8cf870d281dc8c242f083d14dfef05f24aa5fceeJnRouvignac * fields enclosed by brackets "[]" replaced with your own identifying
8cf870d281dc8c242f083d14dfef05f24aa5fceeJnRouvignac * information: Portions Copyright [yyyy] [name of copyright owner]
d25372dc8e65a9ed019a88fdf659ca61313f1b31jcduff *
d25372dc8e65a9ed019a88fdf659ca61313f1b31jcduff * CDDL HEADER END
d25372dc8e65a9ed019a88fdf659ca61313f1b31jcduff */
d25372dc8e65a9ed019a88fdf659ca61313f1b31jcduff/*
d25372dc8e65a9ed019a88fdf659ca61313f1b31jcduff * Copyright 2004 Sun Microsystems, Inc. All rights reserved.
367fce55726cb32895b048f052eb323e9e8ef3d1jvergara * Use is subject to license terms.
d4b762b3d1ead61775b43f61914fb077dc2dbe6fJnRouvignac */
d25372dc8e65a9ed019a88fdf659ca61313f1b31jcduff
d25372dc8e65a9ed019a88fdf659ca61313f1b31jcduff%#pragma ident "%Z%%M% %I% %E% SMI"
d25372dc8e65a9ed019a88fdf659ca61313f1b31jcduff
d25372dc8e65a9ed019a88fdf659ca61313f1b31jcduff#ifdef RPC_HDR
d25372dc8e65a9ed019a88fdf659ca61313f1b31jcduff%
d25372dc8e65a9ed019a88fdf659ca61313f1b31jcduff%/*
d25372dc8e65a9ed019a88fdf659ca61313f1b31jcduff% * Definitions for uint64, int64, uint32, and int32
d25372dc8e65a9ed019a88fdf659ca61313f1b31jcduff% */
d25372dc8e65a9ed019a88fdf659ca61313f1b31jcduff%#include <rpc/rpc_sztypes.h>
d25372dc8e65a9ed019a88fdf659ca61313f1b31jcduff%
d25372dc8e65a9ed019a88fdf659ca61313f1b31jcduff#endif
9826be98262b6a91cfbe1eee4de88c78789d9e8dcjr
d25372dc8e65a9ed019a88fdf659ca61313f1b31jcduffconst NFS_PORT = 2049;
d4b762b3d1ead61775b43f61914fb077dc2dbe6fJnRouvignacconst NFS_MAXDATA = 8192;
d4b762b3d1ead61775b43f61914fb077dc2dbe6fJnRouvignacconst NFS_MAXPATHLEN = 1024;
d25372dc8e65a9ed019a88fdf659ca61313f1b31jcduffconst NFS_MAXNAMLEN = 255;
d25372dc8e65a9ed019a88fdf659ca61313f1b31jcduffconst NFS_FHSIZE = 32;
d25372dc8e65a9ed019a88fdf659ca61313f1b31jcduffconst NFS_COOKIESIZE = 4;
d25372dc8e65a9ed019a88fdf659ca61313f1b31jcduffconst NFS_FIFO_DEV = -1; /* size kludge for named pipes */
d25372dc8e65a9ed019a88fdf659ca61313f1b31jcduff
d25372dc8e65a9ed019a88fdf659ca61313f1b31jcduff/*
d25372dc8e65a9ed019a88fdf659ca61313f1b31jcduff * File types
d25372dc8e65a9ed019a88fdf659ca61313f1b31jcduff */
d25372dc8e65a9ed019a88fdf659ca61313f1b31jcduffconst NFSMODE_FMT = 0170000; /* type of file */
d25372dc8e65a9ed019a88fdf659ca61313f1b31jcduffconst NFSMODE_DIR = 0040000; /* directory */
d25372dc8e65a9ed019a88fdf659ca61313f1b31jcduffconst NFSMODE_CHR = 0020000; /* character special */
d25372dc8e65a9ed019a88fdf659ca61313f1b31jcduffconst NFSMODE_BLK = 0060000; /* block special */
d25372dc8e65a9ed019a88fdf659ca61313f1b31jcduffconst NFSMODE_REG = 0100000; /* regular */
d25372dc8e65a9ed019a88fdf659ca61313f1b31jcduffconst NFSMODE_LNK = 0120000; /* symbolic link */
d25372dc8e65a9ed019a88fdf659ca61313f1b31jcduffconst NFSMODE_SOCK = 0140000; /* socket */
d25372dc8e65a9ed019a88fdf659ca61313f1b31jcduffconst NFSMODE_FIFO = 0010000; /* fifo */
d25372dc8e65a9ed019a88fdf659ca61313f1b31jcduff
d25372dc8e65a9ed019a88fdf659ca61313f1b31jcduff/*
d25372dc8e65a9ed019a88fdf659ca61313f1b31jcduff * Error status
d25372dc8e65a9ed019a88fdf659ca61313f1b31jcduff */
d4b762b3d1ead61775b43f61914fb077dc2dbe6fJnRouvignacenum nfsstat {
d25372dc8e65a9ed019a88fdf659ca61313f1b31jcduff NFS_OK= 0, /* no error */
d4b762b3d1ead61775b43f61914fb077dc2dbe6fJnRouvignac NFSERR_PERM=1, /* Not owner */
d4b762b3d1ead61775b43f61914fb077dc2dbe6fJnRouvignac NFSERR_NOENT=2, /* No such file or directory */
d4b762b3d1ead61775b43f61914fb077dc2dbe6fJnRouvignac NFSERR_IO=5, /* I/O error */
d25372dc8e65a9ed019a88fdf659ca61313f1b31jcduff NFSERR_NXIO=6, /* No such device or address */
d25372dc8e65a9ed019a88fdf659ca61313f1b31jcduff NFSERR_ACCES=13, /* Permission denied */
d25372dc8e65a9ed019a88fdf659ca61313f1b31jcduff NFSERR_EXIST=17, /* File exists */
d25372dc8e65a9ed019a88fdf659ca61313f1b31jcduff NFSERR_XDEV=18, /* Cross-device link */
d25372dc8e65a9ed019a88fdf659ca61313f1b31jcduff NFSERR_NODEV=19, /* No such device */
d25372dc8e65a9ed019a88fdf659ca61313f1b31jcduff NFSERR_NOTDIR=20, /* Not a directory*/
d25372dc8e65a9ed019a88fdf659ca61313f1b31jcduff NFSERR_ISDIR=21, /* Is a directory */
d25372dc8e65a9ed019a88fdf659ca61313f1b31jcduff NFSERR_INVAL=22, /* Invalid argument */
d25372dc8e65a9ed019a88fdf659ca61313f1b31jcduff NFSERR_FBIG=27, /* File too large */
d25372dc8e65a9ed019a88fdf659ca61313f1b31jcduff NFSERR_NOSPC=28, /* No space left on device */
d25372dc8e65a9ed019a88fdf659ca61313f1b31jcduff NFSERR_ROFS=30, /* Read-only file system */
d25372dc8e65a9ed019a88fdf659ca61313f1b31jcduff NFSERR_OPNOTSUPP=45, /* Operation not supported */
d25372dc8e65a9ed019a88fdf659ca61313f1b31jcduff NFSERR_NAMETOOLONG=63, /* File name too long */
d25372dc8e65a9ed019a88fdf659ca61313f1b31jcduff NFSERR_NOTEMPTY=66, /* Directory not empty */
d25372dc8e65a9ed019a88fdf659ca61313f1b31jcduff NFSERR_DQUOT=69, /* Disc quota exceeded */
d25372dc8e65a9ed019a88fdf659ca61313f1b31jcduff NFSERR_STALE=70, /* Stale NFS file handle */
d25372dc8e65a9ed019a88fdf659ca61313f1b31jcduff NFSERR_REMOTE=71, /* Object is remote */
9826be98262b6a91cfbe1eee4de88c78789d9e8dcjr NFSERR_WFLUSH=72 /* write cache flushed */
9826be98262b6a91cfbe1eee4de88c78789d9e8dcjr};
9826be98262b6a91cfbe1eee4de88c78789d9e8dcjr
9826be98262b6a91cfbe1eee4de88c78789d9e8dcjr/*
9826be98262b6a91cfbe1eee4de88c78789d9e8dcjr * File types
9826be98262b6a91cfbe1eee4de88c78789d9e8dcjr */
9826be98262b6a91cfbe1eee4de88c78789d9e8dcjrenum ftype {
9826be98262b6a91cfbe1eee4de88c78789d9e8dcjr NFNON = 0, /* non-file */
d25372dc8e65a9ed019a88fdf659ca61313f1b31jcduff NFREG = 1, /* regular file */
d25372dc8e65a9ed019a88fdf659ca61313f1b31jcduff NFDIR = 2, /* directory */
d25372dc8e65a9ed019a88fdf659ca61313f1b31jcduff NFBLK = 3, /* block special */
d25372dc8e65a9ed019a88fdf659ca61313f1b31jcduff NFCHR = 4, /* character special */
9826be98262b6a91cfbe1eee4de88c78789d9e8dcjr NFLNK = 5, /* symbolic link */
9826be98262b6a91cfbe1eee4de88c78789d9e8dcjr NFSOCK = 6, /* unix domain sockets */
9826be98262b6a91cfbe1eee4de88c78789d9e8dcjr NFBAD = 7, /* unused */
9826be98262b6a91cfbe1eee4de88c78789d9e8dcjr NFFIFO = 8 /* named pipe */
d25372dc8e65a9ed019a88fdf659ca61313f1b31jcduff};
9826be98262b6a91cfbe1eee4de88c78789d9e8dcjr
9826be98262b6a91cfbe1eee4de88c78789d9e8dcjr/*
9826be98262b6a91cfbe1eee4de88c78789d9e8dcjr * File access handle
9826be98262b6a91cfbe1eee4de88c78789d9e8dcjr */
9826be98262b6a91cfbe1eee4de88c78789d9e8dcjrstruct nfs_fh {
9826be98262b6a91cfbe1eee4de88c78789d9e8dcjr opaque data[NFS_FHSIZE];
9826be98262b6a91cfbe1eee4de88c78789d9e8dcjr};
9826be98262b6a91cfbe1eee4de88c78789d9e8dcjr
9826be98262b6a91cfbe1eee4de88c78789d9e8dcjr/*
d25372dc8e65a9ed019a88fdf659ca61313f1b31jcduff * Timeval
d25372dc8e65a9ed019a88fdf659ca61313f1b31jcduff */
d25372dc8e65a9ed019a88fdf659ca61313f1b31jcduffstruct nfstime {
d25372dc8e65a9ed019a88fdf659ca61313f1b31jcduff unsigned seconds;
d4b762b3d1ead61775b43f61914fb077dc2dbe6fJnRouvignac unsigned useconds;
d25372dc8e65a9ed019a88fdf659ca61313f1b31jcduff};
d4b762b3d1ead61775b43f61914fb077dc2dbe6fJnRouvignac
d25372dc8e65a9ed019a88fdf659ca61313f1b31jcduff
d25372dc8e65a9ed019a88fdf659ca61313f1b31jcduff/*
d25372dc8e65a9ed019a88fdf659ca61313f1b31jcduff * File attributes
d25372dc8e65a9ed019a88fdf659ca61313f1b31jcduff */
d25372dc8e65a9ed019a88fdf659ca61313f1b31jcduffstruct fattr {
d25372dc8e65a9ed019a88fdf659ca61313f1b31jcduff ftype type; /* file type */
d25372dc8e65a9ed019a88fdf659ca61313f1b31jcduff unsigned mode; /* protection mode bits */
d25372dc8e65a9ed019a88fdf659ca61313f1b31jcduff unsigned nlink; /* # hard links */
d25372dc8e65a9ed019a88fdf659ca61313f1b31jcduff unsigned uid; /* owner user id */
d25372dc8e65a9ed019a88fdf659ca61313f1b31jcduff unsigned gid; /* owner group id */
d25372dc8e65a9ed019a88fdf659ca61313f1b31jcduff unsigned size; /* file size in bytes */
d25372dc8e65a9ed019a88fdf659ca61313f1b31jcduff unsigned blocksize; /* prefered block size */
d25372dc8e65a9ed019a88fdf659ca61313f1b31jcduff unsigned rdev; /* special device # */
d25372dc8e65a9ed019a88fdf659ca61313f1b31jcduff unsigned blocks; /* Kb of disk used by file */
d25372dc8e65a9ed019a88fdf659ca61313f1b31jcduff unsigned fsid; /* device # */
d25372dc8e65a9ed019a88fdf659ca61313f1b31jcduff unsigned fileid; /* inode # */
d25372dc8e65a9ed019a88fdf659ca61313f1b31jcduff nfstime atime; /* time of last access */
d25372dc8e65a9ed019a88fdf659ca61313f1b31jcduff nfstime mtime; /* time of last modification */
d25372dc8e65a9ed019a88fdf659ca61313f1b31jcduff nfstime ctime; /* time of last change */
d25372dc8e65a9ed019a88fdf659ca61313f1b31jcduff};
d25372dc8e65a9ed019a88fdf659ca61313f1b31jcduff
d25372dc8e65a9ed019a88fdf659ca61313f1b31jcduff/*
d4b762b3d1ead61775b43f61914fb077dc2dbe6fJnRouvignac * File attributes which can be set
d25372dc8e65a9ed019a88fdf659ca61313f1b31jcduff */
d25372dc8e65a9ed019a88fdf659ca61313f1b31jcduffstruct sattr {
d25372dc8e65a9ed019a88fdf659ca61313f1b31jcduff unsigned mode; /* protection mode bits */
d25372dc8e65a9ed019a88fdf659ca61313f1b31jcduff unsigned uid; /* owner user id */
d25372dc8e65a9ed019a88fdf659ca61313f1b31jcduff unsigned gid; /* owner group id */
d25372dc8e65a9ed019a88fdf659ca61313f1b31jcduff unsigned size; /* file size in bytes */
d25372dc8e65a9ed019a88fdf659ca61313f1b31jcduff nfstime atime; /* time of last access */
d25372dc8e65a9ed019a88fdf659ca61313f1b31jcduff nfstime mtime; /* time of last modification */
d25372dc8e65a9ed019a88fdf659ca61313f1b31jcduff};
d25372dc8e65a9ed019a88fdf659ca61313f1b31jcduff
d25372dc8e65a9ed019a88fdf659ca61313f1b31jcduff
d25372dc8e65a9ed019a88fdf659ca61313f1b31jcdufftypedef string filename<NFS_MAXNAMLEN>;
d25372dc8e65a9ed019a88fdf659ca61313f1b31jcdufftypedef string nfspath<NFS_MAXPATHLEN>;
d25372dc8e65a9ed019a88fdf659ca61313f1b31jcduff
d25372dc8e65a9ed019a88fdf659ca61313f1b31jcduff/*
d25372dc8e65a9ed019a88fdf659ca61313f1b31jcduff * Reply status with file attributes
d25372dc8e65a9ed019a88fdf659ca61313f1b31jcduff */
d25372dc8e65a9ed019a88fdf659ca61313f1b31jcduffunion attrstat switch (nfsstat status) {
d25372dc8e65a9ed019a88fdf659ca61313f1b31jcduffcase NFS_OK:
5e521b4c6eb3c0b22eb6790f961392611caba9d6ludovicp fattr attributes;
d25372dc8e65a9ed019a88fdf659ca61313f1b31jcduffdefault:
d25372dc8e65a9ed019a88fdf659ca61313f1b31jcduff void;
d25372dc8e65a9ed019a88fdf659ca61313f1b31jcduff};
d25372dc8e65a9ed019a88fdf659ca61313f1b31jcduff
d25372dc8e65a9ed019a88fdf659ca61313f1b31jcduffstruct sattrargs {
d25372dc8e65a9ed019a88fdf659ca61313f1b31jcduff nfs_fh file;
d25372dc8e65a9ed019a88fdf659ca61313f1b31jcduff sattr attributes;
d25372dc8e65a9ed019a88fdf659ca61313f1b31jcduff};
d25372dc8e65a9ed019a88fdf659ca61313f1b31jcduff
d25372dc8e65a9ed019a88fdf659ca61313f1b31jcduff/*
d25372dc8e65a9ed019a88fdf659ca61313f1b31jcduff * Arguments for directory operations
d25372dc8e65a9ed019a88fdf659ca61313f1b31jcduff */
d25372dc8e65a9ed019a88fdf659ca61313f1b31jcduffstruct diropargs {
d25372dc8e65a9ed019a88fdf659ca61313f1b31jcduff nfs_fh dir; /* directory file handle */
d25372dc8e65a9ed019a88fdf659ca61313f1b31jcduff filename name; /* name (up to NFS_MAXNAMLEN bytes) */
d25372dc8e65a9ed019a88fdf659ca61313f1b31jcduff};
d25372dc8e65a9ed019a88fdf659ca61313f1b31jcduff
d25372dc8e65a9ed019a88fdf659ca61313f1b31jcduffstruct diropokres {
d25372dc8e65a9ed019a88fdf659ca61313f1b31jcduff nfs_fh file;
d25372dc8e65a9ed019a88fdf659ca61313f1b31jcduff fattr attributes;
d25372dc8e65a9ed019a88fdf659ca61313f1b31jcduff};
d25372dc8e65a9ed019a88fdf659ca61313f1b31jcduff
d25372dc8e65a9ed019a88fdf659ca61313f1b31jcduff/*
d25372dc8e65a9ed019a88fdf659ca61313f1b31jcduff * Results from directory operation
d25372dc8e65a9ed019a88fdf659ca61313f1b31jcduff */
d25372dc8e65a9ed019a88fdf659ca61313f1b31jcduffunion diropres switch (nfsstat status) {
d25372dc8e65a9ed019a88fdf659ca61313f1b31jcduffcase NFS_OK:
d25372dc8e65a9ed019a88fdf659ca61313f1b31jcduff diropokres diropres;
d25372dc8e65a9ed019a88fdf659ca61313f1b31jcduffdefault:
d25372dc8e65a9ed019a88fdf659ca61313f1b31jcduff void;
d25372dc8e65a9ed019a88fdf659ca61313f1b31jcduff};
d25372dc8e65a9ed019a88fdf659ca61313f1b31jcduff
d25372dc8e65a9ed019a88fdf659ca61313f1b31jcduffunion readlinkres switch (nfsstat status) {
d25372dc8e65a9ed019a88fdf659ca61313f1b31jcduffcase NFS_OK:
d25372dc8e65a9ed019a88fdf659ca61313f1b31jcduff nfspath data;
d25372dc8e65a9ed019a88fdf659ca61313f1b31jcduffdefault:
d25372dc8e65a9ed019a88fdf659ca61313f1b31jcduff void;
d25372dc8e65a9ed019a88fdf659ca61313f1b31jcduff};
d25372dc8e65a9ed019a88fdf659ca61313f1b31jcduff
d25372dc8e65a9ed019a88fdf659ca61313f1b31jcduff/*
d25372dc8e65a9ed019a88fdf659ca61313f1b31jcduff * Arguments to remote read
d25372dc8e65a9ed019a88fdf659ca61313f1b31jcduff */
d25372dc8e65a9ed019a88fdf659ca61313f1b31jcduffstruct readargs {
d25372dc8e65a9ed019a88fdf659ca61313f1b31jcduff nfs_fh file; /* handle for file */
d25372dc8e65a9ed019a88fdf659ca61313f1b31jcduff unsigned offset; /* byte offset in file */
d25372dc8e65a9ed019a88fdf659ca61313f1b31jcduff unsigned count; /* immediate read count */
d25372dc8e65a9ed019a88fdf659ca61313f1b31jcduff unsigned totalcount; /* total read count (from this offset)*/
d25372dc8e65a9ed019a88fdf659ca61313f1b31jcduff};
d25372dc8e65a9ed019a88fdf659ca61313f1b31jcduff
d25372dc8e65a9ed019a88fdf659ca61313f1b31jcduff/*
d25372dc8e65a9ed019a88fdf659ca61313f1b31jcduff * Status OK portion of remote read reply
d25372dc8e65a9ed019a88fdf659ca61313f1b31jcduff */
d25372dc8e65a9ed019a88fdf659ca61313f1b31jcduffstruct readokres {
d25372dc8e65a9ed019a88fdf659ca61313f1b31jcduff fattr attributes; /* attributes, need for pagin*/
d25372dc8e65a9ed019a88fdf659ca61313f1b31jcduff opaque data<NFS_MAXDATA>;
d25372dc8e65a9ed019a88fdf659ca61313f1b31jcduff};
d25372dc8e65a9ed019a88fdf659ca61313f1b31jcduff
d25372dc8e65a9ed019a88fdf659ca61313f1b31jcduffunion readres switch (nfsstat status) {
d25372dc8e65a9ed019a88fdf659ca61313f1b31jcduffcase NFS_OK:
d25372dc8e65a9ed019a88fdf659ca61313f1b31jcduff readokres reply;
d25372dc8e65a9ed019a88fdf659ca61313f1b31jcduffdefault:
d25372dc8e65a9ed019a88fdf659ca61313f1b31jcduff void;
d25372dc8e65a9ed019a88fdf659ca61313f1b31jcduff};
d25372dc8e65a9ed019a88fdf659ca61313f1b31jcduff
d25372dc8e65a9ed019a88fdf659ca61313f1b31jcduff/*
d25372dc8e65a9ed019a88fdf659ca61313f1b31jcduff * Arguments to remote write
d25372dc8e65a9ed019a88fdf659ca61313f1b31jcduff */
d25372dc8e65a9ed019a88fdf659ca61313f1b31jcduffstruct writeargs {
d25372dc8e65a9ed019a88fdf659ca61313f1b31jcduff nfs_fh file; /* handle for file */
d25372dc8e65a9ed019a88fdf659ca61313f1b31jcduff unsigned beginoffset; /* beginning byte offset in file */
d25372dc8e65a9ed019a88fdf659ca61313f1b31jcduff unsigned offset; /* current byte offset in file */
d25372dc8e65a9ed019a88fdf659ca61313f1b31jcduff unsigned totalcount; /* total write count (to this offset)*/
d25372dc8e65a9ed019a88fdf659ca61313f1b31jcduff opaque data<NFS_MAXDATA>;
d25372dc8e65a9ed019a88fdf659ca61313f1b31jcduff};
d25372dc8e65a9ed019a88fdf659ca61313f1b31jcduff
d25372dc8e65a9ed019a88fdf659ca61313f1b31jcduffstruct createargs {
d25372dc8e65a9ed019a88fdf659ca61313f1b31jcduff diropargs where;
d25372dc8e65a9ed019a88fdf659ca61313f1b31jcduff sattr attributes;
d25372dc8e65a9ed019a88fdf659ca61313f1b31jcduff};
d25372dc8e65a9ed019a88fdf659ca61313f1b31jcduff
d25372dc8e65a9ed019a88fdf659ca61313f1b31jcduffstruct renameargs {
d25372dc8e65a9ed019a88fdf659ca61313f1b31jcduff diropargs from;
d25372dc8e65a9ed019a88fdf659ca61313f1b31jcduff diropargs to;
d25372dc8e65a9ed019a88fdf659ca61313f1b31jcduff};
d25372dc8e65a9ed019a88fdf659ca61313f1b31jcduff
d25372dc8e65a9ed019a88fdf659ca61313f1b31jcduffstruct linkargs {
d25372dc8e65a9ed019a88fdf659ca61313f1b31jcduff nfs_fh from;
d25372dc8e65a9ed019a88fdf659ca61313f1b31jcduff diropargs to;
d25372dc8e65a9ed019a88fdf659ca61313f1b31jcduff};
d25372dc8e65a9ed019a88fdf659ca61313f1b31jcduff
d25372dc8e65a9ed019a88fdf659ca61313f1b31jcduffstruct symlinkargs {
d25372dc8e65a9ed019a88fdf659ca61313f1b31jcduff diropargs from;
d25372dc8e65a9ed019a88fdf659ca61313f1b31jcduff nfspath to;
d25372dc8e65a9ed019a88fdf659ca61313f1b31jcduff sattr attributes;
d25372dc8e65a9ed019a88fdf659ca61313f1b31jcduff};
d25372dc8e65a9ed019a88fdf659ca61313f1b31jcduff
d25372dc8e65a9ed019a88fdf659ca61313f1b31jcduff
d25372dc8e65a9ed019a88fdf659ca61313f1b31jcdufftypedef opaque nfscookie[NFS_COOKIESIZE];
d25372dc8e65a9ed019a88fdf659ca61313f1b31jcduff
d25372dc8e65a9ed019a88fdf659ca61313f1b31jcduff/*
d25372dc8e65a9ed019a88fdf659ca61313f1b31jcduff * Arguments to readdir
d4b762b3d1ead61775b43f61914fb077dc2dbe6fJnRouvignac */
d25372dc8e65a9ed019a88fdf659ca61313f1b31jcduffstruct readdirargs {
d25372dc8e65a9ed019a88fdf659ca61313f1b31jcduff nfs_fh dir; /* directory handle */
d25372dc8e65a9ed019a88fdf659ca61313f1b31jcduff nfscookie cookie;
d25372dc8e65a9ed019a88fdf659ca61313f1b31jcduff unsigned count; /* number of directory bytes to read */
d25372dc8e65a9ed019a88fdf659ca61313f1b31jcduff};
d25372dc8e65a9ed019a88fdf659ca61313f1b31jcduff
d25372dc8e65a9ed019a88fdf659ca61313f1b31jcduffstruct entry {
d25372dc8e65a9ed019a88fdf659ca61313f1b31jcduff unsigned fileid;
d25372dc8e65a9ed019a88fdf659ca61313f1b31jcduff filename name;
d25372dc8e65a9ed019a88fdf659ca61313f1b31jcduff nfscookie cookie;
d25372dc8e65a9ed019a88fdf659ca61313f1b31jcduff entry *nextentry;
d25372dc8e65a9ed019a88fdf659ca61313f1b31jcduff};
d25372dc8e65a9ed019a88fdf659ca61313f1b31jcduff
d25372dc8e65a9ed019a88fdf659ca61313f1b31jcduffstruct dirlist {
d25372dc8e65a9ed019a88fdf659ca61313f1b31jcduff entry *entries;
d25372dc8e65a9ed019a88fdf659ca61313f1b31jcduff bool eof;
d25372dc8e65a9ed019a88fdf659ca61313f1b31jcduff};
d25372dc8e65a9ed019a88fdf659ca61313f1b31jcduff
d25372dc8e65a9ed019a88fdf659ca61313f1b31jcduffunion readdirres switch (nfsstat status) {
d25372dc8e65a9ed019a88fdf659ca61313f1b31jcduffcase NFS_OK:
d25372dc8e65a9ed019a88fdf659ca61313f1b31jcduff dirlist reply;
d25372dc8e65a9ed019a88fdf659ca61313f1b31jcduffdefault:
d25372dc8e65a9ed019a88fdf659ca61313f1b31jcduff void;
d25372dc8e65a9ed019a88fdf659ca61313f1b31jcduff};
d25372dc8e65a9ed019a88fdf659ca61313f1b31jcduff
d25372dc8e65a9ed019a88fdf659ca61313f1b31jcduffstruct statfsokres {
d25372dc8e65a9ed019a88fdf659ca61313f1b31jcduff unsigned tsize; /* preferred transfer size in bytes */
d25372dc8e65a9ed019a88fdf659ca61313f1b31jcduff unsigned bsize; /* fundamental file system block size */
d25372dc8e65a9ed019a88fdf659ca61313f1b31jcduff unsigned blocks; /* total blocks in file system */
d25372dc8e65a9ed019a88fdf659ca61313f1b31jcduff unsigned bfree; /* free blocks in fs */
d25372dc8e65a9ed019a88fdf659ca61313f1b31jcduff unsigned bavail; /* free blocks avail to non-superuser */
d25372dc8e65a9ed019a88fdf659ca61313f1b31jcduff};
d25372dc8e65a9ed019a88fdf659ca61313f1b31jcduff
d25372dc8e65a9ed019a88fdf659ca61313f1b31jcduffunion statfsres switch (nfsstat status) {
d25372dc8e65a9ed019a88fdf659ca61313f1b31jcduffcase NFS_OK:
d25372dc8e65a9ed019a88fdf659ca61313f1b31jcduff statfsokres reply;
d25372dc8e65a9ed019a88fdf659ca61313f1b31jcduffdefault:
d25372dc8e65a9ed019a88fdf659ca61313f1b31jcduff void;
d25372dc8e65a9ed019a88fdf659ca61313f1b31jcduff};
d25372dc8e65a9ed019a88fdf659ca61313f1b31jcduff
d25372dc8e65a9ed019a88fdf659ca61313f1b31jcduff/*
d25372dc8e65a9ed019a88fdf659ca61313f1b31jcduff * Remote file service routines
d25372dc8e65a9ed019a88fdf659ca61313f1b31jcduff */
d25372dc8e65a9ed019a88fdf659ca61313f1b31jcduffprogram NFS_PROGRAM {
367fce55726cb32895b048f052eb323e9e8ef3d1jvergara version NFS_VERSION {
d25372dc8e65a9ed019a88fdf659ca61313f1b31jcduff void
d25372dc8e65a9ed019a88fdf659ca61313f1b31jcduff NFSPROC_NULL(void) = 0;
d25372dc8e65a9ed019a88fdf659ca61313f1b31jcduff
d25372dc8e65a9ed019a88fdf659ca61313f1b31jcduff attrstat
d25372dc8e65a9ed019a88fdf659ca61313f1b31jcduff NFSPROC_GETATTR(nfs_fh) = 1;
d25372dc8e65a9ed019a88fdf659ca61313f1b31jcduff
d25372dc8e65a9ed019a88fdf659ca61313f1b31jcduff attrstat
d25372dc8e65a9ed019a88fdf659ca61313f1b31jcduff NFSPROC_SETATTR(sattrargs) = 2;
d25372dc8e65a9ed019a88fdf659ca61313f1b31jcduff
d25372dc8e65a9ed019a88fdf659ca61313f1b31jcduff void
d25372dc8e65a9ed019a88fdf659ca61313f1b31jcduff NFSPROC_ROOT(void) = 3;
d25372dc8e65a9ed019a88fdf659ca61313f1b31jcduff
d4b762b3d1ead61775b43f61914fb077dc2dbe6fJnRouvignac diropres
d25372dc8e65a9ed019a88fdf659ca61313f1b31jcduff NFSPROC_LOOKUP(diropargs) = 4;
d25372dc8e65a9ed019a88fdf659ca61313f1b31jcduff
d25372dc8e65a9ed019a88fdf659ca61313f1b31jcduff readlinkres
d25372dc8e65a9ed019a88fdf659ca61313f1b31jcduff NFSPROC_READLINK(nfs_fh) = 5;
readres
NFSPROC_READ(readargs) = 6;
void
NFSPROC_WRITECACHE(void) = 7;
attrstat
NFSPROC_WRITE(writeargs) = 8;
diropres
NFSPROC_CREATE(createargs) = 9;
nfsstat
NFSPROC_REMOVE(diropargs) = 10;
nfsstat
NFSPROC_RENAME(renameargs) = 11;
nfsstat
NFSPROC_LINK(linkargs) = 12;
nfsstat
NFSPROC_SYMLINK(symlinkargs) = 13;
diropres
NFSPROC_MKDIR(createargs) = 14;
nfsstat
NFSPROC_RMDIR(diropargs) = 15;
readdirres
NFSPROC_READDIR(readdirargs) = 16;
statfsres
NFSPROC_STATFS(nfs_fh) = 17;
} = 2;
} = 100003;
/*
* Version 3 declarations and definitions.
*/
/*
* Sizes
*/
const NFS3_FHSIZE = 64;
const NFS3_COOKIEVERFSIZE = 8;
const NFS3_CREATEVERFSIZE = 8;
const NFS3_WRITEVERFSIZE = 8;
/*
* Basic data types
*/
typedef string filename3<>;
typedef string nfspath3<>;
typedef uint64 fileid3;
typedef uint64 cookie3;
typedef opaque cookieverf3[NFS3_COOKIEVERFSIZE];
typedef opaque createverf3[NFS3_CREATEVERFSIZE];
typedef opaque writeverf3[NFS3_WRITEVERFSIZE];
typedef uint32 uid3;
typedef uint32 gid3;
typedef uint64 size3;
typedef uint64 offset3;
typedef uint32 mode3;
typedef uint32 count3;
/*
* Error status
*/
enum nfsstat3 {
NFS3_OK = 0,
NFS3ERR_PERM = 1,
NFS3ERR_NOENT = 2,
NFS3ERR_IO = 5,
NFS3ERR_NXIO = 6,
NFS3ERR_ACCES = 13,
NFS3ERR_EXIST = 17,
NFS3ERR_XDEV = 18,
NFS3ERR_NODEV = 19,
NFS3ERR_NOTDIR = 20,
NFS3ERR_ISDIR = 21,
NFS3ERR_INVAL = 22,
NFS3ERR_FBIG = 27,
NFS3ERR_NOSPC = 28,
NFS3ERR_ROFS = 30,
NFS3ERR_MLINK = 31,
NFS3ERR_NAMETOOLONG = 63,
NFS3ERR_NOTEMPTY = 66,
NFS3ERR_DQUOT = 69,
NFS3ERR_STALE = 70,
NFS3ERR_REMOTE = 71,
NFS3ERR_BADHANDLE = 10001,
NFS3ERR_NOT_SYNC = 10002,
NFS3ERR_BAD_COOKIE = 10003,
NFS3ERR_NOTSUPP = 10004,
NFS3ERR_TOOSMALL = 10005,
NFS3ERR_SERVERFAULT = 10006,
NFS3ERR_BADTYPE = 10007,
NFS3ERR_JUKEBOX = 10008
};
/*
* File types
*/
enum ftype3 {
NF3REG = 1,
NF3DIR = 2,
NF3BLK = 3,
NF3CHR = 4,
NF3LNK = 5,
NF3SOCK = 6,
NF3FIFO = 7
};
struct specdata3 {
uint32 specdata1;
uint32 specdata2;
};
/*
* File access handle
*/
struct nfs_fh3 {
opaque data<NFS3_FHSIZE>;
};
/*
* Timeval
*/
struct nfstime3 {
uint32 seconds;
uint32 nseconds;
};
/*
* File attributes
*/
struct fattr3 {
ftype3 type;
mode3 mode;
uint32 nlink;
uid3 uid;
gid3 gid;
size3 size;
size3 used;
specdata3 rdev;
uint64 fsid;
fileid3 fileid;
nfstime3 atime;
nfstime3 mtime;
nfstime3 ctime;
};
/*
* File attributes
*/
union post_op_attr switch (bool attributes_follow) {
case TRUE:
fattr3 attributes;
case FALSE:
void;
};
struct wcc_attr {
size3 size;
nfstime3 mtime;
nfstime3 ctime;
};
union pre_op_attr switch (bool attributes_follow) {
case TRUE:
wcc_attr attributes;
case FALSE:
void;
};
struct wcc_data {
pre_op_attr before;
post_op_attr after;
};
union post_op_fh3 switch (bool handle_follows) {
case TRUE:
nfs_fh3 handle;
case FALSE:
void;
};
enum time_how {
DONT_CHANGE = 0,
SET_TO_SERVER_TIME = 1,
SET_TO_CLIENT_TIME = 2
};
union set_mode3 switch (bool set_it) {
case TRUE:
mode3 mode;
default:
void;
};
union set_uid3 switch (bool set_it) {
case TRUE:
uid3 uid;
default:
void;
};
union set_gid3 switch (bool set_it) {
case TRUE:
gid3 gid;
default:
void;
};
union set_size3 switch (bool set_it) {
case TRUE:
size3 size;
default:
void;
};
union set_atime switch (time_how set_it) {
case SET_TO_CLIENT_TIME:
nfstime3 atime;
default:
void;
};
union set_mtime switch (time_how set_it) {
case SET_TO_CLIENT_TIME:
nfstime3 mtime;
default:
void;
};
struct sattr3 {
set_mode3 mode;
set_uid3 uid;
set_gid3 gid;
set_size3 size;
set_atime atime;
set_mtime mtime;
};
struct diropargs3 {
nfs_fh3 dir;
filename3 name;
};
/*
* GETATTR: Get file attributes
*/
struct GETATTR3args {
nfs_fh3 object;
};
struct GETATTR3resok {
fattr3 obj_attributes;
};
union GETATTR3res switch (nfsstat3 status) {
case NFS3_OK:
GETATTR3resok resok;
default:
void;
};
/*
* SETATTR: Set file attributes
*/
union sattrguard3 switch (bool check) {
case TRUE:
nfstime3 obj_ctime;
case FALSE:
void;
};
struct SETATTR3args {
nfs_fh3 object;
sattr3 new_attributes;
sattrguard3 guard;
};
struct SETATTR3resok {
wcc_data obj_wcc;
};
struct SETATTR3resfail {
wcc_data obj_wcc;
};
union SETATTR3res switch (nfsstat3 status) {
case NFS3_OK:
SETATTR3resok resok;
default:
SETATTR3resfail resfail;
};
/*
* LOOKUP: Lookup filename
*/
struct LOOKUP3args {
diropargs3 what;
};
struct LOOKUP3resok {
nfs_fh3 object;
post_op_attr obj_attributes;
post_op_attr dir_attributes;
};
struct LOOKUP3resfail {
post_op_attr dir_attributes;
};
union LOOKUP3res switch (nfsstat3 status) {
case NFS3_OK:
LOOKUP3resok resok;
default:
LOOKUP3resfail resfail;
};
/*
* ACCESS: Check access permission
*/
const ACCESS3_READ = 0x0001;
const ACCESS3_LOOKUP = 0x0002;
const ACCESS3_MODIFY = 0x0004;
const ACCESS3_EXTEND = 0x0008;
const ACCESS3_DELETE = 0x0010;
const ACCESS3_EXECUTE = 0x0020;
struct ACCESS3args {
nfs_fh3 object;
uint32 access;
};
struct ACCESS3resok {
post_op_attr obj_attributes;
uint32 access;
};
struct ACCESS3resfail {
post_op_attr obj_attributes;
};
union ACCESS3res switch (nfsstat3 status) {
case NFS3_OK:
ACCESS3resok resok;
default:
ACCESS3resfail resfail;
};
/*
* READLINK: Read from symbolic link
*/
struct READLINK3args {
nfs_fh3 symlink;
};
struct READLINK3resok {
post_op_attr symlink_attributes;
nfspath3 data;
};
struct READLINK3resfail {
post_op_attr symlink_attributes;
};
union READLINK3res switch (nfsstat3 status) {
case NFS3_OK:
READLINK3resok resok;
default:
READLINK3resfail resfail;
};
/*
* READ: Read from file
*/
struct READ3args {
nfs_fh3 file;
offset3 offset;
count3 count;
};
struct READ3resok {
post_op_attr file_attributes;
count3 count;
bool eof;
opaque data<>;
};
struct READ3resfail {
post_op_attr file_attributes;
};
union READ3res switch (nfsstat3 status) {
case NFS3_OK:
READ3resok resok;
default:
READ3resfail resfail;
};
/*
* WRITE: Write to file
*/
enum stable_how {
UNSTABLE = 0,
DATA_SYNC = 1,
FILE_SYNC = 2
};
struct WRITE3args {
nfs_fh3 file;
offset3 offset;
count3 count;
stable_how stable;
opaque data<>;
};
struct WRITE3resok {
wcc_data file_wcc;
count3 count;
stable_how committed;
writeverf3 verf;
};
struct WRITE3resfail {
wcc_data file_wcc;
};
union WRITE3res switch (nfsstat3 status) {
case NFS3_OK:
WRITE3resok resok;
default:
WRITE3resfail resfail;
};
/*
* CREATE: Create a file
*/
enum createmode3 {
UNCHECKED = 0,
GUARDED = 1,
EXCLUSIVE = 2
};
union createhow3 switch (createmode3 mode) {
case UNCHECKED:
case GUARDED:
sattr3 obj_attributes;
case EXCLUSIVE:
createverf3 verf;
};
struct CREATE3args {
diropargs3 where;
createhow3 how;
};
struct CREATE3resok {
post_op_fh3 obj;
post_op_attr obj_attributes;
wcc_data dir_wcc;
};
struct CREATE3resfail {
wcc_data dir_wcc;
};
union CREATE3res switch (nfsstat3 status) {
case NFS3_OK:
CREATE3resok resok;
default:
CREATE3resfail resfail;
};
/*
* MKDIR: Create a directory
*/
struct MKDIR3args {
diropargs3 where;
sattr3 attributes;
};
struct MKDIR3resok {
post_op_fh3 obj;
post_op_attr obj_attributes;
wcc_data dir_wcc;
};
struct MKDIR3resfail {
wcc_data dir_wcc;
};
union MKDIR3res switch (nfsstat3 status) {
case NFS3_OK:
MKDIR3resok resok;
default:
MKDIR3resfail resfail;
};
/*
* SYMLINK: Create a symbolic link
*/
struct symlinkdata3 {
sattr3 symlink_attributes;
nfspath3 symlink_data;
};
struct SYMLINK3args {
diropargs3 where;
symlinkdata3 symlink;
};
struct SYMLINK3resok {
post_op_fh3 obj;
post_op_attr obj_attributes;
wcc_data dir_wcc;
};
struct SYMLINK3resfail {
wcc_data dir_wcc;
};
union SYMLINK3res switch (nfsstat3 status) {
case NFS3_OK:
SYMLINK3resok resok;
default:
SYMLINK3resfail resfail;
};
/*
* MKNOD: Create a special file
*/
struct devicedata3 {
sattr3 dev_attributes;
specdata3 spec;
};
union mknoddata3 switch (ftype3 type) {
case NF3CHR:
case NF3BLK:
devicedata3 device;
case NF3SOCK:
case NF3FIFO:
sattr3 pipe_attributes;
default:
void;
};
struct MKNOD3args {
diropargs3 where;
mknoddata3 what;
};
struct MKNOD3resok {
post_op_fh3 obj;
post_op_attr obj_attributes;
wcc_data dir_wcc;
};
struct MKNOD3resfail {
wcc_data dir_wcc;
};
union MKNOD3res switch (nfsstat3 status) {
case NFS3_OK:
MKNOD3resok resok;
default:
MKNOD3resfail resfail;
};
/*
* REMOVE: Remove a file
*/
struct REMOVE3args {
diropargs3 object;
};
struct REMOVE3resok {
wcc_data dir_wcc;
};
struct REMOVE3resfail {
wcc_data dir_wcc;
};
union REMOVE3res switch (nfsstat3 status) {
case NFS3_OK:
REMOVE3resok resok;
default:
REMOVE3resfail resfail;
};
/*
* RMDIR: Remove a directory
*/
struct RMDIR3args {
diropargs3 object;
};
struct RMDIR3resok {
wcc_data dir_wcc;
};
struct RMDIR3resfail {
wcc_data dir_wcc;
};
union RMDIR3res switch (nfsstat3 status) {
case NFS3_OK:
RMDIR3resok resok;
default:
RMDIR3resfail resfail;
};
/*
* RENAME: Rename a file or directory
*/
struct RENAME3args {
diropargs3 from;
diropargs3 to;
};
struct RENAME3resok {
wcc_data fromdir_wcc;
wcc_data todir_wcc;
};
struct RENAME3resfail {
wcc_data fromdir_wcc;
wcc_data todir_wcc;
};
union RENAME3res switch (nfsstat3 status) {
case NFS3_OK:
RENAME3resok resok;
default:
RENAME3resfail resfail;
};
/*
* LINK: Create link to an object
*/
struct LINK3args {
nfs_fh3 file;
diropargs3 link;
};
struct LINK3resok {
post_op_attr file_attributes;
wcc_data linkdir_wcc;
};
struct LINK3resfail {
post_op_attr file_attributes;
wcc_data linkdir_wcc;
};
union LINK3res switch (nfsstat3 status) {
case NFS3_OK:
LINK3resok resok;
default:
LINK3resfail resfail;
};
/*
* READDIR: Read from directory
*/
struct READDIR3args {
nfs_fh3 dir;
cookie3 cookie;
cookieverf3 cookieverf;
count3 count;
};
struct entry3 {
fileid3 fileid;
filename3 name;
cookie3 cookie;
entry3 *nextentry;
};
struct dirlist3 {
entry3 *entries;
bool eof;
};
struct READDIR3resok {
post_op_attr dir_attributes;
cookieverf3 cookieverf;
dirlist3 reply;
};
struct READDIR3resfail {
post_op_attr dir_attributes;
};
union READDIR3res switch (nfsstat3 status) {
case NFS3_OK:
READDIR3resok resok;
default:
READDIR3resfail resfail;
};
/*
* READDIRPLUS: Extended read from a directory
*/
struct READDIRPLUS3args {
nfs_fh3 dir;
cookie3 cookie;
cookieverf3 cookieverf;
count3 dircount;
count3 maxcount;
};
struct entryplus3 {
fileid3 fileid;
filename3 name;
cookie3 cookie;
post_op_attr name_attributes;
post_op_fh3 name_handle;
entryplus3 *nextentry;
};
struct dirlistplus3 {
entryplus3 *entries;
bool eof;
};
struct READDIRPLUS3resok {
post_op_attr dir_attributes;
cookieverf3 cookieverf;
dirlistplus3 reply;
};
struct READDIRPLUS3resfail {
post_op_attr dir_attributes;
};
union READDIRPLUS3res switch (nfsstat3 status) {
case NFS3_OK:
READDIRPLUS3resok resok;
default:
READDIRPLUS3resfail resfail;
};
/*
* FSSTAT: Get dynamic file system information
*/
struct FSSTAT3args {
nfs_fh3 fsroot;
};
struct FSSTAT3resok {
post_op_attr obj_attributes;
size3 tbytes;
size3 fbytes;
size3 abytes;
size3 tfiles;
size3 ffiles;
size3 afiles;
uint32 invarsec;
};
struct FSSTAT3resfail {
post_op_attr obj_attributes;
};
union FSSTAT3res switch (nfsstat3 status) {
case NFS3_OK:
FSSTAT3resok resok;
default:
FSSTAT3resfail resfail;
};
/*
* FSINFO: Get static file system information
*/
const FSF3_LINK = 0x0001;
const FSF3_SYMLINK = 0x0002;
const FSF3_HOMOGENEOUS = 0x0008;
const FSF3_CANSETTIME = 0x0010;
struct FSINFO3args {
nfs_fh3 fsroot;
};
struct FSINFO3resok {
post_op_attr obj_attributes;
uint32 rtmax;
uint32 rtpref;
uint32 rtmult;
uint32 wtmax;
uint32 wtpref;
uint32 wtmult;
uint32 dtpref;
size3 maxfilesize;
nfstime3 time_delta;
uint32 properties;
};
struct FSINFO3resfail {
post_op_attr obj_attributes;
};
union FSINFO3res switch (nfsstat3 status) {
case NFS3_OK:
FSINFO3resok resok;
default:
FSINFO3resfail resfail;
};
/*
* PATHCONF: Retrieve POSIX information
*/
struct PATHCONF3args {
nfs_fh3 object;
};
struct PATHCONF3resok {
post_op_attr obj_attributes;
uint32 linkmax;
uint32 name_max;
bool no_trunc;
bool chown_restricted;
bool case_insensitive;
bool case_preserving;
};
struct PATHCONF3resfail {
post_op_attr obj_attributes;
};
union PATHCONF3res switch (nfsstat3 status) {
case NFS3_OK:
PATHCONF3resok resok;
default:
PATHCONF3resfail resfail;
};
/*
* COMMIT: Commit cached data on a server to stable storage
*/
struct COMMIT3args {
nfs_fh3 file;
offset3 offset;
count3 count;
};
struct COMMIT3resok {
wcc_data file_wcc;
writeverf3 verf;
};
struct COMMIT3resfail {
wcc_data file_wcc;
};
union COMMIT3res switch (nfsstat3 status) {
case NFS3_OK:
COMMIT3resok resok;
default:
COMMIT3resfail resfail;
};
/*
* Remote file service routines
*/
program NFS3_PROGRAM {
version NFS_V3 {
void
NFSPROC3_NULL(void) = 0;
GETATTR3res
NFSPROC3_GETATTR(GETATTR3args) = 1;
SETATTR3res
NFSPROC3_SETATTR(SETATTR3args) = 2;
LOOKUP3res
NFSPROC3_LOOKUP(LOOKUP3args) = 3;
ACCESS3res
NFSPROC3_ACCESS(ACCESS3args) = 4;
READLINK3res
NFSPROC3_READLINK(READLINK3args) = 5;
READ3res
NFSPROC3_READ(READ3args) = 6;
WRITE3res
NFSPROC3_WRITE(WRITE3args) = 7;
CREATE3res
NFSPROC3_CREATE(CREATE3args) = 8;
MKDIR3res
NFSPROC3_MKDIR(MKDIR3args) = 9;
SYMLINK3res
NFSPROC3_SYMLINK(SYMLINK3args) = 10;
MKNOD3res
NFSPROC3_MKNOD(MKNOD3args) = 11;
REMOVE3res
NFSPROC3_REMOVE(REMOVE3args) = 12;
RMDIR3res
NFSPROC3_RMDIR(RMDIR3args) = 13;
RENAME3res
NFSPROC3_RENAME(RENAME3args) = 14;
LINK3res
NFSPROC3_LINK(LINK3args) = 15;
READDIR3res
NFSPROC3_READDIR(READDIR3args) = 16;
READDIRPLUS3res
NFSPROC3_READDIRPLUS(READDIRPLUS3args) = 17;
FSSTAT3res
NFSPROC3_FSSTAT(FSSTAT3args) = 18;
FSINFO3res
NFSPROC3_FSINFO(FSINFO3args) = 19;
PATHCONF3res
NFSPROC3_PATHCONF(PATHCONF3args) = 20;
COMMIT3res
NFSPROC3_COMMIT(COMMIT3args) = 21;
} = 3;
} = 100003;