1/* @(#)rquota.x	2.1 88/08/01 4.0 RPCSRC */
2/* @(#)rquota.x 1.2 87/09/20 Copyr 1987 Sun Micro */
3
4/*
5 * Remote quota protocol
6 * Requires unix authentication
7 */
8
9#ifndef RPC_HDR
10%#include <sys/cdefs.h>
11%__FBSDID("$FreeBSD$");
12#endif
13
14const RQ_PATHLEN = 1024;
15
16struct sq_dqblk {
17	unsigned int rq_bhardlimit;	/* absolute limit on disk blks alloc */
18	unsigned int rq_bsoftlimit;	/* preferred limit on disk blks */
19	unsigned int rq_curblocks;	/* current block count */
20	unsigned int rq_fhardlimit;	/* absolute limit on allocated files */
21	unsigned int rq_fsoftlimit;	/* preferred file limit */
22	unsigned int rq_curfiles;	/* current # allocated files */
23	unsigned int rq_btimeleft;	/* time left for excessive disk use */
24	unsigned int rq_ftimeleft;	/* time left for excessive files */
25};
26
27struct getquota_args {
28	string gqa_pathp<RQ_PATHLEN>;  	/* path to filesystem of interest */
29	int gqa_uid;			/* Inquire about quota for uid */
30};
31
32struct setquota_args {
33	int sqa_qcmd;
34	string sqa_pathp<RQ_PATHLEN>;  	/* path to filesystem of interest */
35	int sqa_id;			/* Set quota for uid */
36	sq_dqblk sqa_dqblk;
37};
38
39struct ext_getquota_args {
40	string gqa_pathp<RQ_PATHLEN>;  	/* path to filesystem of interest */
41	int gqa_type;			/* Type of quota info is needed about */
42	int gqa_id;			/* Inquire about quota for id */
43};
44
45struct ext_setquota_args {
46	int sqa_qcmd;
47	string sqa_pathp<RQ_PATHLEN>;  	/* path to filesystem of interest */
48	int sqa_id;			/* Set quota for id */
49	int sqa_type;			/* Type of quota to set */
50	sq_dqblk sqa_dqblk;
51};
52
53/*
54 * remote quota structure
55 */
56struct rquota {
57	int rq_bsize;			/* block size for block counts */
58	bool rq_active;  		/* indicates whether quota is active */
59	unsigned int rq_bhardlimit;	/* absolute limit on disk blks alloc */
60	unsigned int rq_bsoftlimit;	/* preferred limit on disk blks */
61	unsigned int rq_curblocks;	/* current block count */
62	unsigned int rq_fhardlimit;	/* absolute limit on allocated files */
63	unsigned int rq_fsoftlimit;	/* preferred file limit */
64	unsigned int rq_curfiles;	/* current # allocated files */
65	unsigned int rq_btimeleft;	/* time left for excessive disk use */
66	unsigned int rq_ftimeleft;	/* time left for excessive files */
67};
68
69enum gqr_status {
70	Q_OK = 1,		/* quota returned */
71	Q_NOQUOTA = 2,		/* noquota for uid */
72	Q_EPERM = 3		/* no permission to access quota */
73};
74
75union getquota_rslt switch (gqr_status status) {
76case Q_OK:
77	rquota gqr_rquota;	/* valid if status == Q_OK */
78case Q_NOQUOTA:
79	void;
80case Q_EPERM:
81	void;
82};
83
84union setquota_rslt switch (gqr_status status) {
85case Q_OK:
86	rquota sqr_rquota;	/* valid if status == Q_OK */
87case Q_NOQUOTA:
88	void;
89case Q_EPERM:
90	void;
91};
92
93program RQUOTAPROG {
94	version RQUOTAVERS {
95		/*
96		 * Get all quotas
97		 */
98		getquota_rslt
99		RQUOTAPROC_GETQUOTA(getquota_args) = 1;
100
101		/*
102	 	 * Get active quotas only
103		 */
104		getquota_rslt
105		RQUOTAPROC_GETACTIVEQUOTA(getquota_args) = 2;
106
107		/*
108		 * Set all quotas
109		 */
110		setquota_rslt
111		RQUOTAPROC_SETQUOTA(setquota_args) = 3;
112
113		/*
114	 	 * Get active quotas only
115		 */
116		setquota_rslt
117		RQUOTAPROC_SETACTIVEQUOTA(setquota_args) = 4;
118	} = 1;
119	version EXT_RQUOTAVERS {
120		/*
121		 * Get all quotas
122		 */
123		getquota_rslt
124		RQUOTAPROC_GETQUOTA(ext_getquota_args) = 1;
125
126		/*
127	 	 * Get active quotas only
128		 */
129		getquota_rslt
130		RQUOTAPROC_GETACTIVEQUOTA(ext_getquota_args) = 2;
131
132		/*
133		 * Set all quotas
134		 */
135		setquota_rslt
136		RQUOTAPROC_SETQUOTA(ext_setquota_args) = 3;
137
138		/*
139	 	 * Set active quotas only
140		 */
141		setquota_rslt
142		RQUOTAPROC_SETACTIVEQUOTA(ext_setquota_args) = 4;
143	} = 2;
144} = 100011;
145