123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417 |
- /*
- * include/net/9p/9p.h
- *
- * 9P protocol definitions.
- *
- * Copyright (C) 2005 by Latchesar Ionkov <lucho@ionkov.net>
- * Copyright (C) 2004 by Eric Van Hensbergen <ericvh@gmail.com>
- * Copyright (C) 2002 by Ron Minnich <rminnich@lanl.gov>
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2
- * as published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to:
- * Free Software Foundation
- * 51 Franklin Street, Fifth Floor
- * Boston, MA 02111-1301 USA
- *
- */
- #ifndef NET_9P_H
- #define NET_9P_H
- #ifdef CONFIG_NET_9P_DEBUG
- #define P9_DEBUG_ERROR (1<<0)
- #define P9_DEBUG_9P (1<<2)
- #define P9_DEBUG_VFS (1<<3)
- #define P9_DEBUG_CONV (1<<4)
- #define P9_DEBUG_MUX (1<<5)
- #define P9_DEBUG_TRANS (1<<6)
- #define P9_DEBUG_SLABS (1<<7)
- #define P9_DEBUG_FCALL (1<<8)
- extern unsigned int p9_debug_level;
- #define P9_DPRINTK(level, format, arg...) \
- do { \
- if ((p9_debug_level & level) == level) \
- printk(KERN_NOTICE "-- %s (%d): " \
- format , __FUNCTION__, current->pid , ## arg); \
- } while (0)
- #define PRINT_FCALL_ERROR(s, fcall) P9_DPRINTK(P9_DEBUG_ERROR, \
- "%s: %.*s\n", s, fcall?fcall->params.rerror.error.len:0, \
- fcall?fcall->params.rerror.error.str:"");
- #else
- #define P9_DPRINTK(level, format, arg...) do { } while (0)
- #define PRINT_FCALL_ERROR(s, fcall) do { } while (0)
- #endif
- #define P9_EPRINTK(level, format, arg...) \
- do { \
- printk(level "9p: %s (%d): " \
- format , __FUNCTION__, current->pid , ## arg); \
- } while (0)
- /* Message Types */
- enum {
- P9_TVERSION = 100,
- P9_RVERSION,
- P9_TAUTH = 102,
- P9_RAUTH,
- P9_TATTACH = 104,
- P9_RATTACH,
- P9_TERROR = 106,
- P9_RERROR,
- P9_TFLUSH = 108,
- P9_RFLUSH,
- P9_TWALK = 110,
- P9_RWALK,
- P9_TOPEN = 112,
- P9_ROPEN,
- P9_TCREATE = 114,
- P9_RCREATE,
- P9_TREAD = 116,
- P9_RREAD,
- P9_TWRITE = 118,
- P9_RWRITE,
- P9_TCLUNK = 120,
- P9_RCLUNK,
- P9_TREMOVE = 122,
- P9_RREMOVE,
- P9_TSTAT = 124,
- P9_RSTAT,
- P9_TWSTAT = 126,
- P9_RWSTAT,
- };
- /* open modes */
- enum {
- P9_OREAD = 0x00,
- P9_OWRITE = 0x01,
- P9_ORDWR = 0x02,
- P9_OEXEC = 0x03,
- P9_OEXCL = 0x04,
- P9_OTRUNC = 0x10,
- P9_OREXEC = 0x20,
- P9_ORCLOSE = 0x40,
- P9_OAPPEND = 0x80,
- };
- /* permissions */
- enum {
- P9_DMDIR = 0x80000000,
- P9_DMAPPEND = 0x40000000,
- P9_DMEXCL = 0x20000000,
- P9_DMMOUNT = 0x10000000,
- P9_DMAUTH = 0x08000000,
- P9_DMTMP = 0x04000000,
- P9_DMSYMLINK = 0x02000000,
- P9_DMLINK = 0x01000000,
- /* 9P2000.u extensions */
- P9_DMDEVICE = 0x00800000,
- P9_DMNAMEDPIPE = 0x00200000,
- P9_DMSOCKET = 0x00100000,
- P9_DMSETUID = 0x00080000,
- P9_DMSETGID = 0x00040000,
- };
- /* qid.types */
- enum {
- P9_QTDIR = 0x80,
- P9_QTAPPEND = 0x40,
- P9_QTEXCL = 0x20,
- P9_QTMOUNT = 0x10,
- P9_QTAUTH = 0x08,
- P9_QTTMP = 0x04,
- P9_QTSYMLINK = 0x02,
- P9_QTLINK = 0x01,
- P9_QTFILE = 0x00,
- };
- #define P9_NOTAG (u16)(~0)
- #define P9_NOFID (u32)(~0)
- #define P9_MAXWELEM 16
- /* ample room for Twrite/Rread header */
- #define P9_IOHDRSZ 24
- struct p9_str {
- u16 len;
- char *str;
- };
- /* qids are the unique ID for a file (like an inode */
- struct p9_qid {
- u8 type;
- u32 version;
- u64 path;
- };
- /* Plan 9 file metadata (stat) structure */
- struct p9_stat {
- u16 size;
- u16 type;
- u32 dev;
- struct p9_qid qid;
- u32 mode;
- u32 atime;
- u32 mtime;
- u64 length;
- struct p9_str name;
- struct p9_str uid;
- struct p9_str gid;
- struct p9_str muid;
- struct p9_str extension; /* 9p2000.u extensions */
- u32 n_uid; /* 9p2000.u extensions */
- u32 n_gid; /* 9p2000.u extensions */
- u32 n_muid; /* 9p2000.u extensions */
- };
- /* file metadata (stat) structure used to create Twstat message
- The is similar to p9_stat, but the strings don't point to
- the same memory block and should be freed separately
- */
- struct p9_wstat {
- u16 size;
- u16 type;
- u32 dev;
- struct p9_qid qid;
- u32 mode;
- u32 atime;
- u32 mtime;
- u64 length;
- char *name;
- char *uid;
- char *gid;
- char *muid;
- char *extension; /* 9p2000.u extensions */
- u32 n_uid; /* 9p2000.u extensions */
- u32 n_gid; /* 9p2000.u extensions */
- u32 n_muid; /* 9p2000.u extensions */
- };
- /* Structures for Protocol Operations */
- struct p9_tversion {
- u32 msize;
- struct p9_str version;
- };
- struct p9_rversion {
- u32 msize;
- struct p9_str version;
- };
- struct p9_tauth {
- u32 afid;
- struct p9_str uname;
- struct p9_str aname;
- };
- struct p9_rauth {
- struct p9_qid qid;
- };
- struct p9_rerror {
- struct p9_str error;
- u32 errno; /* 9p2000.u extension */
- };
- struct p9_tflush {
- u16 oldtag;
- };
- struct p9_rflush {
- };
- struct p9_tattach {
- u32 fid;
- u32 afid;
- struct p9_str uname;
- struct p9_str aname;
- };
- struct p9_rattach {
- struct p9_qid qid;
- };
- struct p9_twalk {
- u32 fid;
- u32 newfid;
- u16 nwname;
- struct p9_str wnames[16];
- };
- struct p9_rwalk {
- u16 nwqid;
- struct p9_qid wqids[16];
- };
- struct p9_topen {
- u32 fid;
- u8 mode;
- };
- struct p9_ropen {
- struct p9_qid qid;
- u32 iounit;
- };
- struct p9_tcreate {
- u32 fid;
- struct p9_str name;
- u32 perm;
- u8 mode;
- struct p9_str extension;
- };
- struct p9_rcreate {
- struct p9_qid qid;
- u32 iounit;
- };
- struct p9_tread {
- u32 fid;
- u64 offset;
- u32 count;
- };
- struct p9_rread {
- u32 count;
- u8 *data;
- };
- struct p9_twrite {
- u32 fid;
- u64 offset;
- u32 count;
- u8 *data;
- };
- struct p9_rwrite {
- u32 count;
- };
- struct p9_tclunk {
- u32 fid;
- };
- struct p9_rclunk {
- };
- struct p9_tremove {
- u32 fid;
- };
- struct p9_rremove {
- };
- struct p9_tstat {
- u32 fid;
- };
- struct p9_rstat {
- struct p9_stat stat;
- };
- struct p9_twstat {
- u32 fid;
- struct p9_stat stat;
- };
- struct p9_rwstat {
- };
- /*
- * fcall is the primary packet structure
- *
- */
- struct p9_fcall {
- u32 size;
- u8 id;
- u16 tag;
- void *sdata;
- union {
- struct p9_tversion tversion;
- struct p9_rversion rversion;
- struct p9_tauth tauth;
- struct p9_rauth rauth;
- struct p9_rerror rerror;
- struct p9_tflush tflush;
- struct p9_rflush rflush;
- struct p9_tattach tattach;
- struct p9_rattach rattach;
- struct p9_twalk twalk;
- struct p9_rwalk rwalk;
- struct p9_topen topen;
- struct p9_ropen ropen;
- struct p9_tcreate tcreate;
- struct p9_rcreate rcreate;
- struct p9_tread tread;
- struct p9_rread rread;
- struct p9_twrite twrite;
- struct p9_rwrite rwrite;
- struct p9_tclunk tclunk;
- struct p9_rclunk rclunk;
- struct p9_tremove tremove;
- struct p9_rremove rremove;
- struct p9_tstat tstat;
- struct p9_rstat rstat;
- struct p9_twstat twstat;
- struct p9_rwstat rwstat;
- } params;
- };
- struct p9_idpool;
- int p9_deserialize_stat(void *buf, u32 buflen, struct p9_stat *stat,
- int dotu);
- int p9_deserialize_fcall(void *buf, u32 buflen, struct p9_fcall *fc, int dotu);
- void p9_set_tag(struct p9_fcall *fc, u16 tag);
- struct p9_fcall *p9_create_tversion(u32 msize, char *version);
- struct p9_fcall *p9_create_tattach(u32 fid, u32 afid, char *uname,
- char *aname);
- struct p9_fcall *p9_create_tauth(u32 afid, char *uname, char *aname);
- struct p9_fcall *p9_create_tflush(u16 oldtag);
- struct p9_fcall *p9_create_twalk(u32 fid, u32 newfid, u16 nwname,
- char **wnames);
- struct p9_fcall *p9_create_topen(u32 fid, u8 mode);
- struct p9_fcall *p9_create_tcreate(u32 fid, char *name, u32 perm, u8 mode,
- char *extension, int dotu);
- struct p9_fcall *p9_create_tread(u32 fid, u64 offset, u32 count);
- struct p9_fcall *p9_create_twrite(u32 fid, u64 offset, u32 count,
- const char *data);
- struct p9_fcall *p9_create_twrite_u(u32 fid, u64 offset, u32 count,
- const char __user *data);
- struct p9_fcall *p9_create_tclunk(u32 fid);
- struct p9_fcall *p9_create_tremove(u32 fid);
- struct p9_fcall *p9_create_tstat(u32 fid);
- struct p9_fcall *p9_create_twstat(u32 fid, struct p9_wstat *wstat,
- int dotu);
- int p9_printfcall(char *buf, int buflen, struct p9_fcall *fc, int dotu);
- int p9_errstr2errno(char *errstr, int len);
- struct p9_idpool *p9_idpool_create(void);
- void p9_idpool_destroy(struct p9_idpool *);
- int p9_idpool_get(struct p9_idpool *p);
- void p9_idpool_put(int id, struct p9_idpool *p);
- int p9_idpool_check(int id, struct p9_idpool *p);
- int p9_error_init(void);
- int p9_errstr2errno(char *, int);
- int __init p9_sysctl_register(void);
- void __exit p9_sysctl_unregister(void);
- #endif /* NET_9P_H */
|