blob: 1b0f0423001f72e88479c8731a5117a591137776 [file]
//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)
{
enum MNAMELEN = 1024;
enum STATFS_VERSION = 0x20140518;
}
else
{
enum MNAMELEN = 88;
enum STATFS_VERSION = 0x20030518;
}
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;
version (GNU)
{
int fhopen(const fhandle_t*, int);
int fhstat(const fhandle_t*, stat_t*);
int fhstatfs(const fhandle_t*, statfs_t*);
int fstatfs(int, statfs_t*);
int getfh(const char*, fhandle_t*);
int getfsstat(statfs_t*, c_long, int);
int getmntinfo(statfs_t**, int);
int lgetfh(const char*, fhandle_t*);
int mount(const char*, const char*, int, void*);
//int nmount(iovec*, uint, int);
int statfs(const char*, statfs_t*);
int unmount(const char*, int);
//int getvfsbyname(const char*, xvfsconf*);
}
else
{
static if (__FreeBSD_version >= 1200000)
{
pragma(mangle, "fhstat@FBSD_1.5") int fhstat(const fhandle_t*, stat_t*);
pragma(mangle, "fhstatfs@FBSD_1.5") int fhstatfs(const fhandle_t*, statfs_t*);
pragma(mangle, "fstatfs@FBSD_1.5") int fstatfs(int, statfs_t*);
pragma(mangle, "getfsstat@FBSD_1.5") int getfsstat(statfs_t*, c_long, int);
pragma(mangle, "getmntinfo@FBSD_1.5") int getmntinfo(statfs_t**, int);
pragma(mangle, "statfs@FBSD_1.5") int statfs(const char*, statfs_t*);
}
else
{
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, "getfsstat@FBSD_1.0") int getfsstat(statfs_t*, c_long, int);
pragma(mangle, "getmntinfo@FBSD_1.0") int getmntinfo(statfs_t**, int);
pragma(mangle, "statfs@FBSD_1.0") int statfs(const char*, statfs_t*);
}
pragma(mangle, "fhopen@@FBSD_1.0") int fhopen(const fhandle_t*, int);
pragma(mangle, "getfh@@FBSD_1.0") int getfh(const char*, fhandle_t*);
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, "unmount@@FBSD_1.0") int unmount(const char*, int);
//int getvfsbyname(const char*, xvfsconf*);
}