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 |
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: