5 This file defines the kernel interface of FUSE
6 Copyright (C) 2001-2007 Miklos Szeredi <miklos@szeredi.hu>
9 This -- and only this -- header file may also be distributed under
10 the terms of the BSD Licence as follows:
12 Copyright (C) 2001-2007 Miklos Szeredi. All rights reserved.
14 Redistribution and use in source and binary forms, with or without
15 modification, are permitted provided that the following conditions
17 1. Redistributions of source code must retain the above copyright
18 notice, this list of conditions and the following disclaimer.
19 2. Redistributions in binary form must reproduce the above copyright
20 notice, this list of conditions and the following disclaimer in the
21 documentation and/or other materials provided with the distribution.
23 THIS SOFTWARE IS PROVIDED BY AUTHOR AND CONTRIBUTORS ``AS IS'' AND
24 ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
25 IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
26 ARE DISCLAIMED. IN NO EVENT SHALL AUTHOR OR CONTRIBUTORS BE LIABLE
27 FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
28 DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
29 OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
30 HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
31 LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
32 OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
36 /* RSC changed these lines */
38 #define __u64 uint64_t
39 #define __u32 uint32_t
42 /** Version number of this interface */
43 #define FUSE_KERNEL_VERSION 7
45 /** Minor version number of this interface */
46 #define FUSE_KERNEL_MINOR_VERSION 8
48 /** The node ID of the root inode */
49 #define FUSE_ROOT_ID 1
51 /** The major number of the fuse character device */
52 #define FUSE_MAJOR MISC_MAJOR
54 /** The minor number of the fuse character device */
55 #define FUSE_MINOR 229
57 /* Make sure all structures are padded to 64bit boundary, so 32bit
58 userspace works under 64bit kernels */
67 #if (__FreeBSD__ >= 10 && OSX_VERSION >= 100500)
69 #endif /* __FreeBSD__ >= 10 */
73 #if (__FreeBSD__ >= 10 && OSX_VERSION >= 100500)
75 #endif /* __FreeBSD__ >= 10 */
81 #if (__FreeBSD__ >= 10)
82 __u32 flags; /* file flags; see chflags(2) */
83 #if OSX_VERSION < 100500
85 #endif /* __OSX_VERSION__ < 100500 */
86 #endif /* __FreeBSD__ >= 10 */
102 struct fuse_file_lock {
106 __u32 pid; /* tgid */
110 * Bitmasks for fuse_setattr_in.valid
112 #define FATTR_MODE (1 << 0)
113 #define FATTR_UID (1 << 1)
114 #define FATTR_GID (1 << 2)
115 #define FATTR_SIZE (1 << 3)
116 #define FATTR_ATIME (1 << 4)
117 #define FATTR_MTIME (1 << 5)
118 #define FATTR_FH (1 << 6)
119 #if (__FreeBSD__ >= 10)
120 #define FATTR_CRTIME (1 << 28)
121 #define FATTR_CHGTIME (1 << 29)
122 #define FATTR_BKUPTIME (1 << 30)
123 #define FATTR_FLAGS (1 << 31)
124 #endif /* __FreeBSD__ >= 10 */
127 * Flags returned by the OPEN request
129 * FOPEN_DIRECT_IO: bypass page cache for this open file
130 * FOPEN_KEEP_CACHE: don't invalidate the data cache on open
132 #define FOPEN_DIRECT_IO (1 << 0)
133 #define FOPEN_KEEP_CACHE (1 << 1)
134 #if (__FreeBSD__ >= 10)
135 #define FOPEN_PURGE_ATTR (1 << 30)
136 #define FOPEN_PURGE_UBC (1 << 31)
140 * INIT request/reply flags
142 #define FUSE_ASYNC_READ (1 << 0)
143 #define FUSE_POSIX_LOCKS (1 << 1)
144 #if (__FreeBSD__ >= 10)
145 #define FUSE_CASE_INSENSITIVE (1 << 29)
146 #define FUSE_VOL_RENAME (1 << 30)
147 #define FUSE_XTIMES (1 << 31)
148 #endif /* __FreeBSD__ >= 10 */
153 #define FUSE_RELEASE_FLUSH (1 << 0)
157 FUSE_FORGET = 2, /* no reply */
177 FUSE_REMOVEXATTR = 24,
182 FUSE_RELEASEDIR = 29,
192 #if (__FreeBSD__ >= 10)
193 FUSE_SETVOLNAME = 61,
196 #endif /* __FreeBSD__ >= 10 */
199 /* The read buffer is required to be at least 8k, but may be much larger */
200 #define FUSE_MIN_READ_BUFFER 8192
202 struct fuse_entry_out {
203 __u64 nodeid; /* Inode ID */
204 __u64 generation; /* Inode generation: nodeid:gen must
205 be unique for the fs's lifetime */
206 __u64 entry_valid; /* Cache timeout for the name */
207 __u64 attr_valid; /* Cache timeout for the attributes */
208 __u32 entry_valid_nsec;
209 __u32 attr_valid_nsec;
210 struct fuse_attr attr;
213 struct fuse_forget_in {
217 struct fuse_attr_out {
218 __u64 attr_valid; /* Cache timeout for the attributes */
219 __u32 attr_valid_nsec;
221 struct fuse_attr attr;
224 #if (__FreeBSD__ >= 10)
225 struct fuse_getxtimes_out {
231 #endif /* __FreeBSD__ >= 10 */
233 struct fuse_mknod_in {
238 struct fuse_mkdir_in {
243 struct fuse_rename_in {
247 #if (__FreeBSD__ >= 10)
248 struct fuse_exchange_in {
253 #endif /* __FreeBSD__ >= 10 */
255 struct fuse_link_in {
259 struct fuse_setattr_in {
276 #if (__FreeBSD__ >= 10)
283 __u32 flags; /* file flags; see chflags(2) */
284 #endif /* __FreeBSD__ >= 10 */
287 struct fuse_open_in {
292 struct fuse_open_out {
298 struct fuse_release_in {
305 struct fuse_flush_in {
312 struct fuse_read_in {
319 struct fuse_write_in {
326 struct fuse_write_out {
331 #define FUSE_COMPAT_STATFS_SIZE 48
333 struct fuse_statfs_out {
334 struct fuse_kstatfs st;
337 struct fuse_fsync_in {
343 struct fuse_setxattr_in {
346 #if (__FreeBSD__ >= 10)
349 #endif /* __FreeBSD__ >= 10 */
352 struct fuse_getxattr_in {
355 #if (__FreeBSD__ >= 10)
358 #endif /* __FreeBSD__ >= 10 */
361 struct fuse_getxattr_out {
369 struct fuse_file_lock lk;
373 struct fuse_file_lock lk;
376 struct fuse_access_in {
381 struct fuse_init_in {
388 struct fuse_init_out {
397 struct fuse_interrupt_in {
401 struct fuse_bmap_in {
407 struct fuse_bmap_out {
411 struct fuse_in_header {
422 struct fuse_out_header {
428 /* RSC changed name[0] to name[1] for old C compilers */
437 #define FUSE_NAME_OFFSET offsetof(struct fuse_dirent, name)
438 #define FUSE_DIRENT_ALIGN(x) (((x) + sizeof(__u64) - 1) & ~(sizeof(__u64) - 1))
439 #define FUSE_DIRENT_SIZE(d) \
440 FUSE_DIRENT_ALIGN(FUSE_NAME_OFFSET + (d)->namelen)