* Sun RPC is a product of Sun Microsystems, Inc. and is provided for
* unrestricted use provided that this legend is included on all tape
* media and as a part of the software program in whole or part. Users
* may copy or modify Sun RPC without charge, but are not authorized
* to license or distribute it to anyone else except as part of a product or
* program developed by the user.
* SUN RPC IS PROVIDED AS IS WITH NO WARRANTIES OF ANY KIND INCLUDING THE
* WARRANTIES OF DESIGN, MERCHANTIBILITY AND FITNESS FOR A PARTICULAR
* PURPOSE, OR ARISING FROM A COURSE OF DEALING, USAGE OR TRADE PRACTICE.
* Sun RPC is provided with no support and without any obligation on the
* part of Sun Microsystems, Inc. to assist in its use, correction,
* modification or enhancement.
* SUN MICROSYSTEMS, INC. SHALL HAVE NO LIABILITY WITH RESPECT TO THE
* INFRINGEMENT OF COPYRIGHTS, TRADE SECRETS OR ANY PATENTS BY SUN RPC
* In no event will Sun Microsystems, Inc. be liable for any lost revenue
* or profits or other special, indirect and consequential damages, even if
* Sun has been advised of the possibility of such damages.
* Mountain View, California 94043
%/*static char sccsid[] = "from: @(#)nfs_prot.x 1.2 87/10/12 Copyr 1987 Sun Micro";*/
%/*static char sccsid[] = "from: @(#)nfs_prot.x 2.1 88/08/01 4.0 RPCSRC";*/
%static char rcsid[] = "$Id: nfs_prot.x,v 1.4 1993/08/03 21:53:20 mycroft Exp $";
const NFS_MAXDATA = 8192;
const NFS_MAXPATHLEN = 1024;
const NFS_MAXNAMLEN = 255;
const NFS_COOKIESIZE = 4;
const NFS_FIFO_DEV = -1; /* size kludge for named pipes */
const NFSMODE_FMT = 0170000; /* type of file */
const NFSMODE_DIR = 0040000; /* directory */
const NFSMODE_CHR = 0020000; /* character special */
const NFSMODE_BLK = 0060000; /* block special */
const NFSMODE_REG = 0100000; /* regular */
const NFSMODE_LNK = 0120000; /* symbolic link */
const NFSMODE_SOCK = 0140000; /* socket */
const NFSMODE_FIFO = 0010000; /* fifo */
NFS_OK= 0, /* no error */
NFSERR_PERM=1, /* Not owner */
NFSERR_NOENT=2, /* No such file or directory */
NFSERR_IO=5, /* I/O error */
NFSERR_NXIO=6, /* No such device or address */
NFSERR_ACCES=13, /* Permission denied */
NFSERR_EXIST=17, /* File exists */
NFSERR_NODEV=19, /* No such device */
NFSERR_NOTDIR=20, /* Not a directory*/
NFSERR_ISDIR=21, /* Is a directory */
NFSERR_FBIG=27, /* File too large */
NFSERR_NOSPC=28, /* No space left on device */
NFSERR_ROFS=30, /* Read-only file system */
NFSERR_NAMETOOLONG=63, /* File name too long */
NFSERR_NOTEMPTY=66, /* Directory not empty */
NFSERR_DQUOT=69, /* Disc quota exceeded */
NFSERR_STALE=70, /* Stale NFS file handle */
NFSERR_WFLUSH=99 /* write cache flushed */
NFNON = 0, /* non-file */
NFREG = 1, /* regular file */
NFDIR = 2, /* directory */
NFBLK = 3, /* block special */
NFCHR = 4, /* character special */
NFLNK = 5, /* symbolic link */
NFSOCK = 6, /* unix domain sockets */
NFFIFO = 8 /* named pipe */
ftype type; /* file type */
unsigned mode; /* protection mode bits */
unsigned nlink; /* # hard links */
unsigned uid; /* owner user id */
unsigned gid; /* owner group id */
unsigned size; /* file size in bytes */
unsigned blocksize; /* prefered block size */
unsigned rdev; /* special device # */
unsigned blocks; /* Kb of disk used by file */
unsigned fsid; /* device # */
unsigned fileid; /* inode # */
nfstime atime; /* time of last access */
nfstime mtime; /* time of last modification */
nfstime ctime; /* time of last change */
* File attributes which can be set
unsigned mode; /* protection mode bits */
unsigned uid; /* owner user id */
unsigned gid; /* owner group id */
unsigned size; /* file size in bytes */
nfstime atime; /* time of last access */
nfstime mtime; /* time of last modification */
typedef string filename<NFS_MAXNAMLEN>;
typedef string nfspath<NFS_MAXPATHLEN>;
* Reply status with file attributes
union attrstat switch (nfsstat status) {
* Arguments for directory operations
nfs_fh dir; /* directory file handle */
filename name; /* name (up to NFS_MAXNAMLEN bytes) */
* Results from directory operation
union diropres switch (nfsstat status) {
union readlinkres switch (nfsstat status) {
* Arguments to remote read
nfs_fh file; /* handle for file */
unsigned offset; /* byte offset in file */
unsigned count; /* immediate read count */
unsigned totalcount; /* total read count (from this offset)*/
* Status OK portion of remote read reply
fattr attributes; /* attributes, need for pagin*/
opaque data<NFS_MAXDATA>;
union readres switch (nfsstat status) {
* Arguments to remote write
nfs_fh file; /* handle for file */
unsigned beginoffset; /* beginning byte offset in file */
unsigned offset; /* current byte offset in file */
unsigned totalcount; /* total write count (to this offset)*/
opaque data<NFS_MAXDATA>;
typedef opaque nfscookie[NFS_COOKIESIZE];
nfs_fh dir; /* directory handle */
unsigned count; /* number of directory bytes to read */
union readdirres switch (nfsstat status) {
unsigned tsize; /* preferred transfer size in bytes */
unsigned bsize; /* fundamental file system block size */
unsigned blocks; /* total blocks in file system */
unsigned bfree; /* free blocks in fs */
unsigned bavail; /* free blocks avail to non-superuser */
union statfsres switch (nfsstat status) {
* Remote file service routines
NFSPROC_GETATTR(nfs_fh) = 1;
NFSPROC_SETATTR(sattrargs) = 2;
NFSPROC_LOOKUP(diropargs) = 4;
NFSPROC_READLINK(nfs_fh) = 5;
NFSPROC_READ(readargs) = 6;
NFSPROC_WRITECACHE(void) = 7;
NFSPROC_WRITE(writeargs) = 8;
NFSPROC_CREATE(createargs) = 9;
NFSPROC_REMOVE(diropargs) = 10;
NFSPROC_RENAME(renameargs) = 11;
NFSPROC_LINK(linkargs) = 12;
NFSPROC_SYMLINK(symlinkargs) = 13;
NFSPROC_MKDIR(createargs) = 14;
NFSPROC_RMDIR(diropargs) = 15;
NFSPROC_READDIR(readdirargs) = 16;
NFSPROC_STATFS(nfs_fh) = 17;