1 #pragma once
2 
3 #ifdef __cplusplus
4 extern "C" {
5 #endif
6 
7 #include <stdint.h>
8 
9 #define _LINUX_QUOTA_VERSION 2
10 
11 #define dbtob(num) ((num) << 10)
12 #define btodb(num) ((num) >> 10)
13 #define fs_to_dq_blocks(num, blksize) (((num) * (blksize)) / 1024)
14 
15 #define MAX_IQ_TIME 604800
16 #define MAX_DQ_TIME 604800
17 
18 #define MAXQUOTAS 2
19 #define USRQUOTA 0
20 #define GRPQUOTA 1
21 
22 #define INITQFNAMES {"user", "group", "undefined"};
23 
24 #define QUOTAFILENAME "quota"
25 #define QUOTAGROUP "staff"
26 
27 #define NR_DQHASH 43
28 #define NR_DQUOTS 256
29 
30 #define SUBCMDMASK 0x00ff
31 #define SUBCMDSHIFT 8
32 #define QCMD(cmd, type) (((cmd) << SUBCMDSHIFT) | ((type)&SUBCMDMASK))
33 
34 #define Q_SYNC 0x800001
35 #define Q_QUOTAON 0x800002
36 #define Q_QUOTAOFF 0x800003
37 #define Q_GETFMT 0x800004
38 #define Q_GETINFO 0x800005
39 #define Q_SETINFO 0x800006
40 #define Q_GETQUOTA 0x800007
41 #define Q_SETQUOTA 0x800008
42 
43 #define QFMT_VFS_OLD 1
44 #define QFMT_VFS_V0 2
45 #define QFMT_OCFS2 3
46 #define QFMT_VFS_V1 4
47 
48 #define QIF_BLIMITS 1
49 #define QIF_SPACE 2
50 #define QIF_ILIMITS 4
51 #define QIF_INODES 8
52 #define QIF_BTIME 16
53 #define QIF_ITIME 32
54 #define QIF_LIMITS (QIF_BLIMITS | QIF_ILIMITS)
55 #define QIF_USAGE (QIF_SPACE | QIF_INODES)
56 #define QIF_TIMES (QIF_BTIME | QIF_ITIME)
57 #define QIF_ALL (QIF_LIMITS | QIF_USAGE | QIF_TIMES)
58 
59 struct dqblk {
60     uint64_t dqb_bhardlimit;
61     uint64_t dqb_bsoftlimit;
62     uint64_t dqb_curspace;
63     uint64_t dqb_ihardlimit;
64     uint64_t dqb_isoftlimit;
65     uint64_t dqb_curinodes;
66     uint64_t dqb_btime;
67     uint64_t dqb_itime;
68     uint32_t dqb_valid;
69 };
70 
71 #define dq_bhardlimit dq_dqb.dqb_bhardlimit
72 #define dq_bsoftlimit dq_dqb.dqb_bsoftlimit
73 #define dq_curspace dq_dqb.dqb_curspace
74 #define dq_valid dq_dqb.dqb_valid
75 #define dq_ihardlimit dq_dqb.dqb_ihardlimit
76 #define dq_isoftlimit dq_dqb.dqb_isoftlimit
77 #define dq_curinodes dq_dqb.dqb_curinodes
78 #define dq_btime dq_dqb.dqb_btime
79 #define dq_itime dq_dqb.dqb_itime
80 
81 #define dqoff(UID) ((long long)(UID) * sizeof(struct dqblk))
82 
83 #define IIF_BGRACE 1
84 #define IIF_IGRACE 2
85 #define IIF_FLAGS 4
86 #define IIF_ALL (IIF_BGRACE | IIF_IGRACE | IIF_FLAGS)
87 
88 struct dqinfo {
89     uint64_t dqi_bgrace;
90     uint64_t dqi_igrace;
91     uint32_t dqi_flags;
92     uint32_t dqi_valid;
93 };
94 
95 int quotactl(int, const char*, int, char*);
96 
97 #ifdef __cplusplus
98 }
99 #endif
100