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