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