blob: 5fe008ca2c11ad7532c5f57c4f55879d1666fd09 [file] [log] [blame]
Miklos Szeredi85c74fc2001-10-28 19:44:14 +00001/*
2 FUSE: Filesystem in Userspace
3 Copyright (C) 2001 Miklos Szeredi (mszeredi@inf.bme.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
12#define FUSE_MOUNT_VERSION 1
13
14struct fuse_mount_data {
15 int version;
16 int fd;
17};
18
19#define FUSE_ROOT_INO 1
20
21struct fuse_attr {
Miklos Szeredi5e183482001-10-31 14:52:35 +000022 unsigned int mode;
23 unsigned int nlink;
24 unsigned int uid;
25 unsigned int gid;
26 unsigned int rdev;
Miklos Szeredi85c74fc2001-10-28 19:44:14 +000027 unsigned long long size;
28 unsigned long blksize;
29 unsigned long blocks;
30 unsigned long atime;
31 unsigned long mtime;
32 unsigned long ctime;
33};
34
Miklos Szeredi5e183482001-10-31 14:52:35 +000035#define FATTR_MODE (1 << 0)
36#define FATTR_UID (1 << 1)
37#define FATTR_GID (1 << 2)
38#define FATTR_SIZE (1 << 3)
39#define FATTR_UTIME (1 << 4)
40
Miklos Szeredi85c74fc2001-10-28 19:44:14 +000041enum fuse_opcode {
42 FUSE_LOOKUP = 1,
43 FUSE_FORGET,
44 FUSE_GETATTR,
Miklos Szeredi5e183482001-10-31 14:52:35 +000045 FUSE_SETATTR,
Miklos Szeredi85c74fc2001-10-28 19:44:14 +000046 FUSE_READLINK,
Miklos Szeredi5e183482001-10-31 14:52:35 +000047 FUSE_SYMLINK,
Miklos Szeredi85c74fc2001-10-28 19:44:14 +000048 FUSE_GETDIR,
49 FUSE_MKNOD,
Miklos Szeredib483c932001-10-29 14:57:57 +000050 FUSE_MKDIR,
Miklos Szeredib483c932001-10-29 14:57:57 +000051 FUSE_UNLINK,
52 FUSE_RMDIR,
53 FUSE_RENAME,
Miklos Szeredi19dff1b2001-10-30 15:06:52 +000054 FUSE_LINK,
Miklos Szeredi5e183482001-10-31 14:52:35 +000055 FUSE_OPEN,
56 FUSE_READ,
Miklos Szeredi85c74fc2001-10-28 19:44:14 +000057};
58
59/* Conservative buffer size for the client */
60#define FUSE_MAX_IN 8192
61
62struct fuse_lookup_out {
63 unsigned long ino;
64 struct fuse_attr attr;
65};
66
67struct fuse_getattr_out {
68 struct fuse_attr attr;
69};
70
71struct fuse_getdir_out {
72 int fd;
73 void *file; /* Used by kernel only */
74};
75
76struct fuse_mknod_in {
77 unsigned short mode;
78 unsigned short rdev;
79 char name[1];
80};
81
82struct fuse_mknod_out {
83 unsigned long ino;
84 struct fuse_attr attr;
85};
86
Miklos Szeredib483c932001-10-29 14:57:57 +000087struct fuse_mkdir_in {
88 unsigned short mode;
89 char name[1];
90};
91
Miklos Szeredib483c932001-10-29 14:57:57 +000092struct fuse_rename_in {
93 unsigned long newdir;
Miklos Szeredi19dff1b2001-10-30 15:06:52 +000094 char names[1];
95};
96
97struct fuse_link_in {
98 unsigned long newdir;
99 char name[1];
Miklos Szeredib483c932001-10-29 14:57:57 +0000100};
101
Miklos Szeredi5e183482001-10-31 14:52:35 +0000102struct fuse_setattr_in {
103 struct fuse_attr attr;
104 unsigned int valid;
105};
106
107struct fuse_open_in {
108 unsigned int flags;
109};
110
111struct fuse_read_in {
112 unsigned long long offset;
113 unsigned int size;
114};
115
Miklos Szeredi85c74fc2001-10-28 19:44:14 +0000116struct fuse_in_header {
117 int unique;
118 enum fuse_opcode opcode;
Miklos Szeredib483c932001-10-29 14:57:57 +0000119 unsigned long ino;
Miklos Szeredi85c74fc2001-10-28 19:44:14 +0000120};
121
122struct fuse_out_header {
123 int unique;
Miklos Szeredi19dff1b2001-10-30 15:06:52 +0000124 int error;
Miklos Szeredi85c74fc2001-10-28 19:44:14 +0000125};
126
127struct fuse_dirent {
128 unsigned long ino;
129 unsigned short namelen;
130 unsigned char type;
131 char name[256];
132};
133
134#define FUSE_NAME_OFFSET ((unsigned int) ((struct fuse_dirent *) 0)->name)
135#define FUSE_DIRENT_ALIGN(x) (((x) + sizeof(long) - 1) & ~(sizeof(long) - 1))
136#define FUSE_DIRENT_SIZE(d) \
137 FUSE_DIRENT_ALIGN(FUSE_NAME_OFFSET + (d)->namelen)
138
139/*
140 * Local Variables:
141 * indent-tabs-mode: t
142 * c-basic-offset: 8
143 * End:
144 */