Blame


1 5551e51d 2006-07-23 devnull /* This file defines the kernel interface of FUSE */
2 5551e51d 2006-07-23 devnull
3 5551e51d 2006-07-23 devnull /*
4 5551e51d 2006-07-23 devnull This -- and only this -- header file may also be distributed under
5 5551e51d 2006-07-23 devnull the terms of the BSD Licence as follows:
6 5551e51d 2006-07-23 devnull
7 5551e51d 2006-07-23 devnull Copyright (C) 2001-2006 Miklos Szeredi. All rights reserved.
8 5551e51d 2006-07-23 devnull
9 5551e51d 2006-07-23 devnull Redistribution and use in source and binary forms, with or without
10 5551e51d 2006-07-23 devnull modification, are permitted provided that the following conditions
11 5551e51d 2006-07-23 devnull are met:
12 5551e51d 2006-07-23 devnull 1. Redistributions of source code must retain the above copyright
13 5551e51d 2006-07-23 devnull notice, this list of conditions and the following disclaimer.
14 5551e51d 2006-07-23 devnull 2. Redistributions in binary form must reproduce the above copyright
15 5551e51d 2006-07-23 devnull notice, this list of conditions and the following disclaimer in the
16 5551e51d 2006-07-23 devnull documentation and/or other materials provided with the distribution.
17 5551e51d 2006-07-23 devnull
18 5551e51d 2006-07-23 devnull THIS SOFTWARE IS PROVIDED BY AUTHOR AND CONTRIBUTORS ``AS IS'' AND
19 5551e51d 2006-07-23 devnull ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
20 5551e51d 2006-07-23 devnull IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
21 5551e51d 2006-07-23 devnull ARE DISCLAIMED. IN NO EVENT SHALL AUTHOR OR CONTRIBUTORS BE LIABLE
22 5551e51d 2006-07-23 devnull FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
23 5551e51d 2006-07-23 devnull DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
24 5551e51d 2006-07-23 devnull OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
25 5551e51d 2006-07-23 devnull HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
26 5551e51d 2006-07-23 devnull LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
27 5551e51d 2006-07-23 devnull OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
28 5551e51d 2006-07-23 devnull SUCH DAMAGE.
29 5551e51d 2006-07-23 devnull */
30 5551e51d 2006-07-23 devnull
31 5551e51d 2006-07-23 devnull /* RSC changed these lines */
32 5551e51d 2006-07-23 devnull #include <inttypes.h>
33 5551e51d 2006-07-23 devnull #define __u64 uint64_t
34 5551e51d 2006-07-23 devnull #define __u32 uint32_t
35 5551e51d 2006-07-23 devnull #define __s32 int32_t
36 5551e51d 2006-07-23 devnull
37 5551e51d 2006-07-23 devnull /** Version number of this interface */
38 5551e51d 2006-07-23 devnull #define FUSE_KERNEL_VERSION 7
39 5551e51d 2006-07-23 devnull
40 5551e51d 2006-07-23 devnull /** Minor version number of this interface */
41 5551e51d 2006-07-23 devnull #define FUSE_KERNEL_MINOR_VERSION 5
42 5551e51d 2006-07-23 devnull
43 5551e51d 2006-07-23 devnull /** The node ID of the root inode */
44 5551e51d 2006-07-23 devnull #define FUSE_ROOT_ID 1
45 5551e51d 2006-07-23 devnull
46 5551e51d 2006-07-23 devnull /** The major number of the fuse character device */
47 5551e51d 2006-07-23 devnull #define FUSE_MAJOR 10
48 5551e51d 2006-07-23 devnull
49 5551e51d 2006-07-23 devnull /** The minor number of the fuse character device */
50 5551e51d 2006-07-23 devnull #define FUSE_MINOR 229
51 5551e51d 2006-07-23 devnull
52 5551e51d 2006-07-23 devnull /* Make sure all structures are padded to 64bit boundary, so 32bit
53 5551e51d 2006-07-23 devnull userspace works under 64bit kernels */
54 5551e51d 2006-07-23 devnull
55 5551e51d 2006-07-23 devnull struct fuse_attr {
56 5551e51d 2006-07-23 devnull __u64 ino;
57 5551e51d 2006-07-23 devnull __u64 size;
58 5551e51d 2006-07-23 devnull __u64 blocks;
59 5551e51d 2006-07-23 devnull __u64 atime;
60 5551e51d 2006-07-23 devnull __u64 mtime;
61 5551e51d 2006-07-23 devnull __u64 ctime;
62 5551e51d 2006-07-23 devnull __u32 atimensec;
63 5551e51d 2006-07-23 devnull __u32 mtimensec;
64 5551e51d 2006-07-23 devnull __u32 ctimensec;
65 5551e51d 2006-07-23 devnull __u32 mode;
66 5551e51d 2006-07-23 devnull __u32 nlink;
67 5551e51d 2006-07-23 devnull __u32 uid;
68 5551e51d 2006-07-23 devnull __u32 gid;
69 5551e51d 2006-07-23 devnull __u32 rdev;
70 5551e51d 2006-07-23 devnull };
71 5551e51d 2006-07-23 devnull
72 5551e51d 2006-07-23 devnull struct fuse_kstatfs {
73 5551e51d 2006-07-23 devnull __u64 blocks;
74 5551e51d 2006-07-23 devnull __u64 bfree;
75 5551e51d 2006-07-23 devnull __u64 bavail;
76 5551e51d 2006-07-23 devnull __u64 files;
77 5551e51d 2006-07-23 devnull __u64 ffree;
78 5551e51d 2006-07-23 devnull __u32 bsize;
79 5551e51d 2006-07-23 devnull __u32 namelen;
80 5551e51d 2006-07-23 devnull __u32 frsize;
81 5551e51d 2006-07-23 devnull __u32 padding;
82 5551e51d 2006-07-23 devnull __u32 spare[6];
83 5551e51d 2006-07-23 devnull };
84 5551e51d 2006-07-23 devnull
85 5551e51d 2006-07-23 devnull #define FATTR_MODE (1 << 0)
86 5551e51d 2006-07-23 devnull #define FATTR_UID (1 << 1)
87 5551e51d 2006-07-23 devnull #define FATTR_GID (1 << 2)
88 5551e51d 2006-07-23 devnull #define FATTR_SIZE (1 << 3)
89 5551e51d 2006-07-23 devnull #define FATTR_ATIME (1 << 4)
90 5551e51d 2006-07-23 devnull #define FATTR_MTIME (1 << 5)
91 5551e51d 2006-07-23 devnull #define FATTR_FH (1 << 6)
92 5551e51d 2006-07-23 devnull
93 5551e51d 2006-07-23 devnull /**
94 5551e51d 2006-07-23 devnull * Flags returned by the OPEN request
95 5551e51d 2006-07-23 devnull *
96 5551e51d 2006-07-23 devnull * FOPEN_DIRECT_IO: bypass page cache for this open file
97 5551e51d 2006-07-23 devnull * FOPEN_KEEP_CACHE: don't invalidate the data cache on open
98 5551e51d 2006-07-23 devnull */
99 5551e51d 2006-07-23 devnull #define FOPEN_DIRECT_IO (1 << 0)
100 5551e51d 2006-07-23 devnull #define FOPEN_KEEP_CACHE (1 << 1)
101 5551e51d 2006-07-23 devnull
102 5551e51d 2006-07-23 devnull enum fuse_opcode {
103 5551e51d 2006-07-23 devnull FUSE_LOOKUP = 1,
104 5551e51d 2006-07-23 devnull FUSE_FORGET = 2, /* no reply */
105 5551e51d 2006-07-23 devnull FUSE_GETATTR = 3,
106 5551e51d 2006-07-23 devnull FUSE_SETATTR = 4,
107 5551e51d 2006-07-23 devnull FUSE_READLINK = 5,
108 5551e51d 2006-07-23 devnull FUSE_SYMLINK = 6,
109 5551e51d 2006-07-23 devnull FUSE_MKNOD = 8,
110 5551e51d 2006-07-23 devnull FUSE_MKDIR = 9,
111 5551e51d 2006-07-23 devnull FUSE_UNLINK = 10,
112 5551e51d 2006-07-23 devnull FUSE_RMDIR = 11,
113 5551e51d 2006-07-23 devnull FUSE_RENAME = 12,
114 5551e51d 2006-07-23 devnull FUSE_LINK = 13,
115 5551e51d 2006-07-23 devnull FUSE_OPEN = 14,
116 5551e51d 2006-07-23 devnull FUSE_READ = 15,
117 5551e51d 2006-07-23 devnull FUSE_WRITE = 16,
118 5551e51d 2006-07-23 devnull FUSE_STATFS = 17,
119 5551e51d 2006-07-23 devnull FUSE_RELEASE = 18,
120 5551e51d 2006-07-23 devnull FUSE_FSYNC = 20,
121 5551e51d 2006-07-23 devnull FUSE_SETXATTR = 21,
122 5551e51d 2006-07-23 devnull FUSE_GETXATTR = 22,
123 5551e51d 2006-07-23 devnull FUSE_LISTXATTR = 23,
124 5551e51d 2006-07-23 devnull FUSE_REMOVEXATTR = 24,
125 5551e51d 2006-07-23 devnull FUSE_FLUSH = 25,
126 5551e51d 2006-07-23 devnull FUSE_INIT = 26,
127 5551e51d 2006-07-23 devnull FUSE_OPENDIR = 27,
128 5551e51d 2006-07-23 devnull FUSE_READDIR = 28,
129 5551e51d 2006-07-23 devnull FUSE_RELEASEDIR = 29,
130 5551e51d 2006-07-23 devnull FUSE_FSYNCDIR = 30,
131 5551e51d 2006-07-23 devnull FUSE_ACCESS = 34,
132 5551e51d 2006-07-23 devnull FUSE_CREATE = 35
133 5551e51d 2006-07-23 devnull };
134 5551e51d 2006-07-23 devnull
135 5551e51d 2006-07-23 devnull /* The read buffer is required to be at least 8k, but may be much larger */
136 5551e51d 2006-07-23 devnull #define FUSE_MIN_READ_BUFFER 8192
137 5551e51d 2006-07-23 devnull
138 5551e51d 2006-07-23 devnull struct fuse_entry_out {
139 5551e51d 2006-07-23 devnull __u64 nodeid; /* Inode ID */
140 5551e51d 2006-07-23 devnull __u64 generation; /* Inode generation: nodeid:gen must
141 5551e51d 2006-07-23 devnull be unique for the fs's lifetime */
142 5551e51d 2006-07-23 devnull __u64 entry_valid; /* Cache timeout for the name */
143 5551e51d 2006-07-23 devnull __u64 attr_valid; /* Cache timeout for the attributes */
144 5551e51d 2006-07-23 devnull __u32 entry_valid_nsec;
145 5551e51d 2006-07-23 devnull __u32 attr_valid_nsec;
146 5551e51d 2006-07-23 devnull struct fuse_attr attr;
147 5551e51d 2006-07-23 devnull };
148 5551e51d 2006-07-23 devnull
149 5551e51d 2006-07-23 devnull struct fuse_forget_in {
150 5551e51d 2006-07-23 devnull __u64 nlookup;
151 5551e51d 2006-07-23 devnull };
152 5551e51d 2006-07-23 devnull
153 5551e51d 2006-07-23 devnull struct fuse_attr_out {
154 5551e51d 2006-07-23 devnull __u64 attr_valid; /* Cache timeout for the attributes */
155 5551e51d 2006-07-23 devnull __u32 attr_valid_nsec;
156 5551e51d 2006-07-23 devnull __u32 dummy;
157 5551e51d 2006-07-23 devnull struct fuse_attr attr;
158 5551e51d 2006-07-23 devnull };
159 5551e51d 2006-07-23 devnull
160 5551e51d 2006-07-23 devnull struct fuse_mknod_in {
161 5551e51d 2006-07-23 devnull __u32 mode;
162 5551e51d 2006-07-23 devnull __u32 rdev;
163 5551e51d 2006-07-23 devnull };
164 5551e51d 2006-07-23 devnull
165 5551e51d 2006-07-23 devnull struct fuse_mkdir_in {
166 5551e51d 2006-07-23 devnull __u32 mode;
167 5551e51d 2006-07-23 devnull __u32 padding;
168 5551e51d 2006-07-23 devnull };
169 5551e51d 2006-07-23 devnull
170 5551e51d 2006-07-23 devnull struct fuse_rename_in {
171 5551e51d 2006-07-23 devnull __u64 newdir;
172 5551e51d 2006-07-23 devnull };
173 5551e51d 2006-07-23 devnull
174 5551e51d 2006-07-23 devnull struct fuse_link_in {
175 5551e51d 2006-07-23 devnull __u64 oldnodeid;
176 5551e51d 2006-07-23 devnull };
177 5551e51d 2006-07-23 devnull
178 5551e51d 2006-07-23 devnull struct fuse_setattr_in {
179 5551e51d 2006-07-23 devnull __u32 valid;
180 5551e51d 2006-07-23 devnull __u32 padding;
181 5551e51d 2006-07-23 devnull __u64 fh;
182 5551e51d 2006-07-23 devnull __u64 size;
183 5551e51d 2006-07-23 devnull __u64 unused1;
184 5551e51d 2006-07-23 devnull __u64 atime;
185 5551e51d 2006-07-23 devnull __u64 mtime;
186 5551e51d 2006-07-23 devnull __u64 unused2;
187 5551e51d 2006-07-23 devnull __u32 atimensec;
188 5551e51d 2006-07-23 devnull __u32 mtimensec;
189 5551e51d 2006-07-23 devnull __u32 unused3;
190 5551e51d 2006-07-23 devnull __u32 mode;
191 5551e51d 2006-07-23 devnull __u32 unused4;
192 5551e51d 2006-07-23 devnull __u32 uid;
193 5551e51d 2006-07-23 devnull __u32 gid;
194 5551e51d 2006-07-23 devnull __u32 unused5;
195 5551e51d 2006-07-23 devnull };
196 5551e51d 2006-07-23 devnull
197 5551e51d 2006-07-23 devnull struct fuse_open_in {
198 5551e51d 2006-07-23 devnull __u32 flags;
199 5551e51d 2006-07-23 devnull __u32 mode;
200 5551e51d 2006-07-23 devnull };
201 5551e51d 2006-07-23 devnull
202 5551e51d 2006-07-23 devnull struct fuse_open_out {
203 5551e51d 2006-07-23 devnull __u64 fh;
204 5551e51d 2006-07-23 devnull __u32 open_flags;
205 5551e51d 2006-07-23 devnull __u32 padding;
206 5551e51d 2006-07-23 devnull };
207 5551e51d 2006-07-23 devnull
208 5551e51d 2006-07-23 devnull struct fuse_release_in {
209 5551e51d 2006-07-23 devnull __u64 fh;
210 5551e51d 2006-07-23 devnull __u32 flags;
211 5551e51d 2006-07-23 devnull __u32 padding;
212 5551e51d 2006-07-23 devnull };
213 5551e51d 2006-07-23 devnull
214 5551e51d 2006-07-23 devnull struct fuse_flush_in {
215 5551e51d 2006-07-23 devnull __u64 fh;
216 5551e51d 2006-07-23 devnull __u32 flush_flags;
217 5551e51d 2006-07-23 devnull __u32 padding;
218 5551e51d 2006-07-23 devnull };
219 5551e51d 2006-07-23 devnull
220 5551e51d 2006-07-23 devnull struct fuse_read_in {
221 5551e51d 2006-07-23 devnull __u64 fh;
222 5551e51d 2006-07-23 devnull __u64 offset;
223 5551e51d 2006-07-23 devnull __u32 size;
224 5551e51d 2006-07-23 devnull __u32 padding;
225 5551e51d 2006-07-23 devnull };
226 5551e51d 2006-07-23 devnull
227 5551e51d 2006-07-23 devnull struct fuse_write_in {
228 5551e51d 2006-07-23 devnull __u64 fh;
229 5551e51d 2006-07-23 devnull __u64 offset;
230 5551e51d 2006-07-23 devnull __u32 size;
231 5551e51d 2006-07-23 devnull __u32 write_flags;
232 5551e51d 2006-07-23 devnull };
233 5551e51d 2006-07-23 devnull
234 5551e51d 2006-07-23 devnull struct fuse_write_out {
235 5551e51d 2006-07-23 devnull __u32 size;
236 5551e51d 2006-07-23 devnull __u32 padding;
237 5551e51d 2006-07-23 devnull };
238 5551e51d 2006-07-23 devnull
239 5551e51d 2006-07-23 devnull #define FUSE_COMPAT_STATFS_SIZE 48
240 5551e51d 2006-07-23 devnull
241 5551e51d 2006-07-23 devnull struct fuse_statfs_out {
242 5551e51d 2006-07-23 devnull struct fuse_kstatfs st;
243 5551e51d 2006-07-23 devnull };
244 5551e51d 2006-07-23 devnull
245 5551e51d 2006-07-23 devnull struct fuse_fsync_in {
246 5551e51d 2006-07-23 devnull __u64 fh;
247 5551e51d 2006-07-23 devnull __u32 fsync_flags;
248 5551e51d 2006-07-23 devnull __u32 padding;
249 5551e51d 2006-07-23 devnull };
250 5551e51d 2006-07-23 devnull
251 5551e51d 2006-07-23 devnull struct fuse_setxattr_in {
252 5551e51d 2006-07-23 devnull __u32 size;
253 5551e51d 2006-07-23 devnull __u32 flags;
254 5551e51d 2006-07-23 devnull };
255 5551e51d 2006-07-23 devnull
256 5551e51d 2006-07-23 devnull struct fuse_getxattr_in {
257 5551e51d 2006-07-23 devnull __u32 size;
258 5551e51d 2006-07-23 devnull __u32 padding;
259 5551e51d 2006-07-23 devnull };
260 5551e51d 2006-07-23 devnull
261 5551e51d 2006-07-23 devnull struct fuse_getxattr_out {
262 5551e51d 2006-07-23 devnull __u32 size;
263 5551e51d 2006-07-23 devnull __u32 padding;
264 5551e51d 2006-07-23 devnull };
265 5551e51d 2006-07-23 devnull
266 5551e51d 2006-07-23 devnull struct fuse_access_in {
267 5551e51d 2006-07-23 devnull __u32 mask;
268 5551e51d 2006-07-23 devnull __u32 padding;
269 5551e51d 2006-07-23 devnull };
270 5551e51d 2006-07-23 devnull
271 5551e51d 2006-07-23 devnull struct fuse_init_in {
272 5551e51d 2006-07-23 devnull __u32 major;
273 5551e51d 2006-07-23 devnull __u32 minor;
274 5551e51d 2006-07-23 devnull };
275 5551e51d 2006-07-23 devnull
276 5551e51d 2006-07-23 devnull struct fuse_init_out {
277 5551e51d 2006-07-23 devnull __u32 major;
278 5551e51d 2006-07-23 devnull __u32 minor;
279 5551e51d 2006-07-23 devnull __u32 unused[3];
280 5551e51d 2006-07-23 devnull __u32 max_write;
281 5551e51d 2006-07-23 devnull };
282 5551e51d 2006-07-23 devnull
283 5551e51d 2006-07-23 devnull struct fuse_in_header {
284 5551e51d 2006-07-23 devnull __u32 len;
285 5551e51d 2006-07-23 devnull __u32 opcode;
286 5551e51d 2006-07-23 devnull __u64 unique;
287 5551e51d 2006-07-23 devnull __u64 nodeid;
288 5551e51d 2006-07-23 devnull __u32 uid;
289 5551e51d 2006-07-23 devnull __u32 gid;
290 5551e51d 2006-07-23 devnull __u32 pid;
291 5551e51d 2006-07-23 devnull __u32 padding;
292 5551e51d 2006-07-23 devnull };
293 5551e51d 2006-07-23 devnull
294 5551e51d 2006-07-23 devnull struct fuse_out_header {
295 5551e51d 2006-07-23 devnull __u32 len;
296 5551e51d 2006-07-23 devnull __s32 error;
297 5551e51d 2006-07-23 devnull __u64 unique;
298 5551e51d 2006-07-23 devnull };
299 5551e51d 2006-07-23 devnull
300 5551e51d 2006-07-23 devnull /* RSC changed name[0] to name[1] for old C compilers */
301 5551e51d 2006-07-23 devnull struct fuse_dirent {
302 5551e51d 2006-07-23 devnull __u64 ino;
303 5551e51d 2006-07-23 devnull __u64 off;
304 5551e51d 2006-07-23 devnull __u32 namelen;
305 5551e51d 2006-07-23 devnull __u32 type;
306 5551e51d 2006-07-23 devnull char name[1];
307 5551e51d 2006-07-23 devnull };
308 5551e51d 2006-07-23 devnull
309 5551e51d 2006-07-23 devnull #define FUSE_NAME_OFFSET ((unsigned) ((struct fuse_dirent *) 0)->name)
310 5551e51d 2006-07-23 devnull #define FUSE_DIRENT_ALIGN(x) (((x) + sizeof(__u64) - 1) & ~(sizeof(__u64) - 1))
311 5551e51d 2006-07-23 devnull #define FUSE_DIRENT_SIZE(d) \
312 5551e51d 2006-07-23 devnull FUSE_DIRENT_ALIGN(FUSE_NAME_OFFSET + (d)->namelen)