xref: /aosp_15_r20/external/crosvm/fuse/src/sys.rs (revision bb4ee6a4ae7042d18b07a98463b9c8b875e44b39)
1*bb4ee6a4SAndroid Build Coastguard Worker // Copyright 2019 The ChromiumOS Authors
2*bb4ee6a4SAndroid Build Coastguard Worker // Use of this source code is governed by a BSD-style license that can be
3*bb4ee6a4SAndroid Build Coastguard Worker // found in the LICENSE file.
4*bb4ee6a4SAndroid Build Coastguard Worker 
5*bb4ee6a4SAndroid Build Coastguard Worker use std::mem;
6*bb4ee6a4SAndroid Build Coastguard Worker 
7*bb4ee6a4SAndroid Build Coastguard Worker use bitflags::bitflags;
8*bb4ee6a4SAndroid Build Coastguard Worker use enumn::N;
9*bb4ee6a4SAndroid Build Coastguard Worker use zerocopy::AsBytes;
10*bb4ee6a4SAndroid Build Coastguard Worker use zerocopy::FromBytes;
11*bb4ee6a4SAndroid Build Coastguard Worker use zerocopy::FromZeroes;
12*bb4ee6a4SAndroid Build Coastguard Worker 
13*bb4ee6a4SAndroid Build Coastguard Worker /// Version number of this interface.
14*bb4ee6a4SAndroid Build Coastguard Worker pub const KERNEL_VERSION: u32 = 7;
15*bb4ee6a4SAndroid Build Coastguard Worker 
16*bb4ee6a4SAndroid Build Coastguard Worker /// Oldest supported minor version of the fuse interface.
17*bb4ee6a4SAndroid Build Coastguard Worker pub const OLDEST_SUPPORTED_KERNEL_MINOR_VERSION: u32 = 27;
18*bb4ee6a4SAndroid Build Coastguard Worker 
19*bb4ee6a4SAndroid Build Coastguard Worker /// Minor version number of this interface.
20*bb4ee6a4SAndroid Build Coastguard Worker pub const KERNEL_MINOR_VERSION: u32 = 31;
21*bb4ee6a4SAndroid Build Coastguard Worker 
22*bb4ee6a4SAndroid Build Coastguard Worker /// The ID of the inode corresponding to the root directory of the file system.
23*bb4ee6a4SAndroid Build Coastguard Worker pub const ROOT_ID: u64 = 1;
24*bb4ee6a4SAndroid Build Coastguard Worker 
25*bb4ee6a4SAndroid Build Coastguard Worker // Bitmasks for `fuse_setattr_in.valid`.
26*bb4ee6a4SAndroid Build Coastguard Worker const FATTR_MODE: u32 = 1;
27*bb4ee6a4SAndroid Build Coastguard Worker const FATTR_UID: u32 = 2;
28*bb4ee6a4SAndroid Build Coastguard Worker const FATTR_GID: u32 = 4;
29*bb4ee6a4SAndroid Build Coastguard Worker const FATTR_SIZE: u32 = 8;
30*bb4ee6a4SAndroid Build Coastguard Worker const FATTR_ATIME: u32 = 16;
31*bb4ee6a4SAndroid Build Coastguard Worker const FATTR_MTIME: u32 = 32;
32*bb4ee6a4SAndroid Build Coastguard Worker pub const FATTR_FH: u32 = 64;
33*bb4ee6a4SAndroid Build Coastguard Worker const FATTR_ATIME_NOW: u32 = 128;
34*bb4ee6a4SAndroid Build Coastguard Worker const FATTR_MTIME_NOW: u32 = 256;
35*bb4ee6a4SAndroid Build Coastguard Worker pub const FATTR_LOCKOWNER: u32 = 512;
36*bb4ee6a4SAndroid Build Coastguard Worker const FATTR_CTIME: u32 = 1024;
37*bb4ee6a4SAndroid Build Coastguard Worker 
38*bb4ee6a4SAndroid Build Coastguard Worker bitflags! {
39*bb4ee6a4SAndroid Build Coastguard Worker     #[derive(Copy, Clone, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
40*bb4ee6a4SAndroid Build Coastguard Worker     #[repr(transparent)]
41*bb4ee6a4SAndroid Build Coastguard Worker     pub struct SetattrValid: u32 {
42*bb4ee6a4SAndroid Build Coastguard Worker         const MODE = FATTR_MODE;
43*bb4ee6a4SAndroid Build Coastguard Worker         const UID = FATTR_UID;
44*bb4ee6a4SAndroid Build Coastguard Worker         const GID = FATTR_GID;
45*bb4ee6a4SAndroid Build Coastguard Worker         const SIZE = FATTR_SIZE;
46*bb4ee6a4SAndroid Build Coastguard Worker         const ATIME = FATTR_ATIME;
47*bb4ee6a4SAndroid Build Coastguard Worker         const MTIME = FATTR_MTIME;
48*bb4ee6a4SAndroid Build Coastguard Worker         const ATIME_NOW = FATTR_ATIME_NOW;
49*bb4ee6a4SAndroid Build Coastguard Worker         const MTIME_NOW = FATTR_MTIME_NOW;
50*bb4ee6a4SAndroid Build Coastguard Worker         const CTIME = FATTR_CTIME;
51*bb4ee6a4SAndroid Build Coastguard Worker     }
52*bb4ee6a4SAndroid Build Coastguard Worker }
53*bb4ee6a4SAndroid Build Coastguard Worker 
54*bb4ee6a4SAndroid Build Coastguard Worker // Flags returned by the OPEN request.
55*bb4ee6a4SAndroid Build Coastguard Worker 
56*bb4ee6a4SAndroid Build Coastguard Worker /// Bypass page cache for this open file.
57*bb4ee6a4SAndroid Build Coastguard Worker const FOPEN_DIRECT_IO: u32 = 1 << 0;
58*bb4ee6a4SAndroid Build Coastguard Worker 
59*bb4ee6a4SAndroid Build Coastguard Worker /// Don't invalidate the data cache on open.
60*bb4ee6a4SAndroid Build Coastguard Worker const FOPEN_KEEP_CACHE: u32 = 1 << 1;
61*bb4ee6a4SAndroid Build Coastguard Worker 
62*bb4ee6a4SAndroid Build Coastguard Worker /// The file is not seekable.
63*bb4ee6a4SAndroid Build Coastguard Worker const FOPEN_NONSEEKABLE: u32 = 1 << 2;
64*bb4ee6a4SAndroid Build Coastguard Worker 
65*bb4ee6a4SAndroid Build Coastguard Worker /// Allow caching the directory entries.
66*bb4ee6a4SAndroid Build Coastguard Worker const FOPEN_CACHE_DIR: u32 = 1 << 3;
67*bb4ee6a4SAndroid Build Coastguard Worker 
68*bb4ee6a4SAndroid Build Coastguard Worker /// This file is stream-like (i.e., no file position).
69*bb4ee6a4SAndroid Build Coastguard Worker const FOPEN_STREAM: u32 = 1 << 4;
70*bb4ee6a4SAndroid Build Coastguard Worker 
71*bb4ee6a4SAndroid Build Coastguard Worker /// New file was created in atomic open
72*bb4ee6a4SAndroid Build Coastguard Worker const FOPEN_FILE_CREATED: u32 = 1 << 7;
73*bb4ee6a4SAndroid Build Coastguard Worker 
74*bb4ee6a4SAndroid Build Coastguard Worker bitflags! {
75*bb4ee6a4SAndroid Build Coastguard Worker     /// Options controlling the behavior of files opened by the server in response
76*bb4ee6a4SAndroid Build Coastguard Worker     /// to an open or create request.
77*bb4ee6a4SAndroid Build Coastguard Worker     #[derive(Copy, Clone, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
78*bb4ee6a4SAndroid Build Coastguard Worker     #[repr(transparent)]
79*bb4ee6a4SAndroid Build Coastguard Worker     pub struct OpenOptions: u32 {
80*bb4ee6a4SAndroid Build Coastguard Worker         const DIRECT_IO = FOPEN_DIRECT_IO;
81*bb4ee6a4SAndroid Build Coastguard Worker         const KEEP_CACHE = FOPEN_KEEP_CACHE;
82*bb4ee6a4SAndroid Build Coastguard Worker         const NONSEEKABLE = FOPEN_NONSEEKABLE;
83*bb4ee6a4SAndroid Build Coastguard Worker         const CACHE_DIR = FOPEN_CACHE_DIR;
84*bb4ee6a4SAndroid Build Coastguard Worker         const STREAM = FOPEN_STREAM;
85*bb4ee6a4SAndroid Build Coastguard Worker         const FILE_CREATED = FOPEN_FILE_CREATED;
86*bb4ee6a4SAndroid Build Coastguard Worker     }
87*bb4ee6a4SAndroid Build Coastguard Worker }
88*bb4ee6a4SAndroid Build Coastguard Worker 
89*bb4ee6a4SAndroid Build Coastguard Worker // INIT request/reply flags.
90*bb4ee6a4SAndroid Build Coastguard Worker 
91*bb4ee6a4SAndroid Build Coastguard Worker /// Asynchronous read requests.
92*bb4ee6a4SAndroid Build Coastguard Worker const ASYNC_READ: u64 = 1;
93*bb4ee6a4SAndroid Build Coastguard Worker 
94*bb4ee6a4SAndroid Build Coastguard Worker /// Remote locking for POSIX file locks.
95*bb4ee6a4SAndroid Build Coastguard Worker const POSIX_LOCKS: u64 = 2;
96*bb4ee6a4SAndroid Build Coastguard Worker 
97*bb4ee6a4SAndroid Build Coastguard Worker /// Kernel sends file handle for fstat, etc... (not yet supported).
98*bb4ee6a4SAndroid Build Coastguard Worker const FILE_OPS: u64 = 4;
99*bb4ee6a4SAndroid Build Coastguard Worker 
100*bb4ee6a4SAndroid Build Coastguard Worker /// Handles the O_TRUNC open flag in the filesystem.
101*bb4ee6a4SAndroid Build Coastguard Worker const ATOMIC_O_TRUNC: u64 = 8;
102*bb4ee6a4SAndroid Build Coastguard Worker 
103*bb4ee6a4SAndroid Build Coastguard Worker /// FileSystem handles lookups of "." and "..".
104*bb4ee6a4SAndroid Build Coastguard Worker const EXPORT_SUPPORT: u64 = 16;
105*bb4ee6a4SAndroid Build Coastguard Worker 
106*bb4ee6a4SAndroid Build Coastguard Worker /// FileSystem can handle write size larger than 4kB.
107*bb4ee6a4SAndroid Build Coastguard Worker const BIG_WRITES: u64 = 32;
108*bb4ee6a4SAndroid Build Coastguard Worker 
109*bb4ee6a4SAndroid Build Coastguard Worker /// Don't apply umask to file mode on create operations.
110*bb4ee6a4SAndroid Build Coastguard Worker const DONT_MASK: u64 = 64;
111*bb4ee6a4SAndroid Build Coastguard Worker 
112*bb4ee6a4SAndroid Build Coastguard Worker /// Kernel supports splice write on the device.
113*bb4ee6a4SAndroid Build Coastguard Worker const SPLICE_WRITE: u64 = 128;
114*bb4ee6a4SAndroid Build Coastguard Worker 
115*bb4ee6a4SAndroid Build Coastguard Worker /// Kernel supports splice move on the device.
116*bb4ee6a4SAndroid Build Coastguard Worker const SPLICE_MOVE: u64 = 256;
117*bb4ee6a4SAndroid Build Coastguard Worker 
118*bb4ee6a4SAndroid Build Coastguard Worker /// Kernel supports splice read on the device.
119*bb4ee6a4SAndroid Build Coastguard Worker const SPLICE_READ: u64 = 512;
120*bb4ee6a4SAndroid Build Coastguard Worker 
121*bb4ee6a4SAndroid Build Coastguard Worker /// Remote locking for BSD style file locks.
122*bb4ee6a4SAndroid Build Coastguard Worker const FLOCK_LOCKS: u64 = 1024;
123*bb4ee6a4SAndroid Build Coastguard Worker 
124*bb4ee6a4SAndroid Build Coastguard Worker /// Kernel supports ioctl on directories.
125*bb4ee6a4SAndroid Build Coastguard Worker const HAS_IOCTL_DIR: u64 = 2048;
126*bb4ee6a4SAndroid Build Coastguard Worker 
127*bb4ee6a4SAndroid Build Coastguard Worker /// Automatically invalidate cached pages.
128*bb4ee6a4SAndroid Build Coastguard Worker const AUTO_INVAL_DATA: u64 = 4096;
129*bb4ee6a4SAndroid Build Coastguard Worker 
130*bb4ee6a4SAndroid Build Coastguard Worker /// Do READDIRPLUS (READDIR+LOOKUP in one).
131*bb4ee6a4SAndroid Build Coastguard Worker const DO_READDIRPLUS: u64 = 8192;
132*bb4ee6a4SAndroid Build Coastguard Worker 
133*bb4ee6a4SAndroid Build Coastguard Worker /// Adaptive readdirplus.
134*bb4ee6a4SAndroid Build Coastguard Worker const READDIRPLUS_AUTO: u64 = 16384;
135*bb4ee6a4SAndroid Build Coastguard Worker 
136*bb4ee6a4SAndroid Build Coastguard Worker /// Asynchronous direct I/O submission.
137*bb4ee6a4SAndroid Build Coastguard Worker const ASYNC_DIO: u64 = 32768;
138*bb4ee6a4SAndroid Build Coastguard Worker 
139*bb4ee6a4SAndroid Build Coastguard Worker /// Use writeback cache for buffered writes.
140*bb4ee6a4SAndroid Build Coastguard Worker const WRITEBACK_CACHE: u64 = 65536;
141*bb4ee6a4SAndroid Build Coastguard Worker 
142*bb4ee6a4SAndroid Build Coastguard Worker /// Kernel supports zero-message opens.
143*bb4ee6a4SAndroid Build Coastguard Worker const NO_OPEN_SUPPORT: u64 = 131072;
144*bb4ee6a4SAndroid Build Coastguard Worker 
145*bb4ee6a4SAndroid Build Coastguard Worker /// Allow parallel lookups and readdir.
146*bb4ee6a4SAndroid Build Coastguard Worker const PARALLEL_DIROPS: u64 = 262144;
147*bb4ee6a4SAndroid Build Coastguard Worker 
148*bb4ee6a4SAndroid Build Coastguard Worker /// Fs handles killing suid/sgid/cap on write/chown/trunc.
149*bb4ee6a4SAndroid Build Coastguard Worker const HANDLE_KILLPRIV: u64 = 524288;
150*bb4ee6a4SAndroid Build Coastguard Worker 
151*bb4ee6a4SAndroid Build Coastguard Worker /// FileSystem supports posix acls.
152*bb4ee6a4SAndroid Build Coastguard Worker const POSIX_ACL: u64 = 1048576;
153*bb4ee6a4SAndroid Build Coastguard Worker 
154*bb4ee6a4SAndroid Build Coastguard Worker /// Reading the device after an abort returns `ECONNABORTED`.
155*bb4ee6a4SAndroid Build Coastguard Worker const ABORT_ERROR: u64 = 2097152;
156*bb4ee6a4SAndroid Build Coastguard Worker 
157*bb4ee6a4SAndroid Build Coastguard Worker /// The reply to the `init` message contains the max number of request pages.
158*bb4ee6a4SAndroid Build Coastguard Worker const MAX_PAGES: u64 = 4194304;
159*bb4ee6a4SAndroid Build Coastguard Worker 
160*bb4ee6a4SAndroid Build Coastguard Worker /// Cache `readlink` responses.
161*bb4ee6a4SAndroid Build Coastguard Worker const CACHE_SYMLINKS: u64 = 8388608;
162*bb4ee6a4SAndroid Build Coastguard Worker 
163*bb4ee6a4SAndroid Build Coastguard Worker /// Kernel supports zero-message opens for directories.
164*bb4ee6a4SAndroid Build Coastguard Worker const NO_OPENDIR_SUPPORT: u64 = 16777216;
165*bb4ee6a4SAndroid Build Coastguard Worker 
166*bb4ee6a4SAndroid Build Coastguard Worker /// Kernel supports explicit cache invalidation.
167*bb4ee6a4SAndroid Build Coastguard Worker const EXPLICIT_INVAL_DATA: u64 = 33554432;
168*bb4ee6a4SAndroid Build Coastguard Worker 
169*bb4ee6a4SAndroid Build Coastguard Worker /// The `map_alignment` field of the `InitOut` struct is valid.
170*bb4ee6a4SAndroid Build Coastguard Worker const MAP_ALIGNMENT: u64 = 67108864;
171*bb4ee6a4SAndroid Build Coastguard Worker 
172*bb4ee6a4SAndroid Build Coastguard Worker /// Extended fuse_init_in request to hold additional flags
173*bb4ee6a4SAndroid Build Coastguard Worker const INIT_EXT: u64 = 1073741824;
174*bb4ee6a4SAndroid Build Coastguard Worker 
175*bb4ee6a4SAndroid Build Coastguard Worker /// The client should send the security context along with open, mkdir, create, and symlink
176*bb4ee6a4SAndroid Build Coastguard Worker /// requests.
177*bb4ee6a4SAndroid Build Coastguard Worker const SECURITY_CONTEXT: u64 = 4294967296;
178*bb4ee6a4SAndroid Build Coastguard Worker 
179*bb4ee6a4SAndroid Build Coastguard Worker bitflags! {
180*bb4ee6a4SAndroid Build Coastguard Worker     /// A bitfield passed in as a parameter to and returned from the `init` method of the
181*bb4ee6a4SAndroid Build Coastguard Worker     /// `FileSystem` trait.
182*bb4ee6a4SAndroid Build Coastguard Worker     #[derive(Copy, Clone, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
183*bb4ee6a4SAndroid Build Coastguard Worker     #[repr(transparent)]
184*bb4ee6a4SAndroid Build Coastguard Worker     pub struct FsOptions: u64 {
185*bb4ee6a4SAndroid Build Coastguard Worker         /// Indicates that the filesystem supports asynchronous read requests.
186*bb4ee6a4SAndroid Build Coastguard Worker         ///
187*bb4ee6a4SAndroid Build Coastguard Worker         /// If this capability is not requested/available, the kernel will ensure that there is at
188*bb4ee6a4SAndroid Build Coastguard Worker         /// most one pending read request per file-handle at any time, and will attempt to order
189*bb4ee6a4SAndroid Build Coastguard Worker         /// read requests by increasing offset.
190*bb4ee6a4SAndroid Build Coastguard Worker         ///
191*bb4ee6a4SAndroid Build Coastguard Worker         /// This feature is enabled by default when supported by the kernel.
192*bb4ee6a4SAndroid Build Coastguard Worker         const ASYNC_READ = ASYNC_READ;
193*bb4ee6a4SAndroid Build Coastguard Worker 
194*bb4ee6a4SAndroid Build Coastguard Worker         /// Indicates that the filesystem supports "remote" locking.
195*bb4ee6a4SAndroid Build Coastguard Worker         ///
196*bb4ee6a4SAndroid Build Coastguard Worker         /// This feature is not enabled by default and should only be set if the filesystem
197*bb4ee6a4SAndroid Build Coastguard Worker         /// implements the `getlk` and `setlk` methods of the `FileSystem` trait.
198*bb4ee6a4SAndroid Build Coastguard Worker         const POSIX_LOCKS = POSIX_LOCKS;
199*bb4ee6a4SAndroid Build Coastguard Worker 
200*bb4ee6a4SAndroid Build Coastguard Worker         /// Kernel sends file handle for fstat, etc... (not yet supported).
201*bb4ee6a4SAndroid Build Coastguard Worker         const FILE_OPS = FILE_OPS;
202*bb4ee6a4SAndroid Build Coastguard Worker 
203*bb4ee6a4SAndroid Build Coastguard Worker         /// Indicates that the filesystem supports the `O_TRUNC` open flag. If disabled, and an
204*bb4ee6a4SAndroid Build Coastguard Worker         /// application specifies `O_TRUNC`, fuse first calls `setattr` to truncate the file and
205*bb4ee6a4SAndroid Build Coastguard Worker         /// then calls `open` with `O_TRUNC` filtered out.
206*bb4ee6a4SAndroid Build Coastguard Worker         ///
207*bb4ee6a4SAndroid Build Coastguard Worker         /// This feature is enabled by default when supported by the kernel.
208*bb4ee6a4SAndroid Build Coastguard Worker         const ATOMIC_O_TRUNC = ATOMIC_O_TRUNC;
209*bb4ee6a4SAndroid Build Coastguard Worker 
210*bb4ee6a4SAndroid Build Coastguard Worker         /// Indicates that the filesystem supports lookups of "." and "..".
211*bb4ee6a4SAndroid Build Coastguard Worker         ///
212*bb4ee6a4SAndroid Build Coastguard Worker         /// This feature is disabled by default.
213*bb4ee6a4SAndroid Build Coastguard Worker         const EXPORT_SUPPORT = EXPORT_SUPPORT;
214*bb4ee6a4SAndroid Build Coastguard Worker 
215*bb4ee6a4SAndroid Build Coastguard Worker         /// FileSystem can handle write size larger than 4kB.
216*bb4ee6a4SAndroid Build Coastguard Worker         const BIG_WRITES = BIG_WRITES;
217*bb4ee6a4SAndroid Build Coastguard Worker 
218*bb4ee6a4SAndroid Build Coastguard Worker         /// Indicates that the kernel should not apply the umask to the file mode on create
219*bb4ee6a4SAndroid Build Coastguard Worker         /// operations.
220*bb4ee6a4SAndroid Build Coastguard Worker         ///
221*bb4ee6a4SAndroid Build Coastguard Worker         /// This feature is disabled by default.
222*bb4ee6a4SAndroid Build Coastguard Worker         const DONT_MASK = DONT_MASK;
223*bb4ee6a4SAndroid Build Coastguard Worker 
224*bb4ee6a4SAndroid Build Coastguard Worker         /// Indicates that the server should try to use `splice(2)` when writing to the fuse device.
225*bb4ee6a4SAndroid Build Coastguard Worker         /// This may improve performance.
226*bb4ee6a4SAndroid Build Coastguard Worker         ///
227*bb4ee6a4SAndroid Build Coastguard Worker         /// This feature is not currently supported.
228*bb4ee6a4SAndroid Build Coastguard Worker         const SPLICE_WRITE = SPLICE_WRITE;
229*bb4ee6a4SAndroid Build Coastguard Worker 
230*bb4ee6a4SAndroid Build Coastguard Worker         /// Indicates that the server should try to move pages instead of copying when writing to /
231*bb4ee6a4SAndroid Build Coastguard Worker         /// reading from the fuse device. This may improve performance.
232*bb4ee6a4SAndroid Build Coastguard Worker         ///
233*bb4ee6a4SAndroid Build Coastguard Worker         /// This feature is not currently supported.
234*bb4ee6a4SAndroid Build Coastguard Worker         const SPLICE_MOVE = SPLICE_MOVE;
235*bb4ee6a4SAndroid Build Coastguard Worker 
236*bb4ee6a4SAndroid Build Coastguard Worker         /// Indicates that the server should try to use `splice(2)` when reading from the fuse
237*bb4ee6a4SAndroid Build Coastguard Worker         /// device. This may improve performance.
238*bb4ee6a4SAndroid Build Coastguard Worker         ///
239*bb4ee6a4SAndroid Build Coastguard Worker         /// This feature is not currently supported.
240*bb4ee6a4SAndroid Build Coastguard Worker         const SPLICE_READ = SPLICE_READ;
241*bb4ee6a4SAndroid Build Coastguard Worker 
242*bb4ee6a4SAndroid Build Coastguard Worker         /// If set, then calls to `flock` will be emulated using POSIX locks and must
243*bb4ee6a4SAndroid Build Coastguard Worker         /// then be handled by the filesystem's `setlock()` handler.
244*bb4ee6a4SAndroid Build Coastguard Worker         ///
245*bb4ee6a4SAndroid Build Coastguard Worker         /// If not set, `flock` calls will be handled by the FUSE kernel module internally (so any
246*bb4ee6a4SAndroid Build Coastguard Worker         /// access that does not go through the kernel cannot be taken into account).
247*bb4ee6a4SAndroid Build Coastguard Worker         ///
248*bb4ee6a4SAndroid Build Coastguard Worker         /// This feature is disabled by default.
249*bb4ee6a4SAndroid Build Coastguard Worker         const FLOCK_LOCKS = FLOCK_LOCKS;
250*bb4ee6a4SAndroid Build Coastguard Worker 
251*bb4ee6a4SAndroid Build Coastguard Worker         /// Indicates that the filesystem supports ioctl's on directories.
252*bb4ee6a4SAndroid Build Coastguard Worker         ///
253*bb4ee6a4SAndroid Build Coastguard Worker         /// This feature is enabled by default when supported by the kernel.
254*bb4ee6a4SAndroid Build Coastguard Worker         const HAS_IOCTL_DIR = HAS_IOCTL_DIR;
255*bb4ee6a4SAndroid Build Coastguard Worker 
256*bb4ee6a4SAndroid Build Coastguard Worker         /// Traditionally, while a file is open the FUSE kernel module only asks the filesystem for
257*bb4ee6a4SAndroid Build Coastguard Worker         /// an update of the file's attributes when a client attempts to read beyond EOF. This is
258*bb4ee6a4SAndroid Build Coastguard Worker         /// unsuitable for e.g. network filesystems, where the file contents may change without the
259*bb4ee6a4SAndroid Build Coastguard Worker         /// kernel knowing about it.
260*bb4ee6a4SAndroid Build Coastguard Worker         ///
261*bb4ee6a4SAndroid Build Coastguard Worker         /// If this flag is set, FUSE will check the validity of the attributes on every read. If
262*bb4ee6a4SAndroid Build Coastguard Worker         /// the attributes are no longer valid (i.e., if the *attribute* timeout has expired) then
263*bb4ee6a4SAndroid Build Coastguard Worker         /// FUSE will first send another `getattr` request. If the new mtime differs from the
264*bb4ee6a4SAndroid Build Coastguard Worker         /// previous value, any cached file *contents* will be invalidated as well.
265*bb4ee6a4SAndroid Build Coastguard Worker         ///
266*bb4ee6a4SAndroid Build Coastguard Worker         /// This flag should always be set when available. If all file changes go through the
267*bb4ee6a4SAndroid Build Coastguard Worker         /// kernel, *attribute* validity should be set to a very large number to avoid unnecessary
268*bb4ee6a4SAndroid Build Coastguard Worker         /// `getattr()` calls.
269*bb4ee6a4SAndroid Build Coastguard Worker         ///
270*bb4ee6a4SAndroid Build Coastguard Worker         /// This feature is enabled by default when supported by the kernel.
271*bb4ee6a4SAndroid Build Coastguard Worker         const AUTO_INVAL_DATA = AUTO_INVAL_DATA;
272*bb4ee6a4SAndroid Build Coastguard Worker 
273*bb4ee6a4SAndroid Build Coastguard Worker         /// Indicates that the filesystem supports readdirplus.
274*bb4ee6a4SAndroid Build Coastguard Worker         ///
275*bb4ee6a4SAndroid Build Coastguard Worker         /// The feature is not enabled by default and should only be set if the filesystem
276*bb4ee6a4SAndroid Build Coastguard Worker         /// implements the `readdirplus` method of the `FileSystem` trait.
277*bb4ee6a4SAndroid Build Coastguard Worker         const DO_READDIRPLUS = DO_READDIRPLUS;
278*bb4ee6a4SAndroid Build Coastguard Worker 
279*bb4ee6a4SAndroid Build Coastguard Worker         /// Indicates that the filesystem supports adaptive readdirplus.
280*bb4ee6a4SAndroid Build Coastguard Worker         ///
281*bb4ee6a4SAndroid Build Coastguard Worker         /// If `DO_READDIRPLUS` is not set, this flag has no effect.
282*bb4ee6a4SAndroid Build Coastguard Worker         ///
283*bb4ee6a4SAndroid Build Coastguard Worker         /// If `DO_READDIRPLUS` is set and this flag is not set, the kernel will always issue
284*bb4ee6a4SAndroid Build Coastguard Worker         /// `readdirplus()` requests to retrieve directory contents.
285*bb4ee6a4SAndroid Build Coastguard Worker         ///
286*bb4ee6a4SAndroid Build Coastguard Worker         /// If `DO_READDIRPLUS` is set and this flag is set, the kernel will issue both `readdir()`
287*bb4ee6a4SAndroid Build Coastguard Worker         /// and `readdirplus()` requests, depending on how much information is expected to be
288*bb4ee6a4SAndroid Build Coastguard Worker         /// required.
289*bb4ee6a4SAndroid Build Coastguard Worker         ///
290*bb4ee6a4SAndroid Build Coastguard Worker         /// This feature is not enabled by default and should only be set if the file system
291*bb4ee6a4SAndroid Build Coastguard Worker         /// implements both the `readdir` and `readdirplus` methods of the `FileSystem` trait.
292*bb4ee6a4SAndroid Build Coastguard Worker         const READDIRPLUS_AUTO = READDIRPLUS_AUTO;
293*bb4ee6a4SAndroid Build Coastguard Worker 
294*bb4ee6a4SAndroid Build Coastguard Worker         /// Indicates that the filesystem supports asynchronous direct I/O submission.
295*bb4ee6a4SAndroid Build Coastguard Worker         ///
296*bb4ee6a4SAndroid Build Coastguard Worker         /// If this capability is not requested/available, the kernel will ensure that there is at
297*bb4ee6a4SAndroid Build Coastguard Worker         /// most one pending read and one pending write request per direct I/O file-handle at any
298*bb4ee6a4SAndroid Build Coastguard Worker         /// time.
299*bb4ee6a4SAndroid Build Coastguard Worker         ///
300*bb4ee6a4SAndroid Build Coastguard Worker         /// This feature is enabled by default when supported by the kernel.
301*bb4ee6a4SAndroid Build Coastguard Worker         const ASYNC_DIO = ASYNC_DIO;
302*bb4ee6a4SAndroid Build Coastguard Worker 
303*bb4ee6a4SAndroid Build Coastguard Worker         /// Indicates that writeback caching should be enabled. This means that individual write
304*bb4ee6a4SAndroid Build Coastguard Worker         /// request may be buffered and merged in the kernel before they are sent to the file
305*bb4ee6a4SAndroid Build Coastguard Worker         /// system.
306*bb4ee6a4SAndroid Build Coastguard Worker         ///
307*bb4ee6a4SAndroid Build Coastguard Worker         /// This feature is disabled by default.
308*bb4ee6a4SAndroid Build Coastguard Worker         const WRITEBACK_CACHE = WRITEBACK_CACHE;
309*bb4ee6a4SAndroid Build Coastguard Worker 
310*bb4ee6a4SAndroid Build Coastguard Worker         /// Indicates support for zero-message opens. If this flag is set in the `capable` parameter
311*bb4ee6a4SAndroid Build Coastguard Worker         /// of the `init` trait method, then the file system may return `ENOSYS` from the open() handler
312*bb4ee6a4SAndroid Build Coastguard Worker         /// to indicate success. Further attempts to open files will be handled in the kernel. (If
313*bb4ee6a4SAndroid Build Coastguard Worker         /// this flag is not set, returning ENOSYS will be treated as an error and signaled to the
314*bb4ee6a4SAndroid Build Coastguard Worker         /// caller).
315*bb4ee6a4SAndroid Build Coastguard Worker         ///
316*bb4ee6a4SAndroid Build Coastguard Worker         /// Setting (or not setting) the field in the `FsOptions` returned from the `init` method
317*bb4ee6a4SAndroid Build Coastguard Worker         /// has no effect.
318*bb4ee6a4SAndroid Build Coastguard Worker         const ZERO_MESSAGE_OPEN = NO_OPEN_SUPPORT;
319*bb4ee6a4SAndroid Build Coastguard Worker 
320*bb4ee6a4SAndroid Build Coastguard Worker         /// Indicates support for parallel directory operations. If this flag is unset, the FUSE
321*bb4ee6a4SAndroid Build Coastguard Worker         /// kernel module will ensure that lookup() and readdir() requests are never issued
322*bb4ee6a4SAndroid Build Coastguard Worker         /// concurrently for the same directory.
323*bb4ee6a4SAndroid Build Coastguard Worker         ///
324*bb4ee6a4SAndroid Build Coastguard Worker         /// This feature is enabled by default when supported by the kernel.
325*bb4ee6a4SAndroid Build Coastguard Worker         const PARALLEL_DIROPS = PARALLEL_DIROPS;
326*bb4ee6a4SAndroid Build Coastguard Worker 
327*bb4ee6a4SAndroid Build Coastguard Worker         /// Indicates that the file system is responsible for unsetting setuid and setgid bits when a
328*bb4ee6a4SAndroid Build Coastguard Worker         /// file is written, truncated, or its owner is changed.
329*bb4ee6a4SAndroid Build Coastguard Worker         ///
330*bb4ee6a4SAndroid Build Coastguard Worker         /// This feature is enabled by default when supported by the kernel.
331*bb4ee6a4SAndroid Build Coastguard Worker         const HANDLE_KILLPRIV = HANDLE_KILLPRIV;
332*bb4ee6a4SAndroid Build Coastguard Worker 
333*bb4ee6a4SAndroid Build Coastguard Worker         /// Indicates support for POSIX ACLs.
334*bb4ee6a4SAndroid Build Coastguard Worker         ///
335*bb4ee6a4SAndroid Build Coastguard Worker         /// If this feature is enabled, the kernel will cache and have responsibility for enforcing
336*bb4ee6a4SAndroid Build Coastguard Worker         /// ACLs. ACL will be stored as xattrs and passed to userspace, which is responsible for
337*bb4ee6a4SAndroid Build Coastguard Worker         /// updating the ACLs in the filesystem, keeping the file mode in sync with the ACL, and
338*bb4ee6a4SAndroid Build Coastguard Worker         /// ensuring inheritance of default ACLs when new filesystem nodes are created. Note that
339*bb4ee6a4SAndroid Build Coastguard Worker         /// this requires that the file system is able to parse and interpret the xattr
340*bb4ee6a4SAndroid Build Coastguard Worker         /// representation of ACLs.
341*bb4ee6a4SAndroid Build Coastguard Worker         ///
342*bb4ee6a4SAndroid Build Coastguard Worker         /// Enabling this feature implicitly turns on the `default_permissions` mount option (even
343*bb4ee6a4SAndroid Build Coastguard Worker         /// if it was not passed to mount(2)).
344*bb4ee6a4SAndroid Build Coastguard Worker         ///
345*bb4ee6a4SAndroid Build Coastguard Worker         /// This feature is disabled by default.
346*bb4ee6a4SAndroid Build Coastguard Worker         const POSIX_ACL = POSIX_ACL;
347*bb4ee6a4SAndroid Build Coastguard Worker 
348*bb4ee6a4SAndroid Build Coastguard Worker         /// Indicates that the kernel may cache responses to `readlink` calls.
349*bb4ee6a4SAndroid Build Coastguard Worker         const CACHE_SYMLINKS = CACHE_SYMLINKS;
350*bb4ee6a4SAndroid Build Coastguard Worker 
351*bb4ee6a4SAndroid Build Coastguard Worker         /// Indicates support for zero-message opens for directories. If this flag is set in the
352*bb4ee6a4SAndroid Build Coastguard Worker         /// `capable` parameter of the `init` trait method, then the file system may return `ENOSYS`
353*bb4ee6a4SAndroid Build Coastguard Worker         /// from the opendir() handler to indicate success. Further attempts to open directories
354*bb4ee6a4SAndroid Build Coastguard Worker         /// will be handled in the kernel. (If this flag is not set, returning ENOSYS will be
355*bb4ee6a4SAndroid Build Coastguard Worker         /// treated as an error and signaled to the caller).
356*bb4ee6a4SAndroid Build Coastguard Worker         ///
357*bb4ee6a4SAndroid Build Coastguard Worker         /// Setting (or not setting) the field in the `FsOptions` returned from the `init` method
358*bb4ee6a4SAndroid Build Coastguard Worker         /// has no effect.
359*bb4ee6a4SAndroid Build Coastguard Worker         const ZERO_MESSAGE_OPENDIR = NO_OPENDIR_SUPPORT;
360*bb4ee6a4SAndroid Build Coastguard Worker 
361*bb4ee6a4SAndroid Build Coastguard Worker         /// Indicates support for invalidating cached pages only on explicit request.
362*bb4ee6a4SAndroid Build Coastguard Worker         ///
363*bb4ee6a4SAndroid Build Coastguard Worker         /// If this flag is set in the `capable` parameter of the `init` trait method, then the FUSE
364*bb4ee6a4SAndroid Build Coastguard Worker         /// kernel module supports invalidating cached pages only on explicit request by the
365*bb4ee6a4SAndroid Build Coastguard Worker         /// filesystem.
366*bb4ee6a4SAndroid Build Coastguard Worker         ///
367*bb4ee6a4SAndroid Build Coastguard Worker         /// By setting this flag in the return value of the `init` trait method, the filesystem is
368*bb4ee6a4SAndroid Build Coastguard Worker         /// responsible for invalidating cached pages through explicit requests to the kernel.
369*bb4ee6a4SAndroid Build Coastguard Worker         ///
370*bb4ee6a4SAndroid Build Coastguard Worker         /// Note that setting this flag does not prevent the cached pages from being flushed by OS
371*bb4ee6a4SAndroid Build Coastguard Worker         /// itself and/or through user actions.
372*bb4ee6a4SAndroid Build Coastguard Worker         ///
373*bb4ee6a4SAndroid Build Coastguard Worker         /// Note that if both EXPLICIT_INVAL_DATA and AUTO_INVAL_DATA are set in the `capable`
374*bb4ee6a4SAndroid Build Coastguard Worker         /// parameter of the `init` trait method then AUTO_INVAL_DATA takes precedence.
375*bb4ee6a4SAndroid Build Coastguard Worker         ///
376*bb4ee6a4SAndroid Build Coastguard Worker         /// This feature is disabled by default.
377*bb4ee6a4SAndroid Build Coastguard Worker         const EXPLICIT_INVAL_DATA = EXPLICIT_INVAL_DATA;
378*bb4ee6a4SAndroid Build Coastguard Worker 
379*bb4ee6a4SAndroid Build Coastguard Worker         /// Indicates that the `map_alignment` field of the `InitOut` struct is valid.
380*bb4ee6a4SAndroid Build Coastguard Worker         ///
381*bb4ee6a4SAndroid Build Coastguard Worker         /// The `MAP_ALIGNMENT` field is used by the FUSE kernel driver to ensure that its DAX
382*bb4ee6a4SAndroid Build Coastguard Worker         /// mapping requests are pagesize-aligned. This field automatically set by the server and
383*bb4ee6a4SAndroid Build Coastguard Worker         /// this feature is enabled by default.
384*bb4ee6a4SAndroid Build Coastguard Worker         const MAP_ALIGNMENT = MAP_ALIGNMENT;
385*bb4ee6a4SAndroid Build Coastguard Worker 
386*bb4ee6a4SAndroid Build Coastguard Worker         /// Indicates that the `max_pages` field of the `InitOut` struct is valid.
387*bb4ee6a4SAndroid Build Coastguard Worker         ///
388*bb4ee6a4SAndroid Build Coastguard Worker         /// This field is used by the kernel driver to determine the maximum number of pages that
389*bb4ee6a4SAndroid Build Coastguard Worker         /// may be used for any read or write requests.
390*bb4ee6a4SAndroid Build Coastguard Worker         const MAX_PAGES = MAX_PAGES;
391*bb4ee6a4SAndroid Build Coastguard Worker 
392*bb4ee6a4SAndroid Build Coastguard Worker         /// Indicates that `InitIn`/`InitOut` struct is extended to hold additional flags.
393*bb4ee6a4SAndroid Build Coastguard Worker         const INIT_EXT = INIT_EXT;
394*bb4ee6a4SAndroid Build Coastguard Worker 
395*bb4ee6a4SAndroid Build Coastguard Worker         /// Indicates support for sending the security context with creation requests.
396*bb4ee6a4SAndroid Build Coastguard Worker         const SECURITY_CONTEXT = SECURITY_CONTEXT;
397*bb4ee6a4SAndroid Build Coastguard Worker     }
398*bb4ee6a4SAndroid Build Coastguard Worker }
399*bb4ee6a4SAndroid Build Coastguard Worker 
400*bb4ee6a4SAndroid Build Coastguard Worker // Release flags.
401*bb4ee6a4SAndroid Build Coastguard Worker pub const RELEASE_FLUSH: u32 = 1;
402*bb4ee6a4SAndroid Build Coastguard Worker pub const RELEASE_FLOCK_UNLOCK: u32 = 2;
403*bb4ee6a4SAndroid Build Coastguard Worker 
404*bb4ee6a4SAndroid Build Coastguard Worker // Getattr flags.
405*bb4ee6a4SAndroid Build Coastguard Worker pub const GETATTR_FH: u32 = 1;
406*bb4ee6a4SAndroid Build Coastguard Worker 
407*bb4ee6a4SAndroid Build Coastguard Worker // Lock flags.
408*bb4ee6a4SAndroid Build Coastguard Worker pub const LK_FLOCK: u32 = 1;
409*bb4ee6a4SAndroid Build Coastguard Worker 
410*bb4ee6a4SAndroid Build Coastguard Worker // Write flags.
411*bb4ee6a4SAndroid Build Coastguard Worker 
412*bb4ee6a4SAndroid Build Coastguard Worker /// Delayed write from page cache, file handle is guessed.
413*bb4ee6a4SAndroid Build Coastguard Worker pub const WRITE_CACHE: u32 = 1;
414*bb4ee6a4SAndroid Build Coastguard Worker 
415*bb4ee6a4SAndroid Build Coastguard Worker /// `lock_owner` field is valid.
416*bb4ee6a4SAndroid Build Coastguard Worker pub const WRITE_LOCKOWNER: u32 = 2;
417*bb4ee6a4SAndroid Build Coastguard Worker 
418*bb4ee6a4SAndroid Build Coastguard Worker /// Kill the suid and sgid bits.
419*bb4ee6a4SAndroid Build Coastguard Worker pub const WRITE_KILL_PRIV: u32 = 3;
420*bb4ee6a4SAndroid Build Coastguard Worker 
421*bb4ee6a4SAndroid Build Coastguard Worker // Read flags.
422*bb4ee6a4SAndroid Build Coastguard Worker pub const READ_LOCKOWNER: u32 = 2;
423*bb4ee6a4SAndroid Build Coastguard Worker 
424*bb4ee6a4SAndroid Build Coastguard Worker // Ioctl flags.
425*bb4ee6a4SAndroid Build Coastguard Worker 
426*bb4ee6a4SAndroid Build Coastguard Worker /// 32bit compat ioctl on 64bit machine
427*bb4ee6a4SAndroid Build Coastguard Worker const IOCTL_COMPAT: u32 = 1;
428*bb4ee6a4SAndroid Build Coastguard Worker 
429*bb4ee6a4SAndroid Build Coastguard Worker /// Not restricted to well-formed ioctls, retry allowed
430*bb4ee6a4SAndroid Build Coastguard Worker const IOCTL_UNRESTRICTED: u32 = 2;
431*bb4ee6a4SAndroid Build Coastguard Worker 
432*bb4ee6a4SAndroid Build Coastguard Worker /// Retry with new iovecs
433*bb4ee6a4SAndroid Build Coastguard Worker const IOCTL_RETRY: u32 = 4;
434*bb4ee6a4SAndroid Build Coastguard Worker 
435*bb4ee6a4SAndroid Build Coastguard Worker /// 32bit ioctl
436*bb4ee6a4SAndroid Build Coastguard Worker const IOCTL_32BIT: u32 = 8;
437*bb4ee6a4SAndroid Build Coastguard Worker 
438*bb4ee6a4SAndroid Build Coastguard Worker /// Is a directory
439*bb4ee6a4SAndroid Build Coastguard Worker const IOCTL_DIR: u32 = 16;
440*bb4ee6a4SAndroid Build Coastguard Worker 
441*bb4ee6a4SAndroid Build Coastguard Worker /// 32-bit compat ioctl on 64-bit machine with 64-bit time_t.
442*bb4ee6a4SAndroid Build Coastguard Worker const IOCTL_COMPAT_X32: u32 = 32;
443*bb4ee6a4SAndroid Build Coastguard Worker 
444*bb4ee6a4SAndroid Build Coastguard Worker /// Maximum of in_iovecs + out_iovecs
445*bb4ee6a4SAndroid Build Coastguard Worker pub const IOCTL_MAX_IOV: usize = 256;
446*bb4ee6a4SAndroid Build Coastguard Worker 
447*bb4ee6a4SAndroid Build Coastguard Worker bitflags! {
448*bb4ee6a4SAndroid Build Coastguard Worker     #[derive(Copy, Clone, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
449*bb4ee6a4SAndroid Build Coastguard Worker     #[repr(transparent)]
450*bb4ee6a4SAndroid Build Coastguard Worker     pub struct IoctlFlags: u32 {
451*bb4ee6a4SAndroid Build Coastguard Worker         /// 32bit compat ioctl on 64bit machine
452*bb4ee6a4SAndroid Build Coastguard Worker         const COMPAT = IOCTL_COMPAT;
453*bb4ee6a4SAndroid Build Coastguard Worker 
454*bb4ee6a4SAndroid Build Coastguard Worker         /// Not restricted to well-formed ioctls, retry allowed
455*bb4ee6a4SAndroid Build Coastguard Worker         const UNRESTRICTED = IOCTL_UNRESTRICTED;
456*bb4ee6a4SAndroid Build Coastguard Worker 
457*bb4ee6a4SAndroid Build Coastguard Worker         /// Retry with new iovecs
458*bb4ee6a4SAndroid Build Coastguard Worker         const RETRY = IOCTL_RETRY;
459*bb4ee6a4SAndroid Build Coastguard Worker 
460*bb4ee6a4SAndroid Build Coastguard Worker         /// 32bit ioctl
461*bb4ee6a4SAndroid Build Coastguard Worker         const IOCTL_32BIT = IOCTL_32BIT;
462*bb4ee6a4SAndroid Build Coastguard Worker 
463*bb4ee6a4SAndroid Build Coastguard Worker         /// Is a directory
464*bb4ee6a4SAndroid Build Coastguard Worker         const DIR = IOCTL_DIR;
465*bb4ee6a4SAndroid Build Coastguard Worker 
466*bb4ee6a4SAndroid Build Coastguard Worker         /// 32-bit compat ioctl on 64-bit machine with 64-bit time_t.
467*bb4ee6a4SAndroid Build Coastguard Worker         const COMPAT_X32 = IOCTL_COMPAT_X32;
468*bb4ee6a4SAndroid Build Coastguard Worker     }
469*bb4ee6a4SAndroid Build Coastguard Worker }
470*bb4ee6a4SAndroid Build Coastguard Worker 
471*bb4ee6a4SAndroid Build Coastguard Worker /// Request poll notify.
472*bb4ee6a4SAndroid Build Coastguard Worker pub const POLL_SCHEDULE_NOTIFY: u32 = 1;
473*bb4ee6a4SAndroid Build Coastguard Worker 
474*bb4ee6a4SAndroid Build Coastguard Worker /// The read buffer is required to be at least 8k, but may be much larger.
475*bb4ee6a4SAndroid Build Coastguard Worker pub const FUSE_MIN_READ_BUFFER: u32 = 8192;
476*bb4ee6a4SAndroid Build Coastguard Worker 
477*bb4ee6a4SAndroid Build Coastguard Worker pub const FUSE_COMPAT_ENTRY_OUT_SIZE: u32 = 120;
478*bb4ee6a4SAndroid Build Coastguard Worker pub const FUSE_COMPAT_ATTR_OUT_SIZE: u32 = 96;
479*bb4ee6a4SAndroid Build Coastguard Worker pub const FUSE_COMPAT_MKNOD_IN_SIZE: u32 = 8;
480*bb4ee6a4SAndroid Build Coastguard Worker pub const FUSE_COMPAT_WRITE_IN_SIZE: u32 = 24;
481*bb4ee6a4SAndroid Build Coastguard Worker pub const FUSE_COMPAT_STATFS_SIZE: u32 = 48;
482*bb4ee6a4SAndroid Build Coastguard Worker pub const FUSE_COMPAT_INIT_OUT_SIZE: u32 = 8;
483*bb4ee6a4SAndroid Build Coastguard Worker pub const FUSE_COMPAT_22_INIT_OUT_SIZE: u32 = 24;
484*bb4ee6a4SAndroid Build Coastguard Worker 
485*bb4ee6a4SAndroid Build Coastguard Worker const SETUPMAPPING_FLAG_WRITE: u64 = 1;
486*bb4ee6a4SAndroid Build Coastguard Worker const SETUPMAPPING_FLAG_READ: u64 = 2;
487*bb4ee6a4SAndroid Build Coastguard Worker 
488*bb4ee6a4SAndroid Build Coastguard Worker bitflags! {
489*bb4ee6a4SAndroid Build Coastguard Worker     #[derive(Copy, Clone, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
490*bb4ee6a4SAndroid Build Coastguard Worker     #[repr(transparent)]
491*bb4ee6a4SAndroid Build Coastguard Worker     pub struct SetUpMappingFlags: u64 {
492*bb4ee6a4SAndroid Build Coastguard Worker         /// Create writable mapping.
493*bb4ee6a4SAndroid Build Coastguard Worker         const WRITE = SETUPMAPPING_FLAG_WRITE;
494*bb4ee6a4SAndroid Build Coastguard Worker         /// Create readable mapping.
495*bb4ee6a4SAndroid Build Coastguard Worker         const READ = SETUPMAPPING_FLAG_READ;
496*bb4ee6a4SAndroid Build Coastguard Worker     }
497*bb4ee6a4SAndroid Build Coastguard Worker }
498*bb4ee6a4SAndroid Build Coastguard Worker 
499*bb4ee6a4SAndroid Build Coastguard Worker // Request Extension Constants
500*bb4ee6a4SAndroid Build Coastguard Worker /// Maximum security contexts in a request
501*bb4ee6a4SAndroid Build Coastguard Worker pub const MAX_NR_SECCTX: u32 = 31;
502*bb4ee6a4SAndroid Build Coastguard Worker 
503*bb4ee6a4SAndroid Build Coastguard Worker #[repr(C)]
504*bb4ee6a4SAndroid Build Coastguard Worker #[derive(Debug, Default, Copy, Clone, AsBytes, FromZeroes, FromBytes)]
505*bb4ee6a4SAndroid Build Coastguard Worker pub struct Attr {
506*bb4ee6a4SAndroid Build Coastguard Worker     pub ino: u64,
507*bb4ee6a4SAndroid Build Coastguard Worker     pub size: u64,
508*bb4ee6a4SAndroid Build Coastguard Worker     pub blocks: u64,
509*bb4ee6a4SAndroid Build Coastguard Worker     pub atime: u64,
510*bb4ee6a4SAndroid Build Coastguard Worker     pub mtime: u64,
511*bb4ee6a4SAndroid Build Coastguard Worker     pub ctime: u64,
512*bb4ee6a4SAndroid Build Coastguard Worker     pub atimensec: u32,
513*bb4ee6a4SAndroid Build Coastguard Worker     pub mtimensec: u32,
514*bb4ee6a4SAndroid Build Coastguard Worker     pub ctimensec: u32,
515*bb4ee6a4SAndroid Build Coastguard Worker     pub mode: u32,
516*bb4ee6a4SAndroid Build Coastguard Worker     pub nlink: u32,
517*bb4ee6a4SAndroid Build Coastguard Worker     pub uid: u32,
518*bb4ee6a4SAndroid Build Coastguard Worker     pub gid: u32,
519*bb4ee6a4SAndroid Build Coastguard Worker     pub rdev: u32,
520*bb4ee6a4SAndroid Build Coastguard Worker     pub blksize: u32,
521*bb4ee6a4SAndroid Build Coastguard Worker     pub padding: u32,
522*bb4ee6a4SAndroid Build Coastguard Worker }
523*bb4ee6a4SAndroid Build Coastguard Worker 
524*bb4ee6a4SAndroid Build Coastguard Worker impl From<libc::stat64> for Attr {
from(st: libc::stat64) -> Attr525*bb4ee6a4SAndroid Build Coastguard Worker     fn from(st: libc::stat64) -> Attr {
526*bb4ee6a4SAndroid Build Coastguard Worker         Attr {
527*bb4ee6a4SAndroid Build Coastguard Worker             ino: st.st_ino,
528*bb4ee6a4SAndroid Build Coastguard Worker             size: st.st_size as u64,
529*bb4ee6a4SAndroid Build Coastguard Worker             blocks: st.st_blocks as u64,
530*bb4ee6a4SAndroid Build Coastguard Worker             atime: st.st_atime as u64,
531*bb4ee6a4SAndroid Build Coastguard Worker             mtime: st.st_mtime as u64,
532*bb4ee6a4SAndroid Build Coastguard Worker             ctime: st.st_ctime as u64,
533*bb4ee6a4SAndroid Build Coastguard Worker             atimensec: st.st_atime_nsec as u32,
534*bb4ee6a4SAndroid Build Coastguard Worker             mtimensec: st.st_mtime_nsec as u32,
535*bb4ee6a4SAndroid Build Coastguard Worker             ctimensec: st.st_ctime_nsec as u32,
536*bb4ee6a4SAndroid Build Coastguard Worker             mode: st.st_mode,
537*bb4ee6a4SAndroid Build Coastguard Worker             #[allow(clippy::unnecessary_cast)]
538*bb4ee6a4SAndroid Build Coastguard Worker             nlink: st.st_nlink as u32,
539*bb4ee6a4SAndroid Build Coastguard Worker             uid: st.st_uid,
540*bb4ee6a4SAndroid Build Coastguard Worker             gid: st.st_gid,
541*bb4ee6a4SAndroid Build Coastguard Worker             rdev: st.st_rdev as u32,
542*bb4ee6a4SAndroid Build Coastguard Worker             blksize: st.st_blksize as u32,
543*bb4ee6a4SAndroid Build Coastguard Worker             ..Default::default()
544*bb4ee6a4SAndroid Build Coastguard Worker         }
545*bb4ee6a4SAndroid Build Coastguard Worker     }
546*bb4ee6a4SAndroid Build Coastguard Worker }
547*bb4ee6a4SAndroid Build Coastguard Worker 
548*bb4ee6a4SAndroid Build Coastguard Worker #[repr(C)]
549*bb4ee6a4SAndroid Build Coastguard Worker #[derive(Debug, Default, Copy, Clone, AsBytes, FromZeroes, FromBytes)]
550*bb4ee6a4SAndroid Build Coastguard Worker pub struct Kstatfs {
551*bb4ee6a4SAndroid Build Coastguard Worker     pub blocks: u64,
552*bb4ee6a4SAndroid Build Coastguard Worker     pub bfree: u64,
553*bb4ee6a4SAndroid Build Coastguard Worker     pub bavail: u64,
554*bb4ee6a4SAndroid Build Coastguard Worker     pub files: u64,
555*bb4ee6a4SAndroid Build Coastguard Worker     pub ffree: u64,
556*bb4ee6a4SAndroid Build Coastguard Worker     pub bsize: u32,
557*bb4ee6a4SAndroid Build Coastguard Worker     pub namelen: u32,
558*bb4ee6a4SAndroid Build Coastguard Worker     pub frsize: u32,
559*bb4ee6a4SAndroid Build Coastguard Worker     pub padding: u32,
560*bb4ee6a4SAndroid Build Coastguard Worker     pub spare: [u32; 6],
561*bb4ee6a4SAndroid Build Coastguard Worker }
562*bb4ee6a4SAndroid Build Coastguard Worker 
563*bb4ee6a4SAndroid Build Coastguard Worker impl From<libc::statvfs64> for Kstatfs {
564*bb4ee6a4SAndroid Build Coastguard Worker     #[allow(clippy::unnecessary_cast)]
from(st: libc::statvfs64) -> Self565*bb4ee6a4SAndroid Build Coastguard Worker     fn from(st: libc::statvfs64) -> Self {
566*bb4ee6a4SAndroid Build Coastguard Worker         Kstatfs {
567*bb4ee6a4SAndroid Build Coastguard Worker             blocks: st.f_blocks,
568*bb4ee6a4SAndroid Build Coastguard Worker             bfree: st.f_bfree,
569*bb4ee6a4SAndroid Build Coastguard Worker             bavail: st.f_bavail,
570*bb4ee6a4SAndroid Build Coastguard Worker             files: st.f_files,
571*bb4ee6a4SAndroid Build Coastguard Worker             ffree: st.f_ffree,
572*bb4ee6a4SAndroid Build Coastguard Worker             bsize: st.f_bsize as u32,
573*bb4ee6a4SAndroid Build Coastguard Worker             namelen: st.f_namemax as u32,
574*bb4ee6a4SAndroid Build Coastguard Worker             frsize: st.f_frsize as u32,
575*bb4ee6a4SAndroid Build Coastguard Worker             ..Default::default()
576*bb4ee6a4SAndroid Build Coastguard Worker         }
577*bb4ee6a4SAndroid Build Coastguard Worker     }
578*bb4ee6a4SAndroid Build Coastguard Worker }
579*bb4ee6a4SAndroid Build Coastguard Worker 
580*bb4ee6a4SAndroid Build Coastguard Worker #[repr(C)]
581*bb4ee6a4SAndroid Build Coastguard Worker #[derive(Debug, Default, Copy, Clone, AsBytes, FromZeroes, FromBytes)]
582*bb4ee6a4SAndroid Build Coastguard Worker pub struct FileLock {
583*bb4ee6a4SAndroid Build Coastguard Worker     pub start: u64,
584*bb4ee6a4SAndroid Build Coastguard Worker     pub end: u64,
585*bb4ee6a4SAndroid Build Coastguard Worker     pub type_: u32,
586*bb4ee6a4SAndroid Build Coastguard Worker     pub pid: u32, /* tgid */
587*bb4ee6a4SAndroid Build Coastguard Worker }
588*bb4ee6a4SAndroid Build Coastguard Worker 
589*bb4ee6a4SAndroid Build Coastguard Worker #[repr(u32)]
590*bb4ee6a4SAndroid Build Coastguard Worker #[derive(Debug, Copy, Clone, N, AsBytes)]
591*bb4ee6a4SAndroid Build Coastguard Worker pub enum Opcode {
592*bb4ee6a4SAndroid Build Coastguard Worker     Lookup = 1,
593*bb4ee6a4SAndroid Build Coastguard Worker     Forget = 2, /* No Reply */
594*bb4ee6a4SAndroid Build Coastguard Worker     Getattr = 3,
595*bb4ee6a4SAndroid Build Coastguard Worker     Setattr = 4,
596*bb4ee6a4SAndroid Build Coastguard Worker     Readlink = 5,
597*bb4ee6a4SAndroid Build Coastguard Worker     Symlink = 6,
598*bb4ee6a4SAndroid Build Coastguard Worker     Mknod = 8,
599*bb4ee6a4SAndroid Build Coastguard Worker     Mkdir = 9,
600*bb4ee6a4SAndroid Build Coastguard Worker     Unlink = 10,
601*bb4ee6a4SAndroid Build Coastguard Worker     Rmdir = 11,
602*bb4ee6a4SAndroid Build Coastguard Worker     Rename = 12,
603*bb4ee6a4SAndroid Build Coastguard Worker     Link = 13,
604*bb4ee6a4SAndroid Build Coastguard Worker     Open = 14,
605*bb4ee6a4SAndroid Build Coastguard Worker     Read = 15,
606*bb4ee6a4SAndroid Build Coastguard Worker     Write = 16,
607*bb4ee6a4SAndroid Build Coastguard Worker     Statfs = 17,
608*bb4ee6a4SAndroid Build Coastguard Worker     Release = 18,
609*bb4ee6a4SAndroid Build Coastguard Worker     Fsync = 20,
610*bb4ee6a4SAndroid Build Coastguard Worker     Setxattr = 21,
611*bb4ee6a4SAndroid Build Coastguard Worker     Getxattr = 22,
612*bb4ee6a4SAndroid Build Coastguard Worker     Listxattr = 23,
613*bb4ee6a4SAndroid Build Coastguard Worker     Removexattr = 24,
614*bb4ee6a4SAndroid Build Coastguard Worker     Flush = 25,
615*bb4ee6a4SAndroid Build Coastguard Worker     Init = 26,
616*bb4ee6a4SAndroid Build Coastguard Worker     Opendir = 27,
617*bb4ee6a4SAndroid Build Coastguard Worker     Readdir = 28,
618*bb4ee6a4SAndroid Build Coastguard Worker     Releasedir = 29,
619*bb4ee6a4SAndroid Build Coastguard Worker     Fsyncdir = 30,
620*bb4ee6a4SAndroid Build Coastguard Worker     Getlk = 31,
621*bb4ee6a4SAndroid Build Coastguard Worker     Setlk = 32,
622*bb4ee6a4SAndroid Build Coastguard Worker     Setlkw = 33,
623*bb4ee6a4SAndroid Build Coastguard Worker     Access = 34,
624*bb4ee6a4SAndroid Build Coastguard Worker     Create = 35,
625*bb4ee6a4SAndroid Build Coastguard Worker     Interrupt = 36,
626*bb4ee6a4SAndroid Build Coastguard Worker     Bmap = 37,
627*bb4ee6a4SAndroid Build Coastguard Worker     Destroy = 38,
628*bb4ee6a4SAndroid Build Coastguard Worker     Ioctl = 39,
629*bb4ee6a4SAndroid Build Coastguard Worker     Poll = 40,
630*bb4ee6a4SAndroid Build Coastguard Worker     NotifyReply = 41,
631*bb4ee6a4SAndroid Build Coastguard Worker     BatchForget = 42,
632*bb4ee6a4SAndroid Build Coastguard Worker     Fallocate = 43,
633*bb4ee6a4SAndroid Build Coastguard Worker     Readdirplus = 44,
634*bb4ee6a4SAndroid Build Coastguard Worker     Rename2 = 45,
635*bb4ee6a4SAndroid Build Coastguard Worker     Lseek = 46,
636*bb4ee6a4SAndroid Build Coastguard Worker     CopyFileRange = 47,
637*bb4ee6a4SAndroid Build Coastguard Worker     SetUpMapping = 48,
638*bb4ee6a4SAndroid Build Coastguard Worker     RemoveMapping = 49,
639*bb4ee6a4SAndroid Build Coastguard Worker     // TODO(b/310102543): Update the opcode keep same with kernel patch after the atomic open
640*bb4ee6a4SAndroid Build Coastguard Worker     // kernel is merged to upstream.
641*bb4ee6a4SAndroid Build Coastguard Worker     OpenAtomic = u32::MAX - 1,
642*bb4ee6a4SAndroid Build Coastguard Worker     ChromeOsTmpfile = u32::MAX,
643*bb4ee6a4SAndroid Build Coastguard Worker }
644*bb4ee6a4SAndroid Build Coastguard Worker 
645*bb4ee6a4SAndroid Build Coastguard Worker #[repr(u32)]
646*bb4ee6a4SAndroid Build Coastguard Worker #[derive(Debug, Copy, Clone, N)]
647*bb4ee6a4SAndroid Build Coastguard Worker pub enum NotifyOpcode {
648*bb4ee6a4SAndroid Build Coastguard Worker     Poll = 1,
649*bb4ee6a4SAndroid Build Coastguard Worker     InvalInode = 2,
650*bb4ee6a4SAndroid Build Coastguard Worker     InvalEntry = 3,
651*bb4ee6a4SAndroid Build Coastguard Worker     Store = 4,
652*bb4ee6a4SAndroid Build Coastguard Worker     Retrieve = 5,
653*bb4ee6a4SAndroid Build Coastguard Worker     Delete = 6,
654*bb4ee6a4SAndroid Build Coastguard Worker     CodeMax = 7,
655*bb4ee6a4SAndroid Build Coastguard Worker }
656*bb4ee6a4SAndroid Build Coastguard Worker 
657*bb4ee6a4SAndroid Build Coastguard Worker #[repr(C)]
658*bb4ee6a4SAndroid Build Coastguard Worker #[derive(Debug, Default, Copy, Clone, AsBytes, FromZeroes, FromBytes)]
659*bb4ee6a4SAndroid Build Coastguard Worker pub struct EntryOut {
660*bb4ee6a4SAndroid Build Coastguard Worker     pub nodeid: u64,      /* Inode ID */
661*bb4ee6a4SAndroid Build Coastguard Worker     pub generation: u64,  /* Inode generation: nodeid:gen must be unique for the fs's lifetime */
662*bb4ee6a4SAndroid Build Coastguard Worker     pub entry_valid: u64, /* Cache timeout for the name */
663*bb4ee6a4SAndroid Build Coastguard Worker     pub attr_valid: u64,  /* Cache timeout for the attributes */
664*bb4ee6a4SAndroid Build Coastguard Worker     pub entry_valid_nsec: u32,
665*bb4ee6a4SAndroid Build Coastguard Worker     pub attr_valid_nsec: u32,
666*bb4ee6a4SAndroid Build Coastguard Worker     pub attr: Attr,
667*bb4ee6a4SAndroid Build Coastguard Worker }
668*bb4ee6a4SAndroid Build Coastguard Worker 
669*bb4ee6a4SAndroid Build Coastguard Worker #[repr(C)]
670*bb4ee6a4SAndroid Build Coastguard Worker #[derive(Debug, Default, Copy, Clone, AsBytes, FromZeroes, FromBytes)]
671*bb4ee6a4SAndroid Build Coastguard Worker pub struct ForgetIn {
672*bb4ee6a4SAndroid Build Coastguard Worker     pub nlookup: u64,
673*bb4ee6a4SAndroid Build Coastguard Worker }
674*bb4ee6a4SAndroid Build Coastguard Worker 
675*bb4ee6a4SAndroid Build Coastguard Worker #[repr(C)]
676*bb4ee6a4SAndroid Build Coastguard Worker #[derive(Debug, Default, Copy, Clone, AsBytes, FromZeroes, FromBytes)]
677*bb4ee6a4SAndroid Build Coastguard Worker pub struct ForgetOne {
678*bb4ee6a4SAndroid Build Coastguard Worker     pub nodeid: u64,
679*bb4ee6a4SAndroid Build Coastguard Worker     pub nlookup: u64,
680*bb4ee6a4SAndroid Build Coastguard Worker }
681*bb4ee6a4SAndroid Build Coastguard Worker 
682*bb4ee6a4SAndroid Build Coastguard Worker #[repr(C)]
683*bb4ee6a4SAndroid Build Coastguard Worker #[derive(Debug, Default, Copy, Clone, AsBytes, FromZeroes, FromBytes)]
684*bb4ee6a4SAndroid Build Coastguard Worker pub struct BatchForgetIn {
685*bb4ee6a4SAndroid Build Coastguard Worker     pub count: u32,
686*bb4ee6a4SAndroid Build Coastguard Worker     pub dummy: u32,
687*bb4ee6a4SAndroid Build Coastguard Worker }
688*bb4ee6a4SAndroid Build Coastguard Worker 
689*bb4ee6a4SAndroid Build Coastguard Worker #[repr(C)]
690*bb4ee6a4SAndroid Build Coastguard Worker #[derive(Debug, Default, Copy, Clone, AsBytes, FromZeroes, FromBytes)]
691*bb4ee6a4SAndroid Build Coastguard Worker pub struct GetattrIn {
692*bb4ee6a4SAndroid Build Coastguard Worker     pub flags: u32,
693*bb4ee6a4SAndroid Build Coastguard Worker     pub dummy: u32,
694*bb4ee6a4SAndroid Build Coastguard Worker     pub fh: u64,
695*bb4ee6a4SAndroid Build Coastguard Worker }
696*bb4ee6a4SAndroid Build Coastguard Worker 
697*bb4ee6a4SAndroid Build Coastguard Worker #[repr(C)]
698*bb4ee6a4SAndroid Build Coastguard Worker #[derive(Debug, Default, Copy, Clone, AsBytes, FromZeroes, FromBytes)]
699*bb4ee6a4SAndroid Build Coastguard Worker pub struct AttrOut {
700*bb4ee6a4SAndroid Build Coastguard Worker     pub attr_valid: u64, /* Cache timeout for the attributes */
701*bb4ee6a4SAndroid Build Coastguard Worker     pub attr_valid_nsec: u32,
702*bb4ee6a4SAndroid Build Coastguard Worker     pub dummy: u32,
703*bb4ee6a4SAndroid Build Coastguard Worker     pub attr: Attr,
704*bb4ee6a4SAndroid Build Coastguard Worker }
705*bb4ee6a4SAndroid Build Coastguard Worker 
706*bb4ee6a4SAndroid Build Coastguard Worker #[repr(C)]
707*bb4ee6a4SAndroid Build Coastguard Worker #[derive(Debug, Default, Copy, Clone, AsBytes, FromZeroes, FromBytes)]
708*bb4ee6a4SAndroid Build Coastguard Worker pub struct MknodIn {
709*bb4ee6a4SAndroid Build Coastguard Worker     pub mode: u32,
710*bb4ee6a4SAndroid Build Coastguard Worker     pub rdev: u32,
711*bb4ee6a4SAndroid Build Coastguard Worker     pub umask: u32,
712*bb4ee6a4SAndroid Build Coastguard Worker     pub padding: u32,
713*bb4ee6a4SAndroid Build Coastguard Worker }
714*bb4ee6a4SAndroid Build Coastguard Worker 
715*bb4ee6a4SAndroid Build Coastguard Worker #[repr(C)]
716*bb4ee6a4SAndroid Build Coastguard Worker #[derive(Debug, Default, Copy, Clone, AsBytes, FromZeroes, FromBytes)]
717*bb4ee6a4SAndroid Build Coastguard Worker pub struct MkdirIn {
718*bb4ee6a4SAndroid Build Coastguard Worker     pub mode: u32,
719*bb4ee6a4SAndroid Build Coastguard Worker     pub umask: u32,
720*bb4ee6a4SAndroid Build Coastguard Worker }
721*bb4ee6a4SAndroid Build Coastguard Worker 
722*bb4ee6a4SAndroid Build Coastguard Worker #[repr(C)]
723*bb4ee6a4SAndroid Build Coastguard Worker #[derive(Debug, Default, Copy, Clone, AsBytes, FromZeroes, FromBytes)]
724*bb4ee6a4SAndroid Build Coastguard Worker pub struct ChromeOsTmpfileIn {
725*bb4ee6a4SAndroid Build Coastguard Worker     pub mode: u32,
726*bb4ee6a4SAndroid Build Coastguard Worker     pub umask: u32,
727*bb4ee6a4SAndroid Build Coastguard Worker }
728*bb4ee6a4SAndroid Build Coastguard Worker 
729*bb4ee6a4SAndroid Build Coastguard Worker #[repr(C)]
730*bb4ee6a4SAndroid Build Coastguard Worker #[derive(Debug, Default, Copy, Clone, AsBytes, FromZeroes, FromBytes)]
731*bb4ee6a4SAndroid Build Coastguard Worker pub struct RenameIn {
732*bb4ee6a4SAndroid Build Coastguard Worker     pub newdir: u64,
733*bb4ee6a4SAndroid Build Coastguard Worker }
734*bb4ee6a4SAndroid Build Coastguard Worker 
735*bb4ee6a4SAndroid Build Coastguard Worker #[repr(C)]
736*bb4ee6a4SAndroid Build Coastguard Worker #[derive(Debug, Default, Copy, Clone, AsBytes, FromZeroes, FromBytes)]
737*bb4ee6a4SAndroid Build Coastguard Worker pub struct Rename2In {
738*bb4ee6a4SAndroid Build Coastguard Worker     pub newdir: u64,
739*bb4ee6a4SAndroid Build Coastguard Worker     pub flags: u32,
740*bb4ee6a4SAndroid Build Coastguard Worker     pub padding: u32,
741*bb4ee6a4SAndroid Build Coastguard Worker }
742*bb4ee6a4SAndroid Build Coastguard Worker 
743*bb4ee6a4SAndroid Build Coastguard Worker #[repr(C)]
744*bb4ee6a4SAndroid Build Coastguard Worker #[derive(Debug, Default, Copy, Clone, AsBytes, FromZeroes, FromBytes)]
745*bb4ee6a4SAndroid Build Coastguard Worker pub struct LinkIn {
746*bb4ee6a4SAndroid Build Coastguard Worker     pub oldnodeid: u64,
747*bb4ee6a4SAndroid Build Coastguard Worker }
748*bb4ee6a4SAndroid Build Coastguard Worker 
749*bb4ee6a4SAndroid Build Coastguard Worker #[repr(C)]
750*bb4ee6a4SAndroid Build Coastguard Worker #[derive(Debug, Default, Copy, Clone, AsBytes, FromZeroes, FromBytes)]
751*bb4ee6a4SAndroid Build Coastguard Worker pub struct SetattrIn {
752*bb4ee6a4SAndroid Build Coastguard Worker     pub valid: u32,
753*bb4ee6a4SAndroid Build Coastguard Worker     pub padding: u32,
754*bb4ee6a4SAndroid Build Coastguard Worker     pub fh: u64,
755*bb4ee6a4SAndroid Build Coastguard Worker     pub size: u64,
756*bb4ee6a4SAndroid Build Coastguard Worker     pub lock_owner: u64,
757*bb4ee6a4SAndroid Build Coastguard Worker     pub atime: u64,
758*bb4ee6a4SAndroid Build Coastguard Worker     pub mtime: u64,
759*bb4ee6a4SAndroid Build Coastguard Worker     pub ctime: u64,
760*bb4ee6a4SAndroid Build Coastguard Worker     pub atimensec: u32,
761*bb4ee6a4SAndroid Build Coastguard Worker     pub mtimensec: u32,
762*bb4ee6a4SAndroid Build Coastguard Worker     pub ctimensec: u32,
763*bb4ee6a4SAndroid Build Coastguard Worker     pub mode: u32,
764*bb4ee6a4SAndroid Build Coastguard Worker     pub unused4: u32,
765*bb4ee6a4SAndroid Build Coastguard Worker     pub uid: u32,
766*bb4ee6a4SAndroid Build Coastguard Worker     pub gid: u32,
767*bb4ee6a4SAndroid Build Coastguard Worker     pub unused5: u32,
768*bb4ee6a4SAndroid Build Coastguard Worker }
769*bb4ee6a4SAndroid Build Coastguard Worker 
770*bb4ee6a4SAndroid Build Coastguard Worker impl From<SetattrIn> for libc::stat64 {
from(s: SetattrIn) -> libc::stat64771*bb4ee6a4SAndroid Build Coastguard Worker     fn from(s: SetattrIn) -> libc::stat64 {
772*bb4ee6a4SAndroid Build Coastguard Worker         // SAFETY: zero-initializing a struct with only POD fields.
773*bb4ee6a4SAndroid Build Coastguard Worker         let mut out: libc::stat64 = unsafe { mem::zeroed() };
774*bb4ee6a4SAndroid Build Coastguard Worker         out.st_mode = s.mode;
775*bb4ee6a4SAndroid Build Coastguard Worker         out.st_uid = s.uid;
776*bb4ee6a4SAndroid Build Coastguard Worker         out.st_gid = s.gid;
777*bb4ee6a4SAndroid Build Coastguard Worker         out.st_size = s.size as i64;
778*bb4ee6a4SAndroid Build Coastguard Worker         out.st_atime = s.atime as libc::time_t;
779*bb4ee6a4SAndroid Build Coastguard Worker         out.st_mtime = s.mtime as libc::time_t;
780*bb4ee6a4SAndroid Build Coastguard Worker         out.st_ctime = s.ctime as libc::time_t;
781*bb4ee6a4SAndroid Build Coastguard Worker         out.st_atime_nsec = s.atimensec as libc::c_long;
782*bb4ee6a4SAndroid Build Coastguard Worker         out.st_mtime_nsec = s.mtimensec as libc::c_long;
783*bb4ee6a4SAndroid Build Coastguard Worker         out.st_ctime_nsec = s.ctimensec as libc::c_long;
784*bb4ee6a4SAndroid Build Coastguard Worker 
785*bb4ee6a4SAndroid Build Coastguard Worker         out
786*bb4ee6a4SAndroid Build Coastguard Worker     }
787*bb4ee6a4SAndroid Build Coastguard Worker }
788*bb4ee6a4SAndroid Build Coastguard Worker 
789*bb4ee6a4SAndroid Build Coastguard Worker #[repr(C)]
790*bb4ee6a4SAndroid Build Coastguard Worker #[derive(Debug, Default, Copy, Clone, AsBytes, FromZeroes, FromBytes)]
791*bb4ee6a4SAndroid Build Coastguard Worker pub struct OpenIn {
792*bb4ee6a4SAndroid Build Coastguard Worker     pub flags: u32,
793*bb4ee6a4SAndroid Build Coastguard Worker     pub unused: u32,
794*bb4ee6a4SAndroid Build Coastguard Worker }
795*bb4ee6a4SAndroid Build Coastguard Worker 
796*bb4ee6a4SAndroid Build Coastguard Worker #[repr(C)]
797*bb4ee6a4SAndroid Build Coastguard Worker #[derive(Debug, Default, Copy, Clone, AsBytes, FromZeroes, FromBytes)]
798*bb4ee6a4SAndroid Build Coastguard Worker pub struct CreateIn {
799*bb4ee6a4SAndroid Build Coastguard Worker     pub flags: u32,
800*bb4ee6a4SAndroid Build Coastguard Worker     pub mode: u32,
801*bb4ee6a4SAndroid Build Coastguard Worker     pub umask: u32,
802*bb4ee6a4SAndroid Build Coastguard Worker     pub padding: u32,
803*bb4ee6a4SAndroid Build Coastguard Worker }
804*bb4ee6a4SAndroid Build Coastguard Worker 
805*bb4ee6a4SAndroid Build Coastguard Worker #[repr(C)]
806*bb4ee6a4SAndroid Build Coastguard Worker #[derive(Debug, Default, Copy, Clone, AsBytes, FromZeroes, FromBytes)]
807*bb4ee6a4SAndroid Build Coastguard Worker pub struct OpenOut {
808*bb4ee6a4SAndroid Build Coastguard Worker     pub fh: u64,
809*bb4ee6a4SAndroid Build Coastguard Worker     pub open_flags: u32,
810*bb4ee6a4SAndroid Build Coastguard Worker     pub padding: u32,
811*bb4ee6a4SAndroid Build Coastguard Worker }
812*bb4ee6a4SAndroid Build Coastguard Worker 
813*bb4ee6a4SAndroid Build Coastguard Worker #[repr(C)]
814*bb4ee6a4SAndroid Build Coastguard Worker #[derive(Debug, Default, Copy, Clone, AsBytes, FromZeroes, FromBytes)]
815*bb4ee6a4SAndroid Build Coastguard Worker pub struct ReleaseIn {
816*bb4ee6a4SAndroid Build Coastguard Worker     pub fh: u64,
817*bb4ee6a4SAndroid Build Coastguard Worker     pub flags: u32,
818*bb4ee6a4SAndroid Build Coastguard Worker     pub release_flags: u32,
819*bb4ee6a4SAndroid Build Coastguard Worker     pub lock_owner: u64,
820*bb4ee6a4SAndroid Build Coastguard Worker }
821*bb4ee6a4SAndroid Build Coastguard Worker 
822*bb4ee6a4SAndroid Build Coastguard Worker #[repr(C)]
823*bb4ee6a4SAndroid Build Coastguard Worker #[derive(Debug, Default, Copy, Clone, AsBytes, FromZeroes, FromBytes)]
824*bb4ee6a4SAndroid Build Coastguard Worker pub struct FlushIn {
825*bb4ee6a4SAndroid Build Coastguard Worker     pub fh: u64,
826*bb4ee6a4SAndroid Build Coastguard Worker     pub unused: u32,
827*bb4ee6a4SAndroid Build Coastguard Worker     pub padding: u32,
828*bb4ee6a4SAndroid Build Coastguard Worker     pub lock_owner: u64,
829*bb4ee6a4SAndroid Build Coastguard Worker }
830*bb4ee6a4SAndroid Build Coastguard Worker 
831*bb4ee6a4SAndroid Build Coastguard Worker #[repr(C)]
832*bb4ee6a4SAndroid Build Coastguard Worker #[derive(Debug, Default, Copy, Clone, AsBytes, FromZeroes, FromBytes)]
833*bb4ee6a4SAndroid Build Coastguard Worker pub struct ReadIn {
834*bb4ee6a4SAndroid Build Coastguard Worker     pub fh: u64,
835*bb4ee6a4SAndroid Build Coastguard Worker     pub offset: u64,
836*bb4ee6a4SAndroid Build Coastguard Worker     pub size: u32,
837*bb4ee6a4SAndroid Build Coastguard Worker     pub read_flags: u32,
838*bb4ee6a4SAndroid Build Coastguard Worker     pub lock_owner: u64,
839*bb4ee6a4SAndroid Build Coastguard Worker     pub flags: u32,
840*bb4ee6a4SAndroid Build Coastguard Worker     pub padding: u32,
841*bb4ee6a4SAndroid Build Coastguard Worker }
842*bb4ee6a4SAndroid Build Coastguard Worker 
843*bb4ee6a4SAndroid Build Coastguard Worker #[repr(C)]
844*bb4ee6a4SAndroid Build Coastguard Worker #[derive(Debug, Default, Copy, Clone, AsBytes, FromZeroes, FromBytes)]
845*bb4ee6a4SAndroid Build Coastguard Worker pub struct WriteIn {
846*bb4ee6a4SAndroid Build Coastguard Worker     pub fh: u64,
847*bb4ee6a4SAndroid Build Coastguard Worker     pub offset: u64,
848*bb4ee6a4SAndroid Build Coastguard Worker     pub size: u32,
849*bb4ee6a4SAndroid Build Coastguard Worker     pub write_flags: u32,
850*bb4ee6a4SAndroid Build Coastguard Worker     pub lock_owner: u64,
851*bb4ee6a4SAndroid Build Coastguard Worker     pub flags: u32,
852*bb4ee6a4SAndroid Build Coastguard Worker     pub padding: u32,
853*bb4ee6a4SAndroid Build Coastguard Worker }
854*bb4ee6a4SAndroid Build Coastguard Worker 
855*bb4ee6a4SAndroid Build Coastguard Worker #[repr(C)]
856*bb4ee6a4SAndroid Build Coastguard Worker #[derive(Debug, Default, Copy, Clone, AsBytes, FromZeroes, FromBytes)]
857*bb4ee6a4SAndroid Build Coastguard Worker pub struct WriteOut {
858*bb4ee6a4SAndroid Build Coastguard Worker     pub size: u32,
859*bb4ee6a4SAndroid Build Coastguard Worker     pub padding: u32,
860*bb4ee6a4SAndroid Build Coastguard Worker }
861*bb4ee6a4SAndroid Build Coastguard Worker 
862*bb4ee6a4SAndroid Build Coastguard Worker #[repr(C)]
863*bb4ee6a4SAndroid Build Coastguard Worker #[derive(Debug, Default, Copy, Clone, AsBytes, FromZeroes, FromBytes)]
864*bb4ee6a4SAndroid Build Coastguard Worker pub struct StatfsOut {
865*bb4ee6a4SAndroid Build Coastguard Worker     pub st: Kstatfs,
866*bb4ee6a4SAndroid Build Coastguard Worker }
867*bb4ee6a4SAndroid Build Coastguard Worker 
868*bb4ee6a4SAndroid Build Coastguard Worker #[repr(C)]
869*bb4ee6a4SAndroid Build Coastguard Worker #[derive(Debug, Default, Copy, Clone, AsBytes, FromZeroes, FromBytes)]
870*bb4ee6a4SAndroid Build Coastguard Worker pub struct FsyncIn {
871*bb4ee6a4SAndroid Build Coastguard Worker     pub fh: u64,
872*bb4ee6a4SAndroid Build Coastguard Worker     pub fsync_flags: u32,
873*bb4ee6a4SAndroid Build Coastguard Worker     pub padding: u32,
874*bb4ee6a4SAndroid Build Coastguard Worker }
875*bb4ee6a4SAndroid Build Coastguard Worker 
876*bb4ee6a4SAndroid Build Coastguard Worker #[repr(C)]
877*bb4ee6a4SAndroid Build Coastguard Worker #[derive(Debug, Default, Copy, Clone, AsBytes, FromZeroes, FromBytes)]
878*bb4ee6a4SAndroid Build Coastguard Worker pub struct SetxattrIn {
879*bb4ee6a4SAndroid Build Coastguard Worker     pub size: u32,
880*bb4ee6a4SAndroid Build Coastguard Worker     pub flags: u32,
881*bb4ee6a4SAndroid Build Coastguard Worker }
882*bb4ee6a4SAndroid Build Coastguard Worker 
883*bb4ee6a4SAndroid Build Coastguard Worker #[repr(C)]
884*bb4ee6a4SAndroid Build Coastguard Worker #[derive(Debug, Default, Copy, Clone, AsBytes, FromZeroes, FromBytes)]
885*bb4ee6a4SAndroid Build Coastguard Worker pub struct GetxattrIn {
886*bb4ee6a4SAndroid Build Coastguard Worker     pub size: u32,
887*bb4ee6a4SAndroid Build Coastguard Worker     pub padding: u32,
888*bb4ee6a4SAndroid Build Coastguard Worker }
889*bb4ee6a4SAndroid Build Coastguard Worker 
890*bb4ee6a4SAndroid Build Coastguard Worker #[repr(C)]
891*bb4ee6a4SAndroid Build Coastguard Worker #[derive(Debug, Default, Copy, Clone, AsBytes, FromZeroes, FromBytes)]
892*bb4ee6a4SAndroid Build Coastguard Worker pub struct GetxattrOut {
893*bb4ee6a4SAndroid Build Coastguard Worker     pub size: u32,
894*bb4ee6a4SAndroid Build Coastguard Worker     pub padding: u32,
895*bb4ee6a4SAndroid Build Coastguard Worker }
896*bb4ee6a4SAndroid Build Coastguard Worker 
897*bb4ee6a4SAndroid Build Coastguard Worker #[repr(C)]
898*bb4ee6a4SAndroid Build Coastguard Worker #[derive(Debug, Default, Copy, Clone, AsBytes, FromZeroes, FromBytes)]
899*bb4ee6a4SAndroid Build Coastguard Worker pub struct LkIn {
900*bb4ee6a4SAndroid Build Coastguard Worker     pub fh: u64,
901*bb4ee6a4SAndroid Build Coastguard Worker     pub owner: u64,
902*bb4ee6a4SAndroid Build Coastguard Worker     pub lk: FileLock,
903*bb4ee6a4SAndroid Build Coastguard Worker     pub lk_flags: u32,
904*bb4ee6a4SAndroid Build Coastguard Worker     pub padding: u32,
905*bb4ee6a4SAndroid Build Coastguard Worker }
906*bb4ee6a4SAndroid Build Coastguard Worker 
907*bb4ee6a4SAndroid Build Coastguard Worker #[repr(C)]
908*bb4ee6a4SAndroid Build Coastguard Worker #[derive(Debug, Default, Copy, Clone, AsBytes, FromZeroes, FromBytes)]
909*bb4ee6a4SAndroid Build Coastguard Worker pub struct LkOut {
910*bb4ee6a4SAndroid Build Coastguard Worker     pub lk: FileLock,
911*bb4ee6a4SAndroid Build Coastguard Worker }
912*bb4ee6a4SAndroid Build Coastguard Worker 
913*bb4ee6a4SAndroid Build Coastguard Worker #[repr(C)]
914*bb4ee6a4SAndroid Build Coastguard Worker #[derive(Debug, Default, Copy, Clone, AsBytes, FromZeroes, FromBytes)]
915*bb4ee6a4SAndroid Build Coastguard Worker pub struct AccessIn {
916*bb4ee6a4SAndroid Build Coastguard Worker     pub mask: u32,
917*bb4ee6a4SAndroid Build Coastguard Worker     pub padding: u32,
918*bb4ee6a4SAndroid Build Coastguard Worker }
919*bb4ee6a4SAndroid Build Coastguard Worker 
920*bb4ee6a4SAndroid Build Coastguard Worker #[repr(C)]
921*bb4ee6a4SAndroid Build Coastguard Worker #[derive(Debug, Default, Copy, Clone, AsBytes, FromZeroes, FromBytes)]
922*bb4ee6a4SAndroid Build Coastguard Worker pub struct InitIn {
923*bb4ee6a4SAndroid Build Coastguard Worker     pub major: u32,
924*bb4ee6a4SAndroid Build Coastguard Worker     pub minor: u32,
925*bb4ee6a4SAndroid Build Coastguard Worker     pub max_readahead: u32,
926*bb4ee6a4SAndroid Build Coastguard Worker     pub flags: u32,
927*bb4ee6a4SAndroid Build Coastguard Worker }
928*bb4ee6a4SAndroid Build Coastguard Worker 
929*bb4ee6a4SAndroid Build Coastguard Worker #[repr(C)]
930*bb4ee6a4SAndroid Build Coastguard Worker #[derive(Debug, Default, Copy, Clone, AsBytes, FromZeroes, FromBytes)]
931*bb4ee6a4SAndroid Build Coastguard Worker pub struct InitInExt {
932*bb4ee6a4SAndroid Build Coastguard Worker     pub flags2: u32,
933*bb4ee6a4SAndroid Build Coastguard Worker     pub unused: [u32; 11],
934*bb4ee6a4SAndroid Build Coastguard Worker }
935*bb4ee6a4SAndroid Build Coastguard Worker 
936*bb4ee6a4SAndroid Build Coastguard Worker #[repr(C)]
937*bb4ee6a4SAndroid Build Coastguard Worker #[derive(Debug, Default, Copy, Clone, AsBytes, FromZeroes, FromBytes)]
938*bb4ee6a4SAndroid Build Coastguard Worker pub struct InitOut {
939*bb4ee6a4SAndroid Build Coastguard Worker     pub major: u32,
940*bb4ee6a4SAndroid Build Coastguard Worker     pub minor: u32,
941*bb4ee6a4SAndroid Build Coastguard Worker     pub max_readahead: u32,
942*bb4ee6a4SAndroid Build Coastguard Worker     pub flags: u32,
943*bb4ee6a4SAndroid Build Coastguard Worker     pub max_background: u16,
944*bb4ee6a4SAndroid Build Coastguard Worker     pub congestion_threshold: u16,
945*bb4ee6a4SAndroid Build Coastguard Worker     pub max_write: u32,
946*bb4ee6a4SAndroid Build Coastguard Worker     pub time_gran: u32,
947*bb4ee6a4SAndroid Build Coastguard Worker     pub max_pages: u16,
948*bb4ee6a4SAndroid Build Coastguard Worker     pub map_alignment: u16,
949*bb4ee6a4SAndroid Build Coastguard Worker     pub flags2: u32,
950*bb4ee6a4SAndroid Build Coastguard Worker     pub unused: [u32; 7],
951*bb4ee6a4SAndroid Build Coastguard Worker }
952*bb4ee6a4SAndroid Build Coastguard Worker 
953*bb4ee6a4SAndroid Build Coastguard Worker #[repr(C)]
954*bb4ee6a4SAndroid Build Coastguard Worker #[derive(Debug, Default, Copy, Clone, AsBytes, FromZeroes, FromBytes)]
955*bb4ee6a4SAndroid Build Coastguard Worker pub struct InterruptIn {
956*bb4ee6a4SAndroid Build Coastguard Worker     pub unique: u64,
957*bb4ee6a4SAndroid Build Coastguard Worker }
958*bb4ee6a4SAndroid Build Coastguard Worker 
959*bb4ee6a4SAndroid Build Coastguard Worker #[repr(C)]
960*bb4ee6a4SAndroid Build Coastguard Worker #[derive(Debug, Default, Copy, Clone, AsBytes, FromZeroes, FromBytes)]
961*bb4ee6a4SAndroid Build Coastguard Worker pub struct BmapIn {
962*bb4ee6a4SAndroid Build Coastguard Worker     pub block: u64,
963*bb4ee6a4SAndroid Build Coastguard Worker     pub blocksize: u32,
964*bb4ee6a4SAndroid Build Coastguard Worker     pub padding: u32,
965*bb4ee6a4SAndroid Build Coastguard Worker }
966*bb4ee6a4SAndroid Build Coastguard Worker 
967*bb4ee6a4SAndroid Build Coastguard Worker #[repr(C)]
968*bb4ee6a4SAndroid Build Coastguard Worker #[derive(Debug, Default, Copy, Clone, AsBytes, FromZeroes, FromBytes)]
969*bb4ee6a4SAndroid Build Coastguard Worker pub struct BmapOut {
970*bb4ee6a4SAndroid Build Coastguard Worker     pub block: u64,
971*bb4ee6a4SAndroid Build Coastguard Worker }
972*bb4ee6a4SAndroid Build Coastguard Worker 
973*bb4ee6a4SAndroid Build Coastguard Worker #[repr(C)]
974*bb4ee6a4SAndroid Build Coastguard Worker #[derive(Debug, Default, Copy, Clone, AsBytes, FromZeroes, FromBytes)]
975*bb4ee6a4SAndroid Build Coastguard Worker pub struct IoctlIn {
976*bb4ee6a4SAndroid Build Coastguard Worker     pub fh: u64,
977*bb4ee6a4SAndroid Build Coastguard Worker     pub flags: u32,
978*bb4ee6a4SAndroid Build Coastguard Worker     pub cmd: u32,
979*bb4ee6a4SAndroid Build Coastguard Worker     pub arg: u64,
980*bb4ee6a4SAndroid Build Coastguard Worker     pub in_size: u32,
981*bb4ee6a4SAndroid Build Coastguard Worker     pub out_size: u32,
982*bb4ee6a4SAndroid Build Coastguard Worker }
983*bb4ee6a4SAndroid Build Coastguard Worker 
984*bb4ee6a4SAndroid Build Coastguard Worker /// Describes a region of memory in the address space of the process that made the ioctl syscall.
985*bb4ee6a4SAndroid Build Coastguard Worker /// Similar to `libc::iovec` but uses `u64`s for the address and the length.
986*bb4ee6a4SAndroid Build Coastguard Worker #[repr(C)]
987*bb4ee6a4SAndroid Build Coastguard Worker #[derive(Debug, Default, Copy, Clone, AsBytes, FromZeroes, FromBytes)]
988*bb4ee6a4SAndroid Build Coastguard Worker pub struct IoctlIovec {
989*bb4ee6a4SAndroid Build Coastguard Worker     /// The start address of the memory region. This must be in the address space of the process
990*bb4ee6a4SAndroid Build Coastguard Worker     /// that made the ioctl syscall.
991*bb4ee6a4SAndroid Build Coastguard Worker     pub base: u64,
992*bb4ee6a4SAndroid Build Coastguard Worker 
993*bb4ee6a4SAndroid Build Coastguard Worker     /// The length of the memory region.
994*bb4ee6a4SAndroid Build Coastguard Worker     pub len: u64,
995*bb4ee6a4SAndroid Build Coastguard Worker }
996*bb4ee6a4SAndroid Build Coastguard Worker 
997*bb4ee6a4SAndroid Build Coastguard Worker #[repr(C)]
998*bb4ee6a4SAndroid Build Coastguard Worker #[derive(Debug, Default, Copy, Clone, AsBytes, FromZeroes, FromBytes)]
999*bb4ee6a4SAndroid Build Coastguard Worker pub struct IoctlOut {
1000*bb4ee6a4SAndroid Build Coastguard Worker     pub result: i32,
1001*bb4ee6a4SAndroid Build Coastguard Worker     pub flags: u32,
1002*bb4ee6a4SAndroid Build Coastguard Worker     pub in_iovs: u32,
1003*bb4ee6a4SAndroid Build Coastguard Worker     pub out_iovs: u32,
1004*bb4ee6a4SAndroid Build Coastguard Worker }
1005*bb4ee6a4SAndroid Build Coastguard Worker 
1006*bb4ee6a4SAndroid Build Coastguard Worker #[repr(C)]
1007*bb4ee6a4SAndroid Build Coastguard Worker #[derive(Debug, Default, Copy, Clone, AsBytes, FromZeroes, FromBytes)]
1008*bb4ee6a4SAndroid Build Coastguard Worker pub struct PollIn {
1009*bb4ee6a4SAndroid Build Coastguard Worker     pub fh: u64,
1010*bb4ee6a4SAndroid Build Coastguard Worker     pub kh: u64,
1011*bb4ee6a4SAndroid Build Coastguard Worker     pub flags: u32,
1012*bb4ee6a4SAndroid Build Coastguard Worker     pub events: u32,
1013*bb4ee6a4SAndroid Build Coastguard Worker }
1014*bb4ee6a4SAndroid Build Coastguard Worker 
1015*bb4ee6a4SAndroid Build Coastguard Worker #[repr(C)]
1016*bb4ee6a4SAndroid Build Coastguard Worker #[derive(Debug, Default, Copy, Clone, AsBytes, FromZeroes, FromBytes)]
1017*bb4ee6a4SAndroid Build Coastguard Worker pub struct PollOut {
1018*bb4ee6a4SAndroid Build Coastguard Worker     pub revents: u32,
1019*bb4ee6a4SAndroid Build Coastguard Worker     pub padding: u32,
1020*bb4ee6a4SAndroid Build Coastguard Worker }
1021*bb4ee6a4SAndroid Build Coastguard Worker 
1022*bb4ee6a4SAndroid Build Coastguard Worker #[repr(C)]
1023*bb4ee6a4SAndroid Build Coastguard Worker #[derive(Debug, Default, Copy, Clone, AsBytes, FromZeroes, FromBytes)]
1024*bb4ee6a4SAndroid Build Coastguard Worker pub struct NotifyPollWakeupOut {
1025*bb4ee6a4SAndroid Build Coastguard Worker     pub kh: u64,
1026*bb4ee6a4SAndroid Build Coastguard Worker }
1027*bb4ee6a4SAndroid Build Coastguard Worker 
1028*bb4ee6a4SAndroid Build Coastguard Worker #[repr(C)]
1029*bb4ee6a4SAndroid Build Coastguard Worker #[derive(Debug, Default, Copy, Clone, AsBytes, FromZeroes, FromBytes)]
1030*bb4ee6a4SAndroid Build Coastguard Worker pub struct FallocateIn {
1031*bb4ee6a4SAndroid Build Coastguard Worker     pub fh: u64,
1032*bb4ee6a4SAndroid Build Coastguard Worker     pub offset: u64,
1033*bb4ee6a4SAndroid Build Coastguard Worker     pub length: u64,
1034*bb4ee6a4SAndroid Build Coastguard Worker     pub mode: u32,
1035*bb4ee6a4SAndroid Build Coastguard Worker     pub padding: u32,
1036*bb4ee6a4SAndroid Build Coastguard Worker }
1037*bb4ee6a4SAndroid Build Coastguard Worker 
1038*bb4ee6a4SAndroid Build Coastguard Worker #[repr(C)]
1039*bb4ee6a4SAndroid Build Coastguard Worker #[derive(Debug, Default, Copy, Clone, AsBytes, FromZeroes, FromBytes)]
1040*bb4ee6a4SAndroid Build Coastguard Worker pub struct InHeader {
1041*bb4ee6a4SAndroid Build Coastguard Worker     pub len: u32,
1042*bb4ee6a4SAndroid Build Coastguard Worker     pub opcode: u32,
1043*bb4ee6a4SAndroid Build Coastguard Worker     pub unique: u64,
1044*bb4ee6a4SAndroid Build Coastguard Worker     pub nodeid: u64,
1045*bb4ee6a4SAndroid Build Coastguard Worker     pub uid: u32,
1046*bb4ee6a4SAndroid Build Coastguard Worker     pub gid: u32,
1047*bb4ee6a4SAndroid Build Coastguard Worker     pub pid: u32,
1048*bb4ee6a4SAndroid Build Coastguard Worker     pub padding: u32,
1049*bb4ee6a4SAndroid Build Coastguard Worker }
1050*bb4ee6a4SAndroid Build Coastguard Worker 
1051*bb4ee6a4SAndroid Build Coastguard Worker #[repr(C)]
1052*bb4ee6a4SAndroid Build Coastguard Worker #[derive(Debug, Default, Copy, Clone, AsBytes, FromZeroes, FromBytes)]
1053*bb4ee6a4SAndroid Build Coastguard Worker pub struct OutHeader {
1054*bb4ee6a4SAndroid Build Coastguard Worker     pub len: u32,
1055*bb4ee6a4SAndroid Build Coastguard Worker     pub error: i32,
1056*bb4ee6a4SAndroid Build Coastguard Worker     pub unique: u64,
1057*bb4ee6a4SAndroid Build Coastguard Worker }
1058*bb4ee6a4SAndroid Build Coastguard Worker 
1059*bb4ee6a4SAndroid Build Coastguard Worker #[repr(C)]
1060*bb4ee6a4SAndroid Build Coastguard Worker #[derive(Debug, Default, Copy, Clone, AsBytes, FromZeroes, FromBytes)]
1061*bb4ee6a4SAndroid Build Coastguard Worker pub struct Dirent {
1062*bb4ee6a4SAndroid Build Coastguard Worker     pub ino: u64,
1063*bb4ee6a4SAndroid Build Coastguard Worker     pub off: u64,
1064*bb4ee6a4SAndroid Build Coastguard Worker     pub namelen: u32,
1065*bb4ee6a4SAndroid Build Coastguard Worker     pub type_: u32,
1066*bb4ee6a4SAndroid Build Coastguard Worker     // char name[];
1067*bb4ee6a4SAndroid Build Coastguard Worker }
1068*bb4ee6a4SAndroid Build Coastguard Worker 
1069*bb4ee6a4SAndroid Build Coastguard Worker #[repr(C)]
1070*bb4ee6a4SAndroid Build Coastguard Worker #[derive(Debug, Default, Copy, Clone, AsBytes, FromZeroes, FromBytes)]
1071*bb4ee6a4SAndroid Build Coastguard Worker pub struct Direntplus {
1072*bb4ee6a4SAndroid Build Coastguard Worker     pub entry_out: EntryOut,
1073*bb4ee6a4SAndroid Build Coastguard Worker     pub dirent: Dirent,
1074*bb4ee6a4SAndroid Build Coastguard Worker }
1075*bb4ee6a4SAndroid Build Coastguard Worker 
1076*bb4ee6a4SAndroid Build Coastguard Worker #[repr(C)]
1077*bb4ee6a4SAndroid Build Coastguard Worker #[derive(Debug, Default, Copy, Clone, AsBytes, FromZeroes, FromBytes)]
1078*bb4ee6a4SAndroid Build Coastguard Worker pub struct NotifyInvalInodeOut {
1079*bb4ee6a4SAndroid Build Coastguard Worker     pub ino: u64,
1080*bb4ee6a4SAndroid Build Coastguard Worker     pub off: i64,
1081*bb4ee6a4SAndroid Build Coastguard Worker     pub len: i64,
1082*bb4ee6a4SAndroid Build Coastguard Worker }
1083*bb4ee6a4SAndroid Build Coastguard Worker 
1084*bb4ee6a4SAndroid Build Coastguard Worker #[repr(C)]
1085*bb4ee6a4SAndroid Build Coastguard Worker #[derive(Debug, Default, Copy, Clone, AsBytes, FromZeroes, FromBytes)]
1086*bb4ee6a4SAndroid Build Coastguard Worker pub struct NotifyInvalEntryOut {
1087*bb4ee6a4SAndroid Build Coastguard Worker     pub parent: u64,
1088*bb4ee6a4SAndroid Build Coastguard Worker     pub namelen: u32,
1089*bb4ee6a4SAndroid Build Coastguard Worker     pub padding: u32,
1090*bb4ee6a4SAndroid Build Coastguard Worker }
1091*bb4ee6a4SAndroid Build Coastguard Worker 
1092*bb4ee6a4SAndroid Build Coastguard Worker #[repr(C)]
1093*bb4ee6a4SAndroid Build Coastguard Worker #[derive(Debug, Default, Copy, Clone, AsBytes, FromZeroes, FromBytes)]
1094*bb4ee6a4SAndroid Build Coastguard Worker pub struct NotifyDeleteOut {
1095*bb4ee6a4SAndroid Build Coastguard Worker     pub parent: u64,
1096*bb4ee6a4SAndroid Build Coastguard Worker     pub child: u64,
1097*bb4ee6a4SAndroid Build Coastguard Worker     pub namelen: u32,
1098*bb4ee6a4SAndroid Build Coastguard Worker     pub padding: u32,
1099*bb4ee6a4SAndroid Build Coastguard Worker }
1100*bb4ee6a4SAndroid Build Coastguard Worker 
1101*bb4ee6a4SAndroid Build Coastguard Worker #[repr(C)]
1102*bb4ee6a4SAndroid Build Coastguard Worker #[derive(Debug, Default, Copy, Clone, AsBytes, FromZeroes, FromBytes)]
1103*bb4ee6a4SAndroid Build Coastguard Worker pub struct NotifyStoreOut {
1104*bb4ee6a4SAndroid Build Coastguard Worker     pub nodeid: u64,
1105*bb4ee6a4SAndroid Build Coastguard Worker     pub offset: u64,
1106*bb4ee6a4SAndroid Build Coastguard Worker     pub size: u32,
1107*bb4ee6a4SAndroid Build Coastguard Worker     pub padding: u32,
1108*bb4ee6a4SAndroid Build Coastguard Worker }
1109*bb4ee6a4SAndroid Build Coastguard Worker 
1110*bb4ee6a4SAndroid Build Coastguard Worker #[repr(C)]
1111*bb4ee6a4SAndroid Build Coastguard Worker #[derive(Debug, Default, Copy, Clone, AsBytes, FromZeroes, FromBytes)]
1112*bb4ee6a4SAndroid Build Coastguard Worker pub struct Notify_Retrieve_Out {
1113*bb4ee6a4SAndroid Build Coastguard Worker     pub notify_unique: u64,
1114*bb4ee6a4SAndroid Build Coastguard Worker     pub nodeid: u64,
1115*bb4ee6a4SAndroid Build Coastguard Worker     pub offset: u64,
1116*bb4ee6a4SAndroid Build Coastguard Worker     pub size: u32,
1117*bb4ee6a4SAndroid Build Coastguard Worker     pub padding: u32,
1118*bb4ee6a4SAndroid Build Coastguard Worker }
1119*bb4ee6a4SAndroid Build Coastguard Worker 
1120*bb4ee6a4SAndroid Build Coastguard Worker /* Matches the size of fuse_write_in */
1121*bb4ee6a4SAndroid Build Coastguard Worker #[repr(C)]
1122*bb4ee6a4SAndroid Build Coastguard Worker #[derive(Debug, Default, Copy, Clone, AsBytes, FromZeroes, FromBytes)]
1123*bb4ee6a4SAndroid Build Coastguard Worker pub struct NotifyRetrieveIn {
1124*bb4ee6a4SAndroid Build Coastguard Worker     pub dummy1: u64,
1125*bb4ee6a4SAndroid Build Coastguard Worker     pub offset: u64,
1126*bb4ee6a4SAndroid Build Coastguard Worker     pub size: u32,
1127*bb4ee6a4SAndroid Build Coastguard Worker     pub dummy2: u32,
1128*bb4ee6a4SAndroid Build Coastguard Worker     pub dummy3: u64,
1129*bb4ee6a4SAndroid Build Coastguard Worker     pub dummy4: u64,
1130*bb4ee6a4SAndroid Build Coastguard Worker }
1131*bb4ee6a4SAndroid Build Coastguard Worker 
1132*bb4ee6a4SAndroid Build Coastguard Worker #[repr(C)]
1133*bb4ee6a4SAndroid Build Coastguard Worker #[derive(Debug, Default, Copy, Clone, AsBytes, FromZeroes, FromBytes)]
1134*bb4ee6a4SAndroid Build Coastguard Worker pub struct LseekIn {
1135*bb4ee6a4SAndroid Build Coastguard Worker     pub fh: u64,
1136*bb4ee6a4SAndroid Build Coastguard Worker     pub offset: u64,
1137*bb4ee6a4SAndroid Build Coastguard Worker     pub whence: u32,
1138*bb4ee6a4SAndroid Build Coastguard Worker     pub padding: u32,
1139*bb4ee6a4SAndroid Build Coastguard Worker }
1140*bb4ee6a4SAndroid Build Coastguard Worker 
1141*bb4ee6a4SAndroid Build Coastguard Worker #[repr(C)]
1142*bb4ee6a4SAndroid Build Coastguard Worker #[derive(Debug, Default, Copy, Clone, AsBytes, FromZeroes, FromBytes)]
1143*bb4ee6a4SAndroid Build Coastguard Worker pub struct LseekOut {
1144*bb4ee6a4SAndroid Build Coastguard Worker     pub offset: u64,
1145*bb4ee6a4SAndroid Build Coastguard Worker }
1146*bb4ee6a4SAndroid Build Coastguard Worker 
1147*bb4ee6a4SAndroid Build Coastguard Worker #[repr(C)]
1148*bb4ee6a4SAndroid Build Coastguard Worker #[derive(Debug, Default, Copy, Clone, AsBytes, FromZeroes, FromBytes)]
1149*bb4ee6a4SAndroid Build Coastguard Worker pub struct CopyFileRangeIn {
1150*bb4ee6a4SAndroid Build Coastguard Worker     pub fh_src: u64,
1151*bb4ee6a4SAndroid Build Coastguard Worker     pub off_src: u64,
1152*bb4ee6a4SAndroid Build Coastguard Worker     pub nodeid_dst: u64,
1153*bb4ee6a4SAndroid Build Coastguard Worker     pub fh_dst: u64,
1154*bb4ee6a4SAndroid Build Coastguard Worker     pub off_dst: u64,
1155*bb4ee6a4SAndroid Build Coastguard Worker     pub len: u64,
1156*bb4ee6a4SAndroid Build Coastguard Worker     pub flags: u64,
1157*bb4ee6a4SAndroid Build Coastguard Worker }
1158*bb4ee6a4SAndroid Build Coastguard Worker 
1159*bb4ee6a4SAndroid Build Coastguard Worker #[repr(C)]
1160*bb4ee6a4SAndroid Build Coastguard Worker #[derive(Debug, Default, Copy, Clone, AsBytes, FromZeroes, FromBytes)]
1161*bb4ee6a4SAndroid Build Coastguard Worker pub struct SetUpMappingIn {
1162*bb4ee6a4SAndroid Build Coastguard Worker     /* An already open handle */
1163*bb4ee6a4SAndroid Build Coastguard Worker     pub fh: u64,
1164*bb4ee6a4SAndroid Build Coastguard Worker     /* Offset into the file to start the mapping */
1165*bb4ee6a4SAndroid Build Coastguard Worker     pub foffset: u64,
1166*bb4ee6a4SAndroid Build Coastguard Worker     /* Length of mapping required */
1167*bb4ee6a4SAndroid Build Coastguard Worker     pub len: u64,
1168*bb4ee6a4SAndroid Build Coastguard Worker     /* Flags, FUSE_SETUPMAPPING_FLAG_* */
1169*bb4ee6a4SAndroid Build Coastguard Worker     pub flags: u64,
1170*bb4ee6a4SAndroid Build Coastguard Worker     /* Offset in Memory Window */
1171*bb4ee6a4SAndroid Build Coastguard Worker     pub moffset: u64,
1172*bb4ee6a4SAndroid Build Coastguard Worker }
1173*bb4ee6a4SAndroid Build Coastguard Worker 
1174*bb4ee6a4SAndroid Build Coastguard Worker #[repr(C)]
1175*bb4ee6a4SAndroid Build Coastguard Worker #[derive(Debug, Default, Copy, Clone, AsBytes, FromZeroes, FromBytes)]
1176*bb4ee6a4SAndroid Build Coastguard Worker pub struct RemoveMappingIn {
1177*bb4ee6a4SAndroid Build Coastguard Worker     /* number of fuse_removemapping_one follows */
1178*bb4ee6a4SAndroid Build Coastguard Worker     pub count: u32,
1179*bb4ee6a4SAndroid Build Coastguard Worker }
1180*bb4ee6a4SAndroid Build Coastguard Worker 
1181*bb4ee6a4SAndroid Build Coastguard Worker #[repr(C)]
1182*bb4ee6a4SAndroid Build Coastguard Worker #[derive(Debug, Default, Copy, Clone, AsBytes, FromZeroes, FromBytes)]
1183*bb4ee6a4SAndroid Build Coastguard Worker pub struct RemoveMappingOne {
1184*bb4ee6a4SAndroid Build Coastguard Worker     /* Offset into the dax window start the unmapping */
1185*bb4ee6a4SAndroid Build Coastguard Worker     pub moffset: u64,
1186*bb4ee6a4SAndroid Build Coastguard Worker     /* Length of mapping required */
1187*bb4ee6a4SAndroid Build Coastguard Worker     pub len: u64,
1188*bb4ee6a4SAndroid Build Coastguard Worker }
1189*bb4ee6a4SAndroid Build Coastguard Worker 
1190*bb4ee6a4SAndroid Build Coastguard Worker /// For each security context, send fuse_secctx with size of security context
1191*bb4ee6a4SAndroid Build Coastguard Worker /// fuse_secctx will be followed by security context name and this in turn
1192*bb4ee6a4SAndroid Build Coastguard Worker /// will be followed by actual context label.
1193*bb4ee6a4SAndroid Build Coastguard Worker /// fuse_secctx, name, context
1194*bb4ee6a4SAndroid Build Coastguard Worker #[repr(C)]
1195*bb4ee6a4SAndroid Build Coastguard Worker #[derive(Debug, Default, Copy, Clone, AsBytes, FromZeroes, FromBytes)]
1196*bb4ee6a4SAndroid Build Coastguard Worker pub struct Secctx {
1197*bb4ee6a4SAndroid Build Coastguard Worker     pub size: u32,
1198*bb4ee6a4SAndroid Build Coastguard Worker     pub padding: u32,
1199*bb4ee6a4SAndroid Build Coastguard Worker }
1200*bb4ee6a4SAndroid Build Coastguard Worker 
1201*bb4ee6a4SAndroid Build Coastguard Worker /// Contains the information about how many fuse_secctx structures are being
1202*bb4ee6a4SAndroid Build Coastguard Worker /// sent and what's the total size of all security contexts (including
1203*bb4ee6a4SAndroid Build Coastguard Worker /// size of fuse_secctx_header).
1204*bb4ee6a4SAndroid Build Coastguard Worker #[repr(C)]
1205*bb4ee6a4SAndroid Build Coastguard Worker #[derive(Debug, Default, Copy, Clone, AsBytes, FromZeroes, FromBytes)]
1206*bb4ee6a4SAndroid Build Coastguard Worker pub struct SecctxHeader {
1207*bb4ee6a4SAndroid Build Coastguard Worker     pub size: u32,
1208*bb4ee6a4SAndroid Build Coastguard Worker     pub nr_secctx: u32,
1209*bb4ee6a4SAndroid Build Coastguard Worker }
1210