4 * 9P protocol definitions.
6 * Copyright (C) 2005 by Latchesar Ionkov <lucho@ionkov.net>
7 * Copyright (C) 2004 by Eric Van Hensbergen <ericvh@gmail.com>
8 * Copyright (C) 2002 by Ron Minnich <rminnich@lanl.gov>
10 * This program is free software; you can redistribute it and/or modify
11 * it under the terms of the GNU General Public License as published by
12 * the Free Software Foundation; either version 2 of the License, or
13 * (at your option) any later version.
15 * This program is distributed in the hope that it will be useful,
16 * but WITHOUT ANY WARRANTY; without even the implied warranty of
17 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18 * GNU General Public License for more details.
20 * You should have received a copy of the GNU General Public License
21 * along with this program; if not, write to:
22 * Free Software Foundation
23 * 51 Franklin Street, Fifth Floor
24 * Boston, MA 02111-1301 USA
75 V9FS_DMDIR
= 0x80000000,
76 V9FS_DMAPPEND
= 0x40000000,
77 V9FS_DMEXCL
= 0x20000000,
78 V9FS_DMMOUNT
= 0x10000000,
79 V9FS_DMAUTH
= 0x08000000,
80 V9FS_DMTMP
= 0x04000000,
81 V9FS_DMSYMLINK
= 0x02000000,
82 V9FS_DMLINK
= 0x01000000,
83 /* 9P2000.u extensions */
84 V9FS_DMDEVICE
= 0x00800000,
85 V9FS_DMNAMEDPIPE
= 0x00200000,
86 V9FS_DMSOCKET
= 0x00100000,
87 V9FS_DMSETUID
= 0x00080000,
88 V9FS_DMSETGID
= 0x00040000,
99 V9FS_QTSYMLINK
= 0x02,
104 #define V9FS_NOTAG (u16)(~0)
105 #define V9FS_NOFID (u32)(~0)
106 #define V9FS_MAXWELEM 16
108 /* ample room for Twrite/Rread header (iounit) */
109 #define V9FS_IOHDRSZ 24
116 /* qids are the unique ID for a file (like an inode */
123 /* Plan 9 file metadata (stat) structure */
133 struct v9fs_str name
;
136 struct v9fs_str muid
;
137 struct v9fs_str extension
; /* 9p2000.u extensions */
138 u32 n_uid
; /* 9p2000.u extensions */
139 u32 n_gid
; /* 9p2000.u extensions */
140 u32 n_muid
; /* 9p2000.u extensions */
143 /* file metadata (stat) structure used to create Twstat message
144 The is similar to v9fs_stat, but the strings don't point to
145 the same memory block and should be freed separately
160 char *extension
; /* 9p2000.u extensions */
161 u32 n_uid
; /* 9p2000.u extensions */
162 u32 n_gid
; /* 9p2000.u extensions */
163 u32 n_muid
; /* 9p2000.u extensions */
166 /* Structures for Protocol Operations */
170 struct v9fs_str version
;
175 struct v9fs_str version
;
180 struct v9fs_str uname
;
181 struct v9fs_str aname
;
189 struct v9fs_str error
;
190 u32 errno
; /* 9p2000.u extension */
203 struct v9fs_str uname
;
204 struct v9fs_str aname
;
215 struct v9fs_str wnames
[16];
220 struct v9fs_qid wqids
[16];
235 struct v9fs_str name
;
286 struct v9fs_stat stat
;
291 struct v9fs_stat stat
;
298 * fcall is the primary packet structure
309 struct Tversion tversion
;
310 struct Rversion rversion
;
313 struct Rerror rerror
;
314 struct Tflush tflush
;
315 struct Rflush rflush
;
316 struct Tattach tattach
;
317 struct Rattach rattach
;
322 struct Tcreate tcreate
;
323 struct Rcreate rcreate
;
326 struct Twrite twrite
;
327 struct Rwrite rwrite
;
328 struct Tclunk tclunk
;
329 struct Rclunk rclunk
;
330 struct Tremove tremove
;
331 struct Rremove rremove
;
334 struct Twstat twstat
;
335 struct Rwstat rwstat
;
339 #define PRINT_FCALL_ERROR(s, fcall) dprintk(DEBUG_ERROR, "%s: %.*s\n", s, \
340 fcall?fcall->params.rerror.error.len:0, \
341 fcall?fcall->params.rerror.error.str:"");
343 int v9fs_t_version(struct v9fs_session_info
*v9ses
, u32 msize
,
344 char *version
, struct v9fs_fcall
**rcall
);
346 int v9fs_t_attach(struct v9fs_session_info
*v9ses
, char *uname
, char *aname
,
347 u32 fid
, u32 afid
, struct v9fs_fcall
**rcall
);
349 int v9fs_t_clunk(struct v9fs_session_info
*v9ses
, u32 fid
);
351 int v9fs_t_flush(struct v9fs_session_info
*v9ses
, u16 oldtag
);
353 int v9fs_t_stat(struct v9fs_session_info
*v9ses
, u32 fid
,
354 struct v9fs_fcall
**rcall
);
356 int v9fs_t_wstat(struct v9fs_session_info
*v9ses
, u32 fid
,
357 struct v9fs_wstat
*wstat
, struct v9fs_fcall
**rcall
);
359 int v9fs_t_walk(struct v9fs_session_info
*v9ses
, u32 fid
, u32 newfid
,
360 char *name
, struct v9fs_fcall
**rcall
);
362 int v9fs_t_open(struct v9fs_session_info
*v9ses
, u32 fid
, u8 mode
,
363 struct v9fs_fcall
**rcall
);
365 int v9fs_t_remove(struct v9fs_session_info
*v9ses
, u32 fid
,
366 struct v9fs_fcall
**rcall
);
368 int v9fs_t_create(struct v9fs_session_info
*v9ses
, u32 fid
, char *name
,
369 u32 perm
, u8 mode
, struct v9fs_fcall
**rcall
);
371 int v9fs_t_read(struct v9fs_session_info
*v9ses
, u32 fid
,
372 u64 offset
, u32 count
, struct v9fs_fcall
**rcall
);
374 int v9fs_t_write(struct v9fs_session_info
*v9ses
, u32 fid
, u64 offset
,
375 u32 count
, const char __user
* data
,
376 struct v9fs_fcall
**rcall
);