The cirros image was rebuilt against the 3.13.0-83 kernel, drivers e1000e, igbvf...
[packages/trusty/cirros-testvm.git] / cirros-testvm / src-cirros / buildroot-2015.05 / package / libtirpc / 0006-Add-more-XDR-files-needed-to-build-rpcbind-on-top-of.patch
diff --git a/cirros-testvm/src-cirros/buildroot-2015.05/package/libtirpc/0006-Add-more-XDR-files-needed-to-build-rpcbind-on-top-of.patch b/cirros-testvm/src-cirros/buildroot-2015.05/package/libtirpc/0006-Add-more-XDR-files-needed-to-build-rpcbind-on-top-of.patch
new file mode 100644 (file)
index 0000000..638918b
--- /dev/null
@@ -0,0 +1,1651 @@
+From 008a9c8ac3a84ffcc46a0eedb5b13862b279190c 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>
+---
+ 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 4e4dc32..b7ae979 100644
+--- a/Makefile.am
++++ b/Makefile.am
+@@ -3,6 +3,9 @@ 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 \
+@@ -12,6 +15,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;
+-- 
+2.0.0
+