123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352 |
- /* @(#)nfs_prot.x 2.1 88/08/01 4.0 RPCSRC */
- /*
- * nfs_prot.x 1.2 87/10/12
- * Copyright (c) 2010, Oracle America, Inc.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met:
- *
- * * Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * * Redistributions in binary form must reproduce the above
- * copyright notice, this list of conditions and the following
- * disclaimer in the documentation and/or other materials
- * provided with the distribution.
- * * Neither the name of the "Oracle America, Inc." nor the names of its
- * contributors may be used to endorse or promote products derived
- * from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
- * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
- * COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
- * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
- * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
- * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
- * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
- const NFS_PORT = 2049;
- const NFS_MAXDATA = 8192;
- const NFS_MAXPATHLEN = 1024;
- const NFS_MAXNAMLEN = 255;
- const NFS_FHSIZE = 32;
- const NFS_COOKIESIZE = 4;
- const NFS_FIFO_DEV = -1; /* size kludge for named pipes */
- /*
- * File types
- */
- 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 */
- /*
- * Error status
- */
- enum nfsstat {
- 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 */
- };
- /*
- * File types
- */
- enum ftype {
- 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 */
- NFBAD = 7, /* unused */
- NFFIFO = 8 /* named pipe */
- };
- /*
- * File access handle
- */
- struct nfs_fh {
- opaque data[NFS_FHSIZE];
- };
- /*
- * Timeval
- */
- struct nfstime {
- unsigned seconds;
- unsigned useconds;
- };
- /*
- * File attributes
- */
- struct fattr {
- 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; /* preferred 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
- */
- struct sattr {
- 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) {
- case NFS_OK:
- fattr attributes;
- default:
- void;
- };
- struct sattrargs {
- nfs_fh file;
- sattr attributes;
- };
- /*
- * Arguments for directory operations
- */
- struct diropargs {
- nfs_fh dir; /* directory file handle */
- filename name; /* name (up to NFS_MAXNAMLEN bytes) */
- };
- struct diropokres {
- nfs_fh file;
- fattr attributes;
- };
- /*
- * Results from directory operation
- */
- union diropres switch (nfsstat status) {
- case NFS_OK:
- diropokres diropres;
- default:
- void;
- };
- union readlinkres switch (nfsstat status) {
- case NFS_OK:
- nfspath data;
- default:
- void;
- };
- /*
- * Arguments to remote read
- */
- struct readargs {
- 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
- */
- struct readokres {
- fattr attributes; /* attributes, need for pagin*/
- opaque data<NFS_MAXDATA>;
- };
- union readres switch (nfsstat status) {
- case NFS_OK:
- readokres reply;
- default:
- void;
- };
- /*
- * Arguments to remote write
- */
- struct writeargs {
- 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>;
- };
- struct createargs {
- diropargs where;
- sattr attributes;
- };
- struct renameargs {
- diropargs from;
- diropargs to;
- };
- struct linkargs {
- nfs_fh from;
- diropargs to;
- };
- struct symlinkargs {
- diropargs from;
- nfspath to;
- sattr attributes;
- };
- typedef opaque nfscookie[NFS_COOKIESIZE];
- /*
- * Arguments to readdir
- */
- struct readdirargs {
- nfs_fh dir; /* directory handle */
- nfscookie cookie;
- unsigned count; /* number of directory bytes to read */
- };
- struct entry {
- unsigned fileid;
- filename name;
- nfscookie cookie;
- entry *nextentry;
- };
- struct dirlist {
- entry *entries;
- bool eof;
- };
- union readdirres switch (nfsstat status) {
- case NFS_OK:
- dirlist reply;
- default:
- void;
- };
- struct statfsokres {
- 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) {
- case NFS_OK:
- statfsokres reply;
- default:
- void;
- };
- /*
- * Remote file service routines
- */
- program NFS_PROGRAM {
- version NFS_VERSION {
- void
- NFSPROC_NULL(void) = 0;
- attrstat
- NFSPROC_GETATTR(nfs_fh) = 1;
- attrstat
- NFSPROC_SETATTR(sattrargs) = 2;
- void
- NFSPROC_ROOT(void) = 3;
- diropres
- NFSPROC_LOOKUP(diropargs) = 4;
- readlinkres
- 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;
|