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