python-cryptography: bump to version 1.7.2
[buildroot-gz.git] / package / libtirpc / 0005-Add-more-XDR-files-needed-to-build-rpcbind-on-top-of.patch
blob7f53ffca16b2f4b4962d14e488f4245b52be8523
1 From baeca7ea594fe9faa1d40d35e76066c6002ca638 Mon Sep 17 00:00:00 2001
2 From: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
3 Date: Sat, 10 Nov 2012 17:45:03 +0100
4 Subject: [PATCH] Add more XDR files needed to build rpcbind on top of libtirpc
6 Signed-off-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
7 [yann.morin.1998@free.fr: update for 0.3.1]
8 Signed-off-by: "Yann E. MORIN" <yann.morin.1998@free.fr>
9 ---
10 Makefile.am | 6 +
11 tirpc/rpcsvc/mount.x | 257 ++++++++++
12 tirpc/rpcsvc/nfs_prot.x | 1266 +++++++++++++++++++++++++++++++++++++++++++++++
13 tirpc/rpcsvc/rquota.x | 67 +++
14 4 files changed, 1596 insertions(+)
15 create mode 100644 tirpc/rpcsvc/mount.x
16 create mode 100644 tirpc/rpcsvc/nfs_prot.x
17 create mode 100644 tirpc/rpcsvc/rquota.x
19 diff --git a/Makefile.am b/Makefile.am
20 index aa5908e..4999066 100644
21 --- a/Makefile.am
22 +++ b/Makefile.am
23 @@ -2,6 +2,9 @@ SUBDIRS = src man doc rpcgen
24 ACLOCAL_AMFLAGS = -I m4
26 GENFILES = tirpc/rpcsvc/crypt.h \
27 + tirpc/rpcsvc/mount.h \
28 + tirpc/rpcsvc/nfs_prot.h \
29 + tirpc/rpcsvc/rquota.h \
30 tirpc/rpc/rpcb_prot.h
32 noinst_HEADERS = tirpc/reentrant.h \
33 @@ -11,6 +14,9 @@ noinst_HEADERS = tirpc/reentrant.h \
35 nobase_include_HEADERS = tirpc/netconfig.h \
36 tirpc/rpcsvc/crypt.x \
37 + tirpc/rpcsvc/mount.x \
38 + tirpc/rpcsvc/nfs_prot.x \
39 + tirpc/rpcsvc/rquota.x \
40 tirpc/rpc/xdr.h \
41 tirpc/rpc/types.h \
42 tirpc/rpc/svc_soc.h \
43 diff --git a/tirpc/rpcsvc/mount.x b/tirpc/rpcsvc/mount.x
44 new file mode 100644
45 index 0000000..f68a06f
46 --- /dev/null
47 +++ b/tirpc/rpcsvc/mount.x
48 @@ -0,0 +1,257 @@
49 +/*
50 + * Sun RPC is a product of Sun Microsystems, Inc. and is provided for
51 + * unrestricted use provided that this legend is included on all tape
52 + * media and as a part of the software program in whole or part. Users
53 + * may copy or modify Sun RPC without charge, but are not authorized
54 + * to license or distribute it to anyone else except as part of a product or
55 + * program developed by the user.
56 + *
57 + * SUN RPC IS PROVIDED AS IS WITH NO WARRANTIES OF ANY KIND INCLUDING THE
58 + * WARRANTIES OF DESIGN, MERCHANTIBILITY AND FITNESS FOR A PARTICULAR
59 + * PURPOSE, OR ARISING FROM A COURSE OF DEALING, USAGE OR TRADE PRACTICE.
60 + *
61 + * Sun RPC is provided with no support and without any obligation on the
62 + * part of Sun Microsystems, Inc. to assist in its use, correction,
63 + * modification or enhancement.
64 + *
65 + * SUN MICROSYSTEMS, INC. SHALL HAVE NO LIABILITY WITH RESPECT TO THE
66 + * INFRINGEMENT OF COPYRIGHTS, TRADE SECRETS OR ANY PATENTS BY SUN RPC
67 + * OR ANY PART THEREOF.
68 + *
69 + * In no event will Sun Microsystems, Inc. be liable for any lost revenue
70 + * or profits or other special, indirect and consequential damages, even if
71 + * Sun has been advised of the possibility of such damages.
72 + *
73 + * Sun Microsystems, Inc.
74 + * 2550 Garcia Avenue
75 + * Mountain View, California 94043
76 + */
78 +/*
79 + * Protocol description for the mount program
80 + */
82 +#ifndef RPC_HDR
83 +%#ifndef lint
84 +%/*static char sccsid[] = "from: @(#)mount.x 1.2 87/09/18 Copyr 1987 Sun Micro";*/
85 +%/*static char sccsid[] = "from: @(#)mount.x 2.1 88/08/01 4.0 RPCSRC";*/
86 +%static const char rcsid[] =
87 +% "$FreeBSD: src/include/rpcsvc/mount.x,v 1.6 1999/08/27 23:45:08 peter Exp $";
88 +%#endif /* not lint */
89 +#endif
91 +const MNTPATHLEN = 1024; /* maximum bytes in a pathname argument */
92 +const MNTNAMLEN = 255; /* maximum bytes in a name argument */
93 +const FHSIZE = 32; /* size in bytes of a file handle */
94 +#ifdef WANT_NFS3
95 +const FHSIZE3 = 64; /* size in bytes of a file handle (v3) */
96 +#endif
98 +/*
99 + * The fhandle is the file handle that the server passes to the client.
100 + * All file operations are done using the file handles to refer to a file
101 + * or a directory. The file handle can contain whatever information the
102 + * server needs to distinguish an individual file.
103 + */
104 +typedef opaque fhandle[FHSIZE];
105 +#ifdef WANT_NFS3
106 +typedef opaque fhandle3<FHSIZE3>;
107 +#endif
110 + * If a status of zero is returned, the call completed successfully, and
111 + * a file handle for the directory follows. A non-zero status indicates
112 + * some sort of error. The status corresponds with UNIX error numbers.
113 + */
114 +union fhstatus switch (unsigned fhs_status) {
115 +case 0:
116 + fhandle fhs_fhandle;
117 +default:
118 + void;
121 +#ifdef WANT_NFS3
123 + * Status codes returned by the version 3 mount call.
124 + */
125 +enum mountstat3 {
126 + MNT3_OK = 0, /* no error */
127 + MNT3ERR_PERM = 1, /* Not owner */
128 + MNT3ERR_NOENT = 2, /* No such file or directory */
129 + MNT3ERR_IO = 5, /* I/O error */
130 + MNT3ERR_ACCES = 13, /* Permission denied */
131 + MNT3ERR_NOTDIR = 20, /* Not a directory */
132 + MNT3ERR_INVAL = 22, /* Invalid argument */
133 + MNT3ERR_NAMETOOLONG = 63, /* Filename too long */
134 + MNT3ERR_NOTSUPP = 10004, /* Operation not supported */
135 + MNT3ERR_SERVERFAULT = 10006 /* A failure on the server */
138 +struct mountres3_ok {
139 + fhandle3 fhandle;
140 + int auth_flavors<>;
143 +union mountres3 switch (mountstat3 fhs_status) {
144 +case 0:
145 + mountres3_ok mountinfo;
146 +default:
147 + void;
149 +#endif
152 + * The type dirpath is the pathname of a directory
153 + */
154 +typedef string dirpath<MNTPATHLEN>;
157 + * The type name is used for arbitrary names (hostnames, groupnames)
158 + */
159 +typedef string name<MNTNAMLEN>;
162 + * A list of who has what mounted
163 + */
164 +typedef struct mountbody *mountlist;
165 +struct mountbody {
166 + name ml_hostname;
167 + dirpath ml_directory;
168 + mountlist ml_next;
172 + * A list of netgroups
173 + */
174 +typedef struct groupnode *groups;
175 +struct groupnode {
176 + name gr_name;
177 + groups gr_next;
181 + * A list of what is exported and to whom
182 + */
183 +typedef struct exportnode *exports;
184 +struct exportnode {
185 + dirpath ex_dir;
186 + groups ex_groups;
187 + exports ex_next;
190 +program MOUNTPROG {
191 + /*
192 + * Version one of the mount protocol communicates with version two
193 + * of the NFS protocol. Version three communicates with
194 + * version three of the NFS protocol. The only connecting
195 + * point is the fhandle structure, which is the same for both
196 + * protocols.
197 + */
198 + version MOUNTVERS {
199 + /*
200 + * Does no work. It is made available in all RPC services
201 + * to allow server reponse testing and timing
202 + */
203 + void
204 + MOUNTPROC_NULL(void) = 0;
206 + /*
207 + * If fhs_status is 0, then fhs_fhandle contains the
208 + * file handle for the directory. This file handle may
209 + * be used in the NFS protocol. This procedure also adds
210 + * a new entry to the mount list for this client mounting
211 + * the directory.
212 + * Unix authentication required.
213 + */
214 + fhstatus
215 + MOUNTPROC_MNT(dirpath) = 1;
217 + /*
218 + * Returns the list of remotely mounted filesystems. The
219 + * mountlist contains one entry for each hostname and
220 + * directory pair.
221 + */
222 + mountlist
223 + MOUNTPROC_DUMP(void) = 2;
225 + /*
226 + * Removes the mount list entry for the directory
227 + * Unix authentication required.
228 + */
229 + void
230 + MOUNTPROC_UMNT(dirpath) = 3;
232 + /*
233 + * Removes all of the mount list entries for this client
234 + * Unix authentication required.
235 + */
236 + void
237 + MOUNTPROC_UMNTALL(void) = 4;
239 + /*
240 + * Returns a list of all the exported filesystems, and which
241 + * machines are allowed to import it.
242 + */
243 + exports
244 + MOUNTPROC_EXPORT(void) = 5;
246 + /*
247 + * Identical to MOUNTPROC_EXPORT above
248 + */
249 + exports
250 + MOUNTPROC_EXPORTALL(void) = 6;
251 + } = 1;
252 +#ifdef WANT_NFS3
253 + version MOUNTVERS3 {
254 + /*
255 + * Does no work. It is made available in all RPC services
256 + * to allow server reponse testing and timing
257 + */
258 + void
259 + MOUNTPROC_NULL(void) = 0;
261 + /*
262 + * If mountres3.fhs_status is MNT3_OK, then
263 + * mountres3.mountinfo contains the file handle for
264 + * the directory and a list of acceptable
265 + * authentication flavors. This file handle may only
266 + * be used in the NFS version 3 protocol. This
267 + * procedure also results in the server adding a new
268 + * entry to its mount list recording that this client
269 + * has mounted the directory. AUTH_UNIX authentication
270 + * or better is required.
271 + */
272 + mountres3
273 + MOUNTPROC_MNT(dirpath) = 1;
275 + /*
276 + * Returns the list of remotely mounted filesystems. The
277 + * mountlist contains one entry for each hostname and
278 + * directory pair.
279 + */
280 + mountlist
281 + MOUNTPROC_DUMP(void) = 2;
283 + /*
284 + * Removes the mount list entry for the directory
285 + * Unix authentication required.
286 + */
287 + void
288 + MOUNTPROC_UMNT(dirpath) = 3;
290 + /*
291 + * Removes all of the mount list entries for this client
292 + * Unix authentication required.
293 + */
294 + void
295 + MOUNTPROC_UMNTALL(void) = 4;
297 + /*
298 + * Returns a list of all the exported filesystems, and which
299 + * machines are allowed to import it.
300 + */
301 + exports
302 + MOUNTPROC_EXPORT(void) = 5;
303 + } = 3;
304 +#endif
305 +} = 100005;
306 diff --git a/tirpc/rpcsvc/nfs_prot.x b/tirpc/rpcsvc/nfs_prot.x
307 new file mode 100644
308 index 0000000..01564f8
309 --- /dev/null
310 +++ b/tirpc/rpcsvc/nfs_prot.x
311 @@ -0,0 +1,1266 @@
313 + * Sun RPC is a product of Sun Microsystems, Inc. and is provided for
314 + * unrestricted use provided that this legend is included on all tape
315 + * media and as a part of the software program in whole or part. Users
316 + * may copy or modify Sun RPC without charge, but are not authorized
317 + * to license or distribute it to anyone else except as part of a product or
318 + * program developed by the user.
319 + *
320 + * SUN RPC IS PROVIDED AS IS WITH NO WARRANTIES OF ANY KIND INCLUDING THE
321 + * WARRANTIES OF DESIGN, MERCHANTIBILITY AND FITNESS FOR A PARTICULAR
322 + * PURPOSE, OR ARISING FROM A COURSE OF DEALING, USAGE OR TRADE PRACTICE.
323 + *
324 + * Sun RPC is provided with no support and without any obligation on the
325 + * part of Sun Microsystems, Inc. to assist in its use, correction,
326 + * modification or enhancement.
327 + *
328 + * SUN MICROSYSTEMS, INC. SHALL HAVE NO LIABILITY WITH RESPECT TO THE
329 + * INFRINGEMENT OF COPYRIGHTS, TRADE SECRETS OR ANY PATENTS BY SUN RPC
330 + * OR ANY PART THEREOF.
331 + *
332 + * In no event will Sun Microsystems, Inc. be liable for any lost revenue
333 + * or profits or other special, indirect and consequential damages, even if
334 + * Sun has been advised of the possibility of such damages.
335 + *
336 + * Sun Microsystems, Inc.
337 + * 2550 Garcia Avenue
338 + * Mountain View, California 94043
339 + */
341 +#ifndef RPC_HDR
342 +%#ifndef lint
343 +%/*static char sccsid[] = "from: @(#)nfs_prot.x 1.2 87/10/12 Copyr 1987 Sun Micro";*/
344 +%/*static char sccsid[] = "from: @(#)nfs_prot.x 2.1 88/08/01 4.0 RPCSRC";*/
345 +%static const char rcsid[] =
346 +% "$FreeBSD: src/include/rpcsvc/nfs_prot.x,v 1.7 1999/08/27 23:45:08 peter Exp $";
347 +%#endif /* not lint */
348 +#endif
350 +const NFS_PORT = 2049;
351 +const NFS_MAXDATA = 8192;
352 +const NFS_MAXPATHLEN = 1024;
353 +const NFS_MAXNAMLEN = 255;
354 +const NFS_FHSIZE = 32;
355 +const NFS_COOKIESIZE = 4;
356 +const NFS_FIFO_DEV = -1; /* size kludge for named pipes */
359 + * File types
360 + */
361 +const NFSMODE_FMT = 0170000; /* type of file */
362 +const NFSMODE_DIR = 0040000; /* directory */
363 +const NFSMODE_CHR = 0020000; /* character special */
364 +const NFSMODE_BLK = 0060000; /* block special */
365 +const NFSMODE_REG = 0100000; /* regular */
366 +const NFSMODE_LNK = 0120000; /* symbolic link */
367 +const NFSMODE_SOCK = 0140000; /* socket */
368 +const NFSMODE_FIFO = 0010000; /* fifo */
371 + * Error status
372 + */
373 +enum nfsstat {
374 + NFS_OK= 0, /* no error */
375 + NFSERR_PERM=1, /* Not owner */
376 + NFSERR_NOENT=2, /* No such file or directory */
377 + NFSERR_IO=5, /* I/O error */
378 + NFSERR_NXIO=6, /* No such device or address */
379 + NFSERR_ACCES=13, /* Permission denied */
380 + NFSERR_EXIST=17, /* File exists */
381 + NFSERR_NODEV=19, /* No such device */
382 + NFSERR_NOTDIR=20, /* Not a directory*/
383 + NFSERR_ISDIR=21, /* Is a directory */
384 + NFSERR_FBIG=27, /* File too large */
385 + NFSERR_NOSPC=28, /* No space left on device */
386 + NFSERR_ROFS=30, /* Read-only file system */
387 + NFSERR_NAMETOOLONG=63, /* File name too long */
388 + NFSERR_NOTEMPTY=66, /* Directory not empty */
389 + NFSERR_DQUOT=69, /* Disc quota exceeded */
390 + NFSERR_STALE=70, /* Stale NFS file handle */
391 + NFSERR_WFLUSH=99 /* write cache flushed */
395 + * File types
396 + */
397 +enum ftype {
398 + NFNON = 0, /* non-file */
399 + NFREG = 1, /* regular file */
400 + NFDIR = 2, /* directory */
401 + NFBLK = 3, /* block special */
402 + NFCHR = 4, /* character special */
403 + NFLNK = 5, /* symbolic link */
404 + NFSOCK = 6, /* unix domain sockets */
405 + NFBAD = 7, /* unused */
406 + NFFIFO = 8 /* named pipe */
410 + * File access handle
411 + */
412 +struct nfs_fh {
413 + opaque data[NFS_FHSIZE];
416 +/*
417 + * Timeval
418 + */
419 +struct nfstime {
420 + unsigned seconds;
421 + unsigned useconds;
426 + * File attributes
427 + */
428 +struct fattr {
429 + ftype type; /* file type */
430 + unsigned mode; /* protection mode bits */
431 + unsigned nlink; /* # hard links */
432 + unsigned uid; /* owner user id */
433 + unsigned gid; /* owner group id */
434 + unsigned size; /* file size in bytes */
435 + unsigned blocksize; /* prefered block size */
436 + unsigned rdev; /* special device # */
437 + unsigned blocks; /* Kb of disk used by file */
438 + unsigned fsid; /* device # */
439 + unsigned fileid; /* inode # */
440 + nfstime atime; /* time of last access */
441 + nfstime mtime; /* time of last modification */
442 + nfstime ctime; /* time of last change */
446 + * File attributes which can be set
447 + */
448 +struct sattr {
449 + unsigned mode; /* protection mode bits */
450 + unsigned uid; /* owner user id */
451 + unsigned gid; /* owner group id */
452 + unsigned size; /* file size in bytes */
453 + nfstime atime; /* time of last access */
454 + nfstime mtime; /* time of last modification */
458 +typedef string filename<NFS_MAXNAMLEN>;
459 +typedef string nfspath<NFS_MAXPATHLEN>;
462 + * Reply status with file attributes
463 + */
464 +union attrstat switch (nfsstat status) {
465 +case NFS_OK:
466 + fattr attributes;
467 +default:
468 + void;
471 +struct sattrargs {
472 + nfs_fh file;
473 + sattr attributes;
477 + * Arguments for directory operations
478 + */
479 +struct diropargs {
480 + nfs_fh dir; /* directory file handle */
481 + filename name; /* name (up to NFS_MAXNAMLEN bytes) */
484 +struct diropokres {
485 + nfs_fh file;
486 + fattr attributes;
490 + * Results from directory operation
491 + */
492 +union diropres switch (nfsstat status) {
493 +case NFS_OK:
494 + diropokres diropres;
495 +default:
496 + void;
499 +union readlinkres switch (nfsstat status) {
500 +case NFS_OK:
501 + nfspath data;
502 +default:
503 + void;
507 + * Arguments to remote read
508 + */
509 +struct readargs {
510 + nfs_fh file; /* handle for file */
511 + unsigned offset; /* byte offset in file */
512 + unsigned count; /* immediate read count */
513 + unsigned totalcount; /* total read count (from this offset)*/
517 + * Status OK portion of remote read reply
518 + */
519 +struct readokres {
520 + fattr attributes; /* attributes, need for pagin*/
521 + opaque data<NFS_MAXDATA>;
524 +union readres switch (nfsstat status) {
525 +case NFS_OK:
526 + readokres reply;
527 +default:
528 + void;
532 + * Arguments to remote write
533 + */
534 +struct writeargs {
535 + nfs_fh file; /* handle for file */
536 + unsigned beginoffset; /* beginning byte offset in file */
537 + unsigned offset; /* current byte offset in file */
538 + unsigned totalcount; /* total write count (to this offset)*/
539 + opaque data<NFS_MAXDATA>;
542 +struct createargs {
543 + diropargs where;
544 + sattr attributes;
547 +struct renameargs {
548 + diropargs from;
549 + diropargs to;
552 +struct linkargs {
553 + nfs_fh from;
554 + diropargs to;
557 +struct symlinkargs {
558 + diropargs from;
559 + nfspath to;
560 + sattr attributes;
564 +typedef opaque nfscookie[NFS_COOKIESIZE];
567 + * Arguments to readdir
568 + */
569 +struct readdirargs {
570 + nfs_fh dir; /* directory handle */
571 + nfscookie cookie;
572 + unsigned count; /* number of directory bytes to read */
575 +struct entry {
576 + unsigned fileid;
577 + filename name;
578 + nfscookie cookie;
579 + entry *nextentry;
582 +struct dirlist {
583 + entry *entries;
584 + bool eof;
587 +union readdirres switch (nfsstat status) {
588 +case NFS_OK:
589 + dirlist reply;
590 +default:
591 + void;
594 +struct statfsokres {
595 + unsigned tsize; /* preferred transfer size in bytes */
596 + unsigned bsize; /* fundamental file system block size */
597 + unsigned blocks; /* total blocks in file system */
598 + unsigned bfree; /* free blocks in fs */
599 + unsigned bavail; /* free blocks avail to non-superuser */
602 +union statfsres switch (nfsstat status) {
603 +case NFS_OK:
604 + statfsokres reply;
605 +default:
606 + void;
609 +#ifdef WANT_NFS3
612 + * NFSv3 constants and types
613 + */
614 +const NFS3_FHSIZE = 64; /* maximum size in bytes of a file handle */
615 +const NFS3_COOKIEVERFSIZE = 8; /* size of a cookie verifier for READDIR */
616 +const NFS3_CREATEVERFSIZE = 8; /* size of the verifier used for CREATE */
617 +const NFS3_WRITEVERFSIZE = 8; /* size of the verifier used for WRITE */
619 +typedef unsigned hyper uint64;
620 +typedef hyper int64;
621 +typedef unsigned long uint32;
622 +typedef long int32;
623 +typedef string filename3<>;
624 +typedef string nfspath3<>;
625 +typedef uint64 fileid3;
626 +typedef uint64 cookie3;
627 +typedef opaque cookieverf3[NFS3_COOKIEVERFSIZE];
628 +typedef opaque createverf3[NFS3_CREATEVERFSIZE];
629 +typedef opaque writeverf3[NFS3_WRITEVERFSIZE];
630 +typedef uint32 uid3;
631 +typedef uint32 gid3;
632 +typedef uint64 size3;
633 +typedef uint64 offset3;
634 +typedef uint32 mode3;
635 +typedef uint32 count3;
638 + * Error status (v3)
639 + */
640 +enum nfsstat3 {
641 + NFS3_OK = 0,
642 + NFS3ERR_PERM = 1,
643 + NFS3ERR_NOENT = 2,
644 + NFS3ERR_IO = 5,
645 + NFS3ERR_NXIO = 6,
646 + NFS3ERR_ACCES = 13,
647 + NFS3ERR_EXIST = 17,
648 + NFS3ERR_XDEV = 18,
649 + NFS3ERR_NODEV = 19,
650 + NFS3ERR_NOTDIR = 20,
651 + NFS3ERR_ISDIR = 21,
652 + NFS3ERR_INVAL = 22,
653 + NFS3ERR_FBIG = 27,
654 + NFS3ERR_NOSPC = 28,
655 + NFS3ERR_ROFS = 30,
656 + NFS3ERR_MLINK = 31,
657 + NFS3ERR_NAMETOOLONG = 63,
658 + NFS3ERR_NOTEMPTY = 66,
659 + NFS3ERR_DQUOT = 69,
660 + NFS3ERR_STALE = 70,
661 + NFS3ERR_REMOTE = 71,
662 + NFS3ERR_BADHANDLE = 10001,
663 + NFS3ERR_NOT_SYNC = 10002,
664 + NFS3ERR_BAD_COOKIE = 10003,
665 + NFS3ERR_NOTSUPP = 10004,
666 + NFS3ERR_TOOSMALL = 10005,
667 + NFS3ERR_SERVERFAULT = 10006,
668 + NFS3ERR_BADTYPE = 10007,
669 + NFS3ERR_JUKEBOX = 10008
673 + * File types (v3)
674 + */
675 +enum ftype3 {
676 + NF3REG = 1, /* regular file */
677 + NF3DIR = 2, /* directory */
678 + NF3BLK = 3, /* block special */
679 + NF3CHR = 4, /* character special */
680 + NF3LNK = 5, /* symbolic link */
681 + NF3SOCK = 6, /* unix domain sockets */
682 + NF3FIFO = 7 /* named pipe */
685 +struct specdata3 {
686 + uint32 specdata1;
687 + uint32 specdata2;
691 + * File access handle (v3)
692 + */
693 +struct nfs_fh3 {
694 + opaque data<NFS3_FHSIZE>;
697 +/*
698 + * Timeval (v3)
699 + */
700 +struct nfstime3 {
701 + uint32 seconds;
702 + uint32 nseconds;
707 + * File attributes (v3)
708 + */
709 +struct fattr3 {
710 + ftype3 type; /* file type */
711 + mode3 mode; /* protection mode bits */
712 + uint32 nlink; /* # hard links */
713 + uid3 uid; /* owner user id */
714 + gid3 gid; /* owner group id */
715 + size3 size; /* file size in bytes */
716 + size3 used; /* prefered block size */
717 + specdata3 rdev; /* special device # */
718 + uint64 fsid; /* device # */
719 + fileid3 fileid; /* inode # */
720 + nfstime3 atime; /* time of last access */
721 + nfstime3 mtime; /* time of last modification */
722 + nfstime3 ctime; /* time of last change */
725 +union post_op_attr switch (bool attributes_follow) {
726 +case TRUE:
727 + fattr3 attributes;
728 +case FALSE:
729 + void;
732 +struct wcc_attr {
733 + size3 size;
734 + nfstime3 mtime;
735 + nfstime3 ctime;
738 +union pre_op_attr switch (bool attributes_follow) {
739 +case TRUE:
740 + wcc_attr attributes;
741 +case FALSE:
742 + void;
745 +struct wcc_data {
746 + pre_op_attr before;
747 + post_op_attr after;
750 +union post_op_fh3 switch (bool handle_follows) {
751 +case TRUE:
752 + nfs_fh3 handle;
753 +case FALSE:
754 + void;
758 + * File attributes which can be set (v3)
759 + */
760 +enum time_how {
761 + DONT_CHANGE = 0,
762 + SET_TO_SERVER_TIME = 1,
763 + SET_TO_CLIENT_TIME = 2
766 +union set_mode3 switch (bool set_it) {
767 +case TRUE:
768 + mode3 mode;
769 +default:
770 + void;
773 +union set_uid3 switch (bool set_it) {
774 +case TRUE:
775 + uid3 uid;
776 +default:
777 + void;
780 +union set_gid3 switch (bool set_it) {
781 +case TRUE:
782 + gid3 gid;
783 +default:
784 + void;
787 +union set_size3 switch (bool set_it) {
788 +case TRUE:
789 + size3 size;
790 +default:
791 + void;
794 +union set_atime switch (time_how set_it) {
795 +case SET_TO_CLIENT_TIME:
796 + nfstime3 atime;
797 +default:
798 + void;
801 +union set_mtime switch (time_how set_it) {
802 +case SET_TO_CLIENT_TIME:
803 + nfstime3 mtime;
804 +default:
805 + void;
808 +struct sattr3 {
809 + set_mode3 mode;
810 + set_uid3 uid;
811 + set_gid3 gid;
812 + set_size3 size;
813 + set_atime atime;
814 + set_mtime mtime;
818 + * Arguments for directory operations (v3)
819 + */
820 +struct diropargs3 {
821 + nfs_fh3 dir; /* directory file handle */
822 + filename3 name; /* name (up to NFS_MAXNAMLEN bytes) */
826 + * Arguments to getattr (v3).
827 + */
828 +struct GETATTR3args {
829 + nfs_fh3 object;
832 +struct GETATTR3resok {
833 + fattr3 obj_attributes;
836 +union GETATTR3res switch (nfsstat3 status) {
837 +case NFS3_OK:
838 + GETATTR3resok resok;
839 +default:
840 + void;
844 + * Arguments to setattr (v3).
845 + */
846 +union sattrguard3 switch (bool check) {
847 +case TRUE:
848 + nfstime3 obj_ctime;
849 +case FALSE:
850 + void;
853 +struct SETATTR3args {
854 + nfs_fh3 object;
855 + sattr3 new_attributes;
856 + sattrguard3 guard;
859 +struct SETATTR3resok {
860 + wcc_data obj_wcc;
863 +struct SETATTR3resfail {
864 + wcc_data obj_wcc;
867 +union SETATTR3res switch (nfsstat3 status) {
868 +case NFS3_OK:
869 + SETATTR3resok resok;
870 +default:
871 + SETATTR3resfail resfail;
875 + * Arguments to lookup (v3).
876 + */
877 +struct LOOKUP3args {
878 + diropargs3 what;
881 +struct LOOKUP3resok {
882 + nfs_fh3 object;
883 + post_op_attr obj_attributes;
884 + post_op_attr dir_attributes;
887 +struct LOOKUP3resfail {
888 + post_op_attr dir_attributes;
891 +union LOOKUP3res switch (nfsstat3 status) {
892 +case NFS3_OK:
893 + LOOKUP3resok resok;
894 +default:
895 + LOOKUP3resfail resfail;
899 + * Arguments to access (v3).
900 + */
901 +const ACCESS3_READ = 0x0001;
902 +const ACCESS3_LOOKUP = 0x0002;
903 +const ACCESS3_MODIFY = 0x0004;
904 +const ACCESS3_EXTEND = 0x0008;
905 +const ACCESS3_DELETE = 0x0010;
906 +const ACCESS3_EXECUTE = 0x0020;
908 +struct ACCESS3args {
909 + nfs_fh3 object;
910 + uint32 access;
913 +struct ACCESS3resok {
914 + post_op_attr obj_attributes;
915 + uint32 access;
918 +struct ACCESS3resfail {
919 + post_op_attr obj_attributes;
922 +union ACCESS3res switch (nfsstat3 status) {
923 +case NFS3_OK:
924 + ACCESS3resok resok;
925 +default:
926 + ACCESS3resfail resfail;
930 + * Arguments to readlink (v3).
931 + */
932 +struct READLINK3args {
933 + nfs_fh3 symlink;
936 +struct READLINK3resok {
937 + post_op_attr symlink_attributes;
938 + nfspath3 data;
941 +struct READLINK3resfail {
942 + post_op_attr symlink_attributes;
945 +union READLINK3res switch (nfsstat3 status) {
946 +case NFS3_OK:
947 + READLINK3resok resok;
948 +default:
949 + READLINK3resfail resfail;
953 + * Arguments to read (v3).
954 + */
955 +struct READ3args {
956 + nfs_fh3 file;
957 + offset3 offset;
958 + count3 count;
961 +struct READ3resok {
962 + post_op_attr file_attributes;
963 + count3 count;
964 + bool eof;
965 + opaque data<>;
968 +struct READ3resfail {
969 + post_op_attr file_attributes;
972 +/* XXX: solaris 2.6 uses ``nfsstat'' here */
973 +union READ3res switch (nfsstat3 status) {
974 +case NFS3_OK:
975 + READ3resok resok;
976 +default:
977 + READ3resfail resfail;
981 + * Arguments to write (v3).
982 + */
983 +enum stable_how {
984 + UNSTABLE = 0,
985 + DATA_SYNC = 1,
986 + FILE_SYNC = 2
989 +struct WRITE3args {
990 + nfs_fh3 file;
991 + offset3 offset;
992 + count3 count;
993 + stable_how stable;
994 + opaque data<>;
997 +struct WRITE3resok {
998 + wcc_data file_wcc;
999 + count3 count;
1000 + stable_how committed;
1001 + writeverf3 verf;
1004 +struct WRITE3resfail {
1005 + wcc_data file_wcc;
1008 +union WRITE3res switch (nfsstat3 status) {
1009 +case NFS3_OK:
1010 + WRITE3resok resok;
1011 +default:
1012 + WRITE3resfail resfail;
1016 + * Arguments to create (v3).
1017 + */
1018 +enum createmode3 {
1019 + UNCHECKED = 0,
1020 + GUARDED = 1,
1021 + EXCLUSIVE = 2
1024 +union createhow3 switch (createmode3 mode) {
1025 +case UNCHECKED:
1026 +case GUARDED:
1027 + sattr3 obj_attributes;
1028 +case EXCLUSIVE:
1029 + createverf3 verf;
1032 +struct CREATE3args {
1033 + diropargs3 where;
1034 + createhow3 how;
1037 +struct CREATE3resok {
1038 + post_op_fh3 obj;
1039 + post_op_attr obj_attributes;
1040 + wcc_data dir_wcc;
1043 +struct CREATE3resfail {
1044 + wcc_data dir_wcc;
1047 +union CREATE3res switch (nfsstat3 status) {
1048 +case NFS3_OK:
1049 + CREATE3resok resok;
1050 +default:
1051 + CREATE3resfail resfail;
1055 + * Arguments to mkdir (v3).
1056 + */
1057 +struct MKDIR3args {
1058 + diropargs3 where;
1059 + sattr3 attributes;
1062 +struct MKDIR3resok {
1063 + post_op_fh3 obj;
1064 + post_op_attr obj_attributes;
1065 + wcc_data dir_wcc;
1068 +struct MKDIR3resfail {
1069 + wcc_data dir_wcc;
1072 +union MKDIR3res switch (nfsstat3 status) {
1073 +case NFS3_OK:
1074 + MKDIR3resok resok;
1075 +default:
1076 + MKDIR3resfail resfail;
1080 + * Arguments to symlink (v3).
1081 + */
1082 +struct symlinkdata3 {
1083 + sattr3 symlink_attributes;
1084 + nfspath3 symlink_data;
1087 +struct SYMLINK3args {
1088 + diropargs3 where;
1089 + symlinkdata3 symlink;
1092 +struct SYMLINK3resok {
1093 + post_op_fh3 obj;
1094 + post_op_attr obj_attributes;
1095 + wcc_data dir_wcc;
1098 +struct SYMLINK3resfail {
1099 + wcc_data dir_wcc;
1102 +union SYMLINK3res switch (nfsstat3 status) {
1103 +case NFS3_OK:
1104 + SYMLINK3resok resok;
1105 +default:
1106 + SYMLINK3resfail resfail;
1110 + * Arguments to mknod (v3).
1111 + */
1112 +struct devicedata3 {
1113 + sattr3 dev_attributes;
1114 + specdata3 spec;
1117 +union mknoddata3 switch (ftype3 type) {
1118 +case NF3CHR:
1119 +case NF3BLK:
1120 + devicedata3 device;
1121 +case NF3SOCK:
1122 +case NF3FIFO:
1123 + sattr3 pipe_attributes;
1124 +default:
1125 + void;
1128 +struct MKNOD3args {
1129 + diropargs3 where;
1130 + mknoddata3 what;
1133 +struct MKNOD3resok {
1134 + post_op_fh3 obj;
1135 + post_op_attr obj_attributes;
1136 + wcc_data dir_wcc;
1139 +struct MKNOD3resfail {
1140 + wcc_data dir_wcc;
1143 +union MKNOD3res switch (nfsstat3 status) {
1144 +case NFS3_OK:
1145 + MKNOD3resok resok;
1146 +default:
1147 + MKNOD3resfail resfail;
1151 + * Arguments to remove (v3).
1152 + */
1153 +struct REMOVE3args {
1154 + diropargs3 object;
1157 +struct REMOVE3resok {
1158 + wcc_data dir_wcc;
1161 +struct REMOVE3resfail {
1162 + wcc_data dir_wcc;
1165 +union REMOVE3res switch (nfsstat3 status) {
1166 +case NFS3_OK:
1167 + REMOVE3resok resok;
1168 +default:
1169 + REMOVE3resfail resfail;
1173 + * Arguments to rmdir (v3).
1174 + */
1175 +struct RMDIR3args {
1176 + diropargs3 object;
1179 +struct RMDIR3resok {
1180 + wcc_data dir_wcc;
1183 +struct RMDIR3resfail {
1184 + wcc_data dir_wcc;
1187 +union RMDIR3res switch (nfsstat3 status) {
1188 +case NFS3_OK:
1189 + RMDIR3resok resok;
1190 +default:
1191 + RMDIR3resfail resfail;
1195 + * Arguments to rename (v3).
1196 + */
1197 +struct RENAME3args {
1198 + diropargs3 from;
1199 + diropargs3 to;
1202 +struct RENAME3resok {
1203 + wcc_data fromdir_wcc;
1204 + wcc_data todir_wcc;
1207 +struct RENAME3resfail {
1208 + wcc_data fromdir_wcc;
1209 + wcc_data todir_wcc;
1212 +union RENAME3res switch (nfsstat3 status) {
1213 +case NFS3_OK:
1214 + RENAME3resok resok;
1215 +default:
1216 + RENAME3resfail resfail;
1220 + * Arguments to link (v3).
1221 + */
1222 +struct LINK3args {
1223 + nfs_fh3 file;
1224 + diropargs3 link;
1227 +struct LINK3resok {
1228 + post_op_attr file_attributes;
1229 + wcc_data linkdir_wcc;
1232 +struct LINK3resfail {
1233 + post_op_attr file_attributes;
1234 + wcc_data linkdir_wcc;
1237 +union LINK3res switch (nfsstat3 status) {
1238 +case NFS3_OK:
1239 + LINK3resok resok;
1240 +default:
1241 + LINK3resfail resfail;
1245 + * Arguments to readdir (v3).
1246 + */
1247 +struct READDIR3args {
1248 + nfs_fh3 dir;
1249 + cookie3 cookie;
1250 + cookieverf3 cookieverf;
1251 + count3 count;
1254 +struct entry3 {
1255 + fileid3 fileid;
1256 + filename3 name;
1257 + cookie3 cookie;
1258 + entry3 *nextentry;
1261 +struct dirlist3 {
1262 + entry3 *entries;
1263 + bool eof;
1266 +struct READDIR3resok {
1267 + post_op_attr dir_attributes;
1268 + cookieverf3 cookieverf;
1269 + dirlist3 reply;
1272 +struct READDIR3resfail {
1273 + post_op_attr dir_attributes;
1276 +union READDIR3res switch (nfsstat3 status) {
1277 +case NFS3_OK:
1278 + READDIR3resok resok;
1279 +default:
1280 + READDIR3resfail resfail;
1284 + * Arguments to readdirplus (v3).
1285 + */
1286 +struct READDIRPLUS3args {
1287 + nfs_fh3 dir;
1288 + cookie3 cookie;
1289 + cookieverf3 cookieverf;
1290 + count3 dircount;
1291 + count3 maxcount;
1294 +struct entryplus3 {
1295 + fileid3 fileid;
1296 + filename3 name;
1297 + cookie3 cookie;
1298 + post_op_attr name_attributes;
1299 + post_op_fh3 name_handle;
1300 + entryplus3 *nextentry;
1303 +struct dirlistplus3 {
1304 + entryplus3 *entries;
1305 + bool eof;
1308 +struct READDIRPLUS3resok {
1309 + post_op_attr dir_attributes;
1310 + cookieverf3 cookieverf;
1311 + dirlistplus3 reply;
1314 +struct READDIRPLUS3resfail {
1315 + post_op_attr dir_attributes;
1318 +union READDIRPLUS3res switch (nfsstat3 status) {
1319 +case NFS3_OK:
1320 + READDIRPLUS3resok resok;
1321 +default:
1322 + READDIRPLUS3resfail resfail;
1326 + * Arguments to fsstat (v3).
1327 + */
1328 +struct FSSTAT3args {
1329 + nfs_fh3 fsroot;
1332 +struct FSSTAT3resok {
1333 + post_op_attr obj_attributes;
1334 + size3 tbytes;
1335 + size3 fbytes;
1336 + size3 abytes;
1337 + size3 tfiles;
1338 + size3 ffiles;
1339 + size3 afiles;
1340 + uint32 invarsec;
1343 +struct FSSTAT3resfail {
1344 + post_op_attr obj_attributes;
1347 +union FSSTAT3res switch (nfsstat3 status) {
1348 +case NFS3_OK:
1349 + FSSTAT3resok resok;
1350 +default:
1351 + FSSTAT3resfail resfail;
1355 + * Arguments to fsinfo (v3).
1356 + */
1357 +const FSF3_LINK = 0x0001;
1358 +const FSF3_SYMLINK = 0x0002;
1359 +const FSF3_HOMOGENEOUS = 0x0008;
1360 +const FSF3_CANSETTIME = 0x0010;
1362 +struct FSINFO3args {
1363 + nfs_fh3 fsroot;
1366 +struct FSINFO3resok {
1367 + post_op_attr obj_attributes;
1368 + uint32 rtmax;
1369 + uint32 rtpref;
1370 + uint32 rtmult;
1371 + uint32 wtmax;
1372 + uint32 wtpref;
1373 + uint32 wtmult;
1374 + uint32 dtpref;
1375 + size3 maxfilesize;
1376 + nfstime3 time_delta;
1377 + uint32 properties;
1380 +struct FSINFO3resfail {
1381 + post_op_attr obj_attributes;
1384 +union FSINFO3res switch (nfsstat3 status) {
1385 +case NFS3_OK:
1386 + FSINFO3resok resok;
1387 +default:
1388 + FSINFO3resfail resfail;
1392 + * Arguments to pathconf (v3).
1393 + */
1394 +struct PATHCONF3args {
1395 + nfs_fh3 object;
1398 +struct PATHCONF3resok {
1399 + post_op_attr obj_attributes;
1400 + uint32 linkmax;
1401 + uint32 name_max;
1402 + bool no_trunc;
1403 + bool chown_restricted;
1404 + bool case_insensitive;
1405 + bool case_preserving;
1408 +struct PATHCONF3resfail {
1409 + post_op_attr obj_attributes;
1412 +union PATHCONF3res switch (nfsstat3 status) {
1413 +case NFS3_OK:
1414 + PATHCONF3resok resok;
1415 +default:
1416 + PATHCONF3resfail resfail;
1420 + * Arguments to commit (v3).
1421 + */
1422 +struct COMMIT3args {
1423 + nfs_fh3 file;
1424 + offset3 offset;
1425 + count3 count;
1428 +struct COMMIT3resok {
1429 + wcc_data file_wcc;
1430 + writeverf3 verf;
1433 +struct COMMIT3resfail {
1434 + wcc_data file_wcc;
1437 +union COMMIT3res switch (nfsstat3 status) {
1438 +case NFS3_OK:
1439 + COMMIT3resok resok;
1440 +default:
1441 + COMMIT3resfail resfail;
1444 +#endif /* WANT_NFS3 */
1447 + * Remote file service routines
1448 + */
1449 +program NFS_PROGRAM {
1450 + version NFS_VERSION {
1451 + void
1452 + NFSPROC_NULL(void) = 0;
1454 + attrstat
1455 + NFSPROC_GETATTR(nfs_fh) = 1;
1457 + attrstat
1458 + NFSPROC_SETATTR(sattrargs) = 2;
1460 + void
1461 + NFSPROC_ROOT(void) = 3;
1463 + diropres
1464 + NFSPROC_LOOKUP(diropargs) = 4;
1466 + readlinkres
1467 + NFSPROC_READLINK(nfs_fh) = 5;
1469 + readres
1470 + NFSPROC_READ(readargs) = 6;
1472 + void
1473 + NFSPROC_WRITECACHE(void) = 7;
1475 + attrstat
1476 + NFSPROC_WRITE(writeargs) = 8;
1478 + diropres
1479 + NFSPROC_CREATE(createargs) = 9;
1481 + nfsstat
1482 + NFSPROC_REMOVE(diropargs) = 10;
1484 + nfsstat
1485 + NFSPROC_RENAME(renameargs) = 11;
1487 + nfsstat
1488 + NFSPROC_LINK(linkargs) = 12;
1490 + nfsstat
1491 + NFSPROC_SYMLINK(symlinkargs) = 13;
1493 + diropres
1494 + NFSPROC_MKDIR(createargs) = 14;
1496 + nfsstat
1497 + NFSPROC_RMDIR(diropargs) = 15;
1499 + readdirres
1500 + NFSPROC_READDIR(readdirargs) = 16;
1502 + statfsres
1503 + NFSPROC_STATFS(nfs_fh) = 17;
1504 + } = 2;
1505 +} = 100003;
1506 +#ifdef WANT_NFS3
1507 +program NFS3_PROGRAM {
1508 + version NFS_V3 {
1509 + void
1510 + NFSPROC3_NULL(void) = 0;
1512 + GETATTR3res
1513 + NFSPROC3_GETATTR(GETATTR3args) = 1;
1515 + SETATTR3res
1516 + NFSPROC3_SETATTR(SETATTR3args) = 2;
1518 + LOOKUP3res
1519 + NFSPROC3_LOOKUP(LOOKUP3args) = 3;
1521 + ACCESS3res
1522 + NFSPROC3_ACCESS(ACCESS3args) = 4;
1524 + READLINK3res
1525 + NFSPROC3_READLINK(READLINK3args) = 5;
1527 + READ3res
1528 + NFSPROC3_READ(READ3args) = 6;
1530 + WRITE3res
1531 + NFSPROC3_WRITE(WRITE3args) = 7;
1533 + CREATE3res
1534 + NFSPROC3_CREATE(CREATE3args) = 8;
1536 + MKDIR3res
1537 + NFSPROC3_MKDIR(MKDIR3args) = 9;
1539 + SYMLINK3res
1540 + NFSPROC3_SYMLINK(SYMLINK3args) = 10;
1542 + MKNOD3res
1543 + NFSPROC3_MKNOD(MKNOD3args) = 11;
1545 + REMOVE3res
1546 + NFSPROC3_REMOVE(REMOVE3args) = 12;
1548 + RMDIR3res
1549 + NFSPROC3_RMDIR(RMDIR3args) = 13;
1551 + RENAME3res
1552 + NFSPROC3_RENAME(RENAME3args) = 14;
1554 + LINK3res
1555 + NFSPROC3_LINK(LINK3args) = 15;
1557 + READDIR3res
1558 + NFSPROC3_READDIR(READDIR3args) = 16;
1560 + READDIRPLUS3res
1561 + NFSPROC3_READDIRPLUS(READDIRPLUS3args) = 17;
1563 + FSSTAT3res
1564 + NFSPROC3_FSSTAT(FSSTAT3args) = 18;
1566 + FSINFO3res
1567 + NFSPROC3_FSINFO(FSINFO3args) = 19;
1569 + PATHCONF3res
1570 + NFSPROC3_PATHCONF(PATHCONF3args) = 20;
1572 + COMMIT3res
1573 + NFSPROC3_COMMIT(COMMIT3args) = 21;
1574 + } = 3;
1575 +} = 100003;
1576 +#endif
1578 diff --git a/tirpc/rpcsvc/rquota.x b/tirpc/rpcsvc/rquota.x
1579 new file mode 100644
1580 index 0000000..72864d1
1581 --- /dev/null
1582 +++ b/tirpc/rpcsvc/rquota.x
1583 @@ -0,0 +1,67 @@
1585 + * Remote quota protocol
1586 + * Requires unix authentication
1587 + */
1589 +#ifndef RPC_HDR
1590 +%#ifndef lint
1591 +%/*static char sccsid[] = "from: @(#)rquota.x 1.2 87/09/20 Copyr 1987 Sun Micro";*/
1592 +%/*static char sccsid[] = "from: @(#)rquota.x 2.1 88/08/01 4.0 RPCSRC";*/
1593 +%static const char rcsid[] =
1594 +% "$FreeBSD: src/include/rpcsvc/rquota.x,v 1.6 1999/08/27 23:45:10 peter Exp $";
1595 +%#endif /* not lint */
1596 +#endif
1598 +const RQ_PATHLEN = 1024;
1600 +struct getquota_args {
1601 + string gqa_pathp<RQ_PATHLEN>; /* path to filesystem of interest */
1602 + int gqa_uid; /* inquire about quota for uid */
1606 + * remote quota structure
1607 + */
1608 +struct rquota {
1609 + int rq_bsize; /* block size for block counts */
1610 + bool rq_active; /* indicates whether quota is active */
1611 + unsigned int rq_bhardlimit; /* absolute limit on disk blks alloc */
1612 + unsigned int rq_bsoftlimit; /* preferred limit on disk blks */
1613 + unsigned int rq_curblocks; /* current block count */
1614 + unsigned int rq_fhardlimit; /* absolute limit on allocated files */
1615 + unsigned int rq_fsoftlimit; /* preferred file limit */
1616 + unsigned int rq_curfiles; /* current # allocated files */
1617 + unsigned int rq_btimeleft; /* time left for excessive disk use */
1618 + unsigned int rq_ftimeleft; /* time left for excessive files */
1619 +};
1621 +enum gqr_status {
1622 + Q_OK = 1, /* quota returned */
1623 + Q_NOQUOTA = 2, /* noquota for uid */
1624 + Q_EPERM = 3 /* no permission to access quota */
1627 +union getquota_rslt switch (gqr_status status) {
1628 +case Q_OK:
1629 + rquota gqr_rquota; /* valid if status == Q_OK */
1630 +case Q_NOQUOTA:
1631 + void;
1632 +case Q_EPERM:
1633 + void;
1636 +program RQUOTAPROG {
1637 + version RQUOTAVERS {
1638 + /*
1639 + * Get all quotas
1640 + */
1641 + getquota_rslt
1642 + RQUOTAPROC_GETQUOTA(getquota_args) = 1;
1644 + /*
1645 + * Get active quotas only
1646 + */
1647 + getquota_rslt
1648 + RQUOTAPROC_GETACTIVEQUOTA(getquota_args) = 2;
1649 + } = 1;
1650 +} = 100011;
1652 1.9.1