This repository has been archived by the owner on Oct 12, 2022. It is now read-only.
-
-
Notifications
You must be signed in to change notification settings - Fork 426
/
mount.d
316 lines (277 loc) · 8.72 KB
/
mount.d
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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
//Written in the D programming language
/++
D header file for FreeBSD's sys/mount.h.
Copyright: Copyright 2018 -
License: $(HTTP www.boost.org/LICENSE_1_0.txt, Boost License 1.0).
Authors: $(HTTP jmdavisprog.com, Jonathan M Davis)
+/
module core.sys.freebsd.sys.mount;
version (FreeBSD):
import core.sys.freebsd.config;
import core.stdc.config : c_long;
import core.sys.posix.sys.stat : stat_t;
import core.sys.posix.sys.types : uid_t;
extern(C) @nogc nothrow:
struct fsid_t
{
int[2] val;
}
enum MAXFIDSZ = 16;
struct fid
{
ushort fid_len;
ushort fid_data0;
char[MAXFIDSZ] fid_data = 0;
}
enum MFSNAMELEN = 16;
static if (__FreeBSD_version >= 1200000 && __FreeBSD_version < 1300000)
{
enum MNAMELEN = 1024;
enum STATFS_VERSION = 0x20140518;
}
else static if (__FreeBSD_version < 1200000)
{
enum MNAMELEN = 88;
enum STATFS_VERSION = 0x20030518;
}
else
static assert(0, "Unsupported version of FreeBSD");
struct statfs_t
{
uint f_version;
uint f_type;
ulong f_flags;
ulong f_bsize;
ulong f_iosize;
ulong f_blocks;
ulong f_bfree;
long f_bavail;
ulong f_files;
long f_ffree;
ulong f_syncwrites;
ulong f_asyncwrites;
ulong f_syncreads;
ulong f_asyncreads;
ulong[10] f_spare;
uint f_namemax;
uid_t f_owner;
fsid_t f_fsid;
char[80] f_charspare = 0;
char[MFSNAMELEN] f_fstypename = 0;
char[MNAMELEN] f_mntfromname = 0;
char[MNAMELEN] f_mntonname = 0;
}
enum ulong MNT_RDONLY = 0x0000000000000001;
enum ulong MNT_SYNCHRONOUS = 0x0000000000000002;
enum ulong MNT_NOEXEC = 0x0000000000000004;
enum ulong MNT_NOSUID = 0x0000000000000008;
enum ulong MNT_NFS4ACLS = 0x0000000000000010;
enum ulong MNT_UNION = 0x0000000000000020;
enum ulong MNT_ASYNC = 0x0000000000000040;
enum ulong MNT_SUIDDIR = 0x0000000000100000;
enum ulong MNT_SOFTDEP = 0x0000000000200000;
enum ulong MNT_NOSYMFOLLOW = 0x0000000000400000;
enum ulong MNT_GJOURNAL = 0x0000000002000000;
enum ulong MNT_MULTILABEL = 0x0000000004000000;
enum ulong MNT_ACLS = 0x0000000008000000;
enum ulong MNT_NOATIME = 0x0000000010000000;
enum ulong MNT_NOCLUSTERR = 0x0000000040000000;
enum ulong MNT_NOCLUSTERW = 0x0000000080000000;
enum ulong MNT_SUJ = 0x0000000100000000;
enum ulong MNT_AUTOMOUNTED = 0x0000000200000000;
enum ulong MNT_EXRDONLY = 0x0000000000000080;
enum ulong MNT_EXPORTED = 0x0000000000000100;
enum ulong MNT_DEFEXPORTED = 0x0000000000000200;
enum ulong MNT_EXPORTANON = 0x0000000000000400;
enum ulong MNT_EXKERB = 0x0000000000000800;
enum ulong MNT_EXPUBLIC = 0x0000000020000000;
enum ulong MNT_LOCAL = 0x0000000000001000;
enum ulong MNT_QUOTA = 0x0000000000002000;
enum ulong MNT_ROOTFS = 0x0000000000004000;
enum ulong MNT_USER = 0x0000000000008000;
enum ulong MNT_IGNORE = 0x0000000000800000;
enum MNT_VISFLAGMASK = MNT_RDONLY | MNT_SYNCHRONOUS | MNT_NOEXEC |
MNT_NOSUID | MNT_UNION | MNT_SUJ |
MNT_ASYNC | MNT_EXRDONLY | MNT_EXPORTED |
MNT_DEFEXPORTED | MNT_EXPORTANON| MNT_EXKERB |
MNT_LOCAL | MNT_USER | MNT_QUOTA |
MNT_ROOTFS | MNT_NOATIME | MNT_NOCLUSTERR |
MNT_NOCLUSTERW | MNT_SUIDDIR | MNT_SOFTDEP |
MNT_IGNORE | MNT_EXPUBLIC | MNT_NOSYMFOLLOW |
MNT_GJOURNAL | MNT_MULTILABEL | MNT_ACLS |
MNT_NFS4ACLS | MNT_AUTOMOUNTED;
enum MNT_UPDATEMASK = MNT_NOSUID | MNT_NOEXEC |
MNT_SYNCHRONOUS | MNT_UNION | MNT_ASYNC |
MNT_NOATIME |
MNT_NOSYMFOLLOW | MNT_IGNORE |
MNT_NOCLUSTERR | MNT_NOCLUSTERW | MNT_SUIDDIR |
MNT_ACLS | MNT_USER | MNT_NFS4ACLS |
MNT_AUTOMOUNTED;
enum ulong MNT_UPDATE = 0x0000000000010000;
enum ulong MNT_DELEXPORT = 0x0000000000020000;
enum ulong MNT_RELOAD = 0x0000000000040000;
enum ulong MNT_FORCE = 0x0000000000080000;
enum ulong MNT_SNAPSHOT = 0x0000000001000000;
enum ulong MNT_NONBUSY = 0x0000000004000000;
enum ulong MNT_BYFSID = 0x0000000008000000;
enum ulong MNT_CMDFLAGS = MNT_UPDATE | MNT_DELEXPORT | MNT_RELOAD |
MNT_FORCE | MNT_SNAPSHOT | MNT_NONBUSY |
MNT_BYFSID;
enum uint MNTK_UNMOUNTF = 0x00000001;
enum uint MNTK_ASYNC = 0x00000002;
enum uint MNTK_SOFTDEP = 0x00000004;
enum uint MNTK_NOINSMNTQ = 0x00000008;
enum uint MNTK_DRAINING = 0x00000010;
enum uint MNTK_REFEXPIRE = 0x00000020;
enum uint MNTK_EXTENDED_SHARED = 0x00000040;
enum uint MNTK_SHARED_WRITES = 0x00000080;
enum uint MNTK_NO_IOPF = 0x00000100;
enum uint MNTK_VGONE_UPPER = 0x00000200;
enum uint MNTK_VGONE_WAITER = 0x00000400;
enum uint MNTK_LOOKUP_EXCL_DOTDOT = 0x00000800;
enum uint MNTK_MARKER = 0x00001000;
enum uint MNTK_UNMAPPED_BUFS = 0x00002000;
enum uint MNTK_USES_BCACHE = 0x00004000;
enum uint MNTK_NOASYNC = 0x00800000;
enum uint MNTK_UNMOUNT = 0x01000000;
enum uint MNTK_MWAIT = 0x02000000;
enum uint MNTK_SUSPEND = 0x08000000;
enum uint MNTK_SUSPEND2 = 0x04000000;
enum uint MNTK_SUSPENDED = 0x10000000;
enum uint MNTK_NULL_NOCACHE = 0x20000000;
enum uint MNTK_LOOKUP_SHARED = 0x40000000;
enum uint MNTK_NOKNOTE = 0x80000000;
enum VFS_VFSCONF = 0;
enum VFS_GENERIC = 0;
enum VFS_MAXTYPENUM = 1;
enum VFS_CONF = 2;
enum MNT_WAIT = 1;
enum MNT_NOWAIT = 2;
enum MNT_LAZY = 3;
enum MNT_SUSPEND = 4;
struct fhandle_t
{
fsid_t fh_fsid;
fid fh_fid;
}
// TODO - requires declarations from elsewhere that we don't currently have bindings for.
/+
struct oexport_args
{
int ex_flags;
uid_t ex_root;
xucred ex_anon;
sockaddr* ex_addr;
ubyte ex_addrlen;
sockaddr* ex_mask;
ubyte ex_masklen;
char* ex_indexfile;
}
enum MAXSECFLAVORS = 5;
struct export_args
{
int ex_flags;
uid_t ex_root;
xucred ex_anon;
sockaddr* ex_addr;
ubyte ex_addrlen;
sockaddr* ex_mask;
ubyte ex_masklen;
char* ex_indexfile;
int ex_numsecflavors;
int[MAXSECFLAVORS] ex_secflavors;
}
struct nfs_public
{
int np_valid;
fhandle_t np_handle;
mount_t* np_mount;
char* np_index;
}
struct vfsconf
{
uint vfc_version;
char[MFSNAMELEN] vfc_name = 0;
vfsops* vfc_vfsops;
int vfc_typenum;
int vfc_refcount;
int vfc_flags;
vfsoptdecl* vfc_opts;
TAILQ_ENTRY(vfsconf) vfc_list;
}
struct xvfsconf
{
vfsops* vfc_vfsops;
char[MFSNAMELEN] vfc_name = 0;
int vfc_typenum;
int vfc_refcount;
int vfc_flags;
vfsconf* vfc_next;
}
+/
struct ovfsconf
{
void* vfc_vfsops;
char[32] vfc_name = 0;
int vfc_index;
int vfc_refcount;
int vfc_flags;
}
enum uint VFCF_STATIC = 0x00010000;
enum uint VFCF_NETWORK = 0x00020000;
enum uint VFCF_READONLY = 0x00040000;
enum uint VFCF_SYNTHETIC = 0x00080000;
enum uint VFCF_LOOPBACK = 0x00100000;
enum uint VFCF_UNICODE = 0x00200000;
enum uint VFCF_JAIL = 0x00400000;
enum uint VFCF_DELEGADMIN = 0x00800000;
enum uint VFCF_SBDRY = 0x01000000;
alias fsctlop_t = uint;
struct vfsidctl
{
int vc_vers;
fsid_t vc_fsid;
char[MFSNAMELEN] vc_fstypename = 0;
fsctlop_t vc_op;
void* vc_ptr;
size_t vc_len;
uint[12] vc_spare;
}
enum uint VFS_CTL_VERS1 = 0x01;
enum uint VFS_CTL_QUERY = 0x00010001;
enum uint VFS_CTL_TIMEO = 0x00010002;
enum uint VFS_CTL_NOLOCKS = 0x00010003;
struct vfsquery
{
uint vq_flags;
uint[31] vq_spare;
}
enum uint VQ_NOTRESP = 0x0001;
enum uint VQ_NEEDAUTH = 0x0002;
enum uint VQ_LOWDISK = 0x0004;
enum uint VQ_MOUNT = 0x0008;
enum uint VQ_UNMOUNT = 0x0010;
enum uint VQ_DEAD = 0x0020;
enum uint VQ_ASSIST = 0x0040;
enum uint VQ_NOTRESPLOCK = 0x0080;
enum uint VQ_FLAG0100 = 0x0100;
enum uint VQ_FLAG0200 = 0x0200;
enum uint VQ_FLAG0400 = 0x0400;
enum uint VQ_FLAG0800 = 0x0800;
enum uint VQ_FLAG1000 = 0x1000;
enum uint VQ_FLAG2000 = 0x2000;
enum uint VQ_FLAG4000 = 0x4000;
enum uint VQ_FLAG8000 = 0x8000;
pragma(mangle, "fhopen@@FBSD_1.0") int fhopen(const fhandle_t*, int);
pragma(mangle, "fhstat@FBSD_1.0") int fhstat(const fhandle_t*, stat_t*);
pragma(mangle, "fhstatfs@FBSD_1.0") int fhstatfs(const fhandle_t*, statfs_t*);
pragma(mangle, "fstatfs@FBSD_1.0") int fstatfs(int, statfs_t*);
pragma(mangle, "getfh@@FBSD_1.0") int getfh(const char*, fhandle_t*);
pragma(mangle, "getfsstat@FBSD_1.0") int getfsstat(statfs_t*, c_long, int);
pragma(mangle, "getmntinfo@FBSD_1.0") int getmntinfo(statfs_t**, int);
pragma(mangle, "lgetfh@@FBSD_1.0") int lgetfh(const char*, fhandle_t*);
pragma(mangle, "mount@@FBSD_1.0") int mount(const char*, const char*, int, void*);
//int nmount(iovec*, uint, int);
pragma(mangle, "statfs@FBSD_1.0") int statfs(const char*, statfs_t*);
pragma(mangle, "unmount@@FBSD_1.0") int unmount(const char*, int);
//int getvfsbyname(const char*, xvfsconf*);