Dr Andrew Scott G7VAV

My photo
 
May 2024
Mo Tu We Th Fr Sa Su
29 30 1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31 1 2
3 4 5 6 7 8 9


quota.h
001: /* This just represents the non-kernel parts of <linux/quota.h>.
002:  *
003:  * here's the corresponding copyright:
004:  * Copyright (c) 1982, 1986 Regents of the University of California.
005:  * All rights reserved.
006:  *
007:  * This code is derived from software contributed to Berkeley by
008:  * Robert Elz at The University of Melbourne.
009:  *
010:  * Redistribution and use in source and binary forms, with or without
011:  * modification, are permitted provided that the following conditions
012:  * are met:
013:  * 1. Redistributions of source code must retain the above copyright
014:  *    notice, this list of conditions and the following disclaimer.
015:  * 2. Redistributions in binary form must reproduce the above copyright
016:  *    notice, this list of conditions and the following disclaimer in the
017:  *    documentation and/or other materials provided with the distribution.
018:  * 4. Neither the name of the University nor the names of its contributors
019:  *    may be used to endorse or promote products derived from this software
020:  *    without specific prior written permission.
021:  *
022:  * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
023:  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
024:  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
025:  * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
026:  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
027:  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
028:  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
029:  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
030:  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
031:  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
032:  * SUCH DAMAGE.
033:  */
034: 
035: #ifndef _SYS_QUOTA_H
036: #define _SYS_QUOTA_H 1
037: 
038: #include <features.h>
039: #include <sys/types.h>
040: 
041: /*
042:  * Select between different incompatible quota versions.
043:  * Default to the version used by Linux kernel version 2.4.22
044:  * or later.  */
045: #ifndef _LINUX_QUOTA_VERSION
046: # define _LINUX_QUOTA_VERSION 2
047: #endif
048: 
049: /*
050:  * Convert diskblocks to blocks and the other way around.
051:  * currently only to fool the BSD source. :-)
052:  */
053: #define dbtob(num) ((num) << 10)
054: #define btodb(num) ((num) >> 10)
055: 
056: /*
057:  * Convert count of filesystem blocks to diskquota blocks, meant
058:  * for filesystems where i_blksize != BLOCK_SIZE
059:  */
060: #define fs_to_dq_blocks(num, blksize) (((num) * (blksize)) / BLOCK_SIZE)
061: 
062: /*
063:  * Definitions for disk quotas imposed on the average user
064:  * (big brother finally hits Linux).
065:  *
066:  * The following constants define the amount of time given a user
067:  * before the soft limits are treated as hard limits (usually resulting
068:  * in an allocation failure). The timer is started when the user crosses
069:  * their soft limit, it is reset when they go below their soft limit.
070:  */
071: #define MAX_IQ_TIME  604800     /* (7*24*60*60) 1 week */
072: #define MAX_DQ_TIME  604800     /* (7*24*60*60) 1 week */
073: 
074: #define MAXQUOTAS 2
075: #define USRQUOTA  0             /* element used for user quotas */
076: #define GRPQUOTA  1             /* element used for group quotas */
077: 
078: /*
079:  * Definitions for the default names of the quotas files.
080:  */
081: #define INITQFNAMES { \
082:    "user",      /* USRQUOTA */ \
083:    "group",   /* GRPQUOTA */ \
084:    "undefined", \
085: };
086: 
087: #define QUOTAFILENAME "quota"
088: #define QUOTAGROUP "staff"
089: 
090: #define NR_DQHASH 43          /* Just an arbitrary number any suggestions ? */
091: #define NR_DQUOTS 256         /* Number of quotas active at one time */
092: 
093: /*
094:  * Command definitions for the 'quotactl' system call.
095:  * The commands are broken into a main command defined below
096:  * and a subcommand that is used to convey the type of
097:  * quota that is being manipulated (see above).
098:  */
099: #define SUBCMDMASK  0x00ff
100: #define SUBCMDSHIFT 8
101: #define QCMD(cmd, type)  (((cmd) << SUBCMDSHIFT) | ((type) & SUBCMDMASK))
102: 
103: #if _LINUX_QUOTA_VERSION < 2
104: # define Q_QUOTAON  0x0100      /* enable quotas */
105: # define Q_QUOTAOFF 0x0200      /* disable quotas */
106: # define Q_GETQUOTA 0x0300      /* get limits and usage */
107: # define Q_SETQUOTA 0x0400      /* set limits and usage */
108: # define Q_SETUSE   0x0500      /* set usage */
109: # define Q_SYNC     0x0600      /* sync disk copy of a filesystems quotas */
110: # define Q_SETQLIM  0x0700      /* set limits */
111: # define Q_GETSTATS 0x0800      /* get collected stats */
112: # define Q_RSQUASH  0x1000      /* set root_squash option */
113: #else
114: # define Q_SYNC     0x800001    /* sync disk copy of a filesystems quotas */
115: # define Q_QUOTAON  0x800002    /* turn quotas on */
116: # define Q_QUOTAOFF 0x800003    /* turn quotas off */
117: # define Q_GETFMT   0x800004    /* get quota format used on given filesystem */
118: # define Q_GETINFO  0x800005    /* get information about quota files */
119: # define Q_SETINFO  0x800006    /* set information about quota files */
120: # define Q_GETQUOTA 0x800007    /* get user quota structure */
121: # define Q_SETQUOTA 0x800008    /* set user quota structure */
122: #endif
123: 
124: /*
125:  * The following structure defines the format of the disk quota file
126:  * (as it appears on disk) - the file is an array of these structures
127:  * indexed by user or group number.
128:  */
129: #if _LINUX_QUOTA_VERSION < 2
130: struct dqblk
131:   {
132:     u_int32_t dqb_bhardlimit;   /* absolute limit on disk blks alloc */
133:     u_int32_t dqb_bsoftlimit;   /* preferred limit on disk blks */
134:     u_int32_t dqb_curblocks;    /* current block count */
135:     u_int32_t dqb_ihardlimit;   /* maximum # allocated inodes */
136:     u_int32_t dqb_isoftlimit;   /* preferred inode limit */
137:     u_int32_t dqb_curinodes;    /* current # allocated inodes */
138:     time_t dqb_btime;           /* time limit for excessive disk use */
139:     time_t dqb_itime;           /* time limit for excessive files */
140:   };
141: #else
142: 
143: /* Flags that indicate which fields in dqblk structure are valid.  */
144: #define QIF_BLIMITS     1
145: #define QIF_SPACE       2
146: #define QIF_ILIMITS     4
147: #define QIF_INODES      8
148: #define QIF_BTIME       16
149: #define QIF_ITIME       32
150: #define QIF_LIMITS      (QIF_BLIMITS | QIF_ILIMITS)
151: #define QIF_USAGE       (QIF_SPACE | QIF_INODES)
152: #define QIF_TIMES       (QIF_BTIME | QIF_ITIME)
153: #define QIF_ALL         (QIF_LIMITS | QIF_USAGE | QIF_TIMES)
154: 
155: struct dqblk
156:   {
157:     u_int64_t dqb_bhardlimit;   /* absolute limit on disk quota blocks alloc */
158:     u_int64_t dqb_bsoftlimit;   /* preferred limit on disk quota blocks */
159:     u_int64_t dqb_curspace;     /* current quota block count */
160:     u_int64_t dqb_ihardlimit;   /* maximum # allocated inodes */
161:     u_int64_t dqb_isoftlimit;   /* preferred inode limit */
162:     u_int64_t dqb_curinodes;    /* current # allocated inodes */
163:     u_int64_t dqb_btime;        /* time limit for excessive disk use */
164:     u_int64_t dqb_itime;        /* time limit for excessive files */
165:     u_int32_t dqb_valid;        /* bitmask of QIF_* constants */
166:   };
167: #endif
168: 
169: /*
170:  * Shorthand notation.
171:  */
172: #define dq_bhardlimit   dq_dqb.dqb_bhardlimit
173: #define dq_bsoftlimit   dq_dqb.dqb_bsoftlimit
174: #if _LINUX_QUOTA_VERSION < 2
175: # define dq_curblocks   dq_dqb.dqb_curblocks
176: #else
177: # define dq_curspace    dq_dqb.dqb_curspace
178: # define dq_valid       dq_dqb.dqb_valid
179: #endif
180: #define dq_ihardlimit   dq_dqb.dqb_ihardlimit
181: #define dq_isoftlimit   dq_dqb.dqb_isoftlimit
182: #define dq_curinodes    dq_dqb.dqb_curinodes
183: #define dq_btime        dq_dqb.dqb_btime
184: #define dq_itime        dq_dqb.dqb_itime
185: 
186: #define dqoff(UID)      ((loff_t)((UID) * sizeof (struct dqblk)))
187: 
188: #if _LINUX_QUOTA_VERSION < 2
189: struct dqstats
190:   {
191:     u_int32_t lookups;
192:     u_int32_t drops;
193:     u_int32_t reads;
194:     u_int32_t writes;
195:     u_int32_t cache_hits;
196:     u_int32_t pages_allocated;
197:     u_int32_t allocated_dquots;
198:     u_int32_t free_dquots;
199:     u_int32_t syncs;
200:   };
201: #else
202: 
203: /* Flags that indicate which fields in dqinfo structure are valid.  */
204: # define IIF_BGRACE     1
205: # define IIF_IGRACE     2
206: # define IIF_FLAGS      4
207: # define IIF_ALL        (IIF_BGRACE | IIF_IGRACE | IIF_FLAGS)
208: 
209: struct dqinfo
210:   {
211:     u_int64_t dqi_bgrace;
212:     u_int64_t dqi_igrace;
213:     u_int32_t dqi_flags;
214:     u_int32_t dqi_valid;
215:   };
216: #endif
217: 
218: __BEGIN_DECLS
219: 
220: extern int quotactl (int __cmd, const char *__special, int __id,
221:                      caddr_t __addr) __THROW;
222: 
223: __END_DECLS
224: 
225: #endif /* sys/quota.h */
226: 


for client 3.21.233.41
© Andrew Scott 2006 - 2024,
All Rights Reserved
http://www.andrew-scott.uk/
Andrew Scott
http://www.andrew-scott.co.uk/