URI: 
       tfuse_kernel.h - plan9port - [fork] Plan 9 from user space
  HTML git clone git://src.adamsgaard.dk/plan9port
   DIR Log
   DIR Files
   DIR Refs
   DIR README
   DIR LICENSE
       ---
       tfuse_kernel.h (8996B)
       ---
            1 
            2 
            3 
            4 /*
            5     This file defines the kernel interface of FUSE
            6     Copyright (C) 2001-2007  Miklos Szeredi <miklos@szeredi.hu>
            7 
            8 
            9     This -- and only this -- header file may also be distributed under
           10     the terms of the BSD Licence as follows:
           11 
           12     Copyright (C) 2001-2007 Miklos Szeredi. All rights reserved.
           13 
           14     Redistribution and use in source and binary forms, with or without
           15     modification, are permitted provided that the following conditions
           16     are met:
           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.
           22 
           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
           33     SUCH DAMAGE.
           34 */
           35 
           36 /* RSC changed these lines */
           37 #include <inttypes.h>
           38 #define __u64 uint64_t
           39 #define __u32 uint32_t
           40 #define __s32 int32_t
           41 
           42 /** Version number of this interface */
           43 #define FUSE_KERNEL_VERSION 7
           44 
           45 /** Minor version number of this interface */
           46 #define FUSE_KERNEL_MINOR_VERSION 8
           47 
           48 /** The node ID of the root inode */
           49 #define FUSE_ROOT_ID 1
           50 
           51 /** The major number of the fuse character device */
           52 #define FUSE_MAJOR MISC_MAJOR
           53 
           54 /** The minor number of the fuse character device */
           55 #define FUSE_MINOR 229
           56 
           57 /* Make sure all structures are padded to 64bit boundary, so 32bit
           58    userspace works under 64bit kernels */
           59 
           60 struct fuse_attr {
           61         __u64        ino;
           62         __u64        size;
           63         __u64        blocks;
           64         __u64        atime;
           65         __u64        mtime;
           66         __u64        ctime;
           67 #if (__FreeBSD__ >= 10 && OSX_VERSION >= 100500)
           68         __u64        crtime;
           69 #endif /* __FreeBSD__ >= 10 */
           70         __u32        atimensec;
           71         __u32        mtimensec;
           72         __u32        ctimensec;
           73 #if (__FreeBSD__ >= 10 && OSX_VERSION >= 100500)
           74         __u32        crtimensec;
           75 #endif /* __FreeBSD__ >= 10 */
           76         __u32        mode;
           77         __u32        nlink;
           78         __u32        uid;
           79         __u32        gid;
           80         __u32        rdev;
           81 #if (__FreeBSD__ >= 10)
           82         __u32        flags; /* file flags; see chflags(2) */
           83 #if OSX_VERSION < 100500
           84         __u32        padding;
           85 #endif /* __OSX_VERSION__ < 100500 */
           86 #endif /* __FreeBSD__ >= 10 */
           87 };
           88 
           89 struct fuse_kstatfs {
           90         __u64        blocks;
           91         __u64        bfree;
           92         __u64        bavail;
           93         __u64        files;
           94         __u64        ffree;
           95         __u32        bsize;
           96         __u32        namelen;
           97         __u32        frsize;
           98         __u32        padding;
           99         __u32        spare[6];
          100 };
          101 
          102 struct fuse_file_lock {
          103         __u64        start;
          104         __u64        end;
          105         __u32        type;
          106         __u32        pid; /* tgid */
          107 };
          108 
          109 /**
          110  * Bitmasks for fuse_setattr_in.valid
          111  */
          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 */
          125 
          126 /**
          127  * Flags returned by the OPEN request
          128  *
          129  * FOPEN_DIRECT_IO: bypass page cache for this open file
          130  * FOPEN_KEEP_CACHE: don't invalidate the data cache on open
          131  */
          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)
          137 #endif
          138 
          139 /**
          140  * INIT request/reply flags
          141  */
          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 */
          149 
          150 /**
          151  * Release flags
          152  */
          153 #define FUSE_RELEASE_FLUSH        (1 << 0)
          154 
          155 enum fuse_opcode {
          156         FUSE_LOOKUP           = 1,
          157         FUSE_FORGET           = 2,  /* no reply */
          158         FUSE_GETATTR           = 3,
          159         FUSE_SETATTR           = 4,
          160         FUSE_READLINK           = 5,
          161         FUSE_SYMLINK           = 6,
          162         FUSE_MKNOD           = 8,
          163         FUSE_MKDIR           = 9,
          164         FUSE_UNLINK           = 10,
          165         FUSE_RMDIR           = 11,
          166         FUSE_RENAME           = 12,
          167         FUSE_LINK           = 13,
          168         FUSE_OPEN           = 14,
          169         FUSE_READ           = 15,
          170         FUSE_WRITE           = 16,
          171         FUSE_STATFS           = 17,
          172         FUSE_RELEASE       = 18,
          173         FUSE_FSYNC         = 20,
          174         FUSE_SETXATTR      = 21,
          175         FUSE_GETXATTR      = 22,
          176         FUSE_LISTXATTR     = 23,
          177         FUSE_REMOVEXATTR   = 24,
          178         FUSE_FLUSH         = 25,
          179         FUSE_INIT          = 26,
          180         FUSE_OPENDIR       = 27,
          181         FUSE_READDIR       = 28,
          182         FUSE_RELEASEDIR    = 29,
          183         FUSE_FSYNCDIR      = 30,
          184         FUSE_GETLK         = 31,
          185         FUSE_SETLK         = 32,
          186         FUSE_SETLKW        = 33,
          187         FUSE_ACCESS        = 34,
          188         FUSE_CREATE        = 35,
          189         FUSE_INTERRUPT     = 36,
          190         FUSE_BMAP          = 37,
          191         FUSE_DESTROY       = 38,
          192 #if (__FreeBSD__ >= 10)
          193         FUSE_SETVOLNAME    = 61,
          194         FUSE_GETXTIMES     = 62,
          195         FUSE_EXCHANGE      = 63,
          196 #endif /* __FreeBSD__ >= 10 */
          197 };
          198 
          199 /* The read buffer is required to be at least 8k, but may be much larger */
          200 #define FUSE_MIN_READ_BUFFER 8192
          201 
          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;
          211 };
          212 
          213 struct fuse_forget_in {
          214         __u64        nlookup;
          215 };
          216 
          217 struct fuse_attr_out {
          218         __u64        attr_valid;        /* Cache timeout for the attributes */
          219         __u32        attr_valid_nsec;
          220         __u32        dummy;
          221         struct fuse_attr attr;
          222 };
          223 
          224 #if (__FreeBSD__ >= 10)
          225 struct fuse_getxtimes_out {
          226         __u64        bkuptime;
          227         __u64        crtime;
          228         __u32        bkuptimensec;
          229         __u32        crtimensec;
          230 };
          231 #endif /* __FreeBSD__ >= 10 */
          232 
          233 struct fuse_mknod_in {
          234         __u32        mode;
          235         __u32        rdev;
          236 };
          237 
          238 struct fuse_mkdir_in {
          239         __u32        mode;
          240         __u32        padding;
          241 };
          242 
          243 struct fuse_rename_in {
          244         __u64        newdir;
          245 };
          246 
          247 #if (__FreeBSD__ >= 10)
          248 struct fuse_exchange_in {
          249         __u64        olddir;
          250         __u64        newdir;
          251         __u64        options;
          252 };
          253 #endif /* __FreeBSD__ >= 10 */
          254 
          255 struct fuse_link_in {
          256         __u64        oldnodeid;
          257 };
          258 
          259 struct fuse_setattr_in {
          260         __u32        valid;
          261         __u32        padding;
          262         __u64        fh;
          263         __u64        size;
          264         __u64        unused1;
          265         __u64        atime;
          266         __u64        mtime;
          267         __u64        unused2;
          268         __u32        atimensec;
          269         __u32        mtimensec;
          270         __u32        unused3;
          271         __u32        mode;
          272         __u32        unused4;
          273         __u32        uid;
          274         __u32        gid;
          275         __u32        unused5;
          276 #if (__FreeBSD__ >= 10)
          277         __u64        bkuptime;
          278         __u64        chgtime;
          279         __u64        crtime;
          280         __u32        bkuptimensec;
          281         __u32        chgtimensec;
          282         __u32        crtimensec;
          283         __u32        flags; /* file flags; see chflags(2) */
          284 #endif /* __FreeBSD__ >= 10 */
          285 };
          286 
          287 struct fuse_open_in {
          288         __u32        flags;
          289         __u32        mode;
          290 };
          291 
          292 struct fuse_open_out {
          293         __u64        fh;
          294         __u32        open_flags;
          295         __u32        padding;
          296 };
          297 
          298 struct fuse_release_in {
          299         __u64        fh;
          300         __u32        flags;
          301         __u32        release_flags;
          302         __u64        lock_owner;
          303 };
          304 
          305 struct fuse_flush_in {
          306         __u64        fh;
          307         __u32        flush_flags;
          308         __u32        padding;
          309         __u64        lock_owner;
          310 };
          311 
          312 struct fuse_read_in {
          313         __u64        fh;
          314         __u64        offset;
          315         __u32        size;
          316         __u32        padding;
          317 };
          318 
          319 struct fuse_write_in {
          320         __u64        fh;
          321         __u64        offset;
          322         __u32        size;
          323         __u32        write_flags;
          324 };
          325 
          326 struct fuse_write_out {
          327         __u32        size;
          328         __u32        padding;
          329 };
          330 
          331 #define FUSE_COMPAT_STATFS_SIZE 48
          332 
          333 struct fuse_statfs_out {
          334         struct fuse_kstatfs st;
          335 };
          336 
          337 struct fuse_fsync_in {
          338         __u64        fh;
          339         __u32        fsync_flags;
          340         __u32        padding;
          341 };
          342 
          343 struct fuse_setxattr_in {
          344         __u32        size;
          345         __u32        flags;
          346 #if (__FreeBSD__ >= 10)
          347         __u32        position;
          348         __u32        padding;
          349 #endif /* __FreeBSD__ >= 10 */
          350 };
          351 
          352 struct fuse_getxattr_in {
          353         __u32        size;
          354         __u32        padding;
          355 #if (__FreeBSD__ >= 10)
          356         __u32        position;
          357         __u32        padding2;
          358 #endif /* __FreeBSD__ >= 10 */
          359 };
          360 
          361 struct fuse_getxattr_out {
          362         __u32        size;
          363         __u32        padding;
          364 };
          365 
          366 struct fuse_lk_in {
          367         __u64        fh;
          368         __u64        owner;
          369         struct fuse_file_lock lk;
          370 };
          371 
          372 struct fuse_lk_out {
          373         struct fuse_file_lock lk;
          374 };
          375 
          376 struct fuse_access_in {
          377         __u32        mask;
          378         __u32        padding;
          379 };
          380 
          381 struct fuse_init_in {
          382         __u32        major;
          383         __u32        minor;
          384         __u32        max_readahead;
          385         __u32        flags;
          386 };
          387 
          388 struct fuse_init_out {
          389         __u32        major;
          390         __u32        minor;
          391         __u32        max_readahead;
          392         __u32        flags;
          393         __u32        unused;
          394         __u32        max_write;
          395 };
          396 
          397 struct fuse_interrupt_in {
          398         __u64        unique;
          399 };
          400 
          401 struct fuse_bmap_in {
          402         __u64        block;
          403         __u32        blocksize;
          404         __u32        padding;
          405 };
          406 
          407 struct fuse_bmap_out {
          408         __u64        block;
          409 };
          410 
          411 struct fuse_in_header {
          412         __u32        len;
          413         __u32        opcode;
          414         __u64        unique;
          415         __u64        nodeid;
          416         __u32        uid;
          417         __u32        gid;
          418         __u32        pid;
          419         __u32        padding;
          420 };
          421 
          422 struct fuse_out_header {
          423         __u32        len;
          424         __s32        error;
          425         __u64        unique;
          426 };
          427 
          428 /* RSC changed name[0] to name[1] for old C compilers */
          429 struct fuse_dirent {
          430         __u64        ino;
          431         __u64        off;
          432         __u32        namelen;
          433         __u32        type;
          434         char name[1];
          435 };
          436 
          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)