blob: 035d0be53286e8d030b9114d732c76408bbe8a1f [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
Miklos Szeredi8cffdb92001-11-09 14:49:18 +000011/** Version number of this interface */
Miklos Szeredi2df1c042001-11-06 15:07:17 +000012#define FUSE_KERNEL_VERSION 1
Miklos Szeredi85c74fc2001-10-28 19:44:14 +000013
Miklos Szeredi8cffdb92001-11-09 14:49:18 +000014/** The inode number of the root indode */
Miklos Szeredi85c74fc2001-10-28 19:44:14 +000015#define FUSE_ROOT_INO 1
16
Miklos Szeredi8cffdb92001-11-09 14:49:18 +000017/** Opening this will yield a new control file */
18#define FUSE_DEV "/proc/fs/fuse/dev"
19
20/** Data passed to mount */
21struct fuse_mount_data {
22 /** Must be set to FUSE_KERNEL_VERSION */
23 int version;
24
25 /** The control file descriptor */
26 int fd;
27
28 /** The file type of the root inode */
29 unsigned int rootmode;
30
31 /** The user ID of the user initiating this mount */
32 unsigned int uid;
33
34 /** FUSE specific mount flags */
35 unsigned int flags;
36};
37
Miklos Szeredi85c74fc2001-10-28 19:44:14 +000038struct fuse_attr {
Miklos Szeredi5e183482001-10-31 14:52:35 +000039 unsigned int mode;
40 unsigned int nlink;
41 unsigned int uid;
42 unsigned int gid;
43 unsigned int rdev;
Miklos Szeredi85c74fc2001-10-28 19:44:14 +000044 unsigned long long size;
45 unsigned long blksize;
46 unsigned long blocks;
47 unsigned long atime;
48 unsigned long mtime;
49 unsigned long ctime;
50};
51
Miklos Szeredi5e183482001-10-31 14:52:35 +000052#define FATTR_MODE (1 << 0)
53#define FATTR_UID (1 << 1)
54#define FATTR_GID (1 << 2)
55#define FATTR_SIZE (1 << 3)
56#define FATTR_UTIME (1 << 4)
57
Miklos Szeredi85c74fc2001-10-28 19:44:14 +000058enum fuse_opcode {
59 FUSE_LOOKUP = 1,
60 FUSE_FORGET,
61 FUSE_GETATTR,
Miklos Szeredi5e183482001-10-31 14:52:35 +000062 FUSE_SETATTR,
Miklos Szeredi85c74fc2001-10-28 19:44:14 +000063 FUSE_READLINK,
Miklos Szeredi5e183482001-10-31 14:52:35 +000064 FUSE_SYMLINK,
Miklos Szeredi85c74fc2001-10-28 19:44:14 +000065 FUSE_GETDIR,
66 FUSE_MKNOD,
Miklos Szeredib483c932001-10-29 14:57:57 +000067 FUSE_MKDIR,
Miklos Szeredib483c932001-10-29 14:57:57 +000068 FUSE_UNLINK,
69 FUSE_RMDIR,
70 FUSE_RENAME,
Miklos Szeredi19dff1b2001-10-30 15:06:52 +000071 FUSE_LINK,
Miklos Szeredi5e183482001-10-31 14:52:35 +000072 FUSE_OPEN,
73 FUSE_READ,
Miklos Szeredia181e612001-11-06 12:03:23 +000074 FUSE_WRITE,
Miklos Szeredi85c74fc2001-10-28 19:44:14 +000075};
76
77/* Conservative buffer size for the client */
78#define FUSE_MAX_IN 8192
79
80struct fuse_lookup_out {
81 unsigned long ino;
82 struct fuse_attr attr;
83};
84
Miklos Szeredia181e612001-11-06 12:03:23 +000085struct fuse_forget_in {
86 int version;
87};
88
Miklos Szeredi85c74fc2001-10-28 19:44:14 +000089struct fuse_getattr_out {
90 struct fuse_attr attr;
91};
92
93struct fuse_getdir_out {
94 int fd;
95 void *file; /* Used by kernel only */
96};
97
98struct fuse_mknod_in {
99 unsigned short mode;
100 unsigned short rdev;
101 char name[1];
102};
103
104struct fuse_mknod_out {
105 unsigned long ino;
106 struct fuse_attr attr;
107};
108
Miklos Szeredib483c932001-10-29 14:57:57 +0000109struct fuse_mkdir_in {
110 unsigned short mode;
111 char name[1];
112};
113
Miklos Szeredib483c932001-10-29 14:57:57 +0000114struct fuse_rename_in {
115 unsigned long newdir;
Miklos Szeredi19dff1b2001-10-30 15:06:52 +0000116 char names[1];
117};
118
119struct fuse_link_in {
120 unsigned long newdir;
121 char name[1];
Miklos Szeredib483c932001-10-29 14:57:57 +0000122};
123
Miklos Szeredi5e183482001-10-31 14:52:35 +0000124struct fuse_setattr_in {
125 struct fuse_attr attr;
126 unsigned int valid;
127};
128
Miklos Szeredia181e612001-11-06 12:03:23 +0000129struct fuse_setattr_out {
Miklos Szeredif3ea83b2001-11-07 14:55:16 +0000130 struct fuse_attr attr;
Miklos Szeredia181e612001-11-06 12:03:23 +0000131};
132
Miklos Szeredi5e183482001-10-31 14:52:35 +0000133struct fuse_open_in {
134 unsigned int flags;
135};
136
137struct fuse_read_in {
138 unsigned long long offset;
139 unsigned int size;
140};
141
Miklos Szeredia181e612001-11-06 12:03:23 +0000142struct fuse_write_in {
143 unsigned long long offset;
144 unsigned int size;
145 char buf[1];
146};
147
Miklos Szeredi85c74fc2001-10-28 19:44:14 +0000148struct fuse_in_header {
149 int unique;
150 enum fuse_opcode opcode;
Miklos Szeredib483c932001-10-29 14:57:57 +0000151 unsigned long ino;
Miklos Szeredia181e612001-11-06 12:03:23 +0000152 unsigned int uid;
153 unsigned int gid;
Miklos Szeredi85c74fc2001-10-28 19:44:14 +0000154};
155
156struct fuse_out_header {
157 int unique;
Miklos Szeredi19dff1b2001-10-30 15:06:52 +0000158 int error;
Miklos Szeredi85c74fc2001-10-28 19:44:14 +0000159};
160
161struct fuse_dirent {
162 unsigned long ino;
163 unsigned short namelen;
164 unsigned char type;
165 char name[256];
166};
167
168#define FUSE_NAME_OFFSET ((unsigned int) ((struct fuse_dirent *) 0)->name)
169#define FUSE_DIRENT_ALIGN(x) (((x) + sizeof(long) - 1) & ~(sizeof(long) - 1))
170#define FUSE_DIRENT_SIZE(d) \
171 FUSE_DIRENT_ALIGN(FUSE_NAME_OFFSET + (d)->namelen)
172
173/*
174 * Local Variables:
175 * indent-tabs-mode: t
176 * c-basic-offset: 8
177 * End:
178 */