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