samba_linux_quota.h [plain text]
#ifndef _SAMBA_LINUX_QUOTA_H_
#define _SAMBA_LINUX_QUOTA_H_
#undef QUOTABLOCK_SIZE
#ifndef _QUOTAIO_LINUX_V1
#define _QUOTAIO_LINUX_V1
#include <sys/types.h>
#define V1_DQBLK_SIZE_BITS 10
#define V1_DQBLK_SIZE (1 << V1_DQBLK_SIZE_BITS)
#define V1_DQOFF(__id) ((loff_t) ((__id) * sizeof(struct v1_disk_dqblk)))
struct v1_disk_dqblk {
u_int32_t dqb_bhardlimit;
u_int32_t dqb_bsoftlimit;
u_int32_t dqb_curblocks;
u_int32_t dqb_ihardlimit;
u_int32_t dqb_isoftlimit;
u_int32_t dqb_curinodes;
time_t dqb_btime;
time_t dqb_itime;
} __attribute__ ((packed));
struct v1_kern_dqblk {
u_int32_t dqb_bhardlimit;
u_int32_t dqb_bsoftlimit;
u_int32_t dqb_curblocks;
u_int32_t dqb_ihardlimit;
u_int32_t dqb_isoftlimit;
u_int32_t dqb_curinodes;
time_t dqb_btime;
time_t dqb_itime;
};
struct v1_dqstats {
u_int32_t lookups;
u_int32_t drops;
u_int32_t reads;
u_int32_t writes;
u_int32_t cache_hits;
u_int32_t allocated_dquots;
u_int32_t free_dquots;
u_int32_t syncs;
};
#ifndef Q_V1_GETQUOTA
#define Q_V1_GETQUOTA 0x300
#endif
#ifndef Q_V1_SETQUOTA
#define Q_V1_SETQUOTA 0x400
#endif
#endif
#ifndef _QUOTAIO_LINUX_V2
#define _QUOTAIO_LINUX_V2
#include <sys/types.h>
#ifndef _QUOTA_LINUX
#define _QUOTA_LINUX
#include <sys/types.h>
typedef u_int32_t qid_t;
typedef u_int64_t qsize_t;
#define MAXQUOTAS 2
#define USRQUOTA 0
#define GRPQUOTA 1
#define INITQFNAMES { \
"user", \
"group", \
"undefined", \
}
#define INITQMAGICS {\
0xd9c01f11, \
0xd9c01927 \
}
#define QUOTABLOCK_BITS 10
#define QUOTABLOCK_SIZE (1 << QUOTABLOCK_BITS)
#define qb2kb(x) ((x) << (QUOTABLOCK_BITS-10))
#define kb2qb(x) ((x) >> (QUOTABLOCK_BITS-10))
#define toqb(x) (((x) + QUOTABLOCK_SIZE - 1) >> QUOTABLOCK_BITS)
#define SUBCMDMASK 0x00ff
#define SUBCMDSHIFT 8
#define QCMD(cmd, type) (((cmd) << SUBCMDSHIFT) | ((type) & SUBCMDMASK))
#define Q_6_5_QUOTAON 0x0100
#define Q_6_5_QUOTAOFF 0x0200
#define Q_6_5_SYNC 0x0600
#define Q_SYNC 0x800001
#define Q_QUOTAON 0x800002
#define Q_QUOTAOFF 0x800003
#define Q_GETFMT 0x800004
#define Q_GETINFO 0x800005
#define Q_SETINFO 0x800006
#define Q_GETQUOTA 0x800007
#define Q_SETQUOTA 0x800008
#define QIF_BLIMITS 1
#define QIF_SPACE 2
#define QIF_ILIMITS 4
#define QIF_INODES 8
#define QIF_BTIME 16
#define QIF_ITIME 32
#define QIF_LIMITS (QIF_BLIMITS | QIF_ILIMITS)
#define QIF_USAGE (QIF_SPACE | QIF_INODES)
#define QIF_TIMES (QIF_BTIME | QIF_ITIME)
#define QIF_ALL (QIF_LIMITS | QIF_USAGE | QIF_TIMES)
struct if_dqblk {
u_int64_t dqb_bhardlimit;
u_int64_t dqb_bsoftlimit;
u_int64_t dqb_curspace;
u_int64_t dqb_ihardlimit;
u_int64_t dqb_isoftlimit;
u_int64_t dqb_curinodes;
u_int64_t dqb_btime;
u_int64_t dqb_itime;
u_int32_t dqb_valid;
};
#define IIF_BGRACE 1
#define IIF_IGRACE 2
#define IIF_FLAGS 4
#define IIF_ALL (IIF_BGRACE | IIF_IGRACE | IIF_FLAGS)
struct if_dqinfo {
u_int64_t dqi_bgrace;
u_int64_t dqi_igrace;
u_int32_t dqi_flags;
u_int32_t dqi_valid;
};
#define QFMT_VFS_OLD 1
#define QFMT_VFS_V0 2
#define V1_DQF_RSQUASH 1
#include <sys/ioctl.h>
#ifndef FIOQSIZE
#if defined(__alpha__) || defined(__powerpc__) || defined(__sh__) || defined(__sparc__) || defined(__sparc64__)
#define FIOQSIZE _IOR('f', 128, loff_t)
#elif defined(__arm__) || defined(__mc68000__) || defined(__s390__)
#define FIOQSIZE 0x545E
#elif defined(__i386__) || defined(__i486__) || defined(__i586__) || defined(__ia64__) || defined(__parisc__) || defined(__cris__) || defined(__hppa__)
#define FIOQSIZE 0x5460
#elif defined(__mips__) || defined(__mips64__)
#define FIOQSIZE 0x6667
#endif
#endif
long quotactl __P((int, const char *, qid_t, caddr_t));
#endif
#define V2_DQINFOOFF sizeof(struct v2_disk_dqheader)
#define V2_DQBLKSIZE_BITS 10
#define V2_DQBLKSIZE (1 << V2_DQBLKSIZE_BITS)
#define V2_DQTREEOFF 1
#define V2_DQTREEDEPTH 4
#define V2_DQSTRINBLK ((V2_DQBLKSIZE - sizeof(struct v2_disk_dqdbheader)) / sizeof(struct v2_disk_dqblk))
#define V2_GETIDINDEX(id, depth) (((id) >> ((V2_DQTREEDEPTH-(depth)-1)*8)) & 0xff)
#define V2_GETENTRIES(buf) ((struct v2_disk_dqblk *)(((char *)(buf)) + sizeof(struct v2_disk_dqdbheader)))
#define INIT_V2_VERSIONS { 0, 0}
struct v2_disk_dqheader {
u_int32_t dqh_magic;
u_int32_t dqh_version;
} __attribute__ ((packed));
#define V2_DQF_MASK 0x0000
struct v2_disk_dqinfo {
u_int32_t dqi_bgrace;
u_int32_t dqi_igrace;
u_int32_t dqi_flags;
u_int32_t dqi_blocks;
u_int32_t dqi_free_blk;
u_int32_t dqi_free_entry;
} __attribute__ ((packed));
struct v2_disk_dqdbheader {
u_int32_t dqdh_next_free;
u_int32_t dqdh_prev_free;
u_int16_t dqdh_entries;
u_int16_t dqdh_pad1;
u_int32_t dqdh_pad2;
} __attribute__ ((packed));
struct v2_disk_dqblk {
u_int32_t dqb_id;
u_int32_t dqb_ihardlimit;
u_int32_t dqb_isoftlimit;
u_int32_t dqb_curinodes;
u_int32_t dqb_bhardlimit;
u_int32_t dqb_bsoftlimit;
u_int64_t dqb_curspace;
u_int64_t dqb_btime;
u_int64_t dqb_itime;
} __attribute__ ((packed));
struct v2_kern_dqblk {
unsigned int dqb_ihardlimit;
unsigned int dqb_isoftlimit;
unsigned int dqb_curinodes;
unsigned int dqb_bhardlimit;
unsigned int dqb_bsoftlimit;
qsize_t dqb_curspace;
time_t dqb_btime;
time_t dqb_itime;
};
struct v2_kern_dqinfo {
unsigned int dqi_bgrace;
unsigned int dqi_igrace;
unsigned int dqi_flags;
unsigned int dqi_blocks;
unsigned int dqi_free_blk;
unsigned int dqi_free_entry;
};
struct v2_dqstats {
u_int32_t lookups;
u_int32_t drops;
u_int32_t reads;
u_int32_t writes;
u_int32_t cache_hits;
u_int32_t allocated_dquots;
u_int32_t free_dquots;
u_int32_t syncs;
u_int32_t version;
};
#ifndef Q_V2_GETQUOTA
#define Q_V2_GETQUOTA 0x0D00
#endif
#ifndef Q_V2_SETQUOTA
#define Q_V2_SETQUOTA 0x0E00
#endif
#endif
#ifndef QUOTABLOCK_SIZE
#define QUOTABLOCK_SIZE 1024
#endif
#endif