home *** CD-ROM | disk | FTP | other *** search
/ PC Welt 2006 November (DVD) / PCWELT_11_2006.ISO / casper / filesystem.squashfs / usr / src / linux-headers-2.6.17-6 / include / linux / fuse.h < prev    next >
Encoding:
C/C++ Source or Header  |  2006-08-11  |  5.1 KB  |  300 lines

  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 6
  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.     __u32    frsize;
  57.     __u32    padding;
  58.     __u32    spare[6];
  59. };
  60.  
  61. /**
  62.  * Bitmasks for fuse_setattr_in.valid
  63.  */
  64. #define FATTR_MODE    (1 << 0)
  65. #define FATTR_UID    (1 << 1)
  66. #define FATTR_GID    (1 << 2)
  67. #define FATTR_SIZE    (1 << 3)
  68. #define FATTR_ATIME    (1 << 4)
  69. #define FATTR_MTIME    (1 << 5)
  70. #define FATTR_FH    (1 << 6)
  71.  
  72. /**
  73.  * Flags returned by the OPEN request
  74.  *
  75.  * FOPEN_DIRECT_IO: bypass page cache for this open file
  76.  * FOPEN_KEEP_CACHE: don't invalidate the data cache on open
  77.  */
  78. #define FOPEN_DIRECT_IO        (1 << 0)
  79. #define FOPEN_KEEP_CACHE    (1 << 1)
  80.  
  81. /**
  82.  * INIT request/reply flags
  83.  */
  84. #define FUSE_ASYNC_READ        (1 << 0)
  85.  
  86. enum fuse_opcode {
  87.     FUSE_LOOKUP       = 1,
  88.     FUSE_FORGET       = 2,  /* no reply */
  89.     FUSE_GETATTR       = 3,
  90.     FUSE_SETATTR       = 4,
  91.     FUSE_READLINK       = 5,
  92.     FUSE_SYMLINK       = 6,
  93.     FUSE_MKNOD       = 8,
  94.     FUSE_MKDIR       = 9,
  95.     FUSE_UNLINK       = 10,
  96.     FUSE_RMDIR       = 11,
  97.     FUSE_RENAME       = 12,
  98.     FUSE_LINK       = 13,
  99.     FUSE_OPEN       = 14,
  100.     FUSE_READ       = 15,
  101.     FUSE_WRITE       = 16,
  102.     FUSE_STATFS       = 17,
  103.     FUSE_RELEASE       = 18,
  104.     FUSE_FSYNC         = 20,
  105.     FUSE_SETXATTR      = 21,
  106.     FUSE_GETXATTR      = 22,
  107.     FUSE_LISTXATTR     = 23,
  108.     FUSE_REMOVEXATTR   = 24,
  109.     FUSE_FLUSH         = 25,
  110.     FUSE_INIT          = 26,
  111.     FUSE_OPENDIR       = 27,
  112.     FUSE_READDIR       = 28,
  113.     FUSE_RELEASEDIR    = 29,
  114.     FUSE_FSYNCDIR      = 30,
  115.     FUSE_ACCESS        = 34,
  116.     FUSE_CREATE        = 35
  117. };
  118.  
  119. /* The read buffer is required to be at least 8k, but may be much larger */
  120. #define FUSE_MIN_READ_BUFFER 8192
  121.  
  122. struct fuse_entry_out {
  123.     __u64    nodeid;        /* Inode ID */
  124.     __u64    generation;    /* Inode generation: nodeid:gen must
  125.                    be unique for the fs's lifetime */
  126.     __u64    entry_valid;    /* Cache timeout for the name */
  127.     __u64    attr_valid;    /* Cache timeout for the attributes */
  128.     __u32    entry_valid_nsec;
  129.     __u32    attr_valid_nsec;
  130.     struct fuse_attr attr;
  131. };
  132.  
  133. struct fuse_forget_in {
  134.     __u64    nlookup;
  135. };
  136.  
  137. struct fuse_attr_out {
  138.     __u64    attr_valid;    /* Cache timeout for the attributes */
  139.     __u32    attr_valid_nsec;
  140.     __u32    dummy;
  141.     struct fuse_attr attr;
  142. };
  143.  
  144. struct fuse_mknod_in {
  145.     __u32    mode;
  146.     __u32    rdev;
  147. };
  148.  
  149. struct fuse_mkdir_in {
  150.     __u32    mode;
  151.     __u32    padding;
  152. };
  153.  
  154. struct fuse_rename_in {
  155.     __u64    newdir;
  156. };
  157.  
  158. struct fuse_link_in {
  159.     __u64    oldnodeid;
  160. };
  161.  
  162. struct fuse_setattr_in {
  163.     __u32    valid;
  164.     __u32    padding;
  165.     __u64    fh;
  166.     __u64    size;
  167.     __u64    unused1;
  168.     __u64    atime;
  169.     __u64    mtime;
  170.     __u64    unused2;
  171.     __u32    atimensec;
  172.     __u32    mtimensec;
  173.     __u32    unused3;
  174.     __u32    mode;
  175.     __u32    unused4;
  176.     __u32    uid;
  177.     __u32    gid;
  178.     __u32    unused5;
  179. };
  180.  
  181. struct fuse_open_in {
  182.     __u32    flags;
  183.     __u32    mode;
  184. };
  185.  
  186. struct fuse_open_out {
  187.     __u64    fh;
  188.     __u32    open_flags;
  189.     __u32    padding;
  190. };
  191.  
  192. struct fuse_release_in {
  193.     __u64    fh;
  194.     __u32    flags;
  195.     __u32    padding;
  196. };
  197.  
  198. struct fuse_flush_in {
  199.     __u64    fh;
  200.     __u32    flush_flags;
  201.     __u32    padding;
  202. };
  203.  
  204. struct fuse_read_in {
  205.     __u64    fh;
  206.     __u64    offset;
  207.     __u32    size;
  208.     __u32    padding;
  209. };
  210.  
  211. struct fuse_write_in {
  212.     __u64    fh;
  213.     __u64    offset;
  214.     __u32    size;
  215.     __u32    write_flags;
  216. };
  217.  
  218. struct fuse_write_out {
  219.     __u32    size;
  220.     __u32    padding;
  221. };
  222.  
  223. #define FUSE_COMPAT_STATFS_SIZE 48
  224.  
  225. struct fuse_statfs_out {
  226.     struct fuse_kstatfs st;
  227. };
  228.  
  229. struct fuse_fsync_in {
  230.     __u64    fh;
  231.     __u32    fsync_flags;
  232.     __u32    padding;
  233. };
  234.  
  235. struct fuse_setxattr_in {
  236.     __u32    size;
  237.     __u32    flags;
  238. };
  239.  
  240. struct fuse_getxattr_in {
  241.     __u32    size;
  242.     __u32    padding;
  243. };
  244.  
  245. struct fuse_getxattr_out {
  246.     __u32    size;
  247.     __u32    padding;
  248. };
  249.  
  250. struct fuse_access_in {
  251.     __u32    mask;
  252.     __u32    padding;
  253. };
  254.  
  255. struct fuse_init_in {
  256.     __u32    major;
  257.     __u32    minor;
  258.     __u32    max_readahead;
  259.     __u32    flags;
  260. };
  261.  
  262. struct fuse_init_out {
  263.     __u32    major;
  264.     __u32    minor;
  265.     __u32    max_readahead;
  266.     __u32    flags;
  267.     __u32    unused;
  268.     __u32    max_write;
  269. };
  270.  
  271. struct fuse_in_header {
  272.     __u32    len;
  273.     __u32    opcode;
  274.     __u64    unique;
  275.     __u64    nodeid;
  276.     __u32    uid;
  277.     __u32    gid;
  278.     __u32    pid;
  279.     __u32    padding;
  280. };
  281.  
  282. struct fuse_out_header {
  283.     __u32    len;
  284.     __s32    error;
  285.     __u64    unique;
  286. };
  287.  
  288. struct fuse_dirent {
  289.     __u64    ino;
  290.     __u64    off;
  291.     __u32    namelen;
  292.     __u32    type;
  293.     char name[0];
  294. };
  295.  
  296. #define FUSE_NAME_OFFSET ((unsigned) ((struct fuse_dirent *) 0)->name)
  297. #define FUSE_DIRENT_ALIGN(x) (((x) + sizeof(__u64) - 1) & ~(sizeof(__u64) - 1))
  298. #define FUSE_DIRENT_SIZE(d) \
  299.     FUSE_DIRENT_ALIGN(FUSE_NAME_OFFSET + (d)->namelen)
  300.