1/* $NetBSD: quotactl.h,v 1.38 2014/06/28 22:27:50 dholland Exp $ */
2/*-
3 * Copyright (c) 2011 The NetBSD Foundation, Inc.
4 * All rights reserved.
5 *
6 * This code is derived from software contributed to The NetBSD Foundation
7 * by David A. Holland.
8 *
9 * Redistribution and use in source and binary forms, with or without
10 * modification, are permitted provided that the following conditions
11 * are met:
12 * 1. Redistributions of source code must retain the above copyright
13 * notice, this list of conditions and the following disclaimer.
14 * 2. Redistributions in binary form must reproduce the above copyright
15 * notice, this list of conditions and the following disclaimer in the
16 * documentation and/or other materials provided with the distribution.
17 *
18 * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
19 * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
20 * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
21 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
22 * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
23 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
24 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
25 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
26 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
27 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
28 * POSSIBILITY OF SUCH DAMAGE.
29 */
30
31#ifndef _SYS_QUOTACTL_H_
32#define _SYS_QUOTACTL_H_
33
34#include <sys/stdint.h>
35
36/*
37 * Note - this is an internal interface. Application code (and,
38 * really, anything that isn't libquota or inside the kernel) should
39 * use the <quota.h> API instead.
40 */
41
42/* Size of random quota strings */
43#define QUOTA_NAMELEN 32
44
45/*
46 * Structure for QUOTACTL_STAT.
47 */
48struct quotastat {
49 char qs_implname[QUOTA_NAMELEN];
50 int qs_numidtypes;
51 int qs_numobjtypes;
52 unsigned qs_restrictions; /* semantic restriction codes */
53};
54
55/*
56 * Structures for QUOTACTL_IDTYPESTAT and QUOTACTL_OBJTYPESTAT.
57 */
58struct quotaidtypestat {
59 char qis_name[QUOTA_NAMELEN];
60};
61struct quotaobjtypestat {
62 char qos_name[QUOTA_NAMELEN];
63 int qos_isbytes;
64};
65
66/*
67 * Semi-opaque structure for cursors. This holds the cursor state in
68 * userland; the size is exposed only to libquota, not to client code,
69 * and is meant to be large enough to accommodate all likely future
70 * expansion without being unduly bloated, as it will need to be
71 * copied in and out for every call using it.
72 */
73struct quotakcursor {
74 union {
75 char qkc_space[64];
76 uintmax_t __qkc_forcealign;
77 } u;
78};
79
80/* Command codes. */
81#define QUOTACTL_STAT 0
82#define QUOTACTL_IDTYPESTAT 1
83#define QUOTACTL_OBJTYPESTAT 2
84#define QUOTACTL_GET 3
85#define QUOTACTL_PUT 4
86#define QUOTACTL_DEL 5
87#define QUOTACTL_CURSOROPEN 6
88#define QUOTACTL_CURSORCLOSE 7
89#define QUOTACTL_CURSORSKIPIDTYPE 8
90#define QUOTACTL_CURSORGET 9
91#define QUOTACTL_CURSORATEND 10
92#define QUOTACTL_CURSORREWIND 11
93#define QUOTACTL_QUOTAON 12
94#define QUOTACTL_QUOTAOFF 13
95
96/* Argument encoding. */
97struct quotactl_args {
98 unsigned qc_op;
99 union {
100 struct {
101 struct quotastat *qc_info;
102 } stat;
103 struct {
104 int qc_idtype;
105 struct quotaidtypestat *qc_info;
106 } idtypestat;
107 struct {
108 int qc_objtype;
109 struct quotaobjtypestat *qc_info;
110 } objtypestat;
111 struct {
112 const struct quotakey *qc_key;
113 struct quotaval *qc_val;
114 } get;
115 struct {
116 const struct quotakey *qc_key;
117 const struct quotaval *qc_val;
118 } put;
119 struct {
120 const struct quotakey *qc_key;
121 } del;
122 struct {
123 struct quotakcursor *qc_cursor;
124 } cursoropen;
125 struct {
126 struct quotakcursor *qc_cursor;
127 } cursorclose;
128 struct {
129 struct quotakcursor *qc_cursor;
130 int qc_idtype;
131 } cursorskipidtype;
132 struct {
133 struct quotakcursor *qc_cursor;
134 struct quotakey *qc_keys;
135 struct quotaval *qc_vals;
136 unsigned qc_maxnum;
137 unsigned *qc_ret;
138 } cursorget;
139 struct {
140 struct quotakcursor *qc_cursor;
141 int *qc_ret; /* really boolean */
142 } cursoratend;
143 struct {
144 struct quotakcursor *qc_cursor;
145 } cursorrewind;
146 struct {
147 int qc_idtype;
148 const char *qc_quotafile;
149 } quotaon;
150 struct {
151 int qc_idtype;
152 } quotaoff;
153 } u;
154};
155
156#if !defined(_KERNEL) && !defined(_STANDALONE)
157__BEGIN_DECLS
158int __quotactl(const char *, struct quotactl_args *);
159__END_DECLS
160#endif
161
162#endif /* _SYS_QUOTACTL_H_ */
163