1*9e564957SAndroid Build Coastguard Worker /* SPDX-License-Identifier: ((GPL-2.0 WITH Linux-syscall-note) OR BSD-2-Clause) */ 2*9e564957SAndroid Build Coastguard Worker /* 3*9e564957SAndroid Build Coastguard Worker This file defines the kernel interface of FUSE 4*9e564957SAndroid Build Coastguard Worker Copyright (C) 2001-2008 Miklos Szeredi <[email protected]> 5*9e564957SAndroid Build Coastguard Worker 6*9e564957SAndroid Build Coastguard Worker This program can be distributed under the terms of the GNU GPL. 7*9e564957SAndroid Build Coastguard Worker See the file COPYING. 8*9e564957SAndroid Build Coastguard Worker 9*9e564957SAndroid Build Coastguard Worker This -- and only this -- header file may also be distributed under 10*9e564957SAndroid Build Coastguard Worker the terms of the BSD Licence as follows: 11*9e564957SAndroid Build Coastguard Worker 12*9e564957SAndroid Build Coastguard Worker Copyright (C) 2001-2007 Miklos Szeredi. All rights reserved. 13*9e564957SAndroid Build Coastguard Worker 14*9e564957SAndroid Build Coastguard Worker Redistribution and use in source and binary forms, with or without 15*9e564957SAndroid Build Coastguard Worker modification, are permitted provided that the following conditions 16*9e564957SAndroid Build Coastguard Worker are met: 17*9e564957SAndroid Build Coastguard Worker 1. Redistributions of source code must retain the above copyright 18*9e564957SAndroid Build Coastguard Worker notice, this list of conditions and the following disclaimer. 19*9e564957SAndroid Build Coastguard Worker 2. Redistributions in binary form must reproduce the above copyright 20*9e564957SAndroid Build Coastguard Worker notice, this list of conditions and the following disclaimer in the 21*9e564957SAndroid Build Coastguard Worker documentation and/or other materials provided with the distribution. 22*9e564957SAndroid Build Coastguard Worker 23*9e564957SAndroid Build Coastguard Worker THIS SOFTWARE IS PROVIDED BY AUTHOR AND CONTRIBUTORS ``AS IS'' AND 24*9e564957SAndroid Build Coastguard Worker ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 25*9e564957SAndroid Build Coastguard Worker IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 26*9e564957SAndroid Build Coastguard Worker ARE DISCLAIMED. IN NO EVENT SHALL AUTHOR OR CONTRIBUTORS BE LIABLE 27*9e564957SAndroid Build Coastguard Worker FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 28*9e564957SAndroid Build Coastguard Worker DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 29*9e564957SAndroid Build Coastguard Worker OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 30*9e564957SAndroid Build Coastguard Worker HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 31*9e564957SAndroid Build Coastguard Worker LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 32*9e564957SAndroid Build Coastguard Worker OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 33*9e564957SAndroid Build Coastguard Worker SUCH DAMAGE. 34*9e564957SAndroid Build Coastguard Worker */ 35*9e564957SAndroid Build Coastguard Worker 36*9e564957SAndroid Build Coastguard Worker /* 37*9e564957SAndroid Build Coastguard Worker * This file defines the kernel interface of FUSE 38*9e564957SAndroid Build Coastguard Worker * 39*9e564957SAndroid Build Coastguard Worker * Protocol changelog: 40*9e564957SAndroid Build Coastguard Worker * 41*9e564957SAndroid Build Coastguard Worker * 7.1: 42*9e564957SAndroid Build Coastguard Worker * - add the following messages: 43*9e564957SAndroid Build Coastguard Worker * FUSE_SETATTR, FUSE_SYMLINK, FUSE_MKNOD, FUSE_MKDIR, FUSE_UNLINK, 44*9e564957SAndroid Build Coastguard Worker * FUSE_RMDIR, FUSE_RENAME, FUSE_LINK, FUSE_OPEN, FUSE_READ, FUSE_WRITE, 45*9e564957SAndroid Build Coastguard Worker * FUSE_RELEASE, FUSE_FSYNC, FUSE_FLUSH, FUSE_SETXATTR, FUSE_GETXATTR, 46*9e564957SAndroid Build Coastguard Worker * FUSE_LISTXATTR, FUSE_REMOVEXATTR, FUSE_OPENDIR, FUSE_READDIR, 47*9e564957SAndroid Build Coastguard Worker * FUSE_RELEASEDIR 48*9e564957SAndroid Build Coastguard Worker * - add padding to messages to accommodate 32-bit servers on 64-bit kernels 49*9e564957SAndroid Build Coastguard Worker * 50*9e564957SAndroid Build Coastguard Worker * 7.2: 51*9e564957SAndroid Build Coastguard Worker * - add FOPEN_DIRECT_IO and FOPEN_KEEP_CACHE flags 52*9e564957SAndroid Build Coastguard Worker * - add FUSE_FSYNCDIR message 53*9e564957SAndroid Build Coastguard Worker * 54*9e564957SAndroid Build Coastguard Worker * 7.3: 55*9e564957SAndroid Build Coastguard Worker * - add FUSE_ACCESS message 56*9e564957SAndroid Build Coastguard Worker * - add FUSE_CREATE message 57*9e564957SAndroid Build Coastguard Worker * - add filehandle to fuse_setattr_in 58*9e564957SAndroid Build Coastguard Worker * 59*9e564957SAndroid Build Coastguard Worker * 7.4: 60*9e564957SAndroid Build Coastguard Worker * - add frsize to fuse_kstatfs 61*9e564957SAndroid Build Coastguard Worker * - clean up request size limit checking 62*9e564957SAndroid Build Coastguard Worker * 63*9e564957SAndroid Build Coastguard Worker * 7.5: 64*9e564957SAndroid Build Coastguard Worker * - add flags and max_write to fuse_init_out 65*9e564957SAndroid Build Coastguard Worker * 66*9e564957SAndroid Build Coastguard Worker * 7.6: 67*9e564957SAndroid Build Coastguard Worker * - add max_readahead to fuse_init_in and fuse_init_out 68*9e564957SAndroid Build Coastguard Worker * 69*9e564957SAndroid Build Coastguard Worker * 7.7: 70*9e564957SAndroid Build Coastguard Worker * - add FUSE_INTERRUPT message 71*9e564957SAndroid Build Coastguard Worker * - add POSIX file lock support 72*9e564957SAndroid Build Coastguard Worker * 73*9e564957SAndroid Build Coastguard Worker * 7.8: 74*9e564957SAndroid Build Coastguard Worker * - add lock_owner and flags fields to fuse_release_in 75*9e564957SAndroid Build Coastguard Worker * - add FUSE_BMAP message 76*9e564957SAndroid Build Coastguard Worker * - add FUSE_DESTROY message 77*9e564957SAndroid Build Coastguard Worker * 78*9e564957SAndroid Build Coastguard Worker * 7.9: 79*9e564957SAndroid Build Coastguard Worker * - new fuse_getattr_in input argument of GETATTR 80*9e564957SAndroid Build Coastguard Worker * - add lk_flags in fuse_lk_in 81*9e564957SAndroid Build Coastguard Worker * - add lock_owner field to fuse_setattr_in, fuse_read_in and fuse_write_in 82*9e564957SAndroid Build Coastguard Worker * - add blksize field to fuse_attr 83*9e564957SAndroid Build Coastguard Worker * - add file flags field to fuse_read_in and fuse_write_in 84*9e564957SAndroid Build Coastguard Worker * - Add ATIME_NOW and MTIME_NOW flags to fuse_setattr_in 85*9e564957SAndroid Build Coastguard Worker * 86*9e564957SAndroid Build Coastguard Worker * 7.10 87*9e564957SAndroid Build Coastguard Worker * - add nonseekable open flag 88*9e564957SAndroid Build Coastguard Worker * 89*9e564957SAndroid Build Coastguard Worker * 7.11 90*9e564957SAndroid Build Coastguard Worker * - add IOCTL message 91*9e564957SAndroid Build Coastguard Worker * - add unsolicited notification support 92*9e564957SAndroid Build Coastguard Worker * - add POLL message and NOTIFY_POLL notification 93*9e564957SAndroid Build Coastguard Worker * 94*9e564957SAndroid Build Coastguard Worker * 7.12 95*9e564957SAndroid Build Coastguard Worker * - add umask flag to input argument of create, mknod and mkdir 96*9e564957SAndroid Build Coastguard Worker * - add notification messages for invalidation of inodes and 97*9e564957SAndroid Build Coastguard Worker * directory entries 98*9e564957SAndroid Build Coastguard Worker * 99*9e564957SAndroid Build Coastguard Worker * 7.13 100*9e564957SAndroid Build Coastguard Worker * - make max number of background requests and congestion threshold 101*9e564957SAndroid Build Coastguard Worker * tunables 102*9e564957SAndroid Build Coastguard Worker * 103*9e564957SAndroid Build Coastguard Worker * 7.14 104*9e564957SAndroid Build Coastguard Worker * - add splice support to fuse device 105*9e564957SAndroid Build Coastguard Worker * 106*9e564957SAndroid Build Coastguard Worker * 7.15 107*9e564957SAndroid Build Coastguard Worker * - add store notify 108*9e564957SAndroid Build Coastguard Worker * - add retrieve notify 109*9e564957SAndroid Build Coastguard Worker * 110*9e564957SAndroid Build Coastguard Worker * 7.16 111*9e564957SAndroid Build Coastguard Worker * - add BATCH_FORGET request 112*9e564957SAndroid Build Coastguard Worker * - FUSE_IOCTL_UNRESTRICTED shall now return with array of 'struct 113*9e564957SAndroid Build Coastguard Worker * fuse_ioctl_iovec' instead of ambiguous 'struct iovec' 114*9e564957SAndroid Build Coastguard Worker * - add FUSE_IOCTL_32BIT flag 115*9e564957SAndroid Build Coastguard Worker * 116*9e564957SAndroid Build Coastguard Worker * 7.17 117*9e564957SAndroid Build Coastguard Worker * - add FUSE_FLOCK_LOCKS and FUSE_RELEASE_FLOCK_UNLOCK 118*9e564957SAndroid Build Coastguard Worker * 119*9e564957SAndroid Build Coastguard Worker * 7.18 120*9e564957SAndroid Build Coastguard Worker * - add FUSE_IOCTL_DIR flag 121*9e564957SAndroid Build Coastguard Worker * - add FUSE_NOTIFY_DELETE 122*9e564957SAndroid Build Coastguard Worker * 123*9e564957SAndroid Build Coastguard Worker * 7.19 124*9e564957SAndroid Build Coastguard Worker * - add FUSE_FALLOCATE 125*9e564957SAndroid Build Coastguard Worker * 126*9e564957SAndroid Build Coastguard Worker * 7.20 127*9e564957SAndroid Build Coastguard Worker * - add FUSE_AUTO_INVAL_DATA 128*9e564957SAndroid Build Coastguard Worker * 129*9e564957SAndroid Build Coastguard Worker * 7.21 130*9e564957SAndroid Build Coastguard Worker * - add FUSE_READDIRPLUS 131*9e564957SAndroid Build Coastguard Worker * - send the requested events in POLL request 132*9e564957SAndroid Build Coastguard Worker * 133*9e564957SAndroid Build Coastguard Worker * 7.22 134*9e564957SAndroid Build Coastguard Worker * - add FUSE_ASYNC_DIO 135*9e564957SAndroid Build Coastguard Worker * 136*9e564957SAndroid Build Coastguard Worker * 7.23 137*9e564957SAndroid Build Coastguard Worker * - add FUSE_WRITEBACK_CACHE 138*9e564957SAndroid Build Coastguard Worker * - add time_gran to fuse_init_out 139*9e564957SAndroid Build Coastguard Worker * - add reserved space to fuse_init_out 140*9e564957SAndroid Build Coastguard Worker * - add FATTR_CTIME 141*9e564957SAndroid Build Coastguard Worker * - add ctime and ctimensec to fuse_setattr_in 142*9e564957SAndroid Build Coastguard Worker * - add FUSE_RENAME2 request 143*9e564957SAndroid Build Coastguard Worker * - add FUSE_NO_OPEN_SUPPORT flag 144*9e564957SAndroid Build Coastguard Worker * 145*9e564957SAndroid Build Coastguard Worker * 7.24 146*9e564957SAndroid Build Coastguard Worker * - add FUSE_LSEEK for SEEK_HOLE and SEEK_DATA support 147*9e564957SAndroid Build Coastguard Worker * 148*9e564957SAndroid Build Coastguard Worker * 7.25 149*9e564957SAndroid Build Coastguard Worker * - add FUSE_PARALLEL_DIROPS 150*9e564957SAndroid Build Coastguard Worker * 151*9e564957SAndroid Build Coastguard Worker * 7.26 152*9e564957SAndroid Build Coastguard Worker * - add FUSE_HANDLE_KILLPRIV 153*9e564957SAndroid Build Coastguard Worker * - add FUSE_POSIX_ACL 154*9e564957SAndroid Build Coastguard Worker * 155*9e564957SAndroid Build Coastguard Worker * 7.27 156*9e564957SAndroid Build Coastguard Worker * - add FUSE_ABORT_ERROR 157*9e564957SAndroid Build Coastguard Worker * 158*9e564957SAndroid Build Coastguard Worker * 7.28 159*9e564957SAndroid Build Coastguard Worker * - add FUSE_COPY_FILE_RANGE 160*9e564957SAndroid Build Coastguard Worker * - add FOPEN_CACHE_DIR 161*9e564957SAndroid Build Coastguard Worker * - add FUSE_MAX_PAGES, add max_pages to init_out 162*9e564957SAndroid Build Coastguard Worker * - add FUSE_CACHE_SYMLINKS 163*9e564957SAndroid Build Coastguard Worker * 164*9e564957SAndroid Build Coastguard Worker * 7.29 165*9e564957SAndroid Build Coastguard Worker * - add FUSE_NO_OPENDIR_SUPPORT flag 166*9e564957SAndroid Build Coastguard Worker * 167*9e564957SAndroid Build Coastguard Worker * 7.30 168*9e564957SAndroid Build Coastguard Worker * - add FUSE_EXPLICIT_INVAL_DATA 169*9e564957SAndroid Build Coastguard Worker * - add FUSE_IOCTL_COMPAT_X32 170*9e564957SAndroid Build Coastguard Worker * 171*9e564957SAndroid Build Coastguard Worker * 7.31 172*9e564957SAndroid Build Coastguard Worker * - add FUSE_WRITE_KILL_PRIV flag 173*9e564957SAndroid Build Coastguard Worker * - add FUSE_SETUPMAPPING and FUSE_REMOVEMAPPING 174*9e564957SAndroid Build Coastguard Worker * - add map_alignment to fuse_init_out, add FUSE_MAP_ALIGNMENT flag 175*9e564957SAndroid Build Coastguard Worker * 176*9e564957SAndroid Build Coastguard Worker * 7.32 177*9e564957SAndroid Build Coastguard Worker * - add flags to fuse_attr, add FUSE_ATTR_SUBMOUNT, add FUSE_SUBMOUNTS 178*9e564957SAndroid Build Coastguard Worker * 179*9e564957SAndroid Build Coastguard Worker * 7.33 180*9e564957SAndroid Build Coastguard Worker * - add FUSE_HANDLE_KILLPRIV_V2, FUSE_WRITE_KILL_SUIDGID, FATTR_KILL_SUIDGID 181*9e564957SAndroid Build Coastguard Worker * - add FUSE_OPEN_KILL_SUIDGID 182*9e564957SAndroid Build Coastguard Worker * - extend fuse_setxattr_in, add FUSE_SETXATTR_EXT 183*9e564957SAndroid Build Coastguard Worker * - add FUSE_SETXATTR_ACL_KILL_SGID 184*9e564957SAndroid Build Coastguard Worker * 185*9e564957SAndroid Build Coastguard Worker * 7.34 186*9e564957SAndroid Build Coastguard Worker * - add FUSE_SYNCFS 187*9e564957SAndroid Build Coastguard Worker * 188*9e564957SAndroid Build Coastguard Worker * 7.35 189*9e564957SAndroid Build Coastguard Worker * - add FOPEN_NOFLUSH 190*9e564957SAndroid Build Coastguard Worker * 191*9e564957SAndroid Build Coastguard Worker * 7.36 192*9e564957SAndroid Build Coastguard Worker * - extend fuse_init_in with reserved fields, add FUSE_INIT_EXT init flag 193*9e564957SAndroid Build Coastguard Worker * - add flags2 to fuse_init_in and fuse_init_out 194*9e564957SAndroid Build Coastguard Worker * - add FUSE_SECURITY_CTX init flag 195*9e564957SAndroid Build Coastguard Worker * - add security context to create, mkdir, symlink, and mknod requests 196*9e564957SAndroid Build Coastguard Worker * - add FUSE_HAS_INODE_DAX, FUSE_ATTR_DAX 197*9e564957SAndroid Build Coastguard Worker * 198*9e564957SAndroid Build Coastguard Worker * 7.37 199*9e564957SAndroid Build Coastguard Worker * - add FUSE_TMPFILE 200*9e564957SAndroid Build Coastguard Worker * 201*9e564957SAndroid Build Coastguard Worker * 7.38 202*9e564957SAndroid Build Coastguard Worker * - add FUSE_EXPIRE_ONLY flag to fuse_notify_inval_entry 203*9e564957SAndroid Build Coastguard Worker * - add FOPEN_PARALLEL_DIRECT_WRITES 204*9e564957SAndroid Build Coastguard Worker * - add total_extlen to fuse_in_header 205*9e564957SAndroid Build Coastguard Worker * - add FUSE_MAX_NR_SECCTX 206*9e564957SAndroid Build Coastguard Worker * - add extension header 207*9e564957SAndroid Build Coastguard Worker * - add FUSE_EXT_GROUPS 208*9e564957SAndroid Build Coastguard Worker * - add FUSE_CREATE_SUPP_GROUP 209*9e564957SAndroid Build Coastguard Worker * - add FUSE_HAS_EXPIRE_ONLY 210*9e564957SAndroid Build Coastguard Worker * 211*9e564957SAndroid Build Coastguard Worker * 7.39 212*9e564957SAndroid Build Coastguard Worker * - add FUSE_DIRECT_IO_ALLOW_MMAP 213*9e564957SAndroid Build Coastguard Worker * - add FUSE_STATX and related structures 214*9e564957SAndroid Build Coastguard Worker * 215*9e564957SAndroid Build Coastguard Worker * 7.40 216*9e564957SAndroid Build Coastguard Worker * - add max_stack_depth to fuse_init_out, add FUSE_PASSTHROUGH init flag 217*9e564957SAndroid Build Coastguard Worker * - add backing_id to fuse_open_out, add FOPEN_PASSTHROUGH open flag 218*9e564957SAndroid Build Coastguard Worker */ 219*9e564957SAndroid Build Coastguard Worker 220*9e564957SAndroid Build Coastguard Worker #ifndef _LINUX_FUSE_H 221*9e564957SAndroid Build Coastguard Worker #define _LINUX_FUSE_H 222*9e564957SAndroid Build Coastguard Worker 223*9e564957SAndroid Build Coastguard Worker #ifdef __KERNEL__ 224*9e564957SAndroid Build Coastguard Worker #include <linux/types.h> 225*9e564957SAndroid Build Coastguard Worker #else 226*9e564957SAndroid Build Coastguard Worker #include <stdint.h> 227*9e564957SAndroid Build Coastguard Worker #endif 228*9e564957SAndroid Build Coastguard Worker 229*9e564957SAndroid Build Coastguard Worker /* 230*9e564957SAndroid Build Coastguard Worker * Version negotiation: 231*9e564957SAndroid Build Coastguard Worker * 232*9e564957SAndroid Build Coastguard Worker * Both the kernel and userspace send the version they support in the 233*9e564957SAndroid Build Coastguard Worker * INIT request and reply respectively. 234*9e564957SAndroid Build Coastguard Worker * 235*9e564957SAndroid Build Coastguard Worker * If the major versions match then both shall use the smallest 236*9e564957SAndroid Build Coastguard Worker * of the two minor versions for communication. 237*9e564957SAndroid Build Coastguard Worker * 238*9e564957SAndroid Build Coastguard Worker * If the kernel supports a larger major version, then userspace shall 239*9e564957SAndroid Build Coastguard Worker * reply with the major version it supports, ignore the rest of the 240*9e564957SAndroid Build Coastguard Worker * INIT message and expect a new INIT message from the kernel with a 241*9e564957SAndroid Build Coastguard Worker * matching major version. 242*9e564957SAndroid Build Coastguard Worker * 243*9e564957SAndroid Build Coastguard Worker * If the library supports a larger major version, then it shall fall 244*9e564957SAndroid Build Coastguard Worker * back to the major protocol version sent by the kernel for 245*9e564957SAndroid Build Coastguard Worker * communication and reply with that major version (and an arbitrary 246*9e564957SAndroid Build Coastguard Worker * supported minor version). 247*9e564957SAndroid Build Coastguard Worker */ 248*9e564957SAndroid Build Coastguard Worker 249*9e564957SAndroid Build Coastguard Worker /** Version number of this interface */ 250*9e564957SAndroid Build Coastguard Worker #define FUSE_KERNEL_VERSION 7 251*9e564957SAndroid Build Coastguard Worker 252*9e564957SAndroid Build Coastguard Worker /** Minor version number of this interface */ 253*9e564957SAndroid Build Coastguard Worker #define FUSE_KERNEL_MINOR_VERSION 40 254*9e564957SAndroid Build Coastguard Worker 255*9e564957SAndroid Build Coastguard Worker /** The node ID of the root inode */ 256*9e564957SAndroid Build Coastguard Worker #define FUSE_ROOT_ID 1 257*9e564957SAndroid Build Coastguard Worker 258*9e564957SAndroid Build Coastguard Worker /* Make sure all structures are padded to 64bit boundary, so 32bit 259*9e564957SAndroid Build Coastguard Worker userspace works under 64bit kernels */ 260*9e564957SAndroid Build Coastguard Worker 261*9e564957SAndroid Build Coastguard Worker struct fuse_attr { 262*9e564957SAndroid Build Coastguard Worker uint64_t ino; 263*9e564957SAndroid Build Coastguard Worker uint64_t size; 264*9e564957SAndroid Build Coastguard Worker uint64_t blocks; 265*9e564957SAndroid Build Coastguard Worker uint64_t atime; 266*9e564957SAndroid Build Coastguard Worker uint64_t mtime; 267*9e564957SAndroid Build Coastguard Worker uint64_t ctime; 268*9e564957SAndroid Build Coastguard Worker uint32_t atimensec; 269*9e564957SAndroid Build Coastguard Worker uint32_t mtimensec; 270*9e564957SAndroid Build Coastguard Worker uint32_t ctimensec; 271*9e564957SAndroid Build Coastguard Worker uint32_t mode; 272*9e564957SAndroid Build Coastguard Worker uint32_t nlink; 273*9e564957SAndroid Build Coastguard Worker uint32_t uid; 274*9e564957SAndroid Build Coastguard Worker uint32_t gid; 275*9e564957SAndroid Build Coastguard Worker uint32_t rdev; 276*9e564957SAndroid Build Coastguard Worker uint32_t blksize; 277*9e564957SAndroid Build Coastguard Worker uint32_t flags; 278*9e564957SAndroid Build Coastguard Worker }; 279*9e564957SAndroid Build Coastguard Worker 280*9e564957SAndroid Build Coastguard Worker /* 281*9e564957SAndroid Build Coastguard Worker * The following structures are bit-for-bit compatible with the statx(2) ABI in 282*9e564957SAndroid Build Coastguard Worker * Linux. 283*9e564957SAndroid Build Coastguard Worker */ 284*9e564957SAndroid Build Coastguard Worker struct fuse_sx_time { 285*9e564957SAndroid Build Coastguard Worker int64_t tv_sec; 286*9e564957SAndroid Build Coastguard Worker uint32_t tv_nsec; 287*9e564957SAndroid Build Coastguard Worker int32_t __reserved; 288*9e564957SAndroid Build Coastguard Worker }; 289*9e564957SAndroid Build Coastguard Worker 290*9e564957SAndroid Build Coastguard Worker struct fuse_statx { 291*9e564957SAndroid Build Coastguard Worker uint32_t mask; 292*9e564957SAndroid Build Coastguard Worker uint32_t blksize; 293*9e564957SAndroid Build Coastguard Worker uint64_t attributes; 294*9e564957SAndroid Build Coastguard Worker uint32_t nlink; 295*9e564957SAndroid Build Coastguard Worker uint32_t uid; 296*9e564957SAndroid Build Coastguard Worker uint32_t gid; 297*9e564957SAndroid Build Coastguard Worker uint16_t mode; 298*9e564957SAndroid Build Coastguard Worker uint16_t __spare0[1]; 299*9e564957SAndroid Build Coastguard Worker uint64_t ino; 300*9e564957SAndroid Build Coastguard Worker uint64_t size; 301*9e564957SAndroid Build Coastguard Worker uint64_t blocks; 302*9e564957SAndroid Build Coastguard Worker uint64_t attributes_mask; 303*9e564957SAndroid Build Coastguard Worker struct fuse_sx_time atime; 304*9e564957SAndroid Build Coastguard Worker struct fuse_sx_time btime; 305*9e564957SAndroid Build Coastguard Worker struct fuse_sx_time ctime; 306*9e564957SAndroid Build Coastguard Worker struct fuse_sx_time mtime; 307*9e564957SAndroid Build Coastguard Worker uint32_t rdev_major; 308*9e564957SAndroid Build Coastguard Worker uint32_t rdev_minor; 309*9e564957SAndroid Build Coastguard Worker uint32_t dev_major; 310*9e564957SAndroid Build Coastguard Worker uint32_t dev_minor; 311*9e564957SAndroid Build Coastguard Worker uint64_t __spare2[14]; 312*9e564957SAndroid Build Coastguard Worker }; 313*9e564957SAndroid Build Coastguard Worker 314*9e564957SAndroid Build Coastguard Worker struct fuse_kstatfs { 315*9e564957SAndroid Build Coastguard Worker uint64_t blocks; 316*9e564957SAndroid Build Coastguard Worker uint64_t bfree; 317*9e564957SAndroid Build Coastguard Worker uint64_t bavail; 318*9e564957SAndroid Build Coastguard Worker uint64_t files; 319*9e564957SAndroid Build Coastguard Worker uint64_t ffree; 320*9e564957SAndroid Build Coastguard Worker uint32_t bsize; 321*9e564957SAndroid Build Coastguard Worker uint32_t namelen; 322*9e564957SAndroid Build Coastguard Worker uint32_t frsize; 323*9e564957SAndroid Build Coastguard Worker uint32_t padding; 324*9e564957SAndroid Build Coastguard Worker uint32_t spare[6]; 325*9e564957SAndroid Build Coastguard Worker }; 326*9e564957SAndroid Build Coastguard Worker 327*9e564957SAndroid Build Coastguard Worker struct fuse_file_lock { 328*9e564957SAndroid Build Coastguard Worker uint64_t start; 329*9e564957SAndroid Build Coastguard Worker uint64_t end; 330*9e564957SAndroid Build Coastguard Worker uint32_t type; 331*9e564957SAndroid Build Coastguard Worker uint32_t pid; /* tgid */ 332*9e564957SAndroid Build Coastguard Worker }; 333*9e564957SAndroid Build Coastguard Worker 334*9e564957SAndroid Build Coastguard Worker /** 335*9e564957SAndroid Build Coastguard Worker * Bitmasks for fuse_setattr_in.valid 336*9e564957SAndroid Build Coastguard Worker */ 337*9e564957SAndroid Build Coastguard Worker #define FATTR_MODE (1 << 0) 338*9e564957SAndroid Build Coastguard Worker #define FATTR_UID (1 << 1) 339*9e564957SAndroid Build Coastguard Worker #define FATTR_GID (1 << 2) 340*9e564957SAndroid Build Coastguard Worker #define FATTR_SIZE (1 << 3) 341*9e564957SAndroid Build Coastguard Worker #define FATTR_ATIME (1 << 4) 342*9e564957SAndroid Build Coastguard Worker #define FATTR_MTIME (1 << 5) 343*9e564957SAndroid Build Coastguard Worker #define FATTR_FH (1 << 6) 344*9e564957SAndroid Build Coastguard Worker #define FATTR_ATIME_NOW (1 << 7) 345*9e564957SAndroid Build Coastguard Worker #define FATTR_MTIME_NOW (1 << 8) 346*9e564957SAndroid Build Coastguard Worker #define FATTR_LOCKOWNER (1 << 9) 347*9e564957SAndroid Build Coastguard Worker #define FATTR_CTIME (1 << 10) 348*9e564957SAndroid Build Coastguard Worker #define FATTR_KILL_SUIDGID (1 << 11) 349*9e564957SAndroid Build Coastguard Worker 350*9e564957SAndroid Build Coastguard Worker /** 351*9e564957SAndroid Build Coastguard Worker * Flags returned by the OPEN request 352*9e564957SAndroid Build Coastguard Worker * 353*9e564957SAndroid Build Coastguard Worker * FOPEN_DIRECT_IO: bypass page cache for this open file 354*9e564957SAndroid Build Coastguard Worker * FOPEN_KEEP_CACHE: don't invalidate the data cache on open 355*9e564957SAndroid Build Coastguard Worker * FOPEN_NONSEEKABLE: the file is not seekable 356*9e564957SAndroid Build Coastguard Worker * FOPEN_CACHE_DIR: allow caching this directory 357*9e564957SAndroid Build Coastguard Worker * FOPEN_STREAM: the file is stream-like (no file position at all) 358*9e564957SAndroid Build Coastguard Worker * FOPEN_NOFLUSH: don't flush data cache on close (unless FUSE_WRITEBACK_CACHE) 359*9e564957SAndroid Build Coastguard Worker * FOPEN_PARALLEL_DIRECT_WRITES: Allow concurrent direct writes on the same inode 360*9e564957SAndroid Build Coastguard Worker * FOPEN_PASSTHROUGH: passthrough read/write operations for this open file 361*9e564957SAndroid Build Coastguard Worker */ 362*9e564957SAndroid Build Coastguard Worker #define FOPEN_DIRECT_IO (1 << 0) 363*9e564957SAndroid Build Coastguard Worker #define FOPEN_KEEP_CACHE (1 << 1) 364*9e564957SAndroid Build Coastguard Worker #define FOPEN_NONSEEKABLE (1 << 2) 365*9e564957SAndroid Build Coastguard Worker #define FOPEN_CACHE_DIR (1 << 3) 366*9e564957SAndroid Build Coastguard Worker #define FOPEN_STREAM (1 << 4) 367*9e564957SAndroid Build Coastguard Worker #define FOPEN_NOFLUSH (1 << 5) 368*9e564957SAndroid Build Coastguard Worker #define FOPEN_PARALLEL_DIRECT_WRITES (1 << 6) 369*9e564957SAndroid Build Coastguard Worker #define FOPEN_PASSTHROUGH (1 << 7) 370*9e564957SAndroid Build Coastguard Worker 371*9e564957SAndroid Build Coastguard Worker /** 372*9e564957SAndroid Build Coastguard Worker * INIT request/reply flags 373*9e564957SAndroid Build Coastguard Worker * 374*9e564957SAndroid Build Coastguard Worker * FUSE_ASYNC_READ: asynchronous read requests 375*9e564957SAndroid Build Coastguard Worker * FUSE_POSIX_LOCKS: remote locking for POSIX file locks 376*9e564957SAndroid Build Coastguard Worker * FUSE_FILE_OPS: kernel sends file handle for fstat, etc... (not yet supported) 377*9e564957SAndroid Build Coastguard Worker * FUSE_ATOMIC_O_TRUNC: handles the O_TRUNC open flag in the filesystem 378*9e564957SAndroid Build Coastguard Worker * FUSE_EXPORT_SUPPORT: filesystem handles lookups of "." and ".." 379*9e564957SAndroid Build Coastguard Worker * FUSE_BIG_WRITES: filesystem can handle write size larger than 4kB 380*9e564957SAndroid Build Coastguard Worker * FUSE_DONT_MASK: don't apply umask to file mode on create operations 381*9e564957SAndroid Build Coastguard Worker * FUSE_SPLICE_WRITE: kernel supports splice write on the device 382*9e564957SAndroid Build Coastguard Worker * FUSE_SPLICE_MOVE: kernel supports splice move on the device 383*9e564957SAndroid Build Coastguard Worker * FUSE_SPLICE_READ: kernel supports splice read on the device 384*9e564957SAndroid Build Coastguard Worker * FUSE_FLOCK_LOCKS: remote locking for BSD style file locks 385*9e564957SAndroid Build Coastguard Worker * FUSE_HAS_IOCTL_DIR: kernel supports ioctl on directories 386*9e564957SAndroid Build Coastguard Worker * FUSE_AUTO_INVAL_DATA: automatically invalidate cached pages 387*9e564957SAndroid Build Coastguard Worker * FUSE_DO_READDIRPLUS: do READDIRPLUS (READDIR+LOOKUP in one) 388*9e564957SAndroid Build Coastguard Worker * FUSE_READDIRPLUS_AUTO: adaptive readdirplus 389*9e564957SAndroid Build Coastguard Worker * FUSE_ASYNC_DIO: asynchronous direct I/O submission 390*9e564957SAndroid Build Coastguard Worker * FUSE_WRITEBACK_CACHE: use writeback cache for buffered writes 391*9e564957SAndroid Build Coastguard Worker * FUSE_NO_OPEN_SUPPORT: kernel supports zero-message opens 392*9e564957SAndroid Build Coastguard Worker * FUSE_PARALLEL_DIROPS: allow parallel lookups and readdir 393*9e564957SAndroid Build Coastguard Worker * FUSE_HANDLE_KILLPRIV: fs handles killing suid/sgid/cap on write/chown/trunc 394*9e564957SAndroid Build Coastguard Worker * FUSE_POSIX_ACL: filesystem supports posix acls 395*9e564957SAndroid Build Coastguard Worker * FUSE_ABORT_ERROR: reading the device after abort returns ECONNABORTED 396*9e564957SAndroid Build Coastguard Worker * FUSE_MAX_PAGES: init_out.max_pages contains the max number of req pages 397*9e564957SAndroid Build Coastguard Worker * FUSE_CACHE_SYMLINKS: cache READLINK responses 398*9e564957SAndroid Build Coastguard Worker * FUSE_NO_OPENDIR_SUPPORT: kernel supports zero-message opendir 399*9e564957SAndroid Build Coastguard Worker * FUSE_EXPLICIT_INVAL_DATA: only invalidate cached pages on explicit request 400*9e564957SAndroid Build Coastguard Worker * FUSE_MAP_ALIGNMENT: init_out.map_alignment contains log2(byte alignment) for 401*9e564957SAndroid Build Coastguard Worker * foffset and moffset fields in struct 402*9e564957SAndroid Build Coastguard Worker * fuse_setupmapping_out and fuse_removemapping_one. 403*9e564957SAndroid Build Coastguard Worker * FUSE_SUBMOUNTS: kernel supports auto-mounting directory submounts 404*9e564957SAndroid Build Coastguard Worker * FUSE_HANDLE_KILLPRIV_V2: fs kills suid/sgid/cap on write/chown/trunc. 405*9e564957SAndroid Build Coastguard Worker * Upon write/truncate suid/sgid is only killed if caller 406*9e564957SAndroid Build Coastguard Worker * does not have CAP_FSETID. Additionally upon 407*9e564957SAndroid Build Coastguard Worker * write/truncate sgid is killed only if file has group 408*9e564957SAndroid Build Coastguard Worker * execute permission. (Same as Linux VFS behavior). 409*9e564957SAndroid Build Coastguard Worker * FUSE_SETXATTR_EXT: Server supports extended struct fuse_setxattr_in 410*9e564957SAndroid Build Coastguard Worker * FUSE_INIT_EXT: extended fuse_init_in request 411*9e564957SAndroid Build Coastguard Worker * FUSE_INIT_RESERVED: reserved, do not use 412*9e564957SAndroid Build Coastguard Worker * FUSE_SECURITY_CTX: add security context to create, mkdir, symlink, and 413*9e564957SAndroid Build Coastguard Worker * mknod 414*9e564957SAndroid Build Coastguard Worker * FUSE_HAS_INODE_DAX: use per inode DAX 415*9e564957SAndroid Build Coastguard Worker * FUSE_CREATE_SUPP_GROUP: add supplementary group info to create, mkdir, 416*9e564957SAndroid Build Coastguard Worker * symlink and mknod (single group that matches parent) 417*9e564957SAndroid Build Coastguard Worker * FUSE_HAS_EXPIRE_ONLY: kernel supports expiry-only entry invalidation 418*9e564957SAndroid Build Coastguard Worker * FUSE_DIRECT_IO_ALLOW_MMAP: allow shared mmap in FOPEN_DIRECT_IO mode. 419*9e564957SAndroid Build Coastguard Worker */ 420*9e564957SAndroid Build Coastguard Worker #define FUSE_ASYNC_READ (1 << 0) 421*9e564957SAndroid Build Coastguard Worker #define FUSE_POSIX_LOCKS (1 << 1) 422*9e564957SAndroid Build Coastguard Worker #define FUSE_FILE_OPS (1 << 2) 423*9e564957SAndroid Build Coastguard Worker #define FUSE_ATOMIC_O_TRUNC (1 << 3) 424*9e564957SAndroid Build Coastguard Worker #define FUSE_EXPORT_SUPPORT (1 << 4) 425*9e564957SAndroid Build Coastguard Worker #define FUSE_BIG_WRITES (1 << 5) 426*9e564957SAndroid Build Coastguard Worker #define FUSE_DONT_MASK (1 << 6) 427*9e564957SAndroid Build Coastguard Worker #define FUSE_SPLICE_WRITE (1 << 7) 428*9e564957SAndroid Build Coastguard Worker #define FUSE_SPLICE_MOVE (1 << 8) 429*9e564957SAndroid Build Coastguard Worker #define FUSE_SPLICE_READ (1 << 9) 430*9e564957SAndroid Build Coastguard Worker #define FUSE_FLOCK_LOCKS (1 << 10) 431*9e564957SAndroid Build Coastguard Worker #define FUSE_HAS_IOCTL_DIR (1 << 11) 432*9e564957SAndroid Build Coastguard Worker #define FUSE_AUTO_INVAL_DATA (1 << 12) 433*9e564957SAndroid Build Coastguard Worker #define FUSE_DO_READDIRPLUS (1 << 13) 434*9e564957SAndroid Build Coastguard Worker #define FUSE_READDIRPLUS_AUTO (1 << 14) 435*9e564957SAndroid Build Coastguard Worker #define FUSE_ASYNC_DIO (1 << 15) 436*9e564957SAndroid Build Coastguard Worker #define FUSE_WRITEBACK_CACHE (1 << 16) 437*9e564957SAndroid Build Coastguard Worker #define FUSE_NO_OPEN_SUPPORT (1 << 17) 438*9e564957SAndroid Build Coastguard Worker #define FUSE_PARALLEL_DIROPS (1 << 18) 439*9e564957SAndroid Build Coastguard Worker #define FUSE_HANDLE_KILLPRIV (1 << 19) 440*9e564957SAndroid Build Coastguard Worker #define FUSE_POSIX_ACL (1 << 20) 441*9e564957SAndroid Build Coastguard Worker #define FUSE_ABORT_ERROR (1 << 21) 442*9e564957SAndroid Build Coastguard Worker #define FUSE_MAX_PAGES (1 << 22) 443*9e564957SAndroid Build Coastguard Worker #define FUSE_CACHE_SYMLINKS (1 << 23) 444*9e564957SAndroid Build Coastguard Worker #define FUSE_NO_OPENDIR_SUPPORT (1 << 24) 445*9e564957SAndroid Build Coastguard Worker #define FUSE_EXPLICIT_INVAL_DATA (1 << 25) 446*9e564957SAndroid Build Coastguard Worker #define FUSE_MAP_ALIGNMENT (1 << 26) 447*9e564957SAndroid Build Coastguard Worker #define FUSE_SUBMOUNTS (1 << 27) 448*9e564957SAndroid Build Coastguard Worker #define FUSE_HANDLE_KILLPRIV_V2 (1 << 28) 449*9e564957SAndroid Build Coastguard Worker #define FUSE_SETXATTR_EXT (1 << 29) 450*9e564957SAndroid Build Coastguard Worker #define FUSE_INIT_EXT (1 << 30) 451*9e564957SAndroid Build Coastguard Worker #define FUSE_INIT_RESERVED (1 << 31) 452*9e564957SAndroid Build Coastguard Worker /* bits 32..63 get shifted down 32 bits into the flags2 field */ 453*9e564957SAndroid Build Coastguard Worker #define FUSE_SECURITY_CTX (1ULL << 32) 454*9e564957SAndroid Build Coastguard Worker #define FUSE_HAS_INODE_DAX (1ULL << 33) 455*9e564957SAndroid Build Coastguard Worker #define FUSE_CREATE_SUPP_GROUP (1ULL << 34) 456*9e564957SAndroid Build Coastguard Worker #define FUSE_HAS_EXPIRE_ONLY (1ULL << 35) 457*9e564957SAndroid Build Coastguard Worker #define FUSE_DIRECT_IO_ALLOW_MMAP (1ULL << 36) 458*9e564957SAndroid Build Coastguard Worker #define FUSE_PASSTHROUGH_UPSTREAM (1ULL << 37) 459*9e564957SAndroid Build Coastguard Worker 460*9e564957SAndroid Build Coastguard Worker /* Obsolete alias for FUSE_DIRECT_IO_ALLOW_MMAP */ 461*9e564957SAndroid Build Coastguard Worker #define FUSE_DIRECT_IO_RELAX FUSE_DIRECT_IO_ALLOW_MMAP 462*9e564957SAndroid Build Coastguard Worker 463*9e564957SAndroid Build Coastguard Worker /* 464*9e564957SAndroid Build Coastguard Worker * For FUSE < 7.36 FUSE_PASSTHROUGH has value (1 << 31). 465*9e564957SAndroid Build Coastguard Worker * This condition check is not really required, but would prevent having a 466*9e564957SAndroid Build Coastguard Worker * broken commit in the tree. 467*9e564957SAndroid Build Coastguard Worker */ 468*9e564957SAndroid Build Coastguard Worker #if FUSE_KERNEL_VERSION > 7 || \ 469*9e564957SAndroid Build Coastguard Worker (FUSE_KERNEL_VERSION == 7 && FUSE_KERNEL_MINOR_VERSION >= 36) 470*9e564957SAndroid Build Coastguard Worker #define FUSE_PASSTHROUGH (1ULL << 63) 471*9e564957SAndroid Build Coastguard Worker #else 472*9e564957SAndroid Build Coastguard Worker #define FUSE_PASSTHROUGH (1 << 31) 473*9e564957SAndroid Build Coastguard Worker #endif 474*9e564957SAndroid Build Coastguard Worker 475*9e564957SAndroid Build Coastguard Worker /** 476*9e564957SAndroid Build Coastguard Worker * CUSE INIT request/reply flags 477*9e564957SAndroid Build Coastguard Worker * 478*9e564957SAndroid Build Coastguard Worker * CUSE_UNRESTRICTED_IOCTL: use unrestricted ioctl 479*9e564957SAndroid Build Coastguard Worker */ 480*9e564957SAndroid Build Coastguard Worker #define CUSE_UNRESTRICTED_IOCTL (1 << 0) 481*9e564957SAndroid Build Coastguard Worker 482*9e564957SAndroid Build Coastguard Worker /** 483*9e564957SAndroid Build Coastguard Worker * Release flags 484*9e564957SAndroid Build Coastguard Worker */ 485*9e564957SAndroid Build Coastguard Worker #define FUSE_RELEASE_FLUSH (1 << 0) 486*9e564957SAndroid Build Coastguard Worker #define FUSE_RELEASE_FLOCK_UNLOCK (1 << 1) 487*9e564957SAndroid Build Coastguard Worker 488*9e564957SAndroid Build Coastguard Worker /** 489*9e564957SAndroid Build Coastguard Worker * Getattr flags 490*9e564957SAndroid Build Coastguard Worker */ 491*9e564957SAndroid Build Coastguard Worker #define FUSE_GETATTR_FH (1 << 0) 492*9e564957SAndroid Build Coastguard Worker 493*9e564957SAndroid Build Coastguard Worker /** 494*9e564957SAndroid Build Coastguard Worker * Lock flags 495*9e564957SAndroid Build Coastguard Worker */ 496*9e564957SAndroid Build Coastguard Worker #define FUSE_LK_FLOCK (1 << 0) 497*9e564957SAndroid Build Coastguard Worker 498*9e564957SAndroid Build Coastguard Worker /** 499*9e564957SAndroid Build Coastguard Worker * WRITE flags 500*9e564957SAndroid Build Coastguard Worker * 501*9e564957SAndroid Build Coastguard Worker * FUSE_WRITE_CACHE: delayed write from page cache, file handle is guessed 502*9e564957SAndroid Build Coastguard Worker * FUSE_WRITE_LOCKOWNER: lock_owner field is valid 503*9e564957SAndroid Build Coastguard Worker * FUSE_WRITE_KILL_SUIDGID: kill suid and sgid bits 504*9e564957SAndroid Build Coastguard Worker */ 505*9e564957SAndroid Build Coastguard Worker #define FUSE_WRITE_CACHE (1 << 0) 506*9e564957SAndroid Build Coastguard Worker #define FUSE_WRITE_LOCKOWNER (1 << 1) 507*9e564957SAndroid Build Coastguard Worker #define FUSE_WRITE_KILL_SUIDGID (1 << 2) 508*9e564957SAndroid Build Coastguard Worker 509*9e564957SAndroid Build Coastguard Worker /* Obsolete alias; this flag implies killing suid/sgid only. */ 510*9e564957SAndroid Build Coastguard Worker #define FUSE_WRITE_KILL_PRIV FUSE_WRITE_KILL_SUIDGID 511*9e564957SAndroid Build Coastguard Worker 512*9e564957SAndroid Build Coastguard Worker /** 513*9e564957SAndroid Build Coastguard Worker * Read flags 514*9e564957SAndroid Build Coastguard Worker */ 515*9e564957SAndroid Build Coastguard Worker #define FUSE_READ_LOCKOWNER (1 << 1) 516*9e564957SAndroid Build Coastguard Worker 517*9e564957SAndroid Build Coastguard Worker /** 518*9e564957SAndroid Build Coastguard Worker * Ioctl flags 519*9e564957SAndroid Build Coastguard Worker * 520*9e564957SAndroid Build Coastguard Worker * FUSE_IOCTL_COMPAT: 32bit compat ioctl on 64bit machine 521*9e564957SAndroid Build Coastguard Worker * FUSE_IOCTL_UNRESTRICTED: not restricted to well-formed ioctls, retry allowed 522*9e564957SAndroid Build Coastguard Worker * FUSE_IOCTL_RETRY: retry with new iovecs 523*9e564957SAndroid Build Coastguard Worker * FUSE_IOCTL_32BIT: 32bit ioctl 524*9e564957SAndroid Build Coastguard Worker * FUSE_IOCTL_DIR: is a directory 525*9e564957SAndroid Build Coastguard Worker * FUSE_IOCTL_COMPAT_X32: x32 compat ioctl on 64bit machine (64bit time_t) 526*9e564957SAndroid Build Coastguard Worker * 527*9e564957SAndroid Build Coastguard Worker * FUSE_IOCTL_MAX_IOV: maximum of in_iovecs + out_iovecs 528*9e564957SAndroid Build Coastguard Worker */ 529*9e564957SAndroid Build Coastguard Worker #define FUSE_IOCTL_COMPAT (1 << 0) 530*9e564957SAndroid Build Coastguard Worker #define FUSE_IOCTL_UNRESTRICTED (1 << 1) 531*9e564957SAndroid Build Coastguard Worker #define FUSE_IOCTL_RETRY (1 << 2) 532*9e564957SAndroid Build Coastguard Worker #define FUSE_IOCTL_32BIT (1 << 3) 533*9e564957SAndroid Build Coastguard Worker #define FUSE_IOCTL_DIR (1 << 4) 534*9e564957SAndroid Build Coastguard Worker #define FUSE_IOCTL_COMPAT_X32 (1 << 5) 535*9e564957SAndroid Build Coastguard Worker 536*9e564957SAndroid Build Coastguard Worker #define FUSE_IOCTL_MAX_IOV 256 537*9e564957SAndroid Build Coastguard Worker 538*9e564957SAndroid Build Coastguard Worker /** 539*9e564957SAndroid Build Coastguard Worker * Poll flags 540*9e564957SAndroid Build Coastguard Worker * 541*9e564957SAndroid Build Coastguard Worker * FUSE_POLL_SCHEDULE_NOTIFY: request poll notify 542*9e564957SAndroid Build Coastguard Worker */ 543*9e564957SAndroid Build Coastguard Worker #define FUSE_POLL_SCHEDULE_NOTIFY (1 << 0) 544*9e564957SAndroid Build Coastguard Worker 545*9e564957SAndroid Build Coastguard Worker /** 546*9e564957SAndroid Build Coastguard Worker * Fsync flags 547*9e564957SAndroid Build Coastguard Worker * 548*9e564957SAndroid Build Coastguard Worker * FUSE_FSYNC_FDATASYNC: Sync data only, not metadata 549*9e564957SAndroid Build Coastguard Worker */ 550*9e564957SAndroid Build Coastguard Worker #define FUSE_FSYNC_FDATASYNC (1 << 0) 551*9e564957SAndroid Build Coastguard Worker 552*9e564957SAndroid Build Coastguard Worker /** 553*9e564957SAndroid Build Coastguard Worker * fuse_attr flags 554*9e564957SAndroid Build Coastguard Worker * 555*9e564957SAndroid Build Coastguard Worker * FUSE_ATTR_SUBMOUNT: Object is a submount root 556*9e564957SAndroid Build Coastguard Worker * FUSE_ATTR_DAX: Enable DAX for this file in per inode DAX mode 557*9e564957SAndroid Build Coastguard Worker */ 558*9e564957SAndroid Build Coastguard Worker #define FUSE_ATTR_SUBMOUNT (1 << 0) 559*9e564957SAndroid Build Coastguard Worker #define FUSE_ATTR_DAX (1 << 1) 560*9e564957SAndroid Build Coastguard Worker 561*9e564957SAndroid Build Coastguard Worker /** 562*9e564957SAndroid Build Coastguard Worker * Open flags 563*9e564957SAndroid Build Coastguard Worker * FUSE_OPEN_KILL_SUIDGID: Kill suid and sgid if executable 564*9e564957SAndroid Build Coastguard Worker */ 565*9e564957SAndroid Build Coastguard Worker #define FUSE_OPEN_KILL_SUIDGID (1 << 0) 566*9e564957SAndroid Build Coastguard Worker 567*9e564957SAndroid Build Coastguard Worker /** 568*9e564957SAndroid Build Coastguard Worker * setxattr flags 569*9e564957SAndroid Build Coastguard Worker * FUSE_SETXATTR_ACL_KILL_SGID: Clear SGID when system.posix_acl_access is set 570*9e564957SAndroid Build Coastguard Worker */ 571*9e564957SAndroid Build Coastguard Worker #define FUSE_SETXATTR_ACL_KILL_SGID (1 << 0) 572*9e564957SAndroid Build Coastguard Worker 573*9e564957SAndroid Build Coastguard Worker /** 574*9e564957SAndroid Build Coastguard Worker * notify_inval_entry flags 575*9e564957SAndroid Build Coastguard Worker * FUSE_EXPIRE_ONLY 576*9e564957SAndroid Build Coastguard Worker */ 577*9e564957SAndroid Build Coastguard Worker #define FUSE_EXPIRE_ONLY (1 << 0) 578*9e564957SAndroid Build Coastguard Worker 579*9e564957SAndroid Build Coastguard Worker /** 580*9e564957SAndroid Build Coastguard Worker * extension type 581*9e564957SAndroid Build Coastguard Worker * FUSE_MAX_NR_SECCTX: maximum value of &fuse_secctx_header.nr_secctx 582*9e564957SAndroid Build Coastguard Worker * FUSE_EXT_GROUPS: &fuse_supp_groups extension 583*9e564957SAndroid Build Coastguard Worker */ 584*9e564957SAndroid Build Coastguard Worker enum fuse_ext_type { 585*9e564957SAndroid Build Coastguard Worker /* Types 0..31 are reserved for fuse_secctx_header */ 586*9e564957SAndroid Build Coastguard Worker FUSE_MAX_NR_SECCTX = 31, 587*9e564957SAndroid Build Coastguard Worker FUSE_EXT_GROUPS = 32, 588*9e564957SAndroid Build Coastguard Worker }; 589*9e564957SAndroid Build Coastguard Worker 590*9e564957SAndroid Build Coastguard Worker enum fuse_opcode { 591*9e564957SAndroid Build Coastguard Worker FUSE_LOOKUP = 1, 592*9e564957SAndroid Build Coastguard Worker FUSE_FORGET = 2, /* no reply */ 593*9e564957SAndroid Build Coastguard Worker FUSE_GETATTR = 3, 594*9e564957SAndroid Build Coastguard Worker FUSE_SETATTR = 4, 595*9e564957SAndroid Build Coastguard Worker FUSE_READLINK = 5, 596*9e564957SAndroid Build Coastguard Worker FUSE_SYMLINK = 6, 597*9e564957SAndroid Build Coastguard Worker FUSE_MKNOD = 8, 598*9e564957SAndroid Build Coastguard Worker FUSE_MKDIR = 9, 599*9e564957SAndroid Build Coastguard Worker FUSE_UNLINK = 10, 600*9e564957SAndroid Build Coastguard Worker FUSE_RMDIR = 11, 601*9e564957SAndroid Build Coastguard Worker FUSE_RENAME = 12, 602*9e564957SAndroid Build Coastguard Worker FUSE_LINK = 13, 603*9e564957SAndroid Build Coastguard Worker FUSE_OPEN = 14, 604*9e564957SAndroid Build Coastguard Worker FUSE_READ = 15, 605*9e564957SAndroid Build Coastguard Worker FUSE_WRITE = 16, 606*9e564957SAndroid Build Coastguard Worker FUSE_STATFS = 17, 607*9e564957SAndroid Build Coastguard Worker FUSE_RELEASE = 18, 608*9e564957SAndroid Build Coastguard Worker FUSE_FSYNC = 20, 609*9e564957SAndroid Build Coastguard Worker FUSE_SETXATTR = 21, 610*9e564957SAndroid Build Coastguard Worker FUSE_GETXATTR = 22, 611*9e564957SAndroid Build Coastguard Worker FUSE_LISTXATTR = 23, 612*9e564957SAndroid Build Coastguard Worker FUSE_REMOVEXATTR = 24, 613*9e564957SAndroid Build Coastguard Worker FUSE_FLUSH = 25, 614*9e564957SAndroid Build Coastguard Worker FUSE_INIT = 26, 615*9e564957SAndroid Build Coastguard Worker FUSE_OPENDIR = 27, 616*9e564957SAndroid Build Coastguard Worker FUSE_READDIR = 28, 617*9e564957SAndroid Build Coastguard Worker FUSE_RELEASEDIR = 29, 618*9e564957SAndroid Build Coastguard Worker FUSE_FSYNCDIR = 30, 619*9e564957SAndroid Build Coastguard Worker FUSE_GETLK = 31, 620*9e564957SAndroid Build Coastguard Worker FUSE_SETLK = 32, 621*9e564957SAndroid Build Coastguard Worker FUSE_SETLKW = 33, 622*9e564957SAndroid Build Coastguard Worker FUSE_ACCESS = 34, 623*9e564957SAndroid Build Coastguard Worker FUSE_CREATE = 35, 624*9e564957SAndroid Build Coastguard Worker FUSE_INTERRUPT = 36, 625*9e564957SAndroid Build Coastguard Worker FUSE_BMAP = 37, 626*9e564957SAndroid Build Coastguard Worker FUSE_DESTROY = 38, 627*9e564957SAndroid Build Coastguard Worker FUSE_IOCTL = 39, 628*9e564957SAndroid Build Coastguard Worker FUSE_POLL = 40, 629*9e564957SAndroid Build Coastguard Worker FUSE_NOTIFY_REPLY = 41, 630*9e564957SAndroid Build Coastguard Worker FUSE_BATCH_FORGET = 42, 631*9e564957SAndroid Build Coastguard Worker FUSE_FALLOCATE = 43, 632*9e564957SAndroid Build Coastguard Worker FUSE_READDIRPLUS = 44, 633*9e564957SAndroid Build Coastguard Worker FUSE_RENAME2 = 45, 634*9e564957SAndroid Build Coastguard Worker FUSE_LSEEK = 46, 635*9e564957SAndroid Build Coastguard Worker FUSE_COPY_FILE_RANGE = 47, 636*9e564957SAndroid Build Coastguard Worker FUSE_SETUPMAPPING = 48, 637*9e564957SAndroid Build Coastguard Worker FUSE_REMOVEMAPPING = 49, 638*9e564957SAndroid Build Coastguard Worker FUSE_SYNCFS = 50, 639*9e564957SAndroid Build Coastguard Worker FUSE_TMPFILE = 51, 640*9e564957SAndroid Build Coastguard Worker FUSE_STATX = 52, 641*9e564957SAndroid Build Coastguard Worker 642*9e564957SAndroid Build Coastguard Worker /* Android specific operations */ 643*9e564957SAndroid Build Coastguard Worker FUSE_CANONICAL_PATH = 2016, 644*9e564957SAndroid Build Coastguard Worker 645*9e564957SAndroid Build Coastguard Worker /* CUSE specific operations */ 646*9e564957SAndroid Build Coastguard Worker CUSE_INIT = 4096, 647*9e564957SAndroid Build Coastguard Worker 648*9e564957SAndroid Build Coastguard Worker /* Reserved opcodes: helpful to detect structure endian-ness */ 649*9e564957SAndroid Build Coastguard Worker CUSE_INIT_BSWAP_RESERVED = 1048576, /* CUSE_INIT << 8 */ 650*9e564957SAndroid Build Coastguard Worker FUSE_INIT_BSWAP_RESERVED = 436207616, /* FUSE_INIT << 24 */ 651*9e564957SAndroid Build Coastguard Worker }; 652*9e564957SAndroid Build Coastguard Worker 653*9e564957SAndroid Build Coastguard Worker enum fuse_notify_code { 654*9e564957SAndroid Build Coastguard Worker FUSE_NOTIFY_POLL = 1, 655*9e564957SAndroid Build Coastguard Worker FUSE_NOTIFY_INVAL_INODE = 2, 656*9e564957SAndroid Build Coastguard Worker FUSE_NOTIFY_INVAL_ENTRY = 3, 657*9e564957SAndroid Build Coastguard Worker FUSE_NOTIFY_STORE = 4, 658*9e564957SAndroid Build Coastguard Worker FUSE_NOTIFY_RETRIEVE = 5, 659*9e564957SAndroid Build Coastguard Worker FUSE_NOTIFY_DELETE = 6, 660*9e564957SAndroid Build Coastguard Worker FUSE_NOTIFY_CODE_MAX, 661*9e564957SAndroid Build Coastguard Worker }; 662*9e564957SAndroid Build Coastguard Worker 663*9e564957SAndroid Build Coastguard Worker /* The read buffer is required to be at least 8k, but may be much larger */ 664*9e564957SAndroid Build Coastguard Worker #define FUSE_MIN_READ_BUFFER 8192 665*9e564957SAndroid Build Coastguard Worker 666*9e564957SAndroid Build Coastguard Worker #define FUSE_COMPAT_ENTRY_OUT_SIZE 120 667*9e564957SAndroid Build Coastguard Worker 668*9e564957SAndroid Build Coastguard Worker struct fuse_entry_out { 669*9e564957SAndroid Build Coastguard Worker uint64_t nodeid; /* Inode ID */ 670*9e564957SAndroid Build Coastguard Worker uint64_t generation; /* Inode generation: nodeid:gen must 671*9e564957SAndroid Build Coastguard Worker be unique for the fs's lifetime */ 672*9e564957SAndroid Build Coastguard Worker uint64_t entry_valid; /* Cache timeout for the name */ 673*9e564957SAndroid Build Coastguard Worker uint64_t attr_valid; /* Cache timeout for the attributes */ 674*9e564957SAndroid Build Coastguard Worker uint32_t entry_valid_nsec; 675*9e564957SAndroid Build Coastguard Worker uint32_t attr_valid_nsec; 676*9e564957SAndroid Build Coastguard Worker struct fuse_attr attr; 677*9e564957SAndroid Build Coastguard Worker }; 678*9e564957SAndroid Build Coastguard Worker 679*9e564957SAndroid Build Coastguard Worker #define FUSE_ACTION_KEEP 0 680*9e564957SAndroid Build Coastguard Worker #define FUSE_ACTION_REMOVE 1 681*9e564957SAndroid Build Coastguard Worker #define FUSE_ACTION_REPLACE 2 682*9e564957SAndroid Build Coastguard Worker 683*9e564957SAndroid Build Coastguard Worker struct fuse_entry_bpf_out { 684*9e564957SAndroid Build Coastguard Worker uint64_t backing_action; 685*9e564957SAndroid Build Coastguard Worker uint64_t backing_fd; 686*9e564957SAndroid Build Coastguard Worker uint64_t bpf_action; 687*9e564957SAndroid Build Coastguard Worker uint64_t bpf_fd; 688*9e564957SAndroid Build Coastguard Worker }; 689*9e564957SAndroid Build Coastguard Worker 690*9e564957SAndroid Build Coastguard Worker struct fuse_forget_in { 691*9e564957SAndroid Build Coastguard Worker uint64_t nlookup; 692*9e564957SAndroid Build Coastguard Worker }; 693*9e564957SAndroid Build Coastguard Worker 694*9e564957SAndroid Build Coastguard Worker struct fuse_forget_one { 695*9e564957SAndroid Build Coastguard Worker uint64_t nodeid; 696*9e564957SAndroid Build Coastguard Worker uint64_t nlookup; 697*9e564957SAndroid Build Coastguard Worker }; 698*9e564957SAndroid Build Coastguard Worker 699*9e564957SAndroid Build Coastguard Worker struct fuse_batch_forget_in { 700*9e564957SAndroid Build Coastguard Worker uint32_t count; 701*9e564957SAndroid Build Coastguard Worker uint32_t dummy; 702*9e564957SAndroid Build Coastguard Worker }; 703*9e564957SAndroid Build Coastguard Worker 704*9e564957SAndroid Build Coastguard Worker struct fuse_getattr_in { 705*9e564957SAndroid Build Coastguard Worker uint32_t getattr_flags; 706*9e564957SAndroid Build Coastguard Worker uint32_t dummy; 707*9e564957SAndroid Build Coastguard Worker uint64_t fh; 708*9e564957SAndroid Build Coastguard Worker }; 709*9e564957SAndroid Build Coastguard Worker 710*9e564957SAndroid Build Coastguard Worker #define FUSE_COMPAT_ATTR_OUT_SIZE 96 711*9e564957SAndroid Build Coastguard Worker 712*9e564957SAndroid Build Coastguard Worker struct fuse_attr_out { 713*9e564957SAndroid Build Coastguard Worker uint64_t attr_valid; /* Cache timeout for the attributes */ 714*9e564957SAndroid Build Coastguard Worker uint32_t attr_valid_nsec; 715*9e564957SAndroid Build Coastguard Worker uint32_t dummy; 716*9e564957SAndroid Build Coastguard Worker struct fuse_attr attr; 717*9e564957SAndroid Build Coastguard Worker }; 718*9e564957SAndroid Build Coastguard Worker 719*9e564957SAndroid Build Coastguard Worker struct fuse_statx_in { 720*9e564957SAndroid Build Coastguard Worker uint32_t getattr_flags; 721*9e564957SAndroid Build Coastguard Worker uint32_t reserved; 722*9e564957SAndroid Build Coastguard Worker uint64_t fh; 723*9e564957SAndroid Build Coastguard Worker uint32_t sx_flags; 724*9e564957SAndroid Build Coastguard Worker uint32_t sx_mask; 725*9e564957SAndroid Build Coastguard Worker }; 726*9e564957SAndroid Build Coastguard Worker 727*9e564957SAndroid Build Coastguard Worker struct fuse_statx_out { 728*9e564957SAndroid Build Coastguard Worker uint64_t attr_valid; /* Cache timeout for the attributes */ 729*9e564957SAndroid Build Coastguard Worker uint32_t attr_valid_nsec; 730*9e564957SAndroid Build Coastguard Worker uint32_t flags; 731*9e564957SAndroid Build Coastguard Worker uint64_t spare[2]; 732*9e564957SAndroid Build Coastguard Worker struct fuse_statx stat; 733*9e564957SAndroid Build Coastguard Worker }; 734*9e564957SAndroid Build Coastguard Worker 735*9e564957SAndroid Build Coastguard Worker #define FUSE_COMPAT_MKNOD_IN_SIZE 8 736*9e564957SAndroid Build Coastguard Worker 737*9e564957SAndroid Build Coastguard Worker struct fuse_mknod_in { 738*9e564957SAndroid Build Coastguard Worker uint32_t mode; 739*9e564957SAndroid Build Coastguard Worker uint32_t rdev; 740*9e564957SAndroid Build Coastguard Worker uint32_t umask; 741*9e564957SAndroid Build Coastguard Worker uint32_t padding; 742*9e564957SAndroid Build Coastguard Worker }; 743*9e564957SAndroid Build Coastguard Worker 744*9e564957SAndroid Build Coastguard Worker struct fuse_mkdir_in { 745*9e564957SAndroid Build Coastguard Worker uint32_t mode; 746*9e564957SAndroid Build Coastguard Worker uint32_t umask; 747*9e564957SAndroid Build Coastguard Worker }; 748*9e564957SAndroid Build Coastguard Worker 749*9e564957SAndroid Build Coastguard Worker struct fuse_rename_in { 750*9e564957SAndroid Build Coastguard Worker uint64_t newdir; 751*9e564957SAndroid Build Coastguard Worker }; 752*9e564957SAndroid Build Coastguard Worker 753*9e564957SAndroid Build Coastguard Worker struct fuse_rename2_in { 754*9e564957SAndroid Build Coastguard Worker uint64_t newdir; 755*9e564957SAndroid Build Coastguard Worker uint32_t flags; 756*9e564957SAndroid Build Coastguard Worker uint32_t padding; 757*9e564957SAndroid Build Coastguard Worker }; 758*9e564957SAndroid Build Coastguard Worker 759*9e564957SAndroid Build Coastguard Worker struct fuse_link_in { 760*9e564957SAndroid Build Coastguard Worker uint64_t oldnodeid; 761*9e564957SAndroid Build Coastguard Worker }; 762*9e564957SAndroid Build Coastguard Worker 763*9e564957SAndroid Build Coastguard Worker struct fuse_setattr_in { 764*9e564957SAndroid Build Coastguard Worker uint32_t valid; 765*9e564957SAndroid Build Coastguard Worker uint32_t padding; 766*9e564957SAndroid Build Coastguard Worker uint64_t fh; 767*9e564957SAndroid Build Coastguard Worker uint64_t size; 768*9e564957SAndroid Build Coastguard Worker uint64_t lock_owner; 769*9e564957SAndroid Build Coastguard Worker uint64_t atime; 770*9e564957SAndroid Build Coastguard Worker uint64_t mtime; 771*9e564957SAndroid Build Coastguard Worker uint64_t ctime; 772*9e564957SAndroid Build Coastguard Worker uint32_t atimensec; 773*9e564957SAndroid Build Coastguard Worker uint32_t mtimensec; 774*9e564957SAndroid Build Coastguard Worker uint32_t ctimensec; 775*9e564957SAndroid Build Coastguard Worker uint32_t mode; 776*9e564957SAndroid Build Coastguard Worker uint32_t unused4; 777*9e564957SAndroid Build Coastguard Worker uint32_t uid; 778*9e564957SAndroid Build Coastguard Worker uint32_t gid; 779*9e564957SAndroid Build Coastguard Worker uint32_t unused5; 780*9e564957SAndroid Build Coastguard Worker }; 781*9e564957SAndroid Build Coastguard Worker 782*9e564957SAndroid Build Coastguard Worker struct fuse_open_in { 783*9e564957SAndroid Build Coastguard Worker uint32_t flags; 784*9e564957SAndroid Build Coastguard Worker uint32_t open_flags; /* FUSE_OPEN_... */ 785*9e564957SAndroid Build Coastguard Worker }; 786*9e564957SAndroid Build Coastguard Worker 787*9e564957SAndroid Build Coastguard Worker struct fuse_create_in { 788*9e564957SAndroid Build Coastguard Worker uint32_t flags; 789*9e564957SAndroid Build Coastguard Worker uint32_t mode; 790*9e564957SAndroid Build Coastguard Worker uint32_t umask; 791*9e564957SAndroid Build Coastguard Worker uint32_t open_flags; /* FUSE_OPEN_... */ 792*9e564957SAndroid Build Coastguard Worker }; 793*9e564957SAndroid Build Coastguard Worker 794*9e564957SAndroid Build Coastguard Worker struct fuse_open_out { 795*9e564957SAndroid Build Coastguard Worker uint64_t fh; 796*9e564957SAndroid Build Coastguard Worker uint32_t open_flags; 797*9e564957SAndroid Build Coastguard Worker union { 798*9e564957SAndroid Build Coastguard Worker uint32_t passthrough_fh; 799*9e564957SAndroid Build Coastguard Worker int32_t backing_id; 800*9e564957SAndroid Build Coastguard Worker }; 801*9e564957SAndroid Build Coastguard Worker }; 802*9e564957SAndroid Build Coastguard Worker 803*9e564957SAndroid Build Coastguard Worker struct fuse_release_in { 804*9e564957SAndroid Build Coastguard Worker uint64_t fh; 805*9e564957SAndroid Build Coastguard Worker uint32_t flags; 806*9e564957SAndroid Build Coastguard Worker uint32_t release_flags; 807*9e564957SAndroid Build Coastguard Worker uint64_t lock_owner; 808*9e564957SAndroid Build Coastguard Worker }; 809*9e564957SAndroid Build Coastguard Worker 810*9e564957SAndroid Build Coastguard Worker struct fuse_flush_in { 811*9e564957SAndroid Build Coastguard Worker uint64_t fh; 812*9e564957SAndroid Build Coastguard Worker uint32_t unused; 813*9e564957SAndroid Build Coastguard Worker uint32_t padding; 814*9e564957SAndroid Build Coastguard Worker uint64_t lock_owner; 815*9e564957SAndroid Build Coastguard Worker }; 816*9e564957SAndroid Build Coastguard Worker 817*9e564957SAndroid Build Coastguard Worker struct fuse_read_in { 818*9e564957SAndroid Build Coastguard Worker uint64_t fh; 819*9e564957SAndroid Build Coastguard Worker uint64_t offset; 820*9e564957SAndroid Build Coastguard Worker uint32_t size; 821*9e564957SAndroid Build Coastguard Worker uint32_t read_flags; 822*9e564957SAndroid Build Coastguard Worker uint64_t lock_owner; 823*9e564957SAndroid Build Coastguard Worker uint32_t flags; 824*9e564957SAndroid Build Coastguard Worker uint32_t padding; 825*9e564957SAndroid Build Coastguard Worker }; 826*9e564957SAndroid Build Coastguard Worker 827*9e564957SAndroid Build Coastguard Worker struct fuse_read_out { 828*9e564957SAndroid Build Coastguard Worker uint64_t offset; 829*9e564957SAndroid Build Coastguard Worker uint32_t again; 830*9e564957SAndroid Build Coastguard Worker uint32_t padding; 831*9e564957SAndroid Build Coastguard Worker }; 832*9e564957SAndroid Build Coastguard Worker 833*9e564957SAndroid Build Coastguard Worker struct fuse_passthrough_out_v0 { 834*9e564957SAndroid Build Coastguard Worker uint32_t fd; 835*9e564957SAndroid Build Coastguard Worker /* For future implementation */ 836*9e564957SAndroid Build Coastguard Worker uint32_t len; 837*9e564957SAndroid Build Coastguard Worker void * vec; 838*9e564957SAndroid Build Coastguard Worker }; 839*9e564957SAndroid Build Coastguard Worker 840*9e564957SAndroid Build Coastguard Worker #define FUSE_COMPAT_WRITE_IN_SIZE 24 841*9e564957SAndroid Build Coastguard Worker 842*9e564957SAndroid Build Coastguard Worker struct fuse_write_in { 843*9e564957SAndroid Build Coastguard Worker uint64_t fh; 844*9e564957SAndroid Build Coastguard Worker uint64_t offset; 845*9e564957SAndroid Build Coastguard Worker uint32_t size; 846*9e564957SAndroid Build Coastguard Worker uint32_t write_flags; 847*9e564957SAndroid Build Coastguard Worker uint64_t lock_owner; 848*9e564957SAndroid Build Coastguard Worker uint32_t flags; 849*9e564957SAndroid Build Coastguard Worker uint32_t padding; 850*9e564957SAndroid Build Coastguard Worker }; 851*9e564957SAndroid Build Coastguard Worker 852*9e564957SAndroid Build Coastguard Worker struct fuse_write_out { 853*9e564957SAndroid Build Coastguard Worker uint32_t size; 854*9e564957SAndroid Build Coastguard Worker uint32_t padding; 855*9e564957SAndroid Build Coastguard Worker }; 856*9e564957SAndroid Build Coastguard Worker 857*9e564957SAndroid Build Coastguard Worker #define FUSE_COMPAT_STATFS_SIZE 48 858*9e564957SAndroid Build Coastguard Worker 859*9e564957SAndroid Build Coastguard Worker struct fuse_statfs_out { 860*9e564957SAndroid Build Coastguard Worker struct fuse_kstatfs st; 861*9e564957SAndroid Build Coastguard Worker }; 862*9e564957SAndroid Build Coastguard Worker 863*9e564957SAndroid Build Coastguard Worker struct fuse_fsync_in { 864*9e564957SAndroid Build Coastguard Worker uint64_t fh; 865*9e564957SAndroid Build Coastguard Worker uint32_t fsync_flags; 866*9e564957SAndroid Build Coastguard Worker uint32_t padding; 867*9e564957SAndroid Build Coastguard Worker }; 868*9e564957SAndroid Build Coastguard Worker 869*9e564957SAndroid Build Coastguard Worker #define FUSE_COMPAT_SETXATTR_IN_SIZE 8 870*9e564957SAndroid Build Coastguard Worker 871*9e564957SAndroid Build Coastguard Worker struct fuse_setxattr_in { 872*9e564957SAndroid Build Coastguard Worker uint32_t size; 873*9e564957SAndroid Build Coastguard Worker uint32_t flags; 874*9e564957SAndroid Build Coastguard Worker uint32_t setxattr_flags; 875*9e564957SAndroid Build Coastguard Worker uint32_t padding; 876*9e564957SAndroid Build Coastguard Worker }; 877*9e564957SAndroid Build Coastguard Worker 878*9e564957SAndroid Build Coastguard Worker struct fuse_getxattr_in { 879*9e564957SAndroid Build Coastguard Worker uint32_t size; 880*9e564957SAndroid Build Coastguard Worker uint32_t padding; 881*9e564957SAndroid Build Coastguard Worker }; 882*9e564957SAndroid Build Coastguard Worker 883*9e564957SAndroid Build Coastguard Worker struct fuse_getxattr_out { 884*9e564957SAndroid Build Coastguard Worker uint32_t size; 885*9e564957SAndroid Build Coastguard Worker uint32_t padding; 886*9e564957SAndroid Build Coastguard Worker }; 887*9e564957SAndroid Build Coastguard Worker 888*9e564957SAndroid Build Coastguard Worker struct fuse_lk_in { 889*9e564957SAndroid Build Coastguard Worker uint64_t fh; 890*9e564957SAndroid Build Coastguard Worker uint64_t owner; 891*9e564957SAndroid Build Coastguard Worker struct fuse_file_lock lk; 892*9e564957SAndroid Build Coastguard Worker uint32_t lk_flags; 893*9e564957SAndroid Build Coastguard Worker uint32_t padding; 894*9e564957SAndroid Build Coastguard Worker }; 895*9e564957SAndroid Build Coastguard Worker 896*9e564957SAndroid Build Coastguard Worker struct fuse_lk_out { 897*9e564957SAndroid Build Coastguard Worker struct fuse_file_lock lk; 898*9e564957SAndroid Build Coastguard Worker }; 899*9e564957SAndroid Build Coastguard Worker 900*9e564957SAndroid Build Coastguard Worker struct fuse_access_in { 901*9e564957SAndroid Build Coastguard Worker uint32_t mask; 902*9e564957SAndroid Build Coastguard Worker uint32_t padding; 903*9e564957SAndroid Build Coastguard Worker }; 904*9e564957SAndroid Build Coastguard Worker 905*9e564957SAndroid Build Coastguard Worker struct fuse_init_in { 906*9e564957SAndroid Build Coastguard Worker uint32_t major; 907*9e564957SAndroid Build Coastguard Worker uint32_t minor; 908*9e564957SAndroid Build Coastguard Worker uint32_t max_readahead; 909*9e564957SAndroid Build Coastguard Worker uint32_t flags; 910*9e564957SAndroid Build Coastguard Worker uint32_t flags2; 911*9e564957SAndroid Build Coastguard Worker uint32_t unused[11]; 912*9e564957SAndroid Build Coastguard Worker }; 913*9e564957SAndroid Build Coastguard Worker 914*9e564957SAndroid Build Coastguard Worker #define FUSE_COMPAT_INIT_OUT_SIZE 8 915*9e564957SAndroid Build Coastguard Worker #define FUSE_COMPAT_22_INIT_OUT_SIZE 24 916*9e564957SAndroid Build Coastguard Worker 917*9e564957SAndroid Build Coastguard Worker struct fuse_init_out { 918*9e564957SAndroid Build Coastguard Worker uint32_t major; 919*9e564957SAndroid Build Coastguard Worker uint32_t minor; 920*9e564957SAndroid Build Coastguard Worker uint32_t max_readahead; 921*9e564957SAndroid Build Coastguard Worker uint32_t flags; 922*9e564957SAndroid Build Coastguard Worker uint16_t max_background; 923*9e564957SAndroid Build Coastguard Worker uint16_t congestion_threshold; 924*9e564957SAndroid Build Coastguard Worker uint32_t max_write; 925*9e564957SAndroid Build Coastguard Worker uint32_t time_gran; 926*9e564957SAndroid Build Coastguard Worker uint16_t max_pages; 927*9e564957SAndroid Build Coastguard Worker uint16_t map_alignment; 928*9e564957SAndroid Build Coastguard Worker uint32_t flags2; 929*9e564957SAndroid Build Coastguard Worker uint32_t max_stack_depth; 930*9e564957SAndroid Build Coastguard Worker uint32_t unused[6]; 931*9e564957SAndroid Build Coastguard Worker }; 932*9e564957SAndroid Build Coastguard Worker 933*9e564957SAndroid Build Coastguard Worker #define CUSE_INIT_INFO_MAX 4096 934*9e564957SAndroid Build Coastguard Worker 935*9e564957SAndroid Build Coastguard Worker struct cuse_init_in { 936*9e564957SAndroid Build Coastguard Worker uint32_t major; 937*9e564957SAndroid Build Coastguard Worker uint32_t minor; 938*9e564957SAndroid Build Coastguard Worker uint32_t unused; 939*9e564957SAndroid Build Coastguard Worker uint32_t flags; 940*9e564957SAndroid Build Coastguard Worker }; 941*9e564957SAndroid Build Coastguard Worker 942*9e564957SAndroid Build Coastguard Worker struct cuse_init_out { 943*9e564957SAndroid Build Coastguard Worker uint32_t major; 944*9e564957SAndroid Build Coastguard Worker uint32_t minor; 945*9e564957SAndroid Build Coastguard Worker uint32_t unused; 946*9e564957SAndroid Build Coastguard Worker uint32_t flags; 947*9e564957SAndroid Build Coastguard Worker uint32_t max_read; 948*9e564957SAndroid Build Coastguard Worker uint32_t max_write; 949*9e564957SAndroid Build Coastguard Worker uint32_t dev_major; /* chardev major */ 950*9e564957SAndroid Build Coastguard Worker uint32_t dev_minor; /* chardev minor */ 951*9e564957SAndroid Build Coastguard Worker uint32_t spare[10]; 952*9e564957SAndroid Build Coastguard Worker }; 953*9e564957SAndroid Build Coastguard Worker 954*9e564957SAndroid Build Coastguard Worker struct fuse_interrupt_in { 955*9e564957SAndroid Build Coastguard Worker uint64_t unique; 956*9e564957SAndroid Build Coastguard Worker }; 957*9e564957SAndroid Build Coastguard Worker 958*9e564957SAndroid Build Coastguard Worker struct fuse_bmap_in { 959*9e564957SAndroid Build Coastguard Worker uint64_t block; 960*9e564957SAndroid Build Coastguard Worker uint32_t blocksize; 961*9e564957SAndroid Build Coastguard Worker uint32_t padding; 962*9e564957SAndroid Build Coastguard Worker }; 963*9e564957SAndroid Build Coastguard Worker 964*9e564957SAndroid Build Coastguard Worker struct fuse_bmap_out { 965*9e564957SAndroid Build Coastguard Worker uint64_t block; 966*9e564957SAndroid Build Coastguard Worker }; 967*9e564957SAndroid Build Coastguard Worker 968*9e564957SAndroid Build Coastguard Worker struct fuse_ioctl_in { 969*9e564957SAndroid Build Coastguard Worker uint64_t fh; 970*9e564957SAndroid Build Coastguard Worker uint32_t flags; 971*9e564957SAndroid Build Coastguard Worker uint32_t cmd; 972*9e564957SAndroid Build Coastguard Worker uint64_t arg; 973*9e564957SAndroid Build Coastguard Worker uint32_t in_size; 974*9e564957SAndroid Build Coastguard Worker uint32_t out_size; 975*9e564957SAndroid Build Coastguard Worker }; 976*9e564957SAndroid Build Coastguard Worker 977*9e564957SAndroid Build Coastguard Worker struct fuse_ioctl_iovec { 978*9e564957SAndroid Build Coastguard Worker uint64_t base; 979*9e564957SAndroid Build Coastguard Worker uint64_t len; 980*9e564957SAndroid Build Coastguard Worker }; 981*9e564957SAndroid Build Coastguard Worker 982*9e564957SAndroid Build Coastguard Worker struct fuse_ioctl_out { 983*9e564957SAndroid Build Coastguard Worker int32_t result; 984*9e564957SAndroid Build Coastguard Worker uint32_t flags; 985*9e564957SAndroid Build Coastguard Worker uint32_t in_iovs; 986*9e564957SAndroid Build Coastguard Worker uint32_t out_iovs; 987*9e564957SAndroid Build Coastguard Worker }; 988*9e564957SAndroid Build Coastguard Worker 989*9e564957SAndroid Build Coastguard Worker struct fuse_poll_in { 990*9e564957SAndroid Build Coastguard Worker uint64_t fh; 991*9e564957SAndroid Build Coastguard Worker uint64_t kh; 992*9e564957SAndroid Build Coastguard Worker uint32_t flags; 993*9e564957SAndroid Build Coastguard Worker uint32_t events; 994*9e564957SAndroid Build Coastguard Worker }; 995*9e564957SAndroid Build Coastguard Worker 996*9e564957SAndroid Build Coastguard Worker struct fuse_poll_out { 997*9e564957SAndroid Build Coastguard Worker uint32_t revents; 998*9e564957SAndroid Build Coastguard Worker uint32_t padding; 999*9e564957SAndroid Build Coastguard Worker }; 1000*9e564957SAndroid Build Coastguard Worker 1001*9e564957SAndroid Build Coastguard Worker struct fuse_notify_poll_wakeup_out { 1002*9e564957SAndroid Build Coastguard Worker uint64_t kh; 1003*9e564957SAndroid Build Coastguard Worker }; 1004*9e564957SAndroid Build Coastguard Worker 1005*9e564957SAndroid Build Coastguard Worker struct fuse_fallocate_in { 1006*9e564957SAndroid Build Coastguard Worker uint64_t fh; 1007*9e564957SAndroid Build Coastguard Worker uint64_t offset; 1008*9e564957SAndroid Build Coastguard Worker uint64_t length; 1009*9e564957SAndroid Build Coastguard Worker uint32_t mode; 1010*9e564957SAndroid Build Coastguard Worker uint32_t padding; 1011*9e564957SAndroid Build Coastguard Worker }; 1012*9e564957SAndroid Build Coastguard Worker 1013*9e564957SAndroid Build Coastguard Worker struct fuse_in_header { 1014*9e564957SAndroid Build Coastguard Worker uint32_t len; 1015*9e564957SAndroid Build Coastguard Worker uint32_t opcode; 1016*9e564957SAndroid Build Coastguard Worker uint64_t unique; 1017*9e564957SAndroid Build Coastguard Worker uint64_t nodeid; 1018*9e564957SAndroid Build Coastguard Worker uint32_t uid; 1019*9e564957SAndroid Build Coastguard Worker uint32_t gid; 1020*9e564957SAndroid Build Coastguard Worker uint32_t pid; 1021*9e564957SAndroid Build Coastguard Worker union { 1022*9e564957SAndroid Build Coastguard Worker uint32_t error_in; 1023*9e564957SAndroid Build Coastguard Worker struct { 1024*9e564957SAndroid Build Coastguard Worker uint16_t total_extlen; /* length of extensions in 8byte units */ 1025*9e564957SAndroid Build Coastguard Worker uint16_t padding; 1026*9e564957SAndroid Build Coastguard Worker }; 1027*9e564957SAndroid Build Coastguard Worker }; 1028*9e564957SAndroid Build Coastguard Worker }; 1029*9e564957SAndroid Build Coastguard Worker 1030*9e564957SAndroid Build Coastguard Worker struct fuse_out_header { 1031*9e564957SAndroid Build Coastguard Worker uint32_t len; 1032*9e564957SAndroid Build Coastguard Worker int32_t error; 1033*9e564957SAndroid Build Coastguard Worker uint64_t unique; 1034*9e564957SAndroid Build Coastguard Worker }; 1035*9e564957SAndroid Build Coastguard Worker 1036*9e564957SAndroid Build Coastguard Worker struct fuse_dirent { 1037*9e564957SAndroid Build Coastguard Worker uint64_t ino; 1038*9e564957SAndroid Build Coastguard Worker uint64_t off; 1039*9e564957SAndroid Build Coastguard Worker uint32_t namelen; 1040*9e564957SAndroid Build Coastguard Worker uint32_t type; 1041*9e564957SAndroid Build Coastguard Worker char name[]; 1042*9e564957SAndroid Build Coastguard Worker }; 1043*9e564957SAndroid Build Coastguard Worker 1044*9e564957SAndroid Build Coastguard Worker /* Align variable length records to 64bit boundary */ 1045*9e564957SAndroid Build Coastguard Worker #define FUSE_REC_ALIGN(x) \ 1046*9e564957SAndroid Build Coastguard Worker (((x) + sizeof(uint64_t) - 1) & ~(sizeof(uint64_t) - 1)) 1047*9e564957SAndroid Build Coastguard Worker 1048*9e564957SAndroid Build Coastguard Worker #define FUSE_NAME_OFFSET offsetof(struct fuse_dirent, name) 1049*9e564957SAndroid Build Coastguard Worker #define FUSE_DIRENT_ALIGN(x) FUSE_REC_ALIGN(x) 1050*9e564957SAndroid Build Coastguard Worker #define FUSE_DIRENT_SIZE(d) \ 1051*9e564957SAndroid Build Coastguard Worker FUSE_DIRENT_ALIGN(FUSE_NAME_OFFSET + (d)->namelen) 1052*9e564957SAndroid Build Coastguard Worker 1053*9e564957SAndroid Build Coastguard Worker struct fuse_direntplus { 1054*9e564957SAndroid Build Coastguard Worker struct fuse_entry_out entry_out; 1055*9e564957SAndroid Build Coastguard Worker struct fuse_dirent dirent; 1056*9e564957SAndroid Build Coastguard Worker }; 1057*9e564957SAndroid Build Coastguard Worker 1058*9e564957SAndroid Build Coastguard Worker #define FUSE_NAME_OFFSET_DIRENTPLUS \ 1059*9e564957SAndroid Build Coastguard Worker offsetof(struct fuse_direntplus, dirent.name) 1060*9e564957SAndroid Build Coastguard Worker #define FUSE_DIRENTPLUS_SIZE(d) \ 1061*9e564957SAndroid Build Coastguard Worker FUSE_DIRENT_ALIGN(FUSE_NAME_OFFSET_DIRENTPLUS + (d)->dirent.namelen) 1062*9e564957SAndroid Build Coastguard Worker 1063*9e564957SAndroid Build Coastguard Worker struct fuse_notify_inval_inode_out { 1064*9e564957SAndroid Build Coastguard Worker uint64_t ino; 1065*9e564957SAndroid Build Coastguard Worker int64_t off; 1066*9e564957SAndroid Build Coastguard Worker int64_t len; 1067*9e564957SAndroid Build Coastguard Worker }; 1068*9e564957SAndroid Build Coastguard Worker 1069*9e564957SAndroid Build Coastguard Worker struct fuse_notify_inval_entry_out { 1070*9e564957SAndroid Build Coastguard Worker uint64_t parent; 1071*9e564957SAndroid Build Coastguard Worker uint32_t namelen; 1072*9e564957SAndroid Build Coastguard Worker uint32_t flags; 1073*9e564957SAndroid Build Coastguard Worker }; 1074*9e564957SAndroid Build Coastguard Worker 1075*9e564957SAndroid Build Coastguard Worker struct fuse_notify_delete_out { 1076*9e564957SAndroid Build Coastguard Worker uint64_t parent; 1077*9e564957SAndroid Build Coastguard Worker uint64_t child; 1078*9e564957SAndroid Build Coastguard Worker uint32_t namelen; 1079*9e564957SAndroid Build Coastguard Worker uint32_t padding; 1080*9e564957SAndroid Build Coastguard Worker }; 1081*9e564957SAndroid Build Coastguard Worker 1082*9e564957SAndroid Build Coastguard Worker struct fuse_notify_store_out { 1083*9e564957SAndroid Build Coastguard Worker uint64_t nodeid; 1084*9e564957SAndroid Build Coastguard Worker uint64_t offset; 1085*9e564957SAndroid Build Coastguard Worker uint32_t size; 1086*9e564957SAndroid Build Coastguard Worker uint32_t padding; 1087*9e564957SAndroid Build Coastguard Worker }; 1088*9e564957SAndroid Build Coastguard Worker 1089*9e564957SAndroid Build Coastguard Worker struct fuse_notify_retrieve_out { 1090*9e564957SAndroid Build Coastguard Worker uint64_t notify_unique; 1091*9e564957SAndroid Build Coastguard Worker uint64_t nodeid; 1092*9e564957SAndroid Build Coastguard Worker uint64_t offset; 1093*9e564957SAndroid Build Coastguard Worker uint32_t size; 1094*9e564957SAndroid Build Coastguard Worker uint32_t padding; 1095*9e564957SAndroid Build Coastguard Worker }; 1096*9e564957SAndroid Build Coastguard Worker 1097*9e564957SAndroid Build Coastguard Worker /* Matches the size of fuse_write_in */ 1098*9e564957SAndroid Build Coastguard Worker struct fuse_notify_retrieve_in { 1099*9e564957SAndroid Build Coastguard Worker uint64_t dummy1; 1100*9e564957SAndroid Build Coastguard Worker uint64_t offset; 1101*9e564957SAndroid Build Coastguard Worker uint32_t size; 1102*9e564957SAndroid Build Coastguard Worker uint32_t dummy2; 1103*9e564957SAndroid Build Coastguard Worker uint64_t dummy3; 1104*9e564957SAndroid Build Coastguard Worker uint64_t dummy4; 1105*9e564957SAndroid Build Coastguard Worker }; 1106*9e564957SAndroid Build Coastguard Worker 1107*9e564957SAndroid Build Coastguard Worker struct fuse_backing_map { 1108*9e564957SAndroid Build Coastguard Worker int32_t fd; 1109*9e564957SAndroid Build Coastguard Worker uint32_t flags; 1110*9e564957SAndroid Build Coastguard Worker uint64_t padding; 1111*9e564957SAndroid Build Coastguard Worker }; 1112*9e564957SAndroid Build Coastguard Worker 1113*9e564957SAndroid Build Coastguard Worker /* Device ioctls: */ 1114*9e564957SAndroid Build Coastguard Worker #define FUSE_DEV_IOC_MAGIC 229 1115*9e564957SAndroid Build Coastguard Worker #define FUSE_DEV_IOC_CLONE _IOR(FUSE_DEV_IOC_MAGIC, 0, uint32_t) 1116*9e564957SAndroid Build Coastguard Worker #define FUSE_DEV_IOC_BACKING_OPEN _IOW(FUSE_DEV_IOC_MAGIC, 1, \ 1117*9e564957SAndroid Build Coastguard Worker struct fuse_backing_map) 1118*9e564957SAndroid Build Coastguard Worker #define FUSE_DEV_IOC_BACKING_CLOSE _IOW(FUSE_DEV_IOC_MAGIC, 2, uint32_t) 1119*9e564957SAndroid Build Coastguard Worker /* Android Passthrough ioctls */ 1120*9e564957SAndroid Build Coastguard Worker #define FUSE_DEV_IOC_PASSTHROUGH_OPEN_V0 _IOW(229, 1, struct fuse_passthrough_out_v0) 1121*9e564957SAndroid Build Coastguard Worker #define FUSE_DEV_IOC_PASSTHROUGH_OPEN_V1 _IOW(229, 127, struct fuse_passthrough_out_v0) 1122*9e564957SAndroid Build Coastguard Worker #define FUSE_DEV_IOC_PASSTHROUGH_OPEN_V2 _IOW(229, 126, uint32_t) 1123*9e564957SAndroid Build Coastguard Worker 1124*9e564957SAndroid Build Coastguard Worker struct fuse_lseek_in { 1125*9e564957SAndroid Build Coastguard Worker uint64_t fh; 1126*9e564957SAndroid Build Coastguard Worker uint64_t offset; 1127*9e564957SAndroid Build Coastguard Worker uint32_t whence; 1128*9e564957SAndroid Build Coastguard Worker uint32_t padding; 1129*9e564957SAndroid Build Coastguard Worker }; 1130*9e564957SAndroid Build Coastguard Worker 1131*9e564957SAndroid Build Coastguard Worker struct fuse_lseek_out { 1132*9e564957SAndroid Build Coastguard Worker uint64_t offset; 1133*9e564957SAndroid Build Coastguard Worker }; 1134*9e564957SAndroid Build Coastguard Worker 1135*9e564957SAndroid Build Coastguard Worker struct fuse_copy_file_range_in { 1136*9e564957SAndroid Build Coastguard Worker uint64_t fh_in; 1137*9e564957SAndroid Build Coastguard Worker uint64_t off_in; 1138*9e564957SAndroid Build Coastguard Worker uint64_t nodeid_out; 1139*9e564957SAndroid Build Coastguard Worker uint64_t fh_out; 1140*9e564957SAndroid Build Coastguard Worker uint64_t off_out; 1141*9e564957SAndroid Build Coastguard Worker uint64_t len; 1142*9e564957SAndroid Build Coastguard Worker uint64_t flags; 1143*9e564957SAndroid Build Coastguard Worker }; 1144*9e564957SAndroid Build Coastguard Worker 1145*9e564957SAndroid Build Coastguard Worker #define FUSE_SETUPMAPPING_FLAG_WRITE (1ull << 0) 1146*9e564957SAndroid Build Coastguard Worker #define FUSE_SETUPMAPPING_FLAG_READ (1ull << 1) 1147*9e564957SAndroid Build Coastguard Worker struct fuse_setupmapping_in { 1148*9e564957SAndroid Build Coastguard Worker /* An already open handle */ 1149*9e564957SAndroid Build Coastguard Worker uint64_t fh; 1150*9e564957SAndroid Build Coastguard Worker /* Offset into the file to start the mapping */ 1151*9e564957SAndroid Build Coastguard Worker uint64_t foffset; 1152*9e564957SAndroid Build Coastguard Worker /* Length of mapping required */ 1153*9e564957SAndroid Build Coastguard Worker uint64_t len; 1154*9e564957SAndroid Build Coastguard Worker /* Flags, FUSE_SETUPMAPPING_FLAG_* */ 1155*9e564957SAndroid Build Coastguard Worker uint64_t flags; 1156*9e564957SAndroid Build Coastguard Worker /* Offset in Memory Window */ 1157*9e564957SAndroid Build Coastguard Worker uint64_t moffset; 1158*9e564957SAndroid Build Coastguard Worker }; 1159*9e564957SAndroid Build Coastguard Worker 1160*9e564957SAndroid Build Coastguard Worker struct fuse_removemapping_in { 1161*9e564957SAndroid Build Coastguard Worker /* number of fuse_removemapping_one follows */ 1162*9e564957SAndroid Build Coastguard Worker uint32_t count; 1163*9e564957SAndroid Build Coastguard Worker }; 1164*9e564957SAndroid Build Coastguard Worker 1165*9e564957SAndroid Build Coastguard Worker struct fuse_removemapping_one { 1166*9e564957SAndroid Build Coastguard Worker /* Offset into the dax window start the unmapping */ 1167*9e564957SAndroid Build Coastguard Worker uint64_t moffset; 1168*9e564957SAndroid Build Coastguard Worker /* Length of mapping required */ 1169*9e564957SAndroid Build Coastguard Worker uint64_t len; 1170*9e564957SAndroid Build Coastguard Worker }; 1171*9e564957SAndroid Build Coastguard Worker 1172*9e564957SAndroid Build Coastguard Worker #define FUSE_REMOVEMAPPING_MAX_ENTRY \ 1173*9e564957SAndroid Build Coastguard Worker (PAGE_SIZE / sizeof(struct fuse_removemapping_one)) 1174*9e564957SAndroid Build Coastguard Worker 1175*9e564957SAndroid Build Coastguard Worker struct fuse_syncfs_in { 1176*9e564957SAndroid Build Coastguard Worker uint64_t padding; 1177*9e564957SAndroid Build Coastguard Worker }; 1178*9e564957SAndroid Build Coastguard Worker 1179*9e564957SAndroid Build Coastguard Worker /* 1180*9e564957SAndroid Build Coastguard Worker * For each security context, send fuse_secctx with size of security context 1181*9e564957SAndroid Build Coastguard Worker * fuse_secctx will be followed by security context name and this in turn 1182*9e564957SAndroid Build Coastguard Worker * will be followed by actual context label. 1183*9e564957SAndroid Build Coastguard Worker * fuse_secctx, name, context 1184*9e564957SAndroid Build Coastguard Worker */ 1185*9e564957SAndroid Build Coastguard Worker struct fuse_secctx { 1186*9e564957SAndroid Build Coastguard Worker uint32_t size; 1187*9e564957SAndroid Build Coastguard Worker uint32_t padding; 1188*9e564957SAndroid Build Coastguard Worker }; 1189*9e564957SAndroid Build Coastguard Worker 1190*9e564957SAndroid Build Coastguard Worker /* 1191*9e564957SAndroid Build Coastguard Worker * Contains the information about how many fuse_secctx structures are being 1192*9e564957SAndroid Build Coastguard Worker * sent and what's the total size of all security contexts (including 1193*9e564957SAndroid Build Coastguard Worker * size of fuse_secctx_header). 1194*9e564957SAndroid Build Coastguard Worker * 1195*9e564957SAndroid Build Coastguard Worker */ 1196*9e564957SAndroid Build Coastguard Worker struct fuse_secctx_header { 1197*9e564957SAndroid Build Coastguard Worker uint32_t size; 1198*9e564957SAndroid Build Coastguard Worker uint32_t nr_secctx; 1199*9e564957SAndroid Build Coastguard Worker }; 1200*9e564957SAndroid Build Coastguard Worker 1201*9e564957SAndroid Build Coastguard Worker /** 1202*9e564957SAndroid Build Coastguard Worker * struct fuse_ext_header - extension header 1203*9e564957SAndroid Build Coastguard Worker * @size: total size of this extension including this header 1204*9e564957SAndroid Build Coastguard Worker * @type: type of extension 1205*9e564957SAndroid Build Coastguard Worker * 1206*9e564957SAndroid Build Coastguard Worker * This is made compatible with fuse_secctx_header by using type values > 1207*9e564957SAndroid Build Coastguard Worker * FUSE_MAX_NR_SECCTX 1208*9e564957SAndroid Build Coastguard Worker */ 1209*9e564957SAndroid Build Coastguard Worker struct fuse_ext_header { 1210*9e564957SAndroid Build Coastguard Worker uint32_t size; 1211*9e564957SAndroid Build Coastguard Worker uint32_t type; 1212*9e564957SAndroid Build Coastguard Worker }; 1213*9e564957SAndroid Build Coastguard Worker 1214*9e564957SAndroid Build Coastguard Worker /** 1215*9e564957SAndroid Build Coastguard Worker * struct fuse_supp_groups - Supplementary group extension 1216*9e564957SAndroid Build Coastguard Worker * @nr_groups: number of supplementary groups 1217*9e564957SAndroid Build Coastguard Worker * @groups: flexible array of group IDs 1218*9e564957SAndroid Build Coastguard Worker */ 1219*9e564957SAndroid Build Coastguard Worker struct fuse_supp_groups { 1220*9e564957SAndroid Build Coastguard Worker uint32_t nr_groups; 1221*9e564957SAndroid Build Coastguard Worker uint32_t groups[]; 1222*9e564957SAndroid Build Coastguard Worker }; 1223*9e564957SAndroid Build Coastguard Worker 1224*9e564957SAndroid Build Coastguard Worker /** Export fuse_args only for bpf */ 1225*9e564957SAndroid Build Coastguard Worker #ifdef __KERNEL__ 1226*9e564957SAndroid Build Coastguard Worker struct fuse_mount; 1227*9e564957SAndroid Build Coastguard Worker 1228*9e564957SAndroid Build Coastguard Worker /* 1229*9e564957SAndroid Build Coastguard Worker * Fuse BPF Args 1230*9e564957SAndroid Build Coastguard Worker * 1231*9e564957SAndroid Build Coastguard Worker * Used to communicate with bpf programs to allow checking or altering certain values. 1232*9e564957SAndroid Build Coastguard Worker * The end_offset allows the bpf verifier to check boundaries statically. This reflects 1233*9e564957SAndroid Build Coastguard Worker * the ends of the buffer. size shows the length that was actually used. 1234*9e564957SAndroid Build Coastguard Worker * 1235*9e564957SAndroid Build Coastguard Worker */ 1236*9e564957SAndroid Build Coastguard Worker 1237*9e564957SAndroid Build Coastguard Worker /** One input argument of a request */ 1238*9e564957SAndroid Build Coastguard Worker struct fuse_bpf_in_arg { 1239*9e564957SAndroid Build Coastguard Worker uint32_t size; 1240*9e564957SAndroid Build Coastguard Worker const void *value; 1241*9e564957SAndroid Build Coastguard Worker const void *end_offset; 1242*9e564957SAndroid Build Coastguard Worker }; 1243*9e564957SAndroid Build Coastguard Worker 1244*9e564957SAndroid Build Coastguard Worker /** One output argument of a request */ 1245*9e564957SAndroid Build Coastguard Worker struct fuse_bpf_arg { 1246*9e564957SAndroid Build Coastguard Worker uint32_t size; 1247*9e564957SAndroid Build Coastguard Worker void *value; 1248*9e564957SAndroid Build Coastguard Worker void *end_offset; 1249*9e564957SAndroid Build Coastguard Worker }; 1250*9e564957SAndroid Build Coastguard Worker 1251*9e564957SAndroid Build Coastguard Worker #define FUSE_MAX_IN_ARGS 5 1252*9e564957SAndroid Build Coastguard Worker #define FUSE_MAX_OUT_ARGS 3 1253*9e564957SAndroid Build Coastguard Worker 1254*9e564957SAndroid Build Coastguard Worker #define FUSE_BPF_FORCE (1 << 0) 1255*9e564957SAndroid Build Coastguard Worker #define FUSE_BPF_OUT_ARGVAR (1 << 6) 1256*9e564957SAndroid Build Coastguard Worker 1257*9e564957SAndroid Build Coastguard Worker struct fuse_bpf_args { 1258*9e564957SAndroid Build Coastguard Worker uint64_t nodeid; 1259*9e564957SAndroid Build Coastguard Worker uint32_t opcode; 1260*9e564957SAndroid Build Coastguard Worker uint32_t error_in; 1261*9e564957SAndroid Build Coastguard Worker uint32_t in_numargs; 1262*9e564957SAndroid Build Coastguard Worker uint32_t out_numargs; 1263*9e564957SAndroid Build Coastguard Worker uint32_t flags; 1264*9e564957SAndroid Build Coastguard Worker struct fuse_bpf_in_arg in_args[FUSE_MAX_IN_ARGS]; 1265*9e564957SAndroid Build Coastguard Worker struct fuse_bpf_arg out_args[FUSE_MAX_OUT_ARGS]; 1266*9e564957SAndroid Build Coastguard Worker }; 1267*9e564957SAndroid Build Coastguard Worker #endif 1268*9e564957SAndroid Build Coastguard Worker 1269*9e564957SAndroid Build Coastguard Worker #define FUSE_BPF_USER_FILTER 1 1270*9e564957SAndroid Build Coastguard Worker #define FUSE_BPF_BACKING 2 1271*9e564957SAndroid Build Coastguard Worker #define FUSE_BPF_POST_FILTER 4 1272*9e564957SAndroid Build Coastguard Worker 1273*9e564957SAndroid Build Coastguard Worker #define FUSE_OPCODE_FILTER 0x0ffff 1274*9e564957SAndroid Build Coastguard Worker #define FUSE_PREFILTER 0x10000 1275*9e564957SAndroid Build Coastguard Worker #define FUSE_POSTFILTER 0x20000 1276*9e564957SAndroid Build Coastguard Worker 1277*9e564957SAndroid Build Coastguard Worker #endif /* _LINUX_FUSE_H */ 1278