at v2.6.15 4.9 kB view raw
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 3 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 31struct 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 48struct 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_FH (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 75enum 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 FUSE_ACCESS = 34, 105 FUSE_CREATE = 35 106}; 107 108/* Conservative buffer size for the client */ 109#define FUSE_MAX_IN 8192 110 111#define FUSE_NAME_MAX 1024 112#define FUSE_SYMLINK_MAX 4096 113#define FUSE_XATTR_SIZE_MAX 4096 114 115struct fuse_entry_out { 116 __u64 nodeid; /* Inode ID */ 117 __u64 generation; /* Inode generation: nodeid:gen must 118 be unique for the fs's lifetime */ 119 __u64 entry_valid; /* Cache timeout for the name */ 120 __u64 attr_valid; /* Cache timeout for the attributes */ 121 __u32 entry_valid_nsec; 122 __u32 attr_valid_nsec; 123 struct fuse_attr attr; 124}; 125 126struct fuse_forget_in { 127 __u64 nlookup; 128}; 129 130struct fuse_attr_out { 131 __u64 attr_valid; /* Cache timeout for the attributes */ 132 __u32 attr_valid_nsec; 133 __u32 dummy; 134 struct fuse_attr attr; 135}; 136 137struct fuse_mknod_in { 138 __u32 mode; 139 __u32 rdev; 140}; 141 142struct fuse_mkdir_in { 143 __u32 mode; 144 __u32 padding; 145}; 146 147struct fuse_rename_in { 148 __u64 newdir; 149}; 150 151struct fuse_link_in { 152 __u64 oldnodeid; 153}; 154 155struct fuse_setattr_in { 156 __u32 valid; 157 __u32 padding; 158 __u64 fh; 159 __u64 size; 160 __u64 unused1; 161 __u64 atime; 162 __u64 mtime; 163 __u64 unused2; 164 __u32 atimensec; 165 __u32 mtimensec; 166 __u32 unused3; 167 __u32 mode; 168 __u32 unused4; 169 __u32 uid; 170 __u32 gid; 171 __u32 unused5; 172}; 173 174struct fuse_open_in { 175 __u32 flags; 176 __u32 mode; 177}; 178 179struct fuse_open_out { 180 __u64 fh; 181 __u32 open_flags; 182 __u32 padding; 183}; 184 185struct fuse_release_in { 186 __u64 fh; 187 __u32 flags; 188 __u32 padding; 189}; 190 191struct fuse_flush_in { 192 __u64 fh; 193 __u32 flush_flags; 194 __u32 padding; 195}; 196 197struct fuse_read_in { 198 __u64 fh; 199 __u64 offset; 200 __u32 size; 201 __u32 padding; 202}; 203 204struct fuse_write_in { 205 __u64 fh; 206 __u64 offset; 207 __u32 size; 208 __u32 write_flags; 209}; 210 211struct fuse_write_out { 212 __u32 size; 213 __u32 padding; 214}; 215 216struct fuse_statfs_out { 217 struct fuse_kstatfs st; 218}; 219 220struct fuse_fsync_in { 221 __u64 fh; 222 __u32 fsync_flags; 223 __u32 padding; 224}; 225 226struct fuse_setxattr_in { 227 __u32 size; 228 __u32 flags; 229}; 230 231struct fuse_getxattr_in { 232 __u32 size; 233 __u32 padding; 234}; 235 236struct fuse_getxattr_out { 237 __u32 size; 238 __u32 padding; 239}; 240 241struct fuse_access_in { 242 __u32 mask; 243 __u32 padding; 244}; 245 246struct fuse_init_in_out { 247 __u32 major; 248 __u32 minor; 249}; 250 251struct fuse_in_header { 252 __u32 len; 253 __u32 opcode; 254 __u64 unique; 255 __u64 nodeid; 256 __u32 uid; 257 __u32 gid; 258 __u32 pid; 259 __u32 padding; 260}; 261 262struct fuse_out_header { 263 __u32 len; 264 __s32 error; 265 __u64 unique; 266}; 267 268struct fuse_dirent { 269 __u64 ino; 270 __u64 off; 271 __u32 namelen; 272 __u32 type; 273 char name[0]; 274}; 275 276#define FUSE_NAME_OFFSET ((unsigned) ((struct fuse_dirent *) 0)->name) 277#define FUSE_DIRENT_ALIGN(x) (((x) + sizeof(__u64) - 1) & ~(sizeof(__u64) - 1)) 278#define FUSE_DIRENT_SIZE(d) \ 279 FUSE_DIRENT_ALIGN(FUSE_NAME_OFFSET + (d)->namelen)