0965080fbc
Drop the patch adding local rpcgen. Instead use the host-nfs-utils provided rpcgen. Update the patch "Automatically generate XDR header files from .x sources using" to use external rpcgen. Renumber the other patches. Cc: Thomas Petazzoni <thomas.petazzoni@bootlin.com> Signed-off-by: Baruch Siach <baruch@tkos.co.il> Signed-off-by: Peter Korsgaard <peter@korsgaard.com>
1654 lines
34 KiB
Diff
1654 lines
34 KiB
Diff
From baeca7ea594fe9faa1d40d35e76066c6002ca638 Mon Sep 17 00:00:00 2001
|
|
From: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
|
|
Date: Sat, 10 Nov 2012 17:45:03 +0100
|
|
Subject: [PATCH] Add more XDR files needed to build rpcbind on top of libtirpc
|
|
|
|
Signed-off-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
|
|
[yann.morin.1998@free.fr: update for 0.3.1]
|
|
Signed-off-by: "Yann E. MORIN" <yann.morin.1998@free.fr>
|
|
---
|
|
Makefile.am | 6 +
|
|
tirpc/rpcsvc/mount.x | 257 ++++++++++
|
|
tirpc/rpcsvc/nfs_prot.x | 1266 +++++++++++++++++++++++++++++++++++++++++++++++
|
|
tirpc/rpcsvc/rquota.x | 67 +++
|
|
4 files changed, 1596 insertions(+)
|
|
create mode 100644 tirpc/rpcsvc/mount.x
|
|
create mode 100644 tirpc/rpcsvc/nfs_prot.x
|
|
create mode 100644 tirpc/rpcsvc/rquota.x
|
|
|
|
diff --git a/Makefile.am b/Makefile.am
|
|
index aa5908e..4999066 100644
|
|
--- a/Makefile.am
|
|
+++ b/Makefile.am
|
|
@@ -2,6 +2,9 @@ SUBDIRS = src man doc rpcgen
|
|
ACLOCAL_AMFLAGS = -I m4
|
|
|
|
GENFILES = tirpc/rpcsvc/crypt.h \
|
|
+ tirpc/rpcsvc/mount.h \
|
|
+ tirpc/rpcsvc/nfs_prot.h \
|
|
+ tirpc/rpcsvc/rquota.h \
|
|
tirpc/rpc/rpcb_prot.h
|
|
|
|
noinst_HEADERS = tirpc/reentrant.h \
|
|
@@ -11,6 +14,9 @@ noinst_HEADERS = tirpc/reentrant.h \
|
|
|
|
nobase_include_HEADERS = tirpc/netconfig.h \
|
|
tirpc/rpcsvc/crypt.x \
|
|
+ tirpc/rpcsvc/mount.x \
|
|
+ tirpc/rpcsvc/nfs_prot.x \
|
|
+ tirpc/rpcsvc/rquota.x \
|
|
tirpc/rpc/xdr.h \
|
|
tirpc/rpc/types.h \
|
|
tirpc/rpc/svc_soc.h \
|
|
diff --git a/tirpc/rpcsvc/mount.x b/tirpc/rpcsvc/mount.x
|
|
new file mode 100644
|
|
index 0000000..f68a06f
|
|
--- /dev/null
|
|
+++ b/tirpc/rpcsvc/mount.x
|
|
@@ -0,0 +1,257 @@
|
|
+/*
|
|
+ * 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
|
|
+ * OR ANY PART THEREOF.
|
|
+ *
|
|
+ * 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.
|
|
+ *
|
|
+ * Sun Microsystems, Inc.
|
|
+ * 2550 Garcia Avenue
|
|
+ * Mountain View, California 94043
|
|
+ */
|
|
+
|
|
+/*
|
|
+ * Protocol description for the mount program
|
|
+ */
|
|
+
|
|
+#ifndef RPC_HDR
|
|
+%#ifndef lint
|
|
+%/*static char sccsid[] = "from: @(#)mount.x 1.2 87/09/18 Copyr 1987 Sun Micro";*/
|
|
+%/*static char sccsid[] = "from: @(#)mount.x 2.1 88/08/01 4.0 RPCSRC";*/
|
|
+%static const char rcsid[] =
|
|
+% "$FreeBSD: src/include/rpcsvc/mount.x,v 1.6 1999/08/27 23:45:08 peter Exp $";
|
|
+%#endif /* not lint */
|
|
+#endif
|
|
+
|
|
+const MNTPATHLEN = 1024; /* maximum bytes in a pathname argument */
|
|
+const MNTNAMLEN = 255; /* maximum bytes in a name argument */
|
|
+const FHSIZE = 32; /* size in bytes of a file handle */
|
|
+#ifdef WANT_NFS3
|
|
+const FHSIZE3 = 64; /* size in bytes of a file handle (v3) */
|
|
+#endif
|
|
+
|
|
+/*
|
|
+ * The fhandle is the file handle that the server passes to the client.
|
|
+ * All file operations are done using the file handles to refer to a file
|
|
+ * or a directory. The file handle can contain whatever information the
|
|
+ * server needs to distinguish an individual file.
|
|
+ */
|
|
+typedef opaque fhandle[FHSIZE];
|
|
+#ifdef WANT_NFS3
|
|
+typedef opaque fhandle3<FHSIZE3>;
|
|
+#endif
|
|
+
|
|
+/*
|
|
+ * If a status of zero is returned, the call completed successfully, and
|
|
+ * a file handle for the directory follows. A non-zero status indicates
|
|
+ * some sort of error. The status corresponds with UNIX error numbers.
|
|
+ */
|
|
+union fhstatus switch (unsigned fhs_status) {
|
|
+case 0:
|
|
+ fhandle fhs_fhandle;
|
|
+default:
|
|
+ void;
|
|
+};
|
|
+
|
|
+#ifdef WANT_NFS3
|
|
+/*
|
|
+ * Status codes returned by the version 3 mount call.
|
|
+ */
|
|
+enum mountstat3 {
|
|
+ MNT3_OK = 0, /* no error */
|
|
+ MNT3ERR_PERM = 1, /* Not owner */
|
|
+ MNT3ERR_NOENT = 2, /* No such file or directory */
|
|
+ MNT3ERR_IO = 5, /* I/O error */
|
|
+ MNT3ERR_ACCES = 13, /* Permission denied */
|
|
+ MNT3ERR_NOTDIR = 20, /* Not a directory */
|
|
+ MNT3ERR_INVAL = 22, /* Invalid argument */
|
|
+ MNT3ERR_NAMETOOLONG = 63, /* Filename too long */
|
|
+ MNT3ERR_NOTSUPP = 10004, /* Operation not supported */
|
|
+ MNT3ERR_SERVERFAULT = 10006 /* A failure on the server */
|
|
+};
|
|
+
|
|
+struct mountres3_ok {
|
|
+ fhandle3 fhandle;
|
|
+ int auth_flavors<>;
|
|
+};
|
|
+
|
|
+union mountres3 switch (mountstat3 fhs_status) {
|
|
+case 0:
|
|
+ mountres3_ok mountinfo;
|
|
+default:
|
|
+ void;
|
|
+};
|
|
+#endif
|
|
+
|
|
+/*
|
|
+ * The type dirpath is the pathname of a directory
|
|
+ */
|
|
+typedef string dirpath<MNTPATHLEN>;
|
|
+
|
|
+/*
|
|
+ * The type name is used for arbitrary names (hostnames, groupnames)
|
|
+ */
|
|
+typedef string name<MNTNAMLEN>;
|
|
+
|
|
+/*
|
|
+ * A list of who has what mounted
|
|
+ */
|
|
+typedef struct mountbody *mountlist;
|
|
+struct mountbody {
|
|
+ name ml_hostname;
|
|
+ dirpath ml_directory;
|
|
+ mountlist ml_next;
|
|
+};
|
|
+
|
|
+/*
|
|
+ * A list of netgroups
|
|
+ */
|
|
+typedef struct groupnode *groups;
|
|
+struct groupnode {
|
|
+ name gr_name;
|
|
+ groups gr_next;
|
|
+};
|
|
+
|
|
+/*
|
|
+ * A list of what is exported and to whom
|
|
+ */
|
|
+typedef struct exportnode *exports;
|
|
+struct exportnode {
|
|
+ dirpath ex_dir;
|
|
+ groups ex_groups;
|
|
+ exports ex_next;
|
|
+};
|
|
+
|
|
+program MOUNTPROG {
|
|
+ /*
|
|
+ * Version one of the mount protocol communicates with version two
|
|
+ * of the NFS protocol. Version three communicates with
|
|
+ * version three of the NFS protocol. The only connecting
|
|
+ * point is the fhandle structure, which is the same for both
|
|
+ * protocols.
|
|
+ */
|
|
+ version MOUNTVERS {
|
|
+ /*
|
|
+ * Does no work. It is made available in all RPC services
|
|
+ * to allow server reponse testing and timing
|
|
+ */
|
|
+ void
|
|
+ MOUNTPROC_NULL(void) = 0;
|
|
+
|
|
+ /*
|
|
+ * If fhs_status is 0, then fhs_fhandle contains the
|
|
+ * file handle for the directory. This file handle may
|
|
+ * be used in the NFS protocol. This procedure also adds
|
|
+ * a new entry to the mount list for this client mounting
|
|
+ * the directory.
|
|
+ * Unix authentication required.
|
|
+ */
|
|
+ fhstatus
|
|
+ MOUNTPROC_MNT(dirpath) = 1;
|
|
+
|
|
+ /*
|
|
+ * Returns the list of remotely mounted filesystems. The
|
|
+ * mountlist contains one entry for each hostname and
|
|
+ * directory pair.
|
|
+ */
|
|
+ mountlist
|
|
+ MOUNTPROC_DUMP(void) = 2;
|
|
+
|
|
+ /*
|
|
+ * Removes the mount list entry for the directory
|
|
+ * Unix authentication required.
|
|
+ */
|
|
+ void
|
|
+ MOUNTPROC_UMNT(dirpath) = 3;
|
|
+
|
|
+ /*
|
|
+ * Removes all of the mount list entries for this client
|
|
+ * Unix authentication required.
|
|
+ */
|
|
+ void
|
|
+ MOUNTPROC_UMNTALL(void) = 4;
|
|
+
|
|
+ /*
|
|
+ * Returns a list of all the exported filesystems, and which
|
|
+ * machines are allowed to import it.
|
|
+ */
|
|
+ exports
|
|
+ MOUNTPROC_EXPORT(void) = 5;
|
|
+
|
|
+ /*
|
|
+ * Identical to MOUNTPROC_EXPORT above
|
|
+ */
|
|
+ exports
|
|
+ MOUNTPROC_EXPORTALL(void) = 6;
|
|
+ } = 1;
|
|
+#ifdef WANT_NFS3
|
|
+ version MOUNTVERS3 {
|
|
+ /*
|
|
+ * Does no work. It is made available in all RPC services
|
|
+ * to allow server reponse testing and timing
|
|
+ */
|
|
+ void
|
|
+ MOUNTPROC_NULL(void) = 0;
|
|
+
|
|
+ /*
|
|
+ * If mountres3.fhs_status is MNT3_OK, then
|
|
+ * mountres3.mountinfo contains the file handle for
|
|
+ * the directory and a list of acceptable
|
|
+ * authentication flavors. This file handle may only
|
|
+ * be used in the NFS version 3 protocol. This
|
|
+ * procedure also results in the server adding a new
|
|
+ * entry to its mount list recording that this client
|
|
+ * has mounted the directory. AUTH_UNIX authentication
|
|
+ * or better is required.
|
|
+ */
|
|
+ mountres3
|
|
+ MOUNTPROC_MNT(dirpath) = 1;
|
|
+
|
|
+ /*
|
|
+ * Returns the list of remotely mounted filesystems. The
|
|
+ * mountlist contains one entry for each hostname and
|
|
+ * directory pair.
|
|
+ */
|
|
+ mountlist
|
|
+ MOUNTPROC_DUMP(void) = 2;
|
|
+
|
|
+ /*
|
|
+ * Removes the mount list entry for the directory
|
|
+ * Unix authentication required.
|
|
+ */
|
|
+ void
|
|
+ MOUNTPROC_UMNT(dirpath) = 3;
|
|
+
|
|
+ /*
|
|
+ * Removes all of the mount list entries for this client
|
|
+ * Unix authentication required.
|
|
+ */
|
|
+ void
|
|
+ MOUNTPROC_UMNTALL(void) = 4;
|
|
+
|
|
+ /*
|
|
+ * Returns a list of all the exported filesystems, and which
|
|
+ * machines are allowed to import it.
|
|
+ */
|
|
+ exports
|
|
+ MOUNTPROC_EXPORT(void) = 5;
|
|
+ } = 3;
|
|
+#endif
|
|
+} = 100005;
|
|
diff --git a/tirpc/rpcsvc/nfs_prot.x b/tirpc/rpcsvc/nfs_prot.x
|
|
new file mode 100644
|
|
index 0000000..01564f8
|
|
--- /dev/null
|
|
+++ b/tirpc/rpcsvc/nfs_prot.x
|
|
@@ -0,0 +1,1266 @@
|
|
+/*
|
|
+ * 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
|
|
+ * OR ANY PART THEREOF.
|
|
+ *
|
|
+ * 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.
|
|
+ *
|
|
+ * Sun Microsystems, Inc.
|
|
+ * 2550 Garcia Avenue
|
|
+ * Mountain View, California 94043
|
|
+ */
|
|
+
|
|
+#ifndef RPC_HDR
|
|
+%#ifndef lint
|
|
+%/*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 const char rcsid[] =
|
|
+% "$FreeBSD: src/include/rpcsvc/nfs_prot.x,v 1.7 1999/08/27 23:45:08 peter Exp $";
|
|
+%#endif /* not lint */
|
|
+#endif
|
|
+
|
|
+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; /* 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
|
|
+ */
|
|
+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;
|
|
+};
|
|
+
|
|
+#ifdef WANT_NFS3
|
|
+
|
|
+/*
|
|
+ * NFSv3 constants and types
|
|
+ */
|
|
+const NFS3_FHSIZE = 64; /* maximum size in bytes of a file handle */
|
|
+const NFS3_COOKIEVERFSIZE = 8; /* size of a cookie verifier for READDIR */
|
|
+const NFS3_CREATEVERFSIZE = 8; /* size of the verifier used for CREATE */
|
|
+const NFS3_WRITEVERFSIZE = 8; /* size of the verifier used for WRITE */
|
|
+
|
|
+typedef unsigned hyper uint64;
|
|
+typedef hyper int64;
|
|
+typedef unsigned long uint32;
|
|
+typedef long int32;
|
|
+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 (v3)
|
|
+ */
|
|
+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 (v3)
|
|
+ */
|
|
+enum ftype3 {
|
|
+ NF3REG = 1, /* regular file */
|
|
+ NF3DIR = 2, /* directory */
|
|
+ NF3BLK = 3, /* block special */
|
|
+ NF3CHR = 4, /* character special */
|
|
+ NF3LNK = 5, /* symbolic link */
|
|
+ NF3SOCK = 6, /* unix domain sockets */
|
|
+ NF3FIFO = 7 /* named pipe */
|
|
+};
|
|
+
|
|
+struct specdata3 {
|
|
+ uint32 specdata1;
|
|
+ uint32 specdata2;
|
|
+};
|
|
+
|
|
+/*
|
|
+ * File access handle (v3)
|
|
+ */
|
|
+struct nfs_fh3 {
|
|
+ opaque data<NFS3_FHSIZE>;
|
|
+};
|
|
+
|
|
+/*
|
|
+ * Timeval (v3)
|
|
+ */
|
|
+struct nfstime3 {
|
|
+ uint32 seconds;
|
|
+ uint32 nseconds;
|
|
+};
|
|
+
|
|
+
|
|
+/*
|
|
+ * File attributes (v3)
|
|
+ */
|
|
+struct fattr3 {
|
|
+ ftype3 type; /* file type */
|
|
+ mode3 mode; /* protection mode bits */
|
|
+ uint32 nlink; /* # hard links */
|
|
+ uid3 uid; /* owner user id */
|
|
+ gid3 gid; /* owner group id */
|
|
+ size3 size; /* file size in bytes */
|
|
+ size3 used; /* prefered block size */
|
|
+ specdata3 rdev; /* special device # */
|
|
+ uint64 fsid; /* device # */
|
|
+ fileid3 fileid; /* inode # */
|
|
+ nfstime3 atime; /* time of last access */
|
|
+ nfstime3 mtime; /* time of last modification */
|
|
+ nfstime3 ctime; /* time of last change */
|
|
+};
|
|
+
|
|
+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;
|
|
+};
|
|
+
|
|
+/*
|
|
+ * File attributes which can be set (v3)
|
|
+ */
|
|
+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;
|
|
+};
|
|
+
|
|
+/*
|
|
+ * Arguments for directory operations (v3)
|
|
+ */
|
|
+struct diropargs3 {
|
|
+ nfs_fh3 dir; /* directory file handle */
|
|
+ filename3 name; /* name (up to NFS_MAXNAMLEN bytes) */
|
|
+};
|
|
+
|
|
+/*
|
|
+ * Arguments to getattr (v3).
|
|
+ */
|
|
+struct GETATTR3args {
|
|
+ nfs_fh3 object;
|
|
+};
|
|
+
|
|
+struct GETATTR3resok {
|
|
+ fattr3 obj_attributes;
|
|
+};
|
|
+
|
|
+union GETATTR3res switch (nfsstat3 status) {
|
|
+case NFS3_OK:
|
|
+ GETATTR3resok resok;
|
|
+default:
|
|
+ void;
|
|
+};
|
|
+
|
|
+/*
|
|
+ * Arguments to setattr (v3).
|
|
+ */
|
|
+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;
|
|
+};
|
|
+
|
|
+/*
|
|
+ * Arguments to lookup (v3).
|
|
+ */
|
|
+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;
|
|
+};
|
|
+
|
|
+/*
|
|
+ * Arguments to access (v3).
|
|
+ */
|
|
+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;
|
|
+};
|
|
+
|
|
+/*
|
|
+ * Arguments to readlink (v3).
|
|
+ */
|
|
+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;
|
|
+};
|
|
+
|
|
+/*
|
|
+ * Arguments to read (v3).
|
|
+ */
|
|
+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;
|
|
+};
|
|
+
|
|
+/* XXX: solaris 2.6 uses ``nfsstat'' here */
|
|
+union READ3res switch (nfsstat3 status) {
|
|
+case NFS3_OK:
|
|
+ READ3resok resok;
|
|
+default:
|
|
+ READ3resfail resfail;
|
|
+};
|
|
+
|
|
+/*
|
|
+ * Arguments to write (v3).
|
|
+ */
|
|
+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;
|
|
+};
|
|
+
|
|
+/*
|
|
+ * Arguments to create (v3).
|
|
+ */
|
|
+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;
|
|
+};
|
|
+
|
|
+/*
|
|
+ * Arguments to mkdir (v3).
|
|
+ */
|
|
+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;
|
|
+};
|
|
+
|
|
+/*
|
|
+ * Arguments to symlink (v3).
|
|
+ */
|
|
+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;
|
|
+};
|
|
+
|
|
+/*
|
|
+ * Arguments to mknod (v3).
|
|
+ */
|
|
+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;
|
|
+};
|
|
+
|
|
+/*
|
|
+ * Arguments to remove (v3).
|
|
+ */
|
|
+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;
|
|
+};
|
|
+
|
|
+/*
|
|
+ * Arguments to rmdir (v3).
|
|
+ */
|
|
+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;
|
|
+};
|
|
+
|
|
+/*
|
|
+ * Arguments to rename (v3).
|
|
+ */
|
|
+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;
|
|
+};
|
|
+
|
|
+/*
|
|
+ * Arguments to link (v3).
|
|
+ */
|
|
+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;
|
|
+};
|
|
+
|
|
+/*
|
|
+ * Arguments to readdir (v3).
|
|
+ */
|
|
+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;
|
|
+};
|
|
+
|
|
+/*
|
|
+ * Arguments to readdirplus (v3).
|
|
+ */
|
|
+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;
|
|
+};
|
|
+
|
|
+/*
|
|
+ * Arguments to fsstat (v3).
|
|
+ */
|
|
+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;
|
|
+};
|
|
+
|
|
+/*
|
|
+ * Arguments to fsinfo (v3).
|
|
+ */
|
|
+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;
|
|
+};
|
|
+
|
|
+/*
|
|
+ * Arguments to pathconf (v3).
|
|
+ */
|
|
+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;
|
|
+};
|
|
+
|
|
+/*
|
|
+ * Arguments to commit (v3).
|
|
+ */
|
|
+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;
|
|
+};
|
|
+
|
|
+#endif /* WANT_NFS3 */
|
|
+
|
|
+/*
|
|
+ * 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;
|
|
+#ifdef WANT_NFS3
|
|
+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;
|
|
+#endif
|
|
+
|
|
diff --git a/tirpc/rpcsvc/rquota.x b/tirpc/rpcsvc/rquota.x
|
|
new file mode 100644
|
|
index 0000000..72864d1
|
|
--- /dev/null
|
|
+++ b/tirpc/rpcsvc/rquota.x
|
|
@@ -0,0 +1,67 @@
|
|
+/*
|
|
+ * Remote quota protocol
|
|
+ * Requires unix authentication
|
|
+ */
|
|
+
|
|
+#ifndef RPC_HDR
|
|
+%#ifndef lint
|
|
+%/*static char sccsid[] = "from: @(#)rquota.x 1.2 87/09/20 Copyr 1987 Sun Micro";*/
|
|
+%/*static char sccsid[] = "from: @(#)rquota.x 2.1 88/08/01 4.0 RPCSRC";*/
|
|
+%static const char rcsid[] =
|
|
+% "$FreeBSD: src/include/rpcsvc/rquota.x,v 1.6 1999/08/27 23:45:10 peter Exp $";
|
|
+%#endif /* not lint */
|
|
+#endif
|
|
+
|
|
+const RQ_PATHLEN = 1024;
|
|
+
|
|
+struct getquota_args {
|
|
+ string gqa_pathp<RQ_PATHLEN>; /* path to filesystem of interest */
|
|
+ int gqa_uid; /* inquire about quota for uid */
|
|
+};
|
|
+
|
|
+/*
|
|
+ * remote quota structure
|
|
+ */
|
|
+struct rquota {
|
|
+ int rq_bsize; /* block size for block counts */
|
|
+ bool rq_active; /* indicates whether quota is active */
|
|
+ unsigned int rq_bhardlimit; /* absolute limit on disk blks alloc */
|
|
+ unsigned int rq_bsoftlimit; /* preferred limit on disk blks */
|
|
+ unsigned int rq_curblocks; /* current block count */
|
|
+ unsigned int rq_fhardlimit; /* absolute limit on allocated files */
|
|
+ unsigned int rq_fsoftlimit; /* preferred file limit */
|
|
+ unsigned int rq_curfiles; /* current # allocated files */
|
|
+ unsigned int rq_btimeleft; /* time left for excessive disk use */
|
|
+ unsigned int rq_ftimeleft; /* time left for excessive files */
|
|
+};
|
|
+
|
|
+enum gqr_status {
|
|
+ Q_OK = 1, /* quota returned */
|
|
+ Q_NOQUOTA = 2, /* noquota for uid */
|
|
+ Q_EPERM = 3 /* no permission to access quota */
|
|
+};
|
|
+
|
|
+union getquota_rslt switch (gqr_status status) {
|
|
+case Q_OK:
|
|
+ rquota gqr_rquota; /* valid if status == Q_OK */
|
|
+case Q_NOQUOTA:
|
|
+ void;
|
|
+case Q_EPERM:
|
|
+ void;
|
|
+};
|
|
+
|
|
+program RQUOTAPROG {
|
|
+ version RQUOTAVERS {
|
|
+ /*
|
|
+ * Get all quotas
|
|
+ */
|
|
+ getquota_rslt
|
|
+ RQUOTAPROC_GETQUOTA(getquota_args) = 1;
|
|
+
|
|
+ /*
|
|
+ * Get active quotas only
|
|
+ */
|
|
+ getquota_rslt
|
|
+ RQUOTAPROC_GETACTIVEQUOTA(getquota_args) = 2;
|
|
+ } = 1;
|
|
+} = 100011;
|
|
--
|
|
1.9.1
|
|
|