16881f68fSopenharmony_ci/* SPDX-License-Identifier: ((GPL-2.0 WITH Linux-syscall-note) OR BSD-2-Clause) */
26881f68fSopenharmony_ci/*
36881f68fSopenharmony_ci    This file defines the kernel interface of FUSE
46881f68fSopenharmony_ci    Copyright (C) 2001-2008  Miklos Szeredi <miklos@szeredi.hu>
56881f68fSopenharmony_ci
66881f68fSopenharmony_ci    This program can be distributed under the terms of the GNU GPL.
76881f68fSopenharmony_ci    See the file COPYING.
86881f68fSopenharmony_ci
96881f68fSopenharmony_ci    This -- and only this -- header file may also be distributed under
106881f68fSopenharmony_ci    the terms of the BSD Licence as follows:
116881f68fSopenharmony_ci
126881f68fSopenharmony_ci    Copyright (C) 2001-2007 Miklos Szeredi. All rights reserved.
136881f68fSopenharmony_ci
146881f68fSopenharmony_ci    Redistribution and use in source and binary forms, with or without
156881f68fSopenharmony_ci    modification, are permitted provided that the following conditions
166881f68fSopenharmony_ci    are met:
176881f68fSopenharmony_ci    1. Redistributions of source code must retain the above copyright
186881f68fSopenharmony_ci       notice, this list of conditions and the following disclaimer.
196881f68fSopenharmony_ci    2. Redistributions in binary form must reproduce the above copyright
206881f68fSopenharmony_ci       notice, this list of conditions and the following disclaimer in the
216881f68fSopenharmony_ci       documentation and/or other materials provided with the distribution.
226881f68fSopenharmony_ci
236881f68fSopenharmony_ci    THIS SOFTWARE IS PROVIDED BY AUTHOR AND CONTRIBUTORS ``AS IS'' AND
246881f68fSopenharmony_ci    ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
256881f68fSopenharmony_ci    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
266881f68fSopenharmony_ci    ARE DISCLAIMED.  IN NO EVENT SHALL AUTHOR OR CONTRIBUTORS BE LIABLE
276881f68fSopenharmony_ci    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
286881f68fSopenharmony_ci    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
296881f68fSopenharmony_ci    OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
306881f68fSopenharmony_ci    HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
316881f68fSopenharmony_ci    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
326881f68fSopenharmony_ci    OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
336881f68fSopenharmony_ci    SUCH DAMAGE.
346881f68fSopenharmony_ci*/
356881f68fSopenharmony_ci
366881f68fSopenharmony_ci/*
376881f68fSopenharmony_ci * This file defines the kernel interface of FUSE
386881f68fSopenharmony_ci *
396881f68fSopenharmony_ci * Protocol changelog:
406881f68fSopenharmony_ci *
416881f68fSopenharmony_ci * 7.1:
426881f68fSopenharmony_ci *  - add the following messages:
436881f68fSopenharmony_ci *      FUSE_SETATTR, FUSE_SYMLINK, FUSE_MKNOD, FUSE_MKDIR, FUSE_UNLINK,
446881f68fSopenharmony_ci *      FUSE_RMDIR, FUSE_RENAME, FUSE_LINK, FUSE_OPEN, FUSE_READ, FUSE_WRITE,
456881f68fSopenharmony_ci *      FUSE_RELEASE, FUSE_FSYNC, FUSE_FLUSH, FUSE_SETXATTR, FUSE_GETXATTR,
466881f68fSopenharmony_ci *      FUSE_LISTXATTR, FUSE_REMOVEXATTR, FUSE_OPENDIR, FUSE_READDIR,
476881f68fSopenharmony_ci *      FUSE_RELEASEDIR
486881f68fSopenharmony_ci *  - add padding to messages to accommodate 32-bit servers on 64-bit kernels
496881f68fSopenharmony_ci *
506881f68fSopenharmony_ci * 7.2:
516881f68fSopenharmony_ci *  - add FOPEN_DIRECT_IO and FOPEN_KEEP_CACHE flags
526881f68fSopenharmony_ci *  - add FUSE_FSYNCDIR message
536881f68fSopenharmony_ci *
546881f68fSopenharmony_ci * 7.3:
556881f68fSopenharmony_ci *  - add FUSE_ACCESS message
566881f68fSopenharmony_ci *  - add FUSE_CREATE message
576881f68fSopenharmony_ci *  - add filehandle to fuse_setattr_in
586881f68fSopenharmony_ci *
596881f68fSopenharmony_ci * 7.4:
606881f68fSopenharmony_ci *  - add frsize to fuse_kstatfs
616881f68fSopenharmony_ci *  - clean up request size limit checking
626881f68fSopenharmony_ci *
636881f68fSopenharmony_ci * 7.5:
646881f68fSopenharmony_ci *  - add flags and max_write to fuse_init_out
656881f68fSopenharmony_ci *
666881f68fSopenharmony_ci * 7.6:
676881f68fSopenharmony_ci *  - add max_readahead to fuse_init_in and fuse_init_out
686881f68fSopenharmony_ci *
696881f68fSopenharmony_ci * 7.7:
706881f68fSopenharmony_ci *  - add FUSE_INTERRUPT message
716881f68fSopenharmony_ci *  - add POSIX file lock support
726881f68fSopenharmony_ci *
736881f68fSopenharmony_ci * 7.8:
746881f68fSopenharmony_ci *  - add lock_owner and flags fields to fuse_release_in
756881f68fSopenharmony_ci *  - add FUSE_BMAP message
766881f68fSopenharmony_ci *  - add FUSE_DESTROY message
776881f68fSopenharmony_ci *
786881f68fSopenharmony_ci * 7.9:
796881f68fSopenharmony_ci *  - new fuse_getattr_in input argument of GETATTR
806881f68fSopenharmony_ci *  - add lk_flags in fuse_lk_in
816881f68fSopenharmony_ci *  - add lock_owner field to fuse_setattr_in, fuse_read_in and fuse_write_in
826881f68fSopenharmony_ci *  - add blksize field to fuse_attr
836881f68fSopenharmony_ci *  - add file flags field to fuse_read_in and fuse_write_in
846881f68fSopenharmony_ci *  - Add ATIME_NOW and MTIME_NOW flags to fuse_setattr_in
856881f68fSopenharmony_ci *
866881f68fSopenharmony_ci * 7.10
876881f68fSopenharmony_ci *  - add nonseekable open flag
886881f68fSopenharmony_ci *
896881f68fSopenharmony_ci * 7.11
906881f68fSopenharmony_ci *  - add IOCTL message
916881f68fSopenharmony_ci *  - add unsolicited notification support
926881f68fSopenharmony_ci *  - add POLL message and NOTIFY_POLL notification
936881f68fSopenharmony_ci *
946881f68fSopenharmony_ci * 7.12
956881f68fSopenharmony_ci *  - add umask flag to input argument of create, mknod and mkdir
966881f68fSopenharmony_ci *  - add notification messages for invalidation of inodes and
976881f68fSopenharmony_ci *    directory entries
986881f68fSopenharmony_ci *
996881f68fSopenharmony_ci * 7.13
1006881f68fSopenharmony_ci *  - make max number of background requests and congestion threshold
1016881f68fSopenharmony_ci *    tunables
1026881f68fSopenharmony_ci *
1036881f68fSopenharmony_ci * 7.14
1046881f68fSopenharmony_ci *  - add splice support to fuse device
1056881f68fSopenharmony_ci *
1066881f68fSopenharmony_ci * 7.15
1076881f68fSopenharmony_ci *  - add store notify
1086881f68fSopenharmony_ci *  - add retrieve notify
1096881f68fSopenharmony_ci *
1106881f68fSopenharmony_ci * 7.16
1116881f68fSopenharmony_ci *  - add BATCH_FORGET request
1126881f68fSopenharmony_ci *  - FUSE_IOCTL_UNRESTRICTED shall now return with array of 'struct
1136881f68fSopenharmony_ci *    fuse_ioctl_iovec' instead of ambiguous 'struct iovec'
1146881f68fSopenharmony_ci *  - add FUSE_IOCTL_32BIT flag
1156881f68fSopenharmony_ci *
1166881f68fSopenharmony_ci * 7.17
1176881f68fSopenharmony_ci *  - add FUSE_FLOCK_LOCKS and FUSE_RELEASE_FLOCK_UNLOCK
1186881f68fSopenharmony_ci *
1196881f68fSopenharmony_ci * 7.18
1206881f68fSopenharmony_ci *  - add FUSE_IOCTL_DIR flag
1216881f68fSopenharmony_ci *  - add FUSE_NOTIFY_DELETE
1226881f68fSopenharmony_ci *
1236881f68fSopenharmony_ci * 7.19
1246881f68fSopenharmony_ci *  - add FUSE_FALLOCATE
1256881f68fSopenharmony_ci *
1266881f68fSopenharmony_ci * 7.20
1276881f68fSopenharmony_ci *  - add FUSE_AUTO_INVAL_DATA
1286881f68fSopenharmony_ci *
1296881f68fSopenharmony_ci * 7.21
1306881f68fSopenharmony_ci *  - add FUSE_READDIRPLUS
1316881f68fSopenharmony_ci *  - send the requested events in POLL request
1326881f68fSopenharmony_ci *
1336881f68fSopenharmony_ci * 7.22
1346881f68fSopenharmony_ci *  - add FUSE_ASYNC_DIO
1356881f68fSopenharmony_ci *
1366881f68fSopenharmony_ci * 7.23
1376881f68fSopenharmony_ci *  - add FUSE_WRITEBACK_CACHE
1386881f68fSopenharmony_ci *  - add time_gran to fuse_init_out
1396881f68fSopenharmony_ci *  - add reserved space to fuse_init_out
1406881f68fSopenharmony_ci *  - add FATTR_CTIME
1416881f68fSopenharmony_ci *  - add ctime and ctimensec to fuse_setattr_in
1426881f68fSopenharmony_ci *  - add FUSE_RENAME2 request
1436881f68fSopenharmony_ci *  - add FUSE_NO_OPEN_SUPPORT flag
1446881f68fSopenharmony_ci *
1456881f68fSopenharmony_ci *  7.24
1466881f68fSopenharmony_ci *  - add FUSE_LSEEK for SEEK_HOLE and SEEK_DATA support
1476881f68fSopenharmony_ci *
1486881f68fSopenharmony_ci *  7.25
1496881f68fSopenharmony_ci *  - add FUSE_PARALLEL_DIROPS
1506881f68fSopenharmony_ci *
1516881f68fSopenharmony_ci *  7.26
1526881f68fSopenharmony_ci *  - add FUSE_HANDLE_KILLPRIV
1536881f68fSopenharmony_ci *  - add FUSE_POSIX_ACL
1546881f68fSopenharmony_ci *
1556881f68fSopenharmony_ci *  7.27
1566881f68fSopenharmony_ci *  - add FUSE_ABORT_ERROR
1576881f68fSopenharmony_ci *
1586881f68fSopenharmony_ci *  7.28
1596881f68fSopenharmony_ci *  - add FUSE_COPY_FILE_RANGE
1606881f68fSopenharmony_ci *  - add FOPEN_CACHE_DIR
1616881f68fSopenharmony_ci *  - add FUSE_MAX_PAGES, add max_pages to init_out
1626881f68fSopenharmony_ci *  - add FUSE_CACHE_SYMLINKS
1636881f68fSopenharmony_ci *
1646881f68fSopenharmony_ci *  7.29
1656881f68fSopenharmony_ci *  - add FUSE_NO_OPENDIR_SUPPORT flag
1666881f68fSopenharmony_ci *
1676881f68fSopenharmony_ci *  7.30
1686881f68fSopenharmony_ci *  - add FUSE_EXPLICIT_INVAL_DATA
1696881f68fSopenharmony_ci *  - add FUSE_IOCTL_COMPAT_X32
1706881f68fSopenharmony_ci *
1716881f68fSopenharmony_ci *  7.31
1726881f68fSopenharmony_ci *  - add FUSE_WRITE_KILL_PRIV flag
1736881f68fSopenharmony_ci *  - add FUSE_SETUPMAPPING and FUSE_REMOVEMAPPING
1746881f68fSopenharmony_ci *  - add map_alignment to fuse_init_out, add FUSE_MAP_ALIGNMENT flag
1756881f68fSopenharmony_ci *
1766881f68fSopenharmony_ci *  7.32
1776881f68fSopenharmony_ci *  - add flags to fuse_attr, add FUSE_ATTR_SUBMOUNT, add FUSE_SUBMOUNTS
1786881f68fSopenharmony_ci *
1796881f68fSopenharmony_ci *  7.33
1806881f68fSopenharmony_ci *  - add FUSE_HANDLE_KILLPRIV_V2, FUSE_WRITE_KILL_SUIDGID, FATTR_KILL_SUIDGID
1816881f68fSopenharmony_ci *  - add FUSE_OPEN_KILL_SUIDGID
1826881f68fSopenharmony_ci *  - extend fuse_setxattr_in, add FUSE_SETXATTR_EXT
1836881f68fSopenharmony_ci *  - add FUSE_SETXATTR_ACL_KILL_SGID
1846881f68fSopenharmony_ci *
1856881f68fSopenharmony_ci *  7.34
1866881f68fSopenharmony_ci *  - add FUSE_SYNCFS
1876881f68fSopenharmony_ci *
1886881f68fSopenharmony_ci *  7.35
1896881f68fSopenharmony_ci *  - add FOPEN_NOFLUSH
1906881f68fSopenharmony_ci *
1916881f68fSopenharmony_ci *  7.36
1926881f68fSopenharmony_ci *  - extend fuse_init_in with reserved fields, add FUSE_INIT_EXT init flag
1936881f68fSopenharmony_ci *  - add flags2 to fuse_init_in and fuse_init_out
1946881f68fSopenharmony_ci *  - add FUSE_SECURITY_CTX init flag
1956881f68fSopenharmony_ci *  - add security context to create, mkdir, symlink, and mknod requests
1966881f68fSopenharmony_ci *  - add FUSE_HAS_INODE_DAX, FUSE_ATTR_DAX
1976881f68fSopenharmony_ci *
1986881f68fSopenharmony_ci *  7.37
1996881f68fSopenharmony_ci *  - add FUSE_TMPFILE
2006881f68fSopenharmony_ci *
2016881f68fSopenharmony_ci *  7.38
2026881f68fSopenharmony_ci *  - add FUSE_EXPIRE_ONLY flag to fuse_notify_inval_entry
2036881f68fSopenharmony_ci *  - add FOPEN_PARALLEL_DIRECT_WRITES
2046881f68fSopenharmony_ci *  - add total_extlen to fuse_in_header
2056881f68fSopenharmony_ci *  - add FUSE_MAX_NR_SECCTX
2066881f68fSopenharmony_ci *  - add extension header
2076881f68fSopenharmony_ci *  - add FUSE_EXT_GROUPS
2086881f68fSopenharmony_ci *  - add FUSE_CREATE_SUPP_GROUP
2096881f68fSopenharmony_ci */
2106881f68fSopenharmony_ci
2116881f68fSopenharmony_ci#ifndef _LINUX_FUSE_H
2126881f68fSopenharmony_ci#define _LINUX_FUSE_H
2136881f68fSopenharmony_ci
2146881f68fSopenharmony_ci#ifdef __KERNEL__
2156881f68fSopenharmony_ci#include <linux/types.h>
2166881f68fSopenharmony_ci#else
2176881f68fSopenharmony_ci#include <stdint.h>
2186881f68fSopenharmony_ci#endif
2196881f68fSopenharmony_ci
2206881f68fSopenharmony_ci/*
2216881f68fSopenharmony_ci * Version negotiation:
2226881f68fSopenharmony_ci *
2236881f68fSopenharmony_ci * Both the kernel and userspace send the version they support in the
2246881f68fSopenharmony_ci * INIT request and reply respectively.
2256881f68fSopenharmony_ci *
2266881f68fSopenharmony_ci * If the major versions match then both shall use the smallest
2276881f68fSopenharmony_ci * of the two minor versions for communication.
2286881f68fSopenharmony_ci *
2296881f68fSopenharmony_ci * If the kernel supports a larger major version, then userspace shall
2306881f68fSopenharmony_ci * reply with the major version it supports, ignore the rest of the
2316881f68fSopenharmony_ci * INIT message and expect a new INIT message from the kernel with a
2326881f68fSopenharmony_ci * matching major version.
2336881f68fSopenharmony_ci *
2346881f68fSopenharmony_ci * If the library supports a larger major version, then it shall fall
2356881f68fSopenharmony_ci * back to the major protocol version sent by the kernel for
2366881f68fSopenharmony_ci * communication and reply with that major version (and an arbitrary
2376881f68fSopenharmony_ci * supported minor version).
2386881f68fSopenharmony_ci */
2396881f68fSopenharmony_ci
2406881f68fSopenharmony_ci/** Version number of this interface */
2416881f68fSopenharmony_ci#define FUSE_KERNEL_VERSION 7
2426881f68fSopenharmony_ci
2436881f68fSopenharmony_ci/** Minor version number of this interface */
2446881f68fSopenharmony_ci#define FUSE_KERNEL_MINOR_VERSION 38
2456881f68fSopenharmony_ci
2466881f68fSopenharmony_ci/** The node ID of the root inode */
2476881f68fSopenharmony_ci#define FUSE_ROOT_ID 1
2486881f68fSopenharmony_ci
2496881f68fSopenharmony_ci/* Make sure all structures are padded to 64bit boundary, so 32bit
2506881f68fSopenharmony_ci   userspace works under 64bit kernels */
2516881f68fSopenharmony_ci
2526881f68fSopenharmony_cistruct fuse_attr {
2536881f68fSopenharmony_ci	uint64_t	ino;
2546881f68fSopenharmony_ci	uint64_t	size;
2556881f68fSopenharmony_ci	uint64_t	blocks;
2566881f68fSopenharmony_ci	uint64_t	atime;
2576881f68fSopenharmony_ci	uint64_t	mtime;
2586881f68fSopenharmony_ci	uint64_t	ctime;
2596881f68fSopenharmony_ci	uint32_t	atimensec;
2606881f68fSopenharmony_ci	uint32_t	mtimensec;
2616881f68fSopenharmony_ci	uint32_t	ctimensec;
2626881f68fSopenharmony_ci	uint32_t	mode;
2636881f68fSopenharmony_ci	uint32_t	nlink;
2646881f68fSopenharmony_ci	uint32_t	uid;
2656881f68fSopenharmony_ci	uint32_t	gid;
2666881f68fSopenharmony_ci	uint32_t	rdev;
2676881f68fSopenharmony_ci	uint32_t	blksize;
2686881f68fSopenharmony_ci	uint32_t	flags;
2696881f68fSopenharmony_ci};
2706881f68fSopenharmony_ci
2716881f68fSopenharmony_cistruct fuse_kstatfs {
2726881f68fSopenharmony_ci	uint64_t	blocks;
2736881f68fSopenharmony_ci	uint64_t	bfree;
2746881f68fSopenharmony_ci	uint64_t	bavail;
2756881f68fSopenharmony_ci	uint64_t	files;
2766881f68fSopenharmony_ci	uint64_t	ffree;
2776881f68fSopenharmony_ci	uint32_t	bsize;
2786881f68fSopenharmony_ci	uint32_t	namelen;
2796881f68fSopenharmony_ci	uint32_t	frsize;
2806881f68fSopenharmony_ci	uint32_t	padding;
2816881f68fSopenharmony_ci	uint32_t	spare[6];
2826881f68fSopenharmony_ci};
2836881f68fSopenharmony_ci
2846881f68fSopenharmony_cistruct fuse_file_lock {
2856881f68fSopenharmony_ci	uint64_t	start;
2866881f68fSopenharmony_ci	uint64_t	end;
2876881f68fSopenharmony_ci	uint32_t	type;
2886881f68fSopenharmony_ci	uint32_t	pid; /* tgid */
2896881f68fSopenharmony_ci};
2906881f68fSopenharmony_ci
2916881f68fSopenharmony_ci/**
2926881f68fSopenharmony_ci * Bitmasks for fuse_setattr_in.valid
2936881f68fSopenharmony_ci */
2946881f68fSopenharmony_ci#define FATTR_MODE	(1 << 0)
2956881f68fSopenharmony_ci#define FATTR_UID	(1 << 1)
2966881f68fSopenharmony_ci#define FATTR_GID	(1 << 2)
2976881f68fSopenharmony_ci#define FATTR_SIZE	(1 << 3)
2986881f68fSopenharmony_ci#define FATTR_ATIME	(1 << 4)
2996881f68fSopenharmony_ci#define FATTR_MTIME	(1 << 5)
3006881f68fSopenharmony_ci#define FATTR_FH	(1 << 6)
3016881f68fSopenharmony_ci#define FATTR_ATIME_NOW	(1 << 7)
3026881f68fSopenharmony_ci#define FATTR_MTIME_NOW	(1 << 8)
3036881f68fSopenharmony_ci#define FATTR_LOCKOWNER	(1 << 9)
3046881f68fSopenharmony_ci#define FATTR_CTIME	(1 << 10)
3056881f68fSopenharmony_ci#define FATTR_KILL_SUIDGID	(1 << 11)
3066881f68fSopenharmony_ci
3076881f68fSopenharmony_ci/**
3086881f68fSopenharmony_ci * Flags returned by the OPEN request
3096881f68fSopenharmony_ci *
3106881f68fSopenharmony_ci * FOPEN_DIRECT_IO: bypass page cache for this open file
3116881f68fSopenharmony_ci * FOPEN_KEEP_CACHE: don't invalidate the data cache on open
3126881f68fSopenharmony_ci * FOPEN_NONSEEKABLE: the file is not seekable
3136881f68fSopenharmony_ci * FOPEN_CACHE_DIR: allow caching this directory
3146881f68fSopenharmony_ci * FOPEN_STREAM: the file is stream-like (no file position at all)
3156881f68fSopenharmony_ci * FOPEN_NOFLUSH: don't flush data cache on close (unless FUSE_WRITEBACK_CACHE)
3166881f68fSopenharmony_ci * FOPEN_PARALLEL_DIRECT_WRITES: Allow concurrent direct writes on the same inode
3176881f68fSopenharmony_ci */
3186881f68fSopenharmony_ci#define FOPEN_DIRECT_IO		(1 << 0)
3196881f68fSopenharmony_ci#define FOPEN_KEEP_CACHE	(1 << 1)
3206881f68fSopenharmony_ci#define FOPEN_NONSEEKABLE	(1 << 2)
3216881f68fSopenharmony_ci#define FOPEN_CACHE_DIR		(1 << 3)
3226881f68fSopenharmony_ci#define FOPEN_STREAM		(1 << 4)
3236881f68fSopenharmony_ci#define FOPEN_NOFLUSH		(1 << 5)
3246881f68fSopenharmony_ci#define FOPEN_PARALLEL_DIRECT_WRITES	(1 << 6)
3256881f68fSopenharmony_ci
3266881f68fSopenharmony_ci/**
3276881f68fSopenharmony_ci * INIT request/reply flags
3286881f68fSopenharmony_ci *
3296881f68fSopenharmony_ci * FUSE_ASYNC_READ: asynchronous read requests
3306881f68fSopenharmony_ci * FUSE_POSIX_LOCKS: remote locking for POSIX file locks
3316881f68fSopenharmony_ci * FUSE_FILE_OPS: kernel sends file handle for fstat, etc... (not yet supported)
3326881f68fSopenharmony_ci * FUSE_ATOMIC_O_TRUNC: handles the O_TRUNC open flag in the filesystem
3336881f68fSopenharmony_ci * FUSE_EXPORT_SUPPORT: filesystem handles lookups of "." and ".."
3346881f68fSopenharmony_ci * FUSE_BIG_WRITES: filesystem can handle write size larger than 4kB
3356881f68fSopenharmony_ci * FUSE_DONT_MASK: don't apply umask to file mode on create operations
3366881f68fSopenharmony_ci * FUSE_SPLICE_WRITE: kernel supports splice write on the device
3376881f68fSopenharmony_ci * FUSE_SPLICE_MOVE: kernel supports splice move on the device
3386881f68fSopenharmony_ci * FUSE_SPLICE_READ: kernel supports splice read on the device
3396881f68fSopenharmony_ci * FUSE_FLOCK_LOCKS: remote locking for BSD style file locks
3406881f68fSopenharmony_ci * FUSE_HAS_IOCTL_DIR: kernel supports ioctl on directories
3416881f68fSopenharmony_ci * FUSE_AUTO_INVAL_DATA: automatically invalidate cached pages
3426881f68fSopenharmony_ci * FUSE_DO_READDIRPLUS: do READDIRPLUS (READDIR+LOOKUP in one)
3436881f68fSopenharmony_ci * FUSE_READDIRPLUS_AUTO: adaptive readdirplus
3446881f68fSopenharmony_ci * FUSE_ASYNC_DIO: asynchronous direct I/O submission
3456881f68fSopenharmony_ci * FUSE_WRITEBACK_CACHE: use writeback cache for buffered writes
3466881f68fSopenharmony_ci * FUSE_NO_OPEN_SUPPORT: kernel supports zero-message opens
3476881f68fSopenharmony_ci * FUSE_PARALLEL_DIROPS: allow parallel lookups and readdir
3486881f68fSopenharmony_ci * FUSE_HANDLE_KILLPRIV: fs handles killing suid/sgid/cap on write/chown/trunc
3496881f68fSopenharmony_ci * FUSE_POSIX_ACL: filesystem supports posix acls
3506881f68fSopenharmony_ci * FUSE_ABORT_ERROR: reading the device after abort returns ECONNABORTED
3516881f68fSopenharmony_ci * FUSE_MAX_PAGES: init_out.max_pages contains the max number of req pages
3526881f68fSopenharmony_ci * FUSE_CACHE_SYMLINKS: cache READLINK responses
3536881f68fSopenharmony_ci * FUSE_NO_OPENDIR_SUPPORT: kernel supports zero-message opendir
3546881f68fSopenharmony_ci * FUSE_EXPLICIT_INVAL_DATA: only invalidate cached pages on explicit request
3556881f68fSopenharmony_ci * FUSE_MAP_ALIGNMENT: init_out.map_alignment contains log2(byte alignment) for
3566881f68fSopenharmony_ci *		       foffset and moffset fields in struct
3576881f68fSopenharmony_ci *		       fuse_setupmapping_out and fuse_removemapping_one.
3586881f68fSopenharmony_ci * FUSE_SUBMOUNTS: kernel supports auto-mounting directory submounts
3596881f68fSopenharmony_ci * FUSE_HANDLE_KILLPRIV_V2: fs kills suid/sgid/cap on write/chown/trunc.
3606881f68fSopenharmony_ci *			Upon write/truncate suid/sgid is only killed if caller
3616881f68fSopenharmony_ci *			does not have CAP_FSETID. Additionally upon
3626881f68fSopenharmony_ci *			write/truncate sgid is killed only if file has group
3636881f68fSopenharmony_ci *			execute permission. (Same as Linux VFS behavior).
3646881f68fSopenharmony_ci * FUSE_SETXATTR_EXT:	Server supports extended struct fuse_setxattr_in
3656881f68fSopenharmony_ci * FUSE_INIT_EXT: extended fuse_init_in request
3666881f68fSopenharmony_ci * FUSE_INIT_RESERVED: reserved, do not use
3676881f68fSopenharmony_ci * FUSE_SECURITY_CTX:	add security context to create, mkdir, symlink, and
3686881f68fSopenharmony_ci *			mknod
3696881f68fSopenharmony_ci * FUSE_HAS_INODE_DAX:  use per inode DAX
3706881f68fSopenharmony_ci * FUSE_CREATE_SUPP_GROUP: add supplementary group info to create, mkdir,
3716881f68fSopenharmony_ci *			symlink and mknod (single group that matches parent)
3726881f68fSopenharmony_ci */
3736881f68fSopenharmony_ci#define FUSE_ASYNC_READ		(1 << 0)
3746881f68fSopenharmony_ci#define FUSE_POSIX_LOCKS	(1 << 1)
3756881f68fSopenharmony_ci#define FUSE_FILE_OPS		(1 << 2)
3766881f68fSopenharmony_ci#define FUSE_ATOMIC_O_TRUNC	(1 << 3)
3776881f68fSopenharmony_ci#define FUSE_EXPORT_SUPPORT	(1 << 4)
3786881f68fSopenharmony_ci#define FUSE_BIG_WRITES		(1 << 5)
3796881f68fSopenharmony_ci#define FUSE_DONT_MASK		(1 << 6)
3806881f68fSopenharmony_ci#define FUSE_SPLICE_WRITE	(1 << 7)
3816881f68fSopenharmony_ci#define FUSE_SPLICE_MOVE	(1 << 8)
3826881f68fSopenharmony_ci#define FUSE_SPLICE_READ	(1 << 9)
3836881f68fSopenharmony_ci#define FUSE_FLOCK_LOCKS	(1 << 10)
3846881f68fSopenharmony_ci#define FUSE_HAS_IOCTL_DIR	(1 << 11)
3856881f68fSopenharmony_ci#define FUSE_AUTO_INVAL_DATA	(1 << 12)
3866881f68fSopenharmony_ci#define FUSE_DO_READDIRPLUS	(1 << 13)
3876881f68fSopenharmony_ci#define FUSE_READDIRPLUS_AUTO	(1 << 14)
3886881f68fSopenharmony_ci#define FUSE_ASYNC_DIO		(1 << 15)
3896881f68fSopenharmony_ci#define FUSE_WRITEBACK_CACHE	(1 << 16)
3906881f68fSopenharmony_ci#define FUSE_NO_OPEN_SUPPORT	(1 << 17)
3916881f68fSopenharmony_ci#define FUSE_PARALLEL_DIROPS    (1 << 18)
3926881f68fSopenharmony_ci#define FUSE_HANDLE_KILLPRIV	(1 << 19)
3936881f68fSopenharmony_ci#define FUSE_POSIX_ACL		(1 << 20)
3946881f68fSopenharmony_ci#define FUSE_ABORT_ERROR	(1 << 21)
3956881f68fSopenharmony_ci#define FUSE_MAX_PAGES		(1 << 22)
3966881f68fSopenharmony_ci#define FUSE_CACHE_SYMLINKS	(1 << 23)
3976881f68fSopenharmony_ci#define FUSE_NO_OPENDIR_SUPPORT (1 << 24)
3986881f68fSopenharmony_ci#define FUSE_EXPLICIT_INVAL_DATA (1 << 25)
3996881f68fSopenharmony_ci#define FUSE_MAP_ALIGNMENT	(1 << 26)
4006881f68fSopenharmony_ci#define FUSE_SUBMOUNTS		(1 << 27)
4016881f68fSopenharmony_ci#define FUSE_HANDLE_KILLPRIV_V2	(1 << 28)
4026881f68fSopenharmony_ci#define FUSE_SETXATTR_EXT	(1 << 29)
4036881f68fSopenharmony_ci#define FUSE_INIT_EXT		(1 << 30)
4046881f68fSopenharmony_ci#define FUSE_INIT_RESERVED	(1 << 31)
4056881f68fSopenharmony_ci/* bits 32..63 get shifted down 32 bits into the flags2 field */
4066881f68fSopenharmony_ci#define FUSE_SECURITY_CTX	(1ULL << 32)
4076881f68fSopenharmony_ci#define FUSE_HAS_INODE_DAX	(1ULL << 33)
4086881f68fSopenharmony_ci#define FUSE_CREATE_SUPP_GROUP	(1ULL << 34)
4096881f68fSopenharmony_ci
4106881f68fSopenharmony_ci/**
4116881f68fSopenharmony_ci * CUSE INIT request/reply flags
4126881f68fSopenharmony_ci *
4136881f68fSopenharmony_ci * CUSE_UNRESTRICTED_IOCTL:  use unrestricted ioctl
4146881f68fSopenharmony_ci */
4156881f68fSopenharmony_ci#define CUSE_UNRESTRICTED_IOCTL	(1 << 0)
4166881f68fSopenharmony_ci
4176881f68fSopenharmony_ci/**
4186881f68fSopenharmony_ci * Release flags
4196881f68fSopenharmony_ci */
4206881f68fSopenharmony_ci#define FUSE_RELEASE_FLUSH	(1 << 0)
4216881f68fSopenharmony_ci#define FUSE_RELEASE_FLOCK_UNLOCK	(1 << 1)
4226881f68fSopenharmony_ci
4236881f68fSopenharmony_ci/**
4246881f68fSopenharmony_ci * Getattr flags
4256881f68fSopenharmony_ci */
4266881f68fSopenharmony_ci#define FUSE_GETATTR_FH		(1 << 0)
4276881f68fSopenharmony_ci
4286881f68fSopenharmony_ci/**
4296881f68fSopenharmony_ci * Lock flags
4306881f68fSopenharmony_ci */
4316881f68fSopenharmony_ci#define FUSE_LK_FLOCK		(1 << 0)
4326881f68fSopenharmony_ci
4336881f68fSopenharmony_ci/**
4346881f68fSopenharmony_ci * WRITE flags
4356881f68fSopenharmony_ci *
4366881f68fSopenharmony_ci * FUSE_WRITE_CACHE: delayed write from page cache, file handle is guessed
4376881f68fSopenharmony_ci * FUSE_WRITE_LOCKOWNER: lock_owner field is valid
4386881f68fSopenharmony_ci * FUSE_WRITE_KILL_SUIDGID: kill suid and sgid bits
4396881f68fSopenharmony_ci */
4406881f68fSopenharmony_ci#define FUSE_WRITE_CACHE	(1 << 0)
4416881f68fSopenharmony_ci#define FUSE_WRITE_LOCKOWNER	(1 << 1)
4426881f68fSopenharmony_ci#define FUSE_WRITE_KILL_SUIDGID (1 << 2)
4436881f68fSopenharmony_ci
4446881f68fSopenharmony_ci/* Obsolete alias; this flag implies killing suid/sgid only. */
4456881f68fSopenharmony_ci#define FUSE_WRITE_KILL_PRIV	FUSE_WRITE_KILL_SUIDGID
4466881f68fSopenharmony_ci
4476881f68fSopenharmony_ci/**
4486881f68fSopenharmony_ci * Read flags
4496881f68fSopenharmony_ci */
4506881f68fSopenharmony_ci#define FUSE_READ_LOCKOWNER	(1 << 1)
4516881f68fSopenharmony_ci
4526881f68fSopenharmony_ci/**
4536881f68fSopenharmony_ci * Ioctl flags
4546881f68fSopenharmony_ci *
4556881f68fSopenharmony_ci * FUSE_IOCTL_COMPAT: 32bit compat ioctl on 64bit machine
4566881f68fSopenharmony_ci * FUSE_IOCTL_UNRESTRICTED: not restricted to well-formed ioctls, retry allowed
4576881f68fSopenharmony_ci * FUSE_IOCTL_RETRY: retry with new iovecs
4586881f68fSopenharmony_ci * FUSE_IOCTL_32BIT: 32bit ioctl
4596881f68fSopenharmony_ci * FUSE_IOCTL_DIR: is a directory
4606881f68fSopenharmony_ci * FUSE_IOCTL_COMPAT_X32: x32 compat ioctl on 64bit machine (64bit time_t)
4616881f68fSopenharmony_ci *
4626881f68fSopenharmony_ci * FUSE_IOCTL_MAX_IOV: maximum of in_iovecs + out_iovecs
4636881f68fSopenharmony_ci */
4646881f68fSopenharmony_ci#define FUSE_IOCTL_COMPAT	(1 << 0)
4656881f68fSopenharmony_ci#define FUSE_IOCTL_UNRESTRICTED	(1 << 1)
4666881f68fSopenharmony_ci#define FUSE_IOCTL_RETRY	(1 << 2)
4676881f68fSopenharmony_ci#define FUSE_IOCTL_32BIT	(1 << 3)
4686881f68fSopenharmony_ci#define FUSE_IOCTL_DIR		(1 << 4)
4696881f68fSopenharmony_ci#define FUSE_IOCTL_COMPAT_X32	(1 << 5)
4706881f68fSopenharmony_ci
4716881f68fSopenharmony_ci#define FUSE_IOCTL_MAX_IOV	256
4726881f68fSopenharmony_ci
4736881f68fSopenharmony_ci/**
4746881f68fSopenharmony_ci * Poll flags
4756881f68fSopenharmony_ci *
4766881f68fSopenharmony_ci * FUSE_POLL_SCHEDULE_NOTIFY: request poll notify
4776881f68fSopenharmony_ci */
4786881f68fSopenharmony_ci#define FUSE_POLL_SCHEDULE_NOTIFY (1 << 0)
4796881f68fSopenharmony_ci
4806881f68fSopenharmony_ci/**
4816881f68fSopenharmony_ci * Fsync flags
4826881f68fSopenharmony_ci *
4836881f68fSopenharmony_ci * FUSE_FSYNC_FDATASYNC: Sync data only, not metadata
4846881f68fSopenharmony_ci */
4856881f68fSopenharmony_ci#define FUSE_FSYNC_FDATASYNC	(1 << 0)
4866881f68fSopenharmony_ci
4876881f68fSopenharmony_ci/**
4886881f68fSopenharmony_ci * fuse_attr flags
4896881f68fSopenharmony_ci *
4906881f68fSopenharmony_ci * FUSE_ATTR_SUBMOUNT: Object is a submount root
4916881f68fSopenharmony_ci * FUSE_ATTR_DAX: Enable DAX for this file in per inode DAX mode
4926881f68fSopenharmony_ci */
4936881f68fSopenharmony_ci#define FUSE_ATTR_SUBMOUNT      (1 << 0)
4946881f68fSopenharmony_ci#define FUSE_ATTR_DAX		(1 << 1)
4956881f68fSopenharmony_ci
4966881f68fSopenharmony_ci/**
4976881f68fSopenharmony_ci * Open flags
4986881f68fSopenharmony_ci * FUSE_OPEN_KILL_SUIDGID: Kill suid and sgid if executable
4996881f68fSopenharmony_ci */
5006881f68fSopenharmony_ci#define FUSE_OPEN_KILL_SUIDGID	(1 << 0)
5016881f68fSopenharmony_ci
5026881f68fSopenharmony_ci/**
5036881f68fSopenharmony_ci * setxattr flags
5046881f68fSopenharmony_ci * FUSE_SETXATTR_ACL_KILL_SGID: Clear SGID when system.posix_acl_access is set
5056881f68fSopenharmony_ci */
5066881f68fSopenharmony_ci#define FUSE_SETXATTR_ACL_KILL_SGID	(1 << 0)
5076881f68fSopenharmony_ci
5086881f68fSopenharmony_ci/**
5096881f68fSopenharmony_ci * notify_inval_entry flags
5106881f68fSopenharmony_ci * FUSE_EXPIRE_ONLY
5116881f68fSopenharmony_ci */
5126881f68fSopenharmony_ci#define FUSE_EXPIRE_ONLY		(1 << 0)
5136881f68fSopenharmony_ci
5146881f68fSopenharmony_ci/**
5156881f68fSopenharmony_ci * extension type
5166881f68fSopenharmony_ci * FUSE_MAX_NR_SECCTX: maximum value of &fuse_secctx_header.nr_secctx
5176881f68fSopenharmony_ci * FUSE_EXT_GROUPS: &fuse_supp_groups extension
5186881f68fSopenharmony_ci */
5196881f68fSopenharmony_cienum fuse_ext_type {
5206881f68fSopenharmony_ci	/* Types 0..31 are reserved for fuse_secctx_header */
5216881f68fSopenharmony_ci	FUSE_MAX_NR_SECCTX	= 31,
5226881f68fSopenharmony_ci	FUSE_EXT_GROUPS		= 32,
5236881f68fSopenharmony_ci};
5246881f68fSopenharmony_ci
5256881f68fSopenharmony_cienum fuse_opcode {
5266881f68fSopenharmony_ci	FUSE_LOOKUP		= 1,
5276881f68fSopenharmony_ci	FUSE_FORGET		= 2,  /* no reply */
5286881f68fSopenharmony_ci	FUSE_GETATTR		= 3,
5296881f68fSopenharmony_ci	FUSE_SETATTR		= 4,
5306881f68fSopenharmony_ci	FUSE_READLINK		= 5,
5316881f68fSopenharmony_ci	FUSE_SYMLINK		= 6,
5326881f68fSopenharmony_ci	FUSE_MKNOD		= 8,
5336881f68fSopenharmony_ci	FUSE_MKDIR		= 9,
5346881f68fSopenharmony_ci	FUSE_UNLINK		= 10,
5356881f68fSopenharmony_ci	FUSE_RMDIR		= 11,
5366881f68fSopenharmony_ci	FUSE_RENAME		= 12,
5376881f68fSopenharmony_ci	FUSE_LINK		= 13,
5386881f68fSopenharmony_ci	FUSE_OPEN		= 14,
5396881f68fSopenharmony_ci	FUSE_READ		= 15,
5406881f68fSopenharmony_ci	FUSE_WRITE		= 16,
5416881f68fSopenharmony_ci	FUSE_STATFS		= 17,
5426881f68fSopenharmony_ci	FUSE_RELEASE		= 18,
5436881f68fSopenharmony_ci	FUSE_FSYNC		= 20,
5446881f68fSopenharmony_ci	FUSE_SETXATTR		= 21,
5456881f68fSopenharmony_ci	FUSE_GETXATTR		= 22,
5466881f68fSopenharmony_ci	FUSE_LISTXATTR		= 23,
5476881f68fSopenharmony_ci	FUSE_REMOVEXATTR	= 24,
5486881f68fSopenharmony_ci	FUSE_FLUSH		= 25,
5496881f68fSopenharmony_ci	FUSE_INIT		= 26,
5506881f68fSopenharmony_ci	FUSE_OPENDIR		= 27,
5516881f68fSopenharmony_ci	FUSE_READDIR		= 28,
5526881f68fSopenharmony_ci	FUSE_RELEASEDIR		= 29,
5536881f68fSopenharmony_ci	FUSE_FSYNCDIR		= 30,
5546881f68fSopenharmony_ci	FUSE_GETLK		= 31,
5556881f68fSopenharmony_ci	FUSE_SETLK		= 32,
5566881f68fSopenharmony_ci	FUSE_SETLKW		= 33,
5576881f68fSopenharmony_ci	FUSE_ACCESS		= 34,
5586881f68fSopenharmony_ci	FUSE_CREATE		= 35,
5596881f68fSopenharmony_ci	FUSE_INTERRUPT		= 36,
5606881f68fSopenharmony_ci	FUSE_BMAP		= 37,
5616881f68fSopenharmony_ci	FUSE_DESTROY		= 38,
5626881f68fSopenharmony_ci	FUSE_IOCTL		= 39,
5636881f68fSopenharmony_ci	FUSE_POLL		= 40,
5646881f68fSopenharmony_ci	FUSE_NOTIFY_REPLY	= 41,
5656881f68fSopenharmony_ci	FUSE_BATCH_FORGET	= 42,
5666881f68fSopenharmony_ci	FUSE_FALLOCATE		= 43,
5676881f68fSopenharmony_ci	FUSE_READDIRPLUS	= 44,
5686881f68fSopenharmony_ci	FUSE_RENAME2		= 45,
5696881f68fSopenharmony_ci	FUSE_LSEEK		= 46,
5706881f68fSopenharmony_ci	FUSE_COPY_FILE_RANGE	= 47,
5716881f68fSopenharmony_ci	FUSE_SETUPMAPPING	= 48,
5726881f68fSopenharmony_ci	FUSE_REMOVEMAPPING	= 49,
5736881f68fSopenharmony_ci	FUSE_SYNCFS		= 50,
5746881f68fSopenharmony_ci	FUSE_TMPFILE		= 51,
5756881f68fSopenharmony_ci
5766881f68fSopenharmony_ci	/* CUSE specific operations */
5776881f68fSopenharmony_ci	CUSE_INIT		= 4096,
5786881f68fSopenharmony_ci
5796881f68fSopenharmony_ci	/* Reserved opcodes: helpful to detect structure endian-ness */
5806881f68fSopenharmony_ci	CUSE_INIT_BSWAP_RESERVED	= 1048576,	/* CUSE_INIT << 8 */
5816881f68fSopenharmony_ci	FUSE_INIT_BSWAP_RESERVED	= 436207616,	/* FUSE_INIT << 24 */
5826881f68fSopenharmony_ci};
5836881f68fSopenharmony_ci
5846881f68fSopenharmony_cienum fuse_notify_code {
5856881f68fSopenharmony_ci	FUSE_NOTIFY_POLL   = 1,
5866881f68fSopenharmony_ci	FUSE_NOTIFY_INVAL_INODE = 2,
5876881f68fSopenharmony_ci	FUSE_NOTIFY_INVAL_ENTRY = 3,
5886881f68fSopenharmony_ci	FUSE_NOTIFY_STORE = 4,
5896881f68fSopenharmony_ci	FUSE_NOTIFY_RETRIEVE = 5,
5906881f68fSopenharmony_ci	FUSE_NOTIFY_DELETE = 6,
5916881f68fSopenharmony_ci	FUSE_NOTIFY_CODE_MAX,
5926881f68fSopenharmony_ci};
5936881f68fSopenharmony_ci
5946881f68fSopenharmony_ci/* The read buffer is required to be at least 8k, but may be much larger */
5956881f68fSopenharmony_ci#define FUSE_MIN_READ_BUFFER 8192
5966881f68fSopenharmony_ci
5976881f68fSopenharmony_ci#define FUSE_COMPAT_ENTRY_OUT_SIZE 120
5986881f68fSopenharmony_ci
5996881f68fSopenharmony_cistruct fuse_entry_out {
6006881f68fSopenharmony_ci	uint64_t	nodeid;		/* Inode ID */
6016881f68fSopenharmony_ci	uint64_t	generation;	/* Inode generation: nodeid:gen must
6026881f68fSopenharmony_ci					   be unique for the fs's lifetime */
6036881f68fSopenharmony_ci	uint64_t	entry_valid;	/* Cache timeout for the name */
6046881f68fSopenharmony_ci	uint64_t	attr_valid;	/* Cache timeout for the attributes */
6056881f68fSopenharmony_ci	uint32_t	entry_valid_nsec;
6066881f68fSopenharmony_ci	uint32_t	attr_valid_nsec;
6076881f68fSopenharmony_ci	struct fuse_attr attr;
6086881f68fSopenharmony_ci};
6096881f68fSopenharmony_ci
6106881f68fSopenharmony_cistruct fuse_forget_in {
6116881f68fSopenharmony_ci	uint64_t	nlookup;
6126881f68fSopenharmony_ci};
6136881f68fSopenharmony_ci
6146881f68fSopenharmony_cistruct fuse_forget_one {
6156881f68fSopenharmony_ci	uint64_t	nodeid;
6166881f68fSopenharmony_ci	uint64_t	nlookup;
6176881f68fSopenharmony_ci};
6186881f68fSopenharmony_ci
6196881f68fSopenharmony_cistruct fuse_batch_forget_in {
6206881f68fSopenharmony_ci	uint32_t	count;
6216881f68fSopenharmony_ci	uint32_t	dummy;
6226881f68fSopenharmony_ci};
6236881f68fSopenharmony_ci
6246881f68fSopenharmony_cistruct fuse_getattr_in {
6256881f68fSopenharmony_ci	uint32_t	getattr_flags;
6266881f68fSopenharmony_ci	uint32_t	dummy;
6276881f68fSopenharmony_ci	uint64_t	fh;
6286881f68fSopenharmony_ci};
6296881f68fSopenharmony_ci
6306881f68fSopenharmony_ci#define FUSE_COMPAT_ATTR_OUT_SIZE 96
6316881f68fSopenharmony_ci
6326881f68fSopenharmony_cistruct fuse_attr_out {
6336881f68fSopenharmony_ci	uint64_t	attr_valid;	/* Cache timeout for the attributes */
6346881f68fSopenharmony_ci	uint32_t	attr_valid_nsec;
6356881f68fSopenharmony_ci	uint32_t	dummy;
6366881f68fSopenharmony_ci	struct fuse_attr attr;
6376881f68fSopenharmony_ci};
6386881f68fSopenharmony_ci
6396881f68fSopenharmony_ci#define FUSE_COMPAT_MKNOD_IN_SIZE 8
6406881f68fSopenharmony_ci
6416881f68fSopenharmony_cistruct fuse_mknod_in {
6426881f68fSopenharmony_ci	uint32_t	mode;
6436881f68fSopenharmony_ci	uint32_t	rdev;
6446881f68fSopenharmony_ci	uint32_t	umask;
6456881f68fSopenharmony_ci	uint32_t	padding;
6466881f68fSopenharmony_ci};
6476881f68fSopenharmony_ci
6486881f68fSopenharmony_cistruct fuse_mkdir_in {
6496881f68fSopenharmony_ci	uint32_t	mode;
6506881f68fSopenharmony_ci	uint32_t	umask;
6516881f68fSopenharmony_ci};
6526881f68fSopenharmony_ci
6536881f68fSopenharmony_cistruct fuse_rename_in {
6546881f68fSopenharmony_ci	uint64_t	newdir;
6556881f68fSopenharmony_ci};
6566881f68fSopenharmony_ci
6576881f68fSopenharmony_cistruct fuse_rename2_in {
6586881f68fSopenharmony_ci	uint64_t	newdir;
6596881f68fSopenharmony_ci	uint32_t	flags;
6606881f68fSopenharmony_ci	uint32_t	padding;
6616881f68fSopenharmony_ci};
6626881f68fSopenharmony_ci
6636881f68fSopenharmony_cistruct fuse_link_in {
6646881f68fSopenharmony_ci	uint64_t	oldnodeid;
6656881f68fSopenharmony_ci};
6666881f68fSopenharmony_ci
6676881f68fSopenharmony_cistruct fuse_setattr_in {
6686881f68fSopenharmony_ci	uint32_t	valid;
6696881f68fSopenharmony_ci	uint32_t	padding;
6706881f68fSopenharmony_ci	uint64_t	fh;
6716881f68fSopenharmony_ci	uint64_t	size;
6726881f68fSopenharmony_ci	uint64_t	lock_owner;
6736881f68fSopenharmony_ci	uint64_t	atime;
6746881f68fSopenharmony_ci	uint64_t	mtime;
6756881f68fSopenharmony_ci	uint64_t	ctime;
6766881f68fSopenharmony_ci	uint32_t	atimensec;
6776881f68fSopenharmony_ci	uint32_t	mtimensec;
6786881f68fSopenharmony_ci	uint32_t	ctimensec;
6796881f68fSopenharmony_ci	uint32_t	mode;
6806881f68fSopenharmony_ci	uint32_t	unused4;
6816881f68fSopenharmony_ci	uint32_t	uid;
6826881f68fSopenharmony_ci	uint32_t	gid;
6836881f68fSopenharmony_ci	uint32_t	unused5;
6846881f68fSopenharmony_ci};
6856881f68fSopenharmony_ci
6866881f68fSopenharmony_cistruct fuse_open_in {
6876881f68fSopenharmony_ci	uint32_t	flags;
6886881f68fSopenharmony_ci	uint32_t	open_flags;	/* FUSE_OPEN_... */
6896881f68fSopenharmony_ci};
6906881f68fSopenharmony_ci
6916881f68fSopenharmony_cistruct fuse_create_in {
6926881f68fSopenharmony_ci	uint32_t	flags;
6936881f68fSopenharmony_ci	uint32_t	mode;
6946881f68fSopenharmony_ci	uint32_t	umask;
6956881f68fSopenharmony_ci	uint32_t	open_flags;	/* FUSE_OPEN_... */
6966881f68fSopenharmony_ci};
6976881f68fSopenharmony_ci
6986881f68fSopenharmony_cistruct fuse_open_out {
6996881f68fSopenharmony_ci	uint64_t	fh;
7006881f68fSopenharmony_ci	uint32_t	open_flags;
7016881f68fSopenharmony_ci	uint32_t	padding;
7026881f68fSopenharmony_ci};
7036881f68fSopenharmony_ci
7046881f68fSopenharmony_cistruct fuse_release_in {
7056881f68fSopenharmony_ci	uint64_t	fh;
7066881f68fSopenharmony_ci	uint32_t	flags;
7076881f68fSopenharmony_ci	uint32_t	release_flags;
7086881f68fSopenharmony_ci	uint64_t	lock_owner;
7096881f68fSopenharmony_ci};
7106881f68fSopenharmony_ci
7116881f68fSopenharmony_cistruct fuse_flush_in {
7126881f68fSopenharmony_ci	uint64_t	fh;
7136881f68fSopenharmony_ci	uint32_t	unused;
7146881f68fSopenharmony_ci	uint32_t	padding;
7156881f68fSopenharmony_ci	uint64_t	lock_owner;
7166881f68fSopenharmony_ci};
7176881f68fSopenharmony_ci
7186881f68fSopenharmony_cistruct fuse_read_in {
7196881f68fSopenharmony_ci	uint64_t	fh;
7206881f68fSopenharmony_ci	uint64_t	offset;
7216881f68fSopenharmony_ci	uint32_t	size;
7226881f68fSopenharmony_ci	uint32_t	read_flags;
7236881f68fSopenharmony_ci	uint64_t	lock_owner;
7246881f68fSopenharmony_ci	uint32_t	flags;
7256881f68fSopenharmony_ci	uint32_t	padding;
7266881f68fSopenharmony_ci};
7276881f68fSopenharmony_ci
7286881f68fSopenharmony_ci#define FUSE_COMPAT_WRITE_IN_SIZE 24
7296881f68fSopenharmony_ci
7306881f68fSopenharmony_cistruct fuse_write_in {
7316881f68fSopenharmony_ci	uint64_t	fh;
7326881f68fSopenharmony_ci	uint64_t	offset;
7336881f68fSopenharmony_ci	uint32_t	size;
7346881f68fSopenharmony_ci	uint32_t	write_flags;
7356881f68fSopenharmony_ci	uint64_t	lock_owner;
7366881f68fSopenharmony_ci	uint32_t	flags;
7376881f68fSopenharmony_ci	uint32_t	padding;
7386881f68fSopenharmony_ci};
7396881f68fSopenharmony_ci
7406881f68fSopenharmony_cistruct fuse_write_out {
7416881f68fSopenharmony_ci	uint32_t	size;
7426881f68fSopenharmony_ci	uint32_t	padding;
7436881f68fSopenharmony_ci};
7446881f68fSopenharmony_ci
7456881f68fSopenharmony_ci#define FUSE_COMPAT_STATFS_SIZE 48
7466881f68fSopenharmony_ci
7476881f68fSopenharmony_cistruct fuse_statfs_out {
7486881f68fSopenharmony_ci	struct fuse_kstatfs st;
7496881f68fSopenharmony_ci};
7506881f68fSopenharmony_ci
7516881f68fSopenharmony_cistruct fuse_fsync_in {
7526881f68fSopenharmony_ci	uint64_t	fh;
7536881f68fSopenharmony_ci	uint32_t	fsync_flags;
7546881f68fSopenharmony_ci	uint32_t	padding;
7556881f68fSopenharmony_ci};
7566881f68fSopenharmony_ci
7576881f68fSopenharmony_ci#define FUSE_COMPAT_SETXATTR_IN_SIZE 8
7586881f68fSopenharmony_ci
7596881f68fSopenharmony_cistruct fuse_setxattr_in {
7606881f68fSopenharmony_ci	uint32_t	size;
7616881f68fSopenharmony_ci	uint32_t	flags;
7626881f68fSopenharmony_ci	uint32_t	setxattr_flags;
7636881f68fSopenharmony_ci	uint32_t	padding;
7646881f68fSopenharmony_ci};
7656881f68fSopenharmony_ci
7666881f68fSopenharmony_cistruct fuse_getxattr_in {
7676881f68fSopenharmony_ci	uint32_t	size;
7686881f68fSopenharmony_ci	uint32_t	padding;
7696881f68fSopenharmony_ci};
7706881f68fSopenharmony_ci
7716881f68fSopenharmony_cistruct fuse_getxattr_out {
7726881f68fSopenharmony_ci	uint32_t	size;
7736881f68fSopenharmony_ci	uint32_t	padding;
7746881f68fSopenharmony_ci};
7756881f68fSopenharmony_ci
7766881f68fSopenharmony_cistruct fuse_lk_in {
7776881f68fSopenharmony_ci	uint64_t	fh;
7786881f68fSopenharmony_ci	uint64_t	owner;
7796881f68fSopenharmony_ci	struct fuse_file_lock lk;
7806881f68fSopenharmony_ci	uint32_t	lk_flags;
7816881f68fSopenharmony_ci	uint32_t	padding;
7826881f68fSopenharmony_ci};
7836881f68fSopenharmony_ci
7846881f68fSopenharmony_cistruct fuse_lk_out {
7856881f68fSopenharmony_ci	struct fuse_file_lock lk;
7866881f68fSopenharmony_ci};
7876881f68fSopenharmony_ci
7886881f68fSopenharmony_cistruct fuse_access_in {
7896881f68fSopenharmony_ci	uint32_t	mask;
7906881f68fSopenharmony_ci	uint32_t	padding;
7916881f68fSopenharmony_ci};
7926881f68fSopenharmony_ci
7936881f68fSopenharmony_cistruct fuse_init_in {
7946881f68fSopenharmony_ci	uint32_t	major;
7956881f68fSopenharmony_ci	uint32_t	minor;
7966881f68fSopenharmony_ci	uint32_t	max_readahead;
7976881f68fSopenharmony_ci	uint32_t	flags;
7986881f68fSopenharmony_ci	uint32_t	flags2;
7996881f68fSopenharmony_ci	uint32_t	unused[11];
8006881f68fSopenharmony_ci};
8016881f68fSopenharmony_ci
8026881f68fSopenharmony_ci#define FUSE_COMPAT_INIT_OUT_SIZE 8
8036881f68fSopenharmony_ci#define FUSE_COMPAT_22_INIT_OUT_SIZE 24
8046881f68fSopenharmony_ci
8056881f68fSopenharmony_cistruct fuse_init_out {
8066881f68fSopenharmony_ci	uint32_t	major;
8076881f68fSopenharmony_ci	uint32_t	minor;
8086881f68fSopenharmony_ci	uint32_t	max_readahead;
8096881f68fSopenharmony_ci	uint32_t	flags;
8106881f68fSopenharmony_ci	uint16_t	max_background;
8116881f68fSopenharmony_ci	uint16_t	congestion_threshold;
8126881f68fSopenharmony_ci	uint32_t	max_write;
8136881f68fSopenharmony_ci	uint32_t	time_gran;
8146881f68fSopenharmony_ci	uint16_t	max_pages;
8156881f68fSopenharmony_ci	uint16_t	map_alignment;
8166881f68fSopenharmony_ci	uint32_t	flags2;
8176881f68fSopenharmony_ci	uint32_t	unused[7];
8186881f68fSopenharmony_ci};
8196881f68fSopenharmony_ci
8206881f68fSopenharmony_ci#define CUSE_INIT_INFO_MAX 4096
8216881f68fSopenharmony_ci
8226881f68fSopenharmony_cistruct cuse_init_in {
8236881f68fSopenharmony_ci	uint32_t	major;
8246881f68fSopenharmony_ci	uint32_t	minor;
8256881f68fSopenharmony_ci	uint32_t	unused;
8266881f68fSopenharmony_ci	uint32_t	flags;
8276881f68fSopenharmony_ci};
8286881f68fSopenharmony_ci
8296881f68fSopenharmony_cistruct cuse_init_out {
8306881f68fSopenharmony_ci	uint32_t	major;
8316881f68fSopenharmony_ci	uint32_t	minor;
8326881f68fSopenharmony_ci	uint32_t	unused;
8336881f68fSopenharmony_ci	uint32_t	flags;
8346881f68fSopenharmony_ci	uint32_t	max_read;
8356881f68fSopenharmony_ci	uint32_t	max_write;
8366881f68fSopenharmony_ci	uint32_t	dev_major;		/* chardev major */
8376881f68fSopenharmony_ci	uint32_t	dev_minor;		/* chardev minor */
8386881f68fSopenharmony_ci	uint32_t	spare[10];
8396881f68fSopenharmony_ci};
8406881f68fSopenharmony_ci
8416881f68fSopenharmony_cistruct fuse_interrupt_in {
8426881f68fSopenharmony_ci	uint64_t	unique;
8436881f68fSopenharmony_ci};
8446881f68fSopenharmony_ci
8456881f68fSopenharmony_cistruct fuse_bmap_in {
8466881f68fSopenharmony_ci	uint64_t	block;
8476881f68fSopenharmony_ci	uint32_t	blocksize;
8486881f68fSopenharmony_ci	uint32_t	padding;
8496881f68fSopenharmony_ci};
8506881f68fSopenharmony_ci
8516881f68fSopenharmony_cistruct fuse_bmap_out {
8526881f68fSopenharmony_ci	uint64_t	block;
8536881f68fSopenharmony_ci};
8546881f68fSopenharmony_ci
8556881f68fSopenharmony_cistruct fuse_ioctl_in {
8566881f68fSopenharmony_ci	uint64_t	fh;
8576881f68fSopenharmony_ci	uint32_t	flags;
8586881f68fSopenharmony_ci	uint32_t	cmd;
8596881f68fSopenharmony_ci	uint64_t	arg;
8606881f68fSopenharmony_ci	uint32_t	in_size;
8616881f68fSopenharmony_ci	uint32_t	out_size;
8626881f68fSopenharmony_ci};
8636881f68fSopenharmony_ci
8646881f68fSopenharmony_cistruct fuse_ioctl_iovec {
8656881f68fSopenharmony_ci	uint64_t	base;
8666881f68fSopenharmony_ci	uint64_t	len;
8676881f68fSopenharmony_ci};
8686881f68fSopenharmony_ci
8696881f68fSopenharmony_cistruct fuse_ioctl_out {
8706881f68fSopenharmony_ci	int32_t		result;
8716881f68fSopenharmony_ci	uint32_t	flags;
8726881f68fSopenharmony_ci	uint32_t	in_iovs;
8736881f68fSopenharmony_ci	uint32_t	out_iovs;
8746881f68fSopenharmony_ci};
8756881f68fSopenharmony_ci
8766881f68fSopenharmony_cistruct fuse_poll_in {
8776881f68fSopenharmony_ci	uint64_t	fh;
8786881f68fSopenharmony_ci	uint64_t	kh;
8796881f68fSopenharmony_ci	uint32_t	flags;
8806881f68fSopenharmony_ci	uint32_t	events;
8816881f68fSopenharmony_ci};
8826881f68fSopenharmony_ci
8836881f68fSopenharmony_cistruct fuse_poll_out {
8846881f68fSopenharmony_ci	uint32_t	revents;
8856881f68fSopenharmony_ci	uint32_t	padding;
8866881f68fSopenharmony_ci};
8876881f68fSopenharmony_ci
8886881f68fSopenharmony_cistruct fuse_notify_poll_wakeup_out {
8896881f68fSopenharmony_ci	uint64_t	kh;
8906881f68fSopenharmony_ci};
8916881f68fSopenharmony_ci
8926881f68fSopenharmony_cistruct fuse_fallocate_in {
8936881f68fSopenharmony_ci	uint64_t	fh;
8946881f68fSopenharmony_ci	uint64_t	offset;
8956881f68fSopenharmony_ci	uint64_t	length;
8966881f68fSopenharmony_ci	uint32_t	mode;
8976881f68fSopenharmony_ci	uint32_t	padding;
8986881f68fSopenharmony_ci};
8996881f68fSopenharmony_ci
9006881f68fSopenharmony_cistruct fuse_in_header {
9016881f68fSopenharmony_ci	uint32_t	len;
9026881f68fSopenharmony_ci	uint32_t	opcode;
9036881f68fSopenharmony_ci	uint64_t	unique;
9046881f68fSopenharmony_ci	uint64_t	nodeid;
9056881f68fSopenharmony_ci	uint32_t	uid;
9066881f68fSopenharmony_ci	uint32_t	gid;
9076881f68fSopenharmony_ci	uint32_t	pid;
9086881f68fSopenharmony_ci	uint16_t	total_extlen; /* length of extensions in 8byte units */
9096881f68fSopenharmony_ci	uint16_t	padding;
9106881f68fSopenharmony_ci};
9116881f68fSopenharmony_ci
9126881f68fSopenharmony_cistruct fuse_out_header {
9136881f68fSopenharmony_ci	uint32_t	len;
9146881f68fSopenharmony_ci	int32_t		error;
9156881f68fSopenharmony_ci	uint64_t	unique;
9166881f68fSopenharmony_ci};
9176881f68fSopenharmony_ci
9186881f68fSopenharmony_cistruct fuse_dirent {
9196881f68fSopenharmony_ci	uint64_t	ino;
9206881f68fSopenharmony_ci	uint64_t	off;
9216881f68fSopenharmony_ci	uint32_t	namelen;
9226881f68fSopenharmony_ci	uint32_t	type;
9236881f68fSopenharmony_ci	char name[];
9246881f68fSopenharmony_ci};
9256881f68fSopenharmony_ci
9266881f68fSopenharmony_ci/* Align variable length records to 64bit boundary */
9276881f68fSopenharmony_ci#define FUSE_REC_ALIGN(x) \
9286881f68fSopenharmony_ci	(((x) + sizeof(uint64_t) - 1) & ~(sizeof(uint64_t) - 1))
9296881f68fSopenharmony_ci
9306881f68fSopenharmony_ci#define FUSE_NAME_OFFSET offsetof(struct fuse_dirent, name)
9316881f68fSopenharmony_ci#define FUSE_DIRENT_ALIGN(x) FUSE_REC_ALIGN(x)
9326881f68fSopenharmony_ci#define FUSE_DIRENT_SIZE(d) \
9336881f68fSopenharmony_ci	FUSE_DIRENT_ALIGN(FUSE_NAME_OFFSET + (d)->namelen)
9346881f68fSopenharmony_ci
9356881f68fSopenharmony_cistruct fuse_direntplus {
9366881f68fSopenharmony_ci	struct fuse_entry_out entry_out;
9376881f68fSopenharmony_ci	struct fuse_dirent dirent;
9386881f68fSopenharmony_ci};
9396881f68fSopenharmony_ci
9406881f68fSopenharmony_ci#define FUSE_NAME_OFFSET_DIRENTPLUS \
9416881f68fSopenharmony_ci	offsetof(struct fuse_direntplus, dirent.name)
9426881f68fSopenharmony_ci#define FUSE_DIRENTPLUS_SIZE(d) \
9436881f68fSopenharmony_ci	FUSE_DIRENT_ALIGN(FUSE_NAME_OFFSET_DIRENTPLUS + (d)->dirent.namelen)
9446881f68fSopenharmony_ci
9456881f68fSopenharmony_cistruct fuse_notify_inval_inode_out {
9466881f68fSopenharmony_ci	uint64_t	ino;
9476881f68fSopenharmony_ci	int64_t		off;
9486881f68fSopenharmony_ci	int64_t		len;
9496881f68fSopenharmony_ci};
9506881f68fSopenharmony_ci
9516881f68fSopenharmony_cistruct fuse_notify_inval_entry_out {
9526881f68fSopenharmony_ci	uint64_t	parent;
9536881f68fSopenharmony_ci	uint32_t	namelen;
9546881f68fSopenharmony_ci	uint32_t	flags;
9556881f68fSopenharmony_ci};
9566881f68fSopenharmony_ci
9576881f68fSopenharmony_cistruct fuse_notify_delete_out {
9586881f68fSopenharmony_ci	uint64_t	parent;
9596881f68fSopenharmony_ci	uint64_t	child;
9606881f68fSopenharmony_ci	uint32_t	namelen;
9616881f68fSopenharmony_ci	uint32_t	padding;
9626881f68fSopenharmony_ci};
9636881f68fSopenharmony_ci
9646881f68fSopenharmony_cistruct fuse_notify_store_out {
9656881f68fSopenharmony_ci	uint64_t	nodeid;
9666881f68fSopenharmony_ci	uint64_t	offset;
9676881f68fSopenharmony_ci	uint32_t	size;
9686881f68fSopenharmony_ci	uint32_t	padding;
9696881f68fSopenharmony_ci};
9706881f68fSopenharmony_ci
9716881f68fSopenharmony_cistruct fuse_notify_retrieve_out {
9726881f68fSopenharmony_ci	uint64_t	notify_unique;
9736881f68fSopenharmony_ci	uint64_t	nodeid;
9746881f68fSopenharmony_ci	uint64_t	offset;
9756881f68fSopenharmony_ci	uint32_t	size;
9766881f68fSopenharmony_ci	uint32_t	padding;
9776881f68fSopenharmony_ci};
9786881f68fSopenharmony_ci
9796881f68fSopenharmony_ci/* Matches the size of fuse_write_in */
9806881f68fSopenharmony_cistruct fuse_notify_retrieve_in {
9816881f68fSopenharmony_ci	uint64_t	dummy1;
9826881f68fSopenharmony_ci	uint64_t	offset;
9836881f68fSopenharmony_ci	uint32_t	size;
9846881f68fSopenharmony_ci	uint32_t	dummy2;
9856881f68fSopenharmony_ci	uint64_t	dummy3;
9866881f68fSopenharmony_ci	uint64_t	dummy4;
9876881f68fSopenharmony_ci};
9886881f68fSopenharmony_ci
9896881f68fSopenharmony_ci/* Device ioctls: */
9906881f68fSopenharmony_ci#define FUSE_DEV_IOC_MAGIC		229
9916881f68fSopenharmony_ci#define FUSE_DEV_IOC_CLONE		_IOR(FUSE_DEV_IOC_MAGIC, 0, uint32_t)
9926881f68fSopenharmony_ci
9936881f68fSopenharmony_cistruct fuse_lseek_in {
9946881f68fSopenharmony_ci	uint64_t	fh;
9956881f68fSopenharmony_ci	uint64_t	offset;
9966881f68fSopenharmony_ci	uint32_t	whence;
9976881f68fSopenharmony_ci	uint32_t	padding;
9986881f68fSopenharmony_ci};
9996881f68fSopenharmony_ci
10006881f68fSopenharmony_cistruct fuse_lseek_out {
10016881f68fSopenharmony_ci	uint64_t	offset;
10026881f68fSopenharmony_ci};
10036881f68fSopenharmony_ci
10046881f68fSopenharmony_cistruct fuse_copy_file_range_in {
10056881f68fSopenharmony_ci	uint64_t	fh_in;
10066881f68fSopenharmony_ci	uint64_t	off_in;
10076881f68fSopenharmony_ci	uint64_t	nodeid_out;
10086881f68fSopenharmony_ci	uint64_t	fh_out;
10096881f68fSopenharmony_ci	uint64_t	off_out;
10106881f68fSopenharmony_ci	uint64_t	len;
10116881f68fSopenharmony_ci	uint64_t	flags;
10126881f68fSopenharmony_ci};
10136881f68fSopenharmony_ci
10146881f68fSopenharmony_ci#define FUSE_SETUPMAPPING_FLAG_WRITE (1ull << 0)
10156881f68fSopenharmony_ci#define FUSE_SETUPMAPPING_FLAG_READ (1ull << 1)
10166881f68fSopenharmony_cistruct fuse_setupmapping_in {
10176881f68fSopenharmony_ci	/* An already open handle */
10186881f68fSopenharmony_ci	uint64_t	fh;
10196881f68fSopenharmony_ci	/* Offset into the file to start the mapping */
10206881f68fSopenharmony_ci	uint64_t	foffset;
10216881f68fSopenharmony_ci	/* Length of mapping required */
10226881f68fSopenharmony_ci	uint64_t	len;
10236881f68fSopenharmony_ci	/* Flags, FUSE_SETUPMAPPING_FLAG_* */
10246881f68fSopenharmony_ci	uint64_t	flags;
10256881f68fSopenharmony_ci	/* Offset in Memory Window */
10266881f68fSopenharmony_ci	uint64_t	moffset;
10276881f68fSopenharmony_ci};
10286881f68fSopenharmony_ci
10296881f68fSopenharmony_cistruct fuse_removemapping_in {
10306881f68fSopenharmony_ci	/* number of fuse_removemapping_one follows */
10316881f68fSopenharmony_ci	uint32_t        count;
10326881f68fSopenharmony_ci};
10336881f68fSopenharmony_ci
10346881f68fSopenharmony_cistruct fuse_removemapping_one {
10356881f68fSopenharmony_ci	/* Offset into the dax window start the unmapping */
10366881f68fSopenharmony_ci	uint64_t        moffset;
10376881f68fSopenharmony_ci	/* Length of mapping required */
10386881f68fSopenharmony_ci	uint64_t	len;
10396881f68fSopenharmony_ci};
10406881f68fSopenharmony_ci
10416881f68fSopenharmony_ci#define FUSE_REMOVEMAPPING_MAX_ENTRY   \
10426881f68fSopenharmony_ci		(PAGE_SIZE / sizeof(struct fuse_removemapping_one))
10436881f68fSopenharmony_ci
10446881f68fSopenharmony_cistruct fuse_syncfs_in {
10456881f68fSopenharmony_ci	uint64_t	padding;
10466881f68fSopenharmony_ci};
10476881f68fSopenharmony_ci
10486881f68fSopenharmony_ci/*
10496881f68fSopenharmony_ci * For each security context, send fuse_secctx with size of security context
10506881f68fSopenharmony_ci * fuse_secctx will be followed by security context name and this in turn
10516881f68fSopenharmony_ci * will be followed by actual context label.
10526881f68fSopenharmony_ci * fuse_secctx, name, context
10536881f68fSopenharmony_ci */
10546881f68fSopenharmony_cistruct fuse_secctx {
10556881f68fSopenharmony_ci	uint32_t	size;
10566881f68fSopenharmony_ci	uint32_t	padding;
10576881f68fSopenharmony_ci};
10586881f68fSopenharmony_ci
10596881f68fSopenharmony_ci/*
10606881f68fSopenharmony_ci * Contains the information about how many fuse_secctx structures are being
10616881f68fSopenharmony_ci * sent and what's the total size of all security contexts (including
10626881f68fSopenharmony_ci * size of fuse_secctx_header).
10636881f68fSopenharmony_ci *
10646881f68fSopenharmony_ci */
10656881f68fSopenharmony_cistruct fuse_secctx_header {
10666881f68fSopenharmony_ci	uint32_t	size;
10676881f68fSopenharmony_ci	uint32_t	nr_secctx;
10686881f68fSopenharmony_ci};
10696881f68fSopenharmony_ci
10706881f68fSopenharmony_ci/**
10716881f68fSopenharmony_ci * struct fuse_ext_header - extension header
10726881f68fSopenharmony_ci * @size: total size of this extension including this header
10736881f68fSopenharmony_ci * @type: type of extension
10746881f68fSopenharmony_ci *
10756881f68fSopenharmony_ci * This is made compatible with fuse_secctx_header by using type values >
10766881f68fSopenharmony_ci * FUSE_MAX_NR_SECCTX
10776881f68fSopenharmony_ci */
10786881f68fSopenharmony_cistruct fuse_ext_header {
10796881f68fSopenharmony_ci	uint32_t	size;
10806881f68fSopenharmony_ci	uint32_t	type;
10816881f68fSopenharmony_ci};
10826881f68fSopenharmony_ci
10836881f68fSopenharmony_ci/**
10846881f68fSopenharmony_ci * struct fuse_supp_groups - Supplementary group extension
10856881f68fSopenharmony_ci * @nr_groups: number of supplementary groups
10866881f68fSopenharmony_ci * @groups: flexible array of group IDs
10876881f68fSopenharmony_ci */
10886881f68fSopenharmony_cistruct fuse_supp_groups {
10896881f68fSopenharmony_ci	uint32_t	nr_groups;
10906881f68fSopenharmony_ci	uint32_t	groups[];
10916881f68fSopenharmony_ci};
10926881f68fSopenharmony_ci
10936881f68fSopenharmony_ci#endif /* _LINUX_FUSE_H */
1094