diff options
Diffstat (limited to 'include/linux/fuse.h')
| -rw-r--r-- | include/linux/fuse.h | 259 |
1 files changed, 259 insertions, 0 deletions
diff --git a/include/linux/fuse.h b/include/linux/fuse.h new file mode 100644 index 000000000000..acbeb96a3353 --- /dev/null +++ b/include/linux/fuse.h | |||
| @@ -0,0 +1,259 @@ | |||
| 1 | /* | ||
| 2 | FUSE: Filesystem in Userspace | ||
| 3 | Copyright (C) 2001-2005 Miklos Szeredi <miklos@szeredi.hu> | ||
| 4 | |||
| 5 | This program can be distributed under the terms of the GNU GPL. | ||
| 6 | See the file COPYING. | ||
| 7 | */ | ||
| 8 | |||
| 9 | /* This file defines the kernel interface of FUSE */ | ||
| 10 | |||
| 11 | #include <asm/types.h> | ||
| 12 | |||
| 13 | /** Version number of this interface */ | ||
| 14 | #define FUSE_KERNEL_VERSION 7 | ||
| 15 | |||
| 16 | /** Minor version number of this interface */ | ||
| 17 | #define FUSE_KERNEL_MINOR_VERSION 2 | ||
| 18 | |||
| 19 | /** The node ID of the root inode */ | ||
| 20 | #define FUSE_ROOT_ID 1 | ||
| 21 | |||
| 22 | /** The major number of the fuse character device */ | ||
| 23 | #define FUSE_MAJOR 10 | ||
| 24 | |||
| 25 | /** The minor number of the fuse character device */ | ||
| 26 | #define FUSE_MINOR 229 | ||
| 27 | |||
| 28 | /* Make sure all structures are padded to 64bit boundary, so 32bit | ||
| 29 | userspace works under 64bit kernels */ | ||
| 30 | |||
| 31 | struct fuse_attr { | ||
| 32 | __u64 ino; | ||
| 33 | __u64 size; | ||
| 34 | __u64 blocks; | ||
| 35 | __u64 atime; | ||
| 36 | __u64 mtime; | ||
| 37 | __u64 ctime; | ||
| 38 | __u32 atimensec; | ||
| 39 | __u32 mtimensec; | ||
| 40 | __u32 ctimensec; | ||
| 41 | __u32 mode; | ||
| 42 | __u32 nlink; | ||
| 43 | __u32 uid; | ||
| 44 | __u32 gid; | ||
| 45 | __u32 rdev; | ||
| 46 | }; | ||
| 47 | |||
| 48 | struct fuse_kstatfs { | ||
| 49 | __u64 blocks; | ||
| 50 | __u64 bfree; | ||
| 51 | __u64 bavail; | ||
| 52 | __u64 files; | ||
| 53 | __u64 ffree; | ||
| 54 | __u32 bsize; | ||
| 55 | __u32 namelen; | ||
| 56 | }; | ||
| 57 | |||
| 58 | #define FATTR_MODE (1 << 0) | ||
| 59 | #define FATTR_UID (1 << 1) | ||
| 60 | #define FATTR_GID (1 << 2) | ||
| 61 | #define FATTR_SIZE (1 << 3) | ||
| 62 | #define FATTR_ATIME (1 << 4) | ||
| 63 | #define FATTR_MTIME (1 << 5) | ||
| 64 | #define FATTR_CTIME (1 << 6) | ||
| 65 | |||
| 66 | /** | ||
| 67 | * Flags returned by the OPEN request | ||
| 68 | * | ||
| 69 | * FOPEN_DIRECT_IO: bypass page cache for this open file | ||
| 70 | * FOPEN_KEEP_CACHE: don't invalidate the data cache on open | ||
| 71 | */ | ||
| 72 | #define FOPEN_DIRECT_IO (1 << 0) | ||
| 73 | #define FOPEN_KEEP_CACHE (1 << 1) | ||
| 74 | |||
| 75 | enum fuse_opcode { | ||
| 76 | FUSE_LOOKUP = 1, | ||
| 77 | FUSE_FORGET = 2, /* no reply */ | ||
| 78 | FUSE_GETATTR = 3, | ||
| 79 | FUSE_SETATTR = 4, | ||
| 80 | FUSE_READLINK = 5, | ||
| 81 | FUSE_SYMLINK = 6, | ||
| 82 | FUSE_MKNOD = 8, | ||
| 83 | FUSE_MKDIR = 9, | ||
| 84 | FUSE_UNLINK = 10, | ||
| 85 | FUSE_RMDIR = 11, | ||
| 86 | FUSE_RENAME = 12, | ||
| 87 | FUSE_LINK = 13, | ||
| 88 | FUSE_OPEN = 14, | ||
| 89 | FUSE_READ = 15, | ||
| 90 | FUSE_WRITE = 16, | ||
| 91 | FUSE_STATFS = 17, | ||
| 92 | FUSE_RELEASE = 18, | ||
| 93 | FUSE_FSYNC = 20, | ||
| 94 | FUSE_SETXATTR = 21, | ||
| 95 | FUSE_GETXATTR = 22, | ||
| 96 | FUSE_LISTXATTR = 23, | ||
| 97 | FUSE_REMOVEXATTR = 24, | ||
| 98 | FUSE_FLUSH = 25, | ||
| 99 | FUSE_INIT = 26, | ||
| 100 | FUSE_OPENDIR = 27, | ||
| 101 | FUSE_READDIR = 28, | ||
| 102 | FUSE_RELEASEDIR = 29, | ||
| 103 | FUSE_FSYNCDIR = 30 | ||
| 104 | }; | ||
| 105 | |||
| 106 | /* Conservative buffer size for the client */ | ||
| 107 | #define FUSE_MAX_IN 8192 | ||
| 108 | |||
| 109 | #define FUSE_NAME_MAX 1024 | ||
| 110 | #define FUSE_SYMLINK_MAX 4096 | ||
| 111 | #define FUSE_XATTR_SIZE_MAX 4096 | ||
| 112 | |||
| 113 | struct fuse_entry_out { | ||
| 114 | __u64 nodeid; /* Inode ID */ | ||
| 115 | __u64 generation; /* Inode generation: nodeid:gen must | ||
| 116 | be unique for the fs's lifetime */ | ||
| 117 | __u64 entry_valid; /* Cache timeout for the name */ | ||
| 118 | __u64 attr_valid; /* Cache timeout for the attributes */ | ||
| 119 | __u32 entry_valid_nsec; | ||
| 120 | __u32 attr_valid_nsec; | ||
| 121 | struct fuse_attr attr; | ||
| 122 | }; | ||
| 123 | |||
| 124 | struct fuse_forget_in { | ||
| 125 | __u64 nlookup; | ||
| 126 | }; | ||
| 127 | |||
| 128 | struct fuse_attr_out { | ||
| 129 | __u64 attr_valid; /* Cache timeout for the attributes */ | ||
| 130 | __u32 attr_valid_nsec; | ||
| 131 | __u32 dummy; | ||
| 132 | struct fuse_attr attr; | ||
| 133 | }; | ||
| 134 | |||
| 135 | struct fuse_mknod_in { | ||
| 136 | __u32 mode; | ||
| 137 | __u32 rdev; | ||
| 138 | }; | ||
| 139 | |||
| 140 | struct fuse_mkdir_in { | ||
| 141 | __u32 mode; | ||
| 142 | __u32 padding; | ||
| 143 | }; | ||
| 144 | |||
| 145 | struct fuse_rename_in { | ||
| 146 | __u64 newdir; | ||
| 147 | }; | ||
| 148 | |||
| 149 | struct fuse_link_in { | ||
| 150 | __u64 oldnodeid; | ||
| 151 | }; | ||
| 152 | |||
| 153 | struct fuse_setattr_in { | ||
| 154 | __u32 valid; | ||
| 155 | __u32 padding; | ||
| 156 | struct fuse_attr attr; | ||
| 157 | }; | ||
| 158 | |||
| 159 | struct fuse_open_in { | ||
| 160 | __u32 flags; | ||
| 161 | __u32 padding; | ||
| 162 | }; | ||
| 163 | |||
| 164 | struct fuse_open_out { | ||
| 165 | __u64 fh; | ||
| 166 | __u32 open_flags; | ||
| 167 | __u32 padding; | ||
| 168 | }; | ||
| 169 | |||
| 170 | struct fuse_release_in { | ||
| 171 | __u64 fh; | ||
| 172 | __u32 flags; | ||
| 173 | __u32 padding; | ||
| 174 | }; | ||
| 175 | |||
| 176 | struct fuse_flush_in { | ||
| 177 | __u64 fh; | ||
| 178 | __u32 flush_flags; | ||
| 179 | __u32 padding; | ||
| 180 | }; | ||
| 181 | |||
| 182 | struct fuse_read_in { | ||
| 183 | __u64 fh; | ||
| 184 | __u64 offset; | ||
| 185 | __u32 size; | ||
| 186 | __u32 padding; | ||
| 187 | }; | ||
| 188 | |||
| 189 | struct fuse_write_in { | ||
| 190 | __u64 fh; | ||
| 191 | __u64 offset; | ||
| 192 | __u32 size; | ||
| 193 | __u32 write_flags; | ||
| 194 | }; | ||
| 195 | |||
| 196 | struct fuse_write_out { | ||
| 197 | __u32 size; | ||
| 198 | __u32 padding; | ||
| 199 | }; | ||
| 200 | |||
| 201 | struct fuse_statfs_out { | ||
| 202 | struct fuse_kstatfs st; | ||
| 203 | }; | ||
| 204 | |||
| 205 | struct fuse_fsync_in { | ||
| 206 | __u64 fh; | ||
| 207 | __u32 fsync_flags; | ||
| 208 | __u32 padding; | ||
| 209 | }; | ||
| 210 | |||
| 211 | struct fuse_setxattr_in { | ||
| 212 | __u32 size; | ||
| 213 | __u32 flags; | ||
| 214 | }; | ||
| 215 | |||
| 216 | struct fuse_getxattr_in { | ||
| 217 | __u32 size; | ||
| 218 | __u32 padding; | ||
| 219 | }; | ||
| 220 | |||
| 221 | struct fuse_getxattr_out { | ||
| 222 | __u32 size; | ||
| 223 | __u32 padding; | ||
| 224 | }; | ||
| 225 | |||
| 226 | struct fuse_init_in_out { | ||
| 227 | __u32 major; | ||
| 228 | __u32 minor; | ||
| 229 | }; | ||
| 230 | |||
| 231 | struct fuse_in_header { | ||
| 232 | __u32 len; | ||
| 233 | __u32 opcode; | ||
| 234 | __u64 unique; | ||
| 235 | __u64 nodeid; | ||
| 236 | __u32 uid; | ||
| 237 | __u32 gid; | ||
| 238 | __u32 pid; | ||
| 239 | __u32 padding; | ||
| 240 | }; | ||
| 241 | |||
| 242 | struct fuse_out_header { | ||
| 243 | __u32 len; | ||
| 244 | __s32 error; | ||
| 245 | __u64 unique; | ||
| 246 | }; | ||
| 247 | |||
| 248 | struct fuse_dirent { | ||
| 249 | __u64 ino; | ||
| 250 | __u64 off; | ||
| 251 | __u32 namelen; | ||
| 252 | __u32 type; | ||
| 253 | char name[0]; | ||
| 254 | }; | ||
| 255 | |||
| 256 | #define FUSE_NAME_OFFSET ((unsigned) ((struct fuse_dirent *) 0)->name) | ||
| 257 | #define FUSE_DIRENT_ALIGN(x) (((x) + sizeof(__u64) - 1) & ~(sizeof(__u64) - 1)) | ||
| 258 | #define FUSE_DIRENT_SIZE(d) \ | ||
| 259 | FUSE_DIRENT_ALIGN(FUSE_NAME_OFFSET + (d)->namelen) | ||
