1 /* This file defines the kernel interface of FUSE */
4 This -- and only this -- header file may also be distributed under
5 the terms of the BSD Licence as follows:
7 Copyright (C) 2001-2006 Miklos Szeredi. All rights reserved.
9 Redistribution and use in source and binary forms, with or without
10 modification, are permitted provided that the following conditions
12 1. Redistributions of source code must retain the above copyright
13 notice, this list of conditions and the following disclaimer.
14 2. Redistributions in binary form must reproduce the above copyright
15 notice, this list of conditions and the following disclaimer in the
16 documentation and/or other materials provided with the distribution.
18 THIS SOFTWARE IS PROVIDED BY AUTHOR AND CONTRIBUTORS ``AS IS'' AND
19 ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
20 IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
21 ARE DISCLAIMED. IN NO EVENT SHALL AUTHOR OR CONTRIBUTORS BE LIABLE
22 FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
23 DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
24 OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
25 HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
26 LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
27 OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
31 /* RSC changed these lines */
33 #define __u64 uint64_t
34 #define __u32 uint32_t
37 /** Version number of this interface */
38 #define FUSE_KERNEL_VERSION 7
40 /** Minor version number of this interface */
41 #define FUSE_KERNEL_MINOR_VERSION 5
43 /** The node ID of the root inode */
44 #define FUSE_ROOT_ID 1
46 /** The major number of the fuse character device */
49 /** The minor number of the fuse character device */
50 #define FUSE_MINOR 229
52 /* Make sure all structures are padded to 64bit boundary, so 32bit
53 userspace works under 64bit kernels */
85 #define FATTR_MODE (1 << 0)
86 #define FATTR_UID (1 << 1)
87 #define FATTR_GID (1 << 2)
88 #define FATTR_SIZE (1 << 3)
89 #define FATTR_ATIME (1 << 4)
90 #define FATTR_MTIME (1 << 5)
91 #define FATTR_FH (1 << 6)
94 * Flags returned by the OPEN request
96 * FOPEN_DIRECT_IO: bypass page cache for this open file
97 * FOPEN_KEEP_CACHE: don't invalidate the data cache on open
99 #define FOPEN_DIRECT_IO (1 << 0)
100 #define FOPEN_KEEP_CACHE (1 << 1)
104 FUSE_FORGET = 2, /* no reply */
124 FUSE_REMOVEXATTR = 24,
129 FUSE_RELEASEDIR = 29,
135 /* The read buffer is required to be at least 8k, but may be much larger */
136 #define FUSE_MIN_READ_BUFFER 8192
138 struct fuse_entry_out {
139 __u64 nodeid; /* Inode ID */
140 __u64 generation; /* Inode generation: nodeid:gen must
141 be unique for the fs's lifetime */
142 __u64 entry_valid; /* Cache timeout for the name */
143 __u64 attr_valid; /* Cache timeout for the attributes */
144 __u32 entry_valid_nsec;
145 __u32 attr_valid_nsec;
146 struct fuse_attr attr;
149 struct fuse_forget_in {
153 struct fuse_attr_out {
154 __u64 attr_valid; /* Cache timeout for the attributes */
155 __u32 attr_valid_nsec;
157 struct fuse_attr attr;
160 struct fuse_mknod_in {
165 struct fuse_mkdir_in {
170 struct fuse_rename_in {
174 struct fuse_link_in {
178 struct fuse_setattr_in {
197 struct fuse_open_in {
202 struct fuse_open_out {
208 struct fuse_release_in {
214 struct fuse_flush_in {
220 struct fuse_read_in {
227 struct fuse_write_in {
234 struct fuse_write_out {
239 #define FUSE_COMPAT_STATFS_SIZE 48
241 struct fuse_statfs_out {
242 struct fuse_kstatfs st;
245 struct fuse_fsync_in {
251 struct fuse_setxattr_in {
256 struct fuse_getxattr_in {
261 struct fuse_getxattr_out {
266 struct fuse_access_in {
271 struct fuse_init_in {
276 struct fuse_init_out {
283 struct fuse_in_header {
294 struct fuse_out_header {
300 /* RSC changed name[0] to name[1] for old C compilers */
309 #define FUSE_NAME_OFFSET ((unsigned) ((struct fuse_dirent *) 0)->name)
310 #define FUSE_DIRENT_ALIGN(x) (((x) + sizeof(__u64) - 1) & ~(sizeof(__u64) - 1))
311 #define FUSE_DIRENT_SIZE(d) \
312 FUSE_DIRENT_ALIGN(FUSE_NAME_OFFSET + (d)->namelen)