1 /*
2  * Remote quota protocol
3  * Requires unix authentication
4  */
5 
6 #ifndef RPC_HDR
7 %#include <sys/cdefs.h>
8 %#ifndef __lint__
9 %/*static char sccsid[] = "from: @(#)rquota.x 1.2 87/09/20 Copyr 1987 Sun Micro";*/
10 %/*static char sccsid[] = "from: @(#)rquota.x     2.1 88/08/01 4.0 RPCSRC";*/
11 %__RCSID("$NetBSD: rquota.x,v 1.6 2004/07/01 22:52:34 kleink Exp $");
12 %#endif /* not __lint__ */
13 #endif
14 
15 const RQ_PATHLEN = 1024;
16 
17 struct getquota_args {
18           string gqa_pathp<RQ_PATHLEN>;           /* path to filesystem of interest */
19           int gqa_uid;                  /* inquire about quota for uid */
20 };
21 
22 const RQUOTA_MAXQUOTAS = 0x02;
23 const RQUOTA_USRQUOTA = 0x00;
24 const RQUOTA_GRPQUOTA = 0x01;
25 
26 struct ext_getquota_args {
27           string gqa_pathp<RQ_PATHLEN>;           /* path to filesystem of interest */
28           int gqa_type;                           /* type of quota */
29           int gqa_id;                   /* inquire about quota for uid/gid */
30 };
31 
32 /*
33  * remote quota structure
34  */
35 struct rquota {
36           int rq_bsize;                           /* block size for block counts */
37           bool rq_active;               /* indicates whether quota is active */
38           unsigned int rq_bhardlimit;   /* absolute limit on disk blks alloc */
39           unsigned int rq_bsoftlimit;   /* preferred limit on disk blks */
40           unsigned int rq_curblocks;    /* current block count */
41           unsigned int rq_fhardlimit;   /* absolute limit on allocated files */
42           unsigned int rq_fsoftlimit;   /* preferred file limit */
43           unsigned int rq_curfiles;     /* current # allocated files */
44           unsigned int rq_btimeleft;    /* time left for excessive disk use */
45           unsigned int rq_ftimeleft;    /* time left for excessive files */
46 };
47 
48 enum gqr_status {
49           Q_OK = 1,           /* quota returned */
50           Q_NOQUOTA = 2,      /* noquota for uid */
51           Q_EPERM = 3                   /* no permission to access quota */
52 };
53 
54 union getquota_rslt switch (gqr_status status) {
55 case Q_OK:
56           rquota gqr_rquota;  /* valid if status == Q_OK */
57 case Q_NOQUOTA:
58           void;
59 case Q_EPERM:
60           void;
61 };
62 
63 program RQUOTAPROG {
64           version RQUOTAVERS {
65                     /*
66                      * Get all quotas
67                      */
68                     getquota_rslt
69                     RQUOTAPROC_GETQUOTA(getquota_args) = 1;
70 
71                     /*
72                      * Get active quotas only
73                      */
74                     getquota_rslt
75                     RQUOTAPROC_GETACTIVEQUOTA(getquota_args) = 2;
76           } = 1;
77           version EXT_RQUOTAVERS {
78                     /*
79                      * Get all quotas
80                      */
81                     getquota_rslt
82                     RQUOTAPROC_GETQUOTA(ext_getquota_args) = 1;
83 
84                     /*
85                      * Get active quotas only
86                      */
87                     getquota_rslt
88                     RQUOTAPROC_GETACTIVEQUOTA(ext_getquota_args) = 2;
89           } = 2;
90 } = 100011;
91