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