"Fossies" - the Fresh Open Source Software Archive

Member "ntfs-3g_ntfsprogs-2017.3.23/include/fuse-lite/fuse_kernel.h" (23 Mar 2017, 9057 Bytes) of package /linux/misc/ntfs-3g_ntfsprogs-2017.3.23.tgz:


As a special service "Fossies" has tried to format the requested source page into HTML format using (guessed) C and C++ source code syntax highlighting (style: standard) with prefixed line numbers and code folding option. Alternatively you can here view or download the uninterpreted source code file. For more information about "fuse_kernel.h" see the Fossies "Dox" file reference documentation and the latest Fossies "Diffs" side-by-side code changes report: 3g_ntfsprogs-2016.2.22_vs_3g_ntfsprogs-2017.3.23.

    1 /*
    2     This file defines the kernel interface of FUSE
    3     Copyright (C) 2001-2007  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     This -- and only this -- header file may also be distributed under
    9     the terms of the BSD Licence as follows:
   10 
   11     Copyright (C) 2001-2007 Miklos Szeredi. All rights reserved.
   12 
   13     Redistribution and use in source and binary forms, with or without
   14     modification, are permitted provided that the following conditions
   15     are met:
   16     1. Redistributions of source code must retain the above copyright
   17        notice, this list of conditions and the following disclaimer.
   18     2. Redistributions in binary form must reproduce the above copyright
   19        notice, this list of conditions and the following disclaimer in the
   20        documentation and/or other materials provided with the distribution.
   21 
   22     THIS SOFTWARE IS PROVIDED BY AUTHOR AND CONTRIBUTORS ``AS IS'' AND
   23     ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
   24     IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
   25     ARE DISCLAIMED.  IN NO EVENT SHALL AUTHOR OR CONTRIBUTORS BE LIABLE
   26     FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
   27     DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
   28     OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
   29     HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
   30     LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
   31     OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
   32     SUCH DAMAGE.
   33  *
   34  * 7.12
   35  *  - add umask flag to input argument of open, mknod and mkdir
   36 */
   37 
   38 #ifndef linux
   39 #include <sys/types.h>
   40 #define __u64 uint64_t
   41 #define __u32 uint32_t
   42 #define __s32 int32_t
   43 #else
   44 #include <asm/types.h>
   45 #include <linux/major.h>
   46 #endif
   47 
   48 /** Version number of this interface */
   49 #define FUSE_KERNEL_VERSION 7
   50 
   51 /** Minor version number of this interface
   52  * We introduce ourself as 7.18 (Posix ACLS : 7.12, IOCTL_DIR : 7.18)
   53  * and we expect features features defined for 7.18, but not implemented
   54  * here to not be triggered by ntfs-3g.
   55  */
   56 #define FUSE_KERNEL_MINOR_VERSION 18
   57 
   58 /*
   59  * For binary compatibility with old kernels we accept falling back
   60  * to 7.12 or earlier maximum version supported by the kernel
   61  */
   62 
   63 #define FUSE_KERNEL_MAJOR_FALLBACK 7
   64 #define FUSE_KERNEL_MINOR_FALLBACK 12
   65 
   66 /** The node ID of the root inode */
   67 #define FUSE_ROOT_ID 1
   68 
   69 /** The major number of the fuse character device */
   70 #define FUSE_MAJOR MISC_MAJOR
   71 
   72 /** The minor number of the fuse character device */
   73 #define FUSE_MINOR 229
   74 
   75 /* Make sure all structures are padded to 64bit boundary, so 32bit
   76    userspace works under 64bit kernels */
   77 
   78 struct fuse_attr {
   79     __u64   ino;
   80     __u64   size;
   81     __u64   blocks;
   82     __u64   atime;
   83     __u64   mtime;
   84     __u64   ctime;
   85     __u32   atimensec;
   86     __u32   mtimensec;
   87     __u32   ctimensec;
   88     __u32   mode;
   89     __u32   nlink;
   90     __u32   uid;
   91     __u32   gid;
   92     __u32   rdev;
   93     __u64 filling; /* JPA needed for minor >= 12, but meaning unknown */
   94 };
   95 
   96 struct fuse_kstatfs {
   97     __u64   blocks;
   98     __u64   bfree;
   99     __u64   bavail;
  100     __u64   files;
  101     __u64   ffree;
  102     __u32   bsize;
  103     __u32   namelen;
  104     __u32   frsize;
  105     __u32   padding;
  106     __u32   spare[6];
  107 };
  108 
  109 struct fuse_file_lock {
  110     __u64   start;
  111     __u64   end;
  112     __u32   type;
  113     __u32   pid; /* tgid */
  114 };
  115 
  116 /**
  117  * Bitmasks for fuse_setattr_in.valid
  118  */
  119 #define FATTR_MODE  (1 << 0)
  120 #define FATTR_UID   (1 << 1)
  121 #define FATTR_GID   (1 << 2)
  122 #define FATTR_SIZE  (1 << 3)
  123 #define FATTR_ATIME (1 << 4)
  124 #define FATTR_MTIME (1 << 5)
  125 #define FATTR_FH    (1 << 6)
  126 
  127 /**
  128  * Flags returned by the OPEN request
  129  *
  130  * FOPEN_DIRECT_IO: bypass page cache for this open file
  131  * FOPEN_KEEP_CACHE: don't invalidate the data cache on open
  132  */
  133 #define FOPEN_DIRECT_IO     (1 << 0)
  134 #define FOPEN_KEEP_CACHE    (1 << 1)
  135 
  136 /**
  137  * INIT request/reply flags
  138  * FUSE_BIG_WRITES: allow big writes to be issued to the file system
  139  * FUSE_DONT_MASK: don't apply umask to file mode on create operations
  140  * FUSE_HAS_IOCTL_DIR: kernel supports ioctl on directories
  141  * FUSE_POSIX_ACL: kernel supports Posix ACLs
  142  */
  143 #define FUSE_ASYNC_READ     (1 << 0)
  144 #define FUSE_POSIX_LOCKS    (1 << 1)
  145 #define FUSE_BIG_WRITES     (1 << 5)
  146 #define FUSE_DONT_MASK      (1 << 6)
  147 #define FUSE_HAS_IOCTL_DIR  (1 << 11)
  148 #define FUSE_POSIX_ACL      (1 << 19)
  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     FUSE_IOCTL         = 39,
  193 };
  194 
  195 /* The read buffer is required to be at least 8k, but may be much larger */
  196 #define FUSE_MIN_READ_BUFFER 8192
  197 #define FUSE_COMPAT_ENTRY_OUT_SIZE 120 /* JPA */
  198 
  199 struct fuse_entry_out {
  200     __u64   nodeid;     /* Inode ID */
  201     __u64   generation; /* Inode generation: nodeid:gen must
  202                    be unique for the fs's lifetime */
  203     __u64   entry_valid;    /* Cache timeout for the name */
  204     __u64   attr_valid; /* Cache timeout for the attributes */
  205     __u32   entry_valid_nsec;
  206     __u32   attr_valid_nsec;
  207     struct fuse_attr attr;
  208 };
  209 
  210 struct fuse_forget_in {
  211     __u64   nlookup;
  212 };
  213 
  214 #define FUSE_COMPAT_FUSE_ATTR_OUT_SIZE 96  /* JPA */
  215 
  216 struct fuse_attr_out {
  217     __u64   attr_valid; /* Cache timeout for the attributes */
  218     __u32   attr_valid_nsec;
  219     __u32   dummy;
  220     struct fuse_attr attr;
  221 };
  222 
  223 #define FUSE_COMPAT_MKNOD_IN_SIZE 8
  224 
  225 struct fuse_mknod_in {
  226     __u32   mode;
  227     __u32   rdev;
  228     __u32   umask;
  229     __u32   padding;
  230 };
  231 
  232 struct fuse_mkdir_in {
  233     __u32   mode;
  234     __u32   umask;
  235 };
  236 
  237 struct fuse_rename_in {
  238     __u64   newdir;
  239 };
  240 
  241 struct fuse_link_in {
  242     __u64   oldnodeid;
  243 };
  244 
  245 struct fuse_setattr_in {
  246     __u32   valid;
  247     __u32   padding;
  248     __u64   fh;
  249     __u64   size;
  250     __u64   unused1;
  251     __u64   atime;
  252     __u64   mtime;
  253     __u64   unused2;
  254     __u32   atimensec;
  255     __u32   mtimensec;
  256     __u32   unused3;
  257     __u32   mode;
  258     __u32   unused4;
  259     __u32   uid;
  260     __u32   gid;
  261     __u32   unused5;
  262 };
  263 
  264 struct fuse_open_in {
  265     __u32   flags;
  266     __u32   mode; /* unused for protocol < 7.12 */
  267 };
  268 
  269 struct fuse_create_in {
  270     __u32   flags;
  271     __u32   mode;
  272     __u32   umask;
  273     __u32   padding;
  274 };
  275 
  276 struct fuse_open_out {
  277     __u64   fh;
  278     __u32   open_flags;
  279     __u32   padding;
  280 };
  281 
  282 struct fuse_release_in {
  283     __u64   fh;
  284     __u32   flags;
  285     __u32   release_flags;
  286     __u64   lock_owner;
  287 };
  288 
  289 struct fuse_flush_in {
  290     __u64   fh;
  291     __u32   unused;
  292     __u32   padding;
  293     __u64   lock_owner;
  294 };
  295 
  296 struct fuse_read_in {
  297     __u64   fh;
  298     __u64   offset;
  299     __u32   size;
  300     __u32   padding;
  301 };
  302 
  303 #define FUSE_COMPAT_WRITE_IN_SIZE 24 /* JPA */
  304 
  305 struct fuse_write_in {
  306     __u64   fh;
  307     __u64   offset;
  308     __u32   size;
  309     __u32   write_flags;
  310     __u64   lock_owner; /* JPA */
  311     __u32   flags; /* JPA */
  312     __u32   padding; /* JPA */
  313 };
  314 
  315 struct fuse_write_out {
  316     __u32   size;
  317     __u32   padding;
  318 };
  319 
  320 #define FUSE_COMPAT_STATFS_SIZE 48
  321 
  322 struct fuse_statfs_out {
  323     struct fuse_kstatfs st;
  324 };
  325 
  326 struct fuse_fsync_in {
  327     __u64   fh;
  328     __u32   fsync_flags;
  329     __u32   padding;
  330 };
  331 
  332 struct fuse_setxattr_in {
  333     __u32   size;
  334     __u32   flags;
  335 };
  336 
  337 struct fuse_getxattr_in {
  338     __u32   size;
  339     __u32   padding;
  340 };
  341 
  342 struct fuse_getxattr_out {
  343     __u32   size;
  344     __u32   padding;
  345 };
  346 
  347 struct fuse_lk_in {
  348     __u64   fh;
  349     __u64   owner;
  350     struct fuse_file_lock lk;
  351 };
  352 
  353 struct fuse_lk_out {
  354     struct fuse_file_lock lk;
  355 };
  356 
  357 struct fuse_access_in {
  358     __u32   mask;
  359     __u32   padding;
  360 };
  361 
  362 struct fuse_init_in {
  363     __u32   major;
  364     __u32   minor;
  365     __u32   max_readahead;
  366     __u32   flags;
  367 };
  368 
  369 struct fuse_init_out {
  370     __u32   major;
  371     __u32   minor;
  372     __u32   max_readahead;
  373     __u32   flags;
  374     __u32   unused;
  375     __u32   max_write;
  376 };
  377 
  378 struct fuse_interrupt_in {
  379     __u64   unique;
  380 };
  381 
  382 struct fuse_bmap_in {
  383     __u64   block;
  384     __u32   blocksize;
  385     __u32   padding;
  386 };
  387 
  388 struct fuse_bmap_out {
  389     __u64   block;
  390 };
  391 
  392 struct fuse_ioctl_in {
  393     __u64   fh;
  394     __u32   flags;
  395     __u32   cmd;
  396     __u64   arg;
  397     __u32   in_size;
  398     __u32   out_size;
  399 };
  400 
  401 struct fuse_ioctl_iovec {
  402     __u64   base;
  403     __u64   len;
  404 };
  405 
  406 struct fuse_ioctl_out {
  407     __s32   result;
  408     __u32   flags;
  409     __u32   in_iovs;
  410     __u32   out_iovs;
  411 };
  412 
  413 struct fuse_in_header {
  414     __u32   len;
  415     __u32   opcode;
  416     __u64   unique;
  417     __u64   nodeid;
  418     __u32   uid;
  419     __u32   gid;
  420     __u32   pid;
  421     __u32   padding;
  422 };
  423 
  424 struct fuse_out_header {
  425     __u32   len;
  426     __s32   error;
  427     __u64   unique;
  428 };
  429 
  430 struct fuse_dirent {
  431     __u64   ino;
  432     __u64   off;
  433     __u32   namelen;
  434     __u32   type;
  435     char name[0];
  436 };
  437 
  438 #define FUSE_NAME_OFFSET offsetof(struct fuse_dirent, name)
  439 #define FUSE_DIRENT_ALIGN(x) (((x) + sizeof(__u64) - 1) & ~(sizeof(__u64) - 1))
  440 #define FUSE_DIRENT_SIZE(d) \
  441     FUSE_DIRENT_ALIGN(FUSE_NAME_OFFSET + (d)->namelen)