Initial commit to Gerrit
[profile/ivi/quota.git] / quotaio_v2.h
1 /*
2  *
3  *      Header file for disk format of new quotafile format
4  *
5  */
6
7 #ifndef GUARD_QUOTAIO_V2_H
8 #define GUARD_QUOTAIO_V2_H
9
10 #include <sys/types.h>
11 #include "quota.h"
12
13 #define V2_DQINFOOFF    sizeof(struct v2_disk_dqheader) /* Offset of info header in file */
14 #define INIT_V2_VERSIONS { 1, 1}
15
16 struct v2_disk_dqheader {
17         u_int32_t dqh_magic;    /* Magic number identifying file */
18         u_int32_t dqh_version;  /* File version */
19 } __attribute__ ((packed));
20
21 /* Flags for version specific files */
22 #define V2_DQF_MASK  0x0000     /* Mask for all valid ondisk flags */
23
24 /* Header with type and version specific information */
25 struct v2_disk_dqinfo {
26         u_int32_t dqi_bgrace;   /* Time before block soft limit becomes hard limit */
27         u_int32_t dqi_igrace;   /* Time before inode soft limit becomes hard limit */
28         u_int32_t dqi_flags;    /* Flags for quotafile (DQF_*) */
29         u_int32_t dqi_blocks;   /* Number of blocks in file */
30         u_int32_t dqi_free_blk; /* Number of first free block in the list */
31         u_int32_t dqi_free_entry;       /* Number of block with at least one free entry */
32 } __attribute__ ((packed));
33
34 /* Structure of quota for one user on disk */
35 struct v2r0_disk_dqblk {
36         u_int32_t dqb_id;       /* id this quota applies to */
37         u_int32_t dqb_ihardlimit;       /* absolute limit on allocated inodes */
38         u_int32_t dqb_isoftlimit;       /* preferred inode limit */
39         u_int32_t dqb_curinodes;        /* current # allocated inodes */
40         u_int32_t dqb_bhardlimit;       /* absolute limit on disk space (in QUOTABLOCK_SIZE) */
41         u_int32_t dqb_bsoftlimit;       /* preferred limit on disk space (in QUOTABLOCK_SIZE) */
42         u_int64_t dqb_curspace; /* current space occupied (in bytes) */
43         u_int64_t dqb_btime;    /* time limit for excessive disk use */
44         u_int64_t dqb_itime;    /* time limit for excessive inode use */
45 } __attribute__ ((packed));
46
47 struct v2r1_disk_dqblk {
48         u_int32_t dqb_id;       /* id this quota applies to */
49         u_int32_t dqb_pad;
50         u_int64_t dqb_ihardlimit;       /* absolute limit on allocated inodes */
51         u_int64_t dqb_isoftlimit;       /* preferred inode limit */
52         u_int64_t dqb_curinodes;        /* current # allocated inodes */
53         u_int64_t dqb_bhardlimit;       /* absolute limit on disk space (in QUOTABLOCK_SIZE) */
54         u_int64_t dqb_bsoftlimit;       /* preferred limit on disk space (in QUOTABLOCK_SIZE) */
55         u_int64_t dqb_curspace; /* current space occupied (in bytes) */
56         u_int64_t dqb_btime;    /* time limit for excessive disk use */
57         u_int64_t dqb_itime;    /* time limit for excessive inode use */
58 } __attribute__ ((packed));
59
60 /* Structure of quota for communication with kernel */
61 struct v2_kern_dqblk {
62         unsigned int dqb_ihardlimit;
63         unsigned int dqb_isoftlimit;
64         unsigned int dqb_curinodes;
65         unsigned int dqb_bhardlimit;
66         unsigned int dqb_bsoftlimit;
67         qsize_t dqb_curspace;
68         time_t dqb_btime;
69         time_t dqb_itime;
70 };
71
72 /* Structure of quotafile info for communication with kernel (obsolete) */
73 struct v2_kern_dqinfo {
74         unsigned int dqi_bgrace;
75         unsigned int dqi_igrace;
76         unsigned int dqi_flags;
77         unsigned int dqi_blocks;
78         unsigned int dqi_free_blk;
79         unsigned int dqi_free_entry;
80 };
81
82 /* Structure with gathered statistics from kernel */
83 struct v2_dqstats {
84         u_int32_t lookups;
85         u_int32_t drops;
86         u_int32_t reads;
87         u_int32_t writes;
88         u_int32_t cache_hits;
89         u_int32_t allocated_dquots;
90         u_int32_t free_dquots;
91         u_int32_t syncs;
92         u_int32_t version;
93 };
94
95 #endif