blob: a6e74dfbaf9f73d1a7295ff1f1abaa867c96523a [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 Szeredia181e612001-11-06 12:03:23 +000057 FUSE_WRITE,
Miklos Szeredi85c74fc2001-10-28 19:44:14 +000058};
59
60/* Conservative buffer size for the client */
61#define FUSE_MAX_IN 8192
62
63struct fuse_lookup_out {
64 unsigned long ino;
65 struct fuse_attr attr;
66};
67
Miklos Szeredia181e612001-11-06 12:03:23 +000068struct fuse_forget_in {
69 int version;
70};
71
Miklos Szeredi85c74fc2001-10-28 19:44:14 +000072struct fuse_getattr_out {
73 struct fuse_attr attr;
74};
75
76struct fuse_getdir_out {
77 int fd;
78 void *file; /* Used by kernel only */
79};
80
81struct fuse_mknod_in {
82 unsigned short mode;
83 unsigned short rdev;
84 char name[1];
85};
86
87struct fuse_mknod_out {
88 unsigned long ino;
89 struct fuse_attr attr;
90};
91
Miklos Szeredib483c932001-10-29 14:57:57 +000092struct fuse_mkdir_in {
93 unsigned short mode;
94 char name[1];
95};
96
Miklos Szeredib483c932001-10-29 14:57:57 +000097struct fuse_rename_in {
98 unsigned long newdir;
Miklos Szeredi19dff1b2001-10-30 15:06:52 +000099 char names[1];
100};
101
102struct fuse_link_in {
103 unsigned long newdir;
104 char name[1];
Miklos Szeredib483c932001-10-29 14:57:57 +0000105};
106
Miklos Szeredi5e183482001-10-31 14:52:35 +0000107struct fuse_setattr_in {
108 struct fuse_attr attr;
109 unsigned int valid;
110};
111
Miklos Szeredia181e612001-11-06 12:03:23 +0000112struct fuse_setattr_out {
113 unsigned long long newsize;
114};
115
Miklos Szeredi5e183482001-10-31 14:52:35 +0000116struct fuse_open_in {
117 unsigned int flags;
118};
119
120struct fuse_read_in {
121 unsigned long long offset;
122 unsigned int size;
123};
124
Miklos Szeredia181e612001-11-06 12:03:23 +0000125struct fuse_write_in {
126 unsigned long long offset;
127 unsigned int size;
128 char buf[1];
129};
130
Miklos Szeredi85c74fc2001-10-28 19:44:14 +0000131struct fuse_in_header {
132 int unique;
133 enum fuse_opcode opcode;
Miklos Szeredib483c932001-10-29 14:57:57 +0000134 unsigned long ino;
Miklos Szeredia181e612001-11-06 12:03:23 +0000135 unsigned int uid;
136 unsigned int gid;
Miklos Szeredi85c74fc2001-10-28 19:44:14 +0000137};
138
139struct fuse_out_header {
140 int unique;
Miklos Szeredi19dff1b2001-10-30 15:06:52 +0000141 int error;
Miklos Szeredi85c74fc2001-10-28 19:44:14 +0000142};
143
144struct fuse_dirent {
145 unsigned long ino;
146 unsigned short namelen;
147 unsigned char type;
148 char name[256];
149};
150
151#define FUSE_NAME_OFFSET ((unsigned int) ((struct fuse_dirent *) 0)->name)
152#define FUSE_DIRENT_ALIGN(x) (((x) + sizeof(long) - 1) & ~(sizeof(long) - 1))
153#define FUSE_DIRENT_SIZE(d) \
154 FUSE_DIRENT_ALIGN(FUSE_NAME_OFFSET + (d)->namelen)
155
156/*
157 * Local Variables:
158 * indent-tabs-mode: t
159 * c-basic-offset: 8
160 * End:
161 */