11f327613SThomas Gleixner /* SPDX-License-Identifier: GPL-2.0-only */ 2bd238fb4SLatchesar Ionkov /* 3bd238fb4SLatchesar Ionkov * 9P protocol definitions. 4bd238fb4SLatchesar Ionkov * 5bd238fb4SLatchesar Ionkov * Copyright (C) 2005 by Latchesar Ionkov <lucho@ionkov.net> 6bd238fb4SLatchesar Ionkov * Copyright (C) 2004 by Eric Van Hensbergen <ericvh@gmail.com> 7bd238fb4SLatchesar Ionkov * Copyright (C) 2002 by Ron Minnich <rminnich@lanl.gov> 8bd238fb4SLatchesar Ionkov */ 9bd238fb4SLatchesar Ionkov 10bd238fb4SLatchesar Ionkov #ifndef NET_9P_H 11bd238fb4SLatchesar Ionkov #define NET_9P_H 12bd238fb4SLatchesar Ionkov 13ee443996SEric Van Hensbergen /** 14ee443996SEric Van Hensbergen * enum p9_debug_flags - bits for mount time debug parameter 15ee443996SEric Van Hensbergen * @P9_DEBUG_ERROR: more verbose error messages including original error string 16ee443996SEric Van Hensbergen * @P9_DEBUG_9P: 9P protocol tracing 17ee443996SEric Van Hensbergen * @P9_DEBUG_VFS: VFS API tracing 18ee443996SEric Van Hensbergen * @P9_DEBUG_CONV: protocol conversion tracing 19ee443996SEric Van Hensbergen * @P9_DEBUG_MUX: trace management of concurrent transactions 20ee443996SEric Van Hensbergen * @P9_DEBUG_TRANS: transport tracing 21ee443996SEric Van Hensbergen * @P9_DEBUG_SLABS: memory management tracing 22ee443996SEric Van Hensbergen * @P9_DEBUG_FCALL: verbose dump of protocol messages 2351a87c55SEric Van Hensbergen * @P9_DEBUG_FID: fid allocation/deallocation tracking 2460e78d2cSAbhishek Kulkarni * @P9_DEBUG_PKT: packet marshalling/unmarshalling 2560e78d2cSAbhishek Kulkarni * @P9_DEBUG_FSC: FS-cache tracing 26e660a828SEric Van Hensbergen * @P9_DEBUG_VPKT: Verbose packet debugging (full packet dump) 27ee443996SEric Van Hensbergen * 28ee443996SEric Van Hensbergen * These flags are passed at mount time to turn on various levels of 29ee443996SEric Van Hensbergen * verbosity and tracing which will be output to the system logs. 30ee443996SEric Van Hensbergen */ 31ee443996SEric Van Hensbergen 32ee443996SEric Van Hensbergen enum p9_debug_flags { 33ee443996SEric Van Hensbergen P9_DEBUG_ERROR = (1<<0), 34ee443996SEric Van Hensbergen P9_DEBUG_9P = (1<<2), 35ee443996SEric Van Hensbergen P9_DEBUG_VFS = (1<<3), 36ee443996SEric Van Hensbergen P9_DEBUG_CONV = (1<<4), 37ee443996SEric Van Hensbergen P9_DEBUG_MUX = (1<<5), 38ee443996SEric Van Hensbergen P9_DEBUG_TRANS = (1<<6), 39ee443996SEric Van Hensbergen P9_DEBUG_SLABS = (1<<7), 40ee443996SEric Van Hensbergen P9_DEBUG_FCALL = (1<<8), 4151a87c55SEric Van Hensbergen P9_DEBUG_FID = (1<<9), 42e7f4b8f1SEric Van Hensbergen P9_DEBUG_PKT = (1<<10), 4360e78d2cSAbhishek Kulkarni P9_DEBUG_FSC = (1<<11), 44e660a828SEric Van Hensbergen P9_DEBUG_VPKT = (1<<12), 45*46c30cb8SEric Van Hensbergen P9_DEBUG_CACHE = (1<<13), 46*46c30cb8SEric Van Hensbergen P9_DEBUG_MMAP = (1<<14), 47ee443996SEric Van Hensbergen }; 48bd238fb4SLatchesar Ionkov 490b15a3a5SEric Van Hensbergen #ifdef CONFIG_NET_9P_DEBUG 50bd238fb4SLatchesar Ionkov extern unsigned int p9_debug_level; 515d385153SJoe Perches __printf(3, 4) 525d385153SJoe Perches void _p9_debug(enum p9_debug_flags level, const char *func, 535d385153SJoe Perches const char *fmt, ...); 545d385153SJoe Perches #define p9_debug(level, fmt, ...) \ 555d385153SJoe Perches _p9_debug(level, __func__, fmt, ##__VA_ARGS__) 56bd238fb4SLatchesar Ionkov #else 575d385153SJoe Perches #define p9_debug(level, fmt, ...) \ 585d385153SJoe Perches no_printk(fmt, ##__VA_ARGS__) 59bd238fb4SLatchesar Ionkov #endif 60bd238fb4SLatchesar Ionkov 61ee443996SEric Van Hensbergen /** 62ee443996SEric Van Hensbergen * enum p9_msg_t - 9P message types 634f7ebe80SArun R Bharadwaj * @P9_TLERROR: not used 644f7ebe80SArun R Bharadwaj * @P9_RLERROR: response for any failed request for 9P2000.L 65bda8e775SSripathi Kodi * @P9_TSTATFS: file system status request 66bda8e775SSripathi Kodi * @P9_RSTATFS: file system status response 6750cc42ffSVenkateswararao Jujjuri (JV) * @P9_TSYMLINK: make symlink request 6850cc42ffSVenkateswararao Jujjuri (JV) * @P9_RSYMLINK: make symlink response 694b43516aSM. Mohan Kumar * @P9_TMKNOD: create a special file object request 704b43516aSM. Mohan Kumar * @P9_RMKNOD: create a special file object response 715643135aSVenkateswararao Jujjuri (JV) * @P9_TLCREATE: prepare a handle for I/O on an new file for 9P2000.L 725643135aSVenkateswararao Jujjuri (JV) * @P9_RLCREATE: response with file access information for 9P2000.L 734681dbdaSSripathi Kodi * @P9_TRENAME: rename request 744681dbdaSSripathi Kodi * @P9_RRENAME: rename response 7501a622bdSM. Mohan Kumar * @P9_TMKDIR: create a directory request 7601a622bdSM. Mohan Kumar * @P9_RMKDIR: create a directory response 77ee443996SEric Van Hensbergen * @P9_TVERSION: version handshake request 78ee443996SEric Van Hensbergen * @P9_RVERSION: version handshake response 79ee443996SEric Van Hensbergen * @P9_TAUTH: request to establish authentication channel 80ee443996SEric Van Hensbergen * @P9_RAUTH: response with authentication information 81ee443996SEric Van Hensbergen * @P9_TATTACH: establish user access to file service 82ee443996SEric Van Hensbergen * @P9_RATTACH: response with top level handle to file hierarchy 83ee443996SEric Van Hensbergen * @P9_TERROR: not used 84ee443996SEric Van Hensbergen * @P9_RERROR: response for any failed request 85ee443996SEric Van Hensbergen * @P9_TFLUSH: request to abort a previous request 86ee443996SEric Van Hensbergen * @P9_RFLUSH: response when previous request has been cancelled 87ee443996SEric Van Hensbergen * @P9_TWALK: descend a directory hierarchy 88ee443996SEric Van Hensbergen * @P9_RWALK: response with new handle for position within hierarchy 89ee443996SEric Van Hensbergen * @P9_TOPEN: prepare a handle for I/O on an existing file 90ee443996SEric Van Hensbergen * @P9_ROPEN: response with file access information 91ee443996SEric Van Hensbergen * @P9_TCREATE: prepare a handle for I/O on a new file 92ee443996SEric Van Hensbergen * @P9_RCREATE: response with file access information 93ee443996SEric Van Hensbergen * @P9_TREAD: request to transfer data from a file or directory 94ee443996SEric Van Hensbergen * @P9_RREAD: response with data requested 95ee443996SEric Van Hensbergen * @P9_TWRITE: reuqest to transfer data to a file 9625985edcSLucas De Marchi * @P9_RWRITE: response with out much data was transferred to file 97ee443996SEric Van Hensbergen * @P9_TCLUNK: forget about a handle to an entity within the file system 98ee443996SEric Van Hensbergen * @P9_RCLUNK: response when server has forgotten about the handle 99ee443996SEric Van Hensbergen * @P9_TREMOVE: request to remove an entity from the hierarchy 100ee443996SEric Van Hensbergen * @P9_RREMOVE: response when server has removed the entity 101ee443996SEric Van Hensbergen * @P9_TSTAT: request file entity attributes 102ee443996SEric Van Hensbergen * @P9_RSTAT: response with file entity attributes 103ee443996SEric Van Hensbergen * @P9_TWSTAT: request to update file entity attributes 104ee443996SEric Van Hensbergen * @P9_RWSTAT: response when file entity attributes are updated 105ee443996SEric Van Hensbergen * 106ee443996SEric Van Hensbergen * There are 14 basic operations in 9P2000, paired as 107ee443996SEric Van Hensbergen * requests and responses. The one special case is ERROR 108ee443996SEric Van Hensbergen * as there is no @P9_TERROR request for clients to transmit to 109ee443996SEric Van Hensbergen * the server, but the server may respond to any other request 110ee443996SEric Van Hensbergen * with an @P9_RERROR. 111ee443996SEric Van Hensbergen * 112ee443996SEric Van Hensbergen * See Also: http://plan9.bell-labs.com/sys/man/5/INDEX.html 113ee443996SEric Van Hensbergen */ 114bd238fb4SLatchesar Ionkov 115ee443996SEric Van Hensbergen enum p9_msg_t { 1164f7ebe80SArun R Bharadwaj P9_TLERROR = 6, 1174f7ebe80SArun R Bharadwaj P9_RLERROR, 118bda8e775SSripathi Kodi P9_TSTATFS = 8, 119bda8e775SSripathi Kodi P9_RSTATFS, 120ef56547eSM. Mohan Kumar P9_TLOPEN = 12, 121ef56547eSM. Mohan Kumar P9_RLOPEN, 1225643135aSVenkateswararao Jujjuri (JV) P9_TLCREATE = 14, 1235643135aSVenkateswararao Jujjuri (JV) P9_RLCREATE, 12450cc42ffSVenkateswararao Jujjuri (JV) P9_TSYMLINK = 16, 12550cc42ffSVenkateswararao Jujjuri (JV) P9_RSYMLINK, 1264b43516aSM. Mohan Kumar P9_TMKNOD = 18, 1274b43516aSM. Mohan Kumar P9_RMKNOD, 1284681dbdaSSripathi Kodi P9_TRENAME = 20, 1294681dbdaSSripathi Kodi P9_RRENAME, 130329176ccSM. Mohan Kumar P9_TREADLINK = 22, 131329176ccSM. Mohan Kumar P9_RREADLINK, 132f0853122SSripathi Kodi P9_TGETATTR = 24, 133f0853122SSripathi Kodi P9_RGETATTR, 13487d7845aSSripathi Kodi P9_TSETATTR = 26, 13587d7845aSSripathi Kodi P9_RSETATTR, 1360ef63f34SAneesh Kumar K.V P9_TXATTRWALK = 30, 1370ef63f34SAneesh Kumar K.V P9_RXATTRWALK, 138eda25e46SAneesh Kumar K.V P9_TXATTRCREATE = 32, 139eda25e46SAneesh Kumar K.V P9_RXATTRCREATE, 1407751bdb3SSripathi Kodi P9_TREADDIR = 40, 1417751bdb3SSripathi Kodi P9_RREADDIR, 142920e65dcSVenkateswararao Jujjuri (JV) P9_TFSYNC = 50, 143920e65dcSVenkateswararao Jujjuri (JV) P9_RFSYNC, 144a099027cSM. Mohan Kumar P9_TLOCK = 52, 145a099027cSM. Mohan Kumar P9_RLOCK, 1461d769cd1SM. Mohan Kumar P9_TGETLOCK = 54, 1471d769cd1SM. Mohan Kumar P9_RGETLOCK, 148652df9a7SVenkateswararao Jujjuri (JV) P9_TLINK = 70, 149652df9a7SVenkateswararao Jujjuri (JV) P9_RLINK, 15001a622bdSM. Mohan Kumar P9_TMKDIR = 72, 15101a622bdSM. Mohan Kumar P9_RMKDIR, 1529e8fb38eSAneesh Kumar K.V P9_TRENAMEAT = 74, 1539e8fb38eSAneesh Kumar K.V P9_RRENAMEAT, 15448e370ffSAneesh Kumar K.V P9_TUNLINKAT = 76, 15548e370ffSAneesh Kumar K.V P9_RUNLINKAT, 156bd238fb4SLatchesar Ionkov P9_TVERSION = 100, 157bd238fb4SLatchesar Ionkov P9_RVERSION, 158bd238fb4SLatchesar Ionkov P9_TAUTH = 102, 159bd238fb4SLatchesar Ionkov P9_RAUTH, 160bd238fb4SLatchesar Ionkov P9_TATTACH = 104, 161bd238fb4SLatchesar Ionkov P9_RATTACH, 162bd238fb4SLatchesar Ionkov P9_TERROR = 106, 163bd238fb4SLatchesar Ionkov P9_RERROR, 164bd238fb4SLatchesar Ionkov P9_TFLUSH = 108, 165bd238fb4SLatchesar Ionkov P9_RFLUSH, 166bd238fb4SLatchesar Ionkov P9_TWALK = 110, 167bd238fb4SLatchesar Ionkov P9_RWALK, 168bd238fb4SLatchesar Ionkov P9_TOPEN = 112, 169bd238fb4SLatchesar Ionkov P9_ROPEN, 170bd238fb4SLatchesar Ionkov P9_TCREATE = 114, 171bd238fb4SLatchesar Ionkov P9_RCREATE, 172bd238fb4SLatchesar Ionkov P9_TREAD = 116, 173bd238fb4SLatchesar Ionkov P9_RREAD, 174bd238fb4SLatchesar Ionkov P9_TWRITE = 118, 175bd238fb4SLatchesar Ionkov P9_RWRITE, 176bd238fb4SLatchesar Ionkov P9_TCLUNK = 120, 177bd238fb4SLatchesar Ionkov P9_RCLUNK, 178bd238fb4SLatchesar Ionkov P9_TREMOVE = 122, 179bd238fb4SLatchesar Ionkov P9_RREMOVE, 180bd238fb4SLatchesar Ionkov P9_TSTAT = 124, 181bd238fb4SLatchesar Ionkov P9_RSTAT, 182bd238fb4SLatchesar Ionkov P9_TWSTAT = 126, 183bd238fb4SLatchesar Ionkov P9_RWSTAT, 184bd238fb4SLatchesar Ionkov }; 185bd238fb4SLatchesar Ionkov 186ee443996SEric Van Hensbergen /** 187ee443996SEric Van Hensbergen * enum p9_open_mode_t - 9P open modes 188ee443996SEric Van Hensbergen * @P9_OREAD: open file for reading only 189ee443996SEric Van Hensbergen * @P9_OWRITE: open file for writing only 190ee443996SEric Van Hensbergen * @P9_ORDWR: open file for reading or writing 191ee443996SEric Van Hensbergen * @P9_OEXEC: open file for execution 192ee443996SEric Van Hensbergen * @P9_OTRUNC: truncate file to zero-length before opening it 193ee443996SEric Van Hensbergen * @P9_OREXEC: close the file when an exec(2) system call is made 194ee443996SEric Van Hensbergen * @P9_ORCLOSE: remove the file when the file is closed 195ee443996SEric Van Hensbergen * @P9_OAPPEND: open the file and seek to the end 196ee443996SEric Van Hensbergen * @P9_OEXCL: only create a file, do not open it 197ee443996SEric Van Hensbergen * 198ee443996SEric Van Hensbergen * 9P open modes differ slightly from Posix standard modes. 199ee443996SEric Van Hensbergen * In particular, there are extra modes which specify different 200ee443996SEric Van Hensbergen * semantic behaviors than may be available on standard Posix 201ee443996SEric Van Hensbergen * systems. For example, @P9_OREXEC and @P9_ORCLOSE are modes that 202ee443996SEric Van Hensbergen * most likely will not be issued from the Linux VFS client, but may 203ee443996SEric Van Hensbergen * be supported by servers. 204ee443996SEric Van Hensbergen * 205ee443996SEric Van Hensbergen * See Also: http://plan9.bell-labs.com/magic/man2html/2/open 206ee443996SEric Van Hensbergen */ 207ee443996SEric Van Hensbergen 208ee443996SEric Van Hensbergen enum p9_open_mode_t { 209bd238fb4SLatchesar Ionkov P9_OREAD = 0x00, 210bd238fb4SLatchesar Ionkov P9_OWRITE = 0x01, 211bd238fb4SLatchesar Ionkov P9_ORDWR = 0x02, 212bd238fb4SLatchesar Ionkov P9_OEXEC = 0x03, 213bd238fb4SLatchesar Ionkov P9_OTRUNC = 0x10, 214bd238fb4SLatchesar Ionkov P9_OREXEC = 0x20, 215bd238fb4SLatchesar Ionkov P9_ORCLOSE = 0x40, 216bd238fb4SLatchesar Ionkov P9_OAPPEND = 0x80, 217ee443996SEric Van Hensbergen P9_OEXCL = 0x1000, 218*46c30cb8SEric Van Hensbergen P9L_MODE_MASK = 0x1FFF, /* don't send anything under this to server */ 219*46c30cb8SEric Van Hensbergen P9L_DIRECT = 0x2000, /* cache disabled */ 220*46c30cb8SEric Van Hensbergen P9L_NOWRITECACHE = 0x4000, /* no write caching */ 221*46c30cb8SEric Van Hensbergen P9L_LOOSE = 0x8000, /* loose cache */ 222bd238fb4SLatchesar Ionkov }; 223bd238fb4SLatchesar Ionkov 224ee443996SEric Van Hensbergen /** 225ee443996SEric Van Hensbergen * enum p9_perm_t - 9P permissions 226aca00763SRob Landley * @P9_DMDIR: mode bit for directories 227ee443996SEric Van Hensbergen * @P9_DMAPPEND: mode bit for is append-only 228ee443996SEric Van Hensbergen * @P9_DMEXCL: mode bit for excluse use (only one open handle allowed) 229aca00763SRob Landley * @P9_DMMOUNT: mode bit for mount points 230ee443996SEric Van Hensbergen * @P9_DMAUTH: mode bit for authentication file 231ee443996SEric Van Hensbergen * @P9_DMTMP: mode bit for non-backed-up files 232ee443996SEric Van Hensbergen * @P9_DMSYMLINK: mode bit for symbolic links (9P2000.u) 233ee443996SEric Van Hensbergen * @P9_DMLINK: mode bit for hard-link (9P2000.u) 234ee443996SEric Van Hensbergen * @P9_DMDEVICE: mode bit for device files (9P2000.u) 235ee443996SEric Van Hensbergen * @P9_DMNAMEDPIPE: mode bit for named pipe (9P2000.u) 236ee443996SEric Van Hensbergen * @P9_DMSOCKET: mode bit for socket (9P2000.u) 237ee443996SEric Van Hensbergen * @P9_DMSETUID: mode bit for setuid (9P2000.u) 238ee443996SEric Van Hensbergen * @P9_DMSETGID: mode bit for setgid (9P2000.u) 239ee443996SEric Van Hensbergen * @P9_DMSETVTX: mode bit for sticky bit (9P2000.u) 240ee443996SEric Van Hensbergen * 241ee443996SEric Van Hensbergen * 9P permissions differ slightly from Posix standard modes. 242ee443996SEric Van Hensbergen * 243ee443996SEric Van Hensbergen * See Also: http://plan9.bell-labs.com/magic/man2html/2/stat 244ee443996SEric Van Hensbergen */ 245ee443996SEric Van Hensbergen enum p9_perm_t { 246bd238fb4SLatchesar Ionkov P9_DMDIR = 0x80000000, 247bd238fb4SLatchesar Ionkov P9_DMAPPEND = 0x40000000, 248bd238fb4SLatchesar Ionkov P9_DMEXCL = 0x20000000, 249bd238fb4SLatchesar Ionkov P9_DMMOUNT = 0x10000000, 250bd238fb4SLatchesar Ionkov P9_DMAUTH = 0x08000000, 251bd238fb4SLatchesar Ionkov P9_DMTMP = 0x04000000, 252ee443996SEric Van Hensbergen /* 9P2000.u extensions */ 253bd238fb4SLatchesar Ionkov P9_DMSYMLINK = 0x02000000, 254bd238fb4SLatchesar Ionkov P9_DMLINK = 0x01000000, 255bd238fb4SLatchesar Ionkov P9_DMDEVICE = 0x00800000, 256bd238fb4SLatchesar Ionkov P9_DMNAMEDPIPE = 0x00200000, 257bd238fb4SLatchesar Ionkov P9_DMSOCKET = 0x00100000, 258bd238fb4SLatchesar Ionkov P9_DMSETUID = 0x00080000, 259bd238fb4SLatchesar Ionkov P9_DMSETGID = 0x00040000, 260d199d652SAnthony Liguori P9_DMSETVTX = 0x00010000, 261bd238fb4SLatchesar Ionkov }; 262bd238fb4SLatchesar Ionkov 263f88657ceSAneesh Kumar K.V /* 9p2000.L open flags */ 264f88657ceSAneesh Kumar K.V #define P9_DOTL_RDONLY 00000000 265f88657ceSAneesh Kumar K.V #define P9_DOTL_WRONLY 00000001 266f88657ceSAneesh Kumar K.V #define P9_DOTL_RDWR 00000002 267f88657ceSAneesh Kumar K.V #define P9_DOTL_NOACCESS 00000003 268f88657ceSAneesh Kumar K.V #define P9_DOTL_CREATE 00000100 269f88657ceSAneesh Kumar K.V #define P9_DOTL_EXCL 00000200 270f88657ceSAneesh Kumar K.V #define P9_DOTL_NOCTTY 00000400 271f88657ceSAneesh Kumar K.V #define P9_DOTL_TRUNC 00001000 272f88657ceSAneesh Kumar K.V #define P9_DOTL_APPEND 00002000 273f88657ceSAneesh Kumar K.V #define P9_DOTL_NONBLOCK 00004000 274f88657ceSAneesh Kumar K.V #define P9_DOTL_DSYNC 00010000 275f88657ceSAneesh Kumar K.V #define P9_DOTL_FASYNC 00020000 276f88657ceSAneesh Kumar K.V #define P9_DOTL_DIRECT 00040000 277f88657ceSAneesh Kumar K.V #define P9_DOTL_LARGEFILE 00100000 278f88657ceSAneesh Kumar K.V #define P9_DOTL_DIRECTORY 00200000 279f88657ceSAneesh Kumar K.V #define P9_DOTL_NOFOLLOW 00400000 280f88657ceSAneesh Kumar K.V #define P9_DOTL_NOATIME 01000000 281f88657ceSAneesh Kumar K.V #define P9_DOTL_CLOEXEC 02000000 282f88657ceSAneesh Kumar K.V #define P9_DOTL_SYNC 04000000 283f88657ceSAneesh Kumar K.V 284f88657ceSAneesh Kumar K.V /* 9p2000.L at flags */ 285f88657ceSAneesh Kumar K.V #define P9_DOTL_AT_REMOVEDIR 0x200 286f88657ceSAneesh Kumar K.V 28751b8b4fbSJim Garlick /* 9p2000.L lock type */ 28851b8b4fbSJim Garlick #define P9_LOCK_TYPE_RDLCK 0 28951b8b4fbSJim Garlick #define P9_LOCK_TYPE_WRLCK 1 29051b8b4fbSJim Garlick #define P9_LOCK_TYPE_UNLCK 2 29151b8b4fbSJim Garlick 292ee443996SEric Van Hensbergen /** 293ee443996SEric Van Hensbergen * enum p9_qid_t - QID types 294ee443996SEric Van Hensbergen * @P9_QTDIR: directory 295ee443996SEric Van Hensbergen * @P9_QTAPPEND: append-only 296ee443996SEric Van Hensbergen * @P9_QTEXCL: excluse use (only one open handle allowed) 297ee443996SEric Van Hensbergen * @P9_QTMOUNT: mount points 298ee443996SEric Van Hensbergen * @P9_QTAUTH: authentication file 299ee443996SEric Van Hensbergen * @P9_QTTMP: non-backed-up files 300ee443996SEric Van Hensbergen * @P9_QTSYMLINK: symbolic links (9P2000.u) 301ee443996SEric Van Hensbergen * @P9_QTLINK: hard-link (9P2000.u) 302ee443996SEric Van Hensbergen * @P9_QTFILE: normal files 303ee443996SEric Van Hensbergen * 304ee443996SEric Van Hensbergen * QID types are a subset of permissions - they are primarily 305ee443996SEric Van Hensbergen * used to differentiate semantics for a file system entity via 30625985edcSLucas De Marchi * a jump-table. Their value is also the most significant 16 bits 307ee443996SEric Van Hensbergen * of the permission_t 308ee443996SEric Van Hensbergen * 309ee443996SEric Van Hensbergen * See Also: http://plan9.bell-labs.com/magic/man2html/2/stat 310ee443996SEric Van Hensbergen */ 311ee443996SEric Van Hensbergen enum p9_qid_t { 312bd238fb4SLatchesar Ionkov P9_QTDIR = 0x80, 313bd238fb4SLatchesar Ionkov P9_QTAPPEND = 0x40, 314bd238fb4SLatchesar Ionkov P9_QTEXCL = 0x20, 315bd238fb4SLatchesar Ionkov P9_QTMOUNT = 0x10, 316bd238fb4SLatchesar Ionkov P9_QTAUTH = 0x08, 317bd238fb4SLatchesar Ionkov P9_QTTMP = 0x04, 318bd238fb4SLatchesar Ionkov P9_QTSYMLINK = 0x02, 319bd238fb4SLatchesar Ionkov P9_QTLINK = 0x01, 320bd238fb4SLatchesar Ionkov P9_QTFILE = 0x00, 321bd238fb4SLatchesar Ionkov }; 322bd238fb4SLatchesar Ionkov 323ee443996SEric Van Hensbergen /* 9P Magic Numbers */ 3246e195b0fSDominique Martinet #define P9_NOTAG ((u16)(~0)) 3256e195b0fSDominique Martinet #define P9_NOFID ((u32)(~0)) 326bd238fb4SLatchesar Ionkov #define P9_MAXWELEM 16 327bd238fb4SLatchesar Ionkov 32891a76be3SDominique Martinet /* Minimal header size: size[4] type[1] tag[2] */ 32991a76be3SDominique Martinet #define P9_HDRSZ 7 33091a76be3SDominique Martinet 331bd238fb4SLatchesar Ionkov /* ample room for Twrite/Rread header */ 332bd238fb4SLatchesar Ionkov #define P9_IOHDRSZ 24 333bd238fb4SLatchesar Ionkov 3347751bdb3SSripathi Kodi /* Room for readdir header */ 3357751bdb3SSripathi Kodi #define P9_READDIRHDRSZ 24 3367751bdb3SSripathi Kodi 337abfa034eSAneesh Kumar K.V /* size of header for zero copy read/write */ 338abfa034eSAneesh Kumar K.V #define P9_ZC_HDR_SZ 4096 339abfa034eSAneesh Kumar K.V 34058d33131SChristian Schoenebeck /* maximum length of an error string */ 34158d33131SChristian Schoenebeck #define P9_ERRMAX 128 34258d33131SChristian Schoenebeck 343ee443996SEric Van Hensbergen /** 344ee443996SEric Van Hensbergen * struct p9_qid - file system entity information 345ee443996SEric Van Hensbergen * @type: 8-bit type &p9_qid_t 346ee443996SEric Van Hensbergen * @version: 16-bit monotonically incrementing version number 347ee443996SEric Van Hensbergen * @path: 64-bit per-server-unique ID for a file system element 348ee443996SEric Van Hensbergen * 349ee443996SEric Van Hensbergen * qids are identifiers used by 9P servers to track file system 350ee443996SEric Van Hensbergen * entities. The type is used to differentiate semantics for operations 351ee443996SEric Van Hensbergen * on the entity (ie. read means something different on a directory than 352ee443996SEric Van Hensbergen * on a file). The path provides a server unique index for an entity 353ee443996SEric Van Hensbergen * (roughly analogous to an inode number), while the version is updated 354ee443996SEric Van Hensbergen * every time a file is modified and can be used to maintain cache 355ee443996SEric Van Hensbergen * coherency between clients and serves. 356ee443996SEric Van Hensbergen * Servers will often differentiate purely synthetic entities by setting 357ee443996SEric Van Hensbergen * their version to 0, signaling that they should never be cached and 358ee443996SEric Van Hensbergen * should be accessed synchronously. 359ee443996SEric Van Hensbergen * 360ee443996SEric Van Hensbergen * See Also://plan9.bell-labs.com/magic/man2html/2/stat 361ee443996SEric Van Hensbergen */ 362ee443996SEric Van Hensbergen 363bd238fb4SLatchesar Ionkov struct p9_qid { 364bd238fb4SLatchesar Ionkov u8 type; 365bd238fb4SLatchesar Ionkov u32 version; 366bd238fb4SLatchesar Ionkov u64 path; 367bd238fb4SLatchesar Ionkov }; 368bd238fb4SLatchesar Ionkov 369ee443996SEric Van Hensbergen /** 370aca00763SRob Landley * struct p9_wstat - file system metadata information 371ee443996SEric Van Hensbergen * @size: length prefix for this stat structure instance 37225985edcSLucas De Marchi * @type: the type of the server (equivalent to a major number) 37325985edcSLucas De Marchi * @dev: the sub-type of the server (equivalent to a minor number) 374ee443996SEric Van Hensbergen * @qid: unique id from the server of type &p9_qid 375ee443996SEric Van Hensbergen * @mode: Plan 9 format permissions of type &p9_perm_t 376ee443996SEric Van Hensbergen * @atime: Last access/read time 377ee443996SEric Van Hensbergen * @mtime: Last modify/write time 378ee443996SEric Van Hensbergen * @length: file length 37952c14ab3SAneesh Kumar K.V * @name: last element of path (aka filename) 38052c14ab3SAneesh Kumar K.V * @uid: owner name 38152c14ab3SAneesh Kumar K.V * @gid: group owner 38252c14ab3SAneesh Kumar K.V * @muid: last modifier 38352c14ab3SAneesh Kumar K.V * @extension: area used to encode extended UNIX support 384ee443996SEric Van Hensbergen * @n_uid: numeric user id of owner (part of 9p2000.u extension) 385ee443996SEric Van Hensbergen * @n_gid: numeric group id (part of 9p2000.u extension) 386ee443996SEric Van Hensbergen * @n_muid: numeric user id of laster modifier (part of 9p2000.u extension) 387ee443996SEric Van Hensbergen * 388ee443996SEric Van Hensbergen * See Also: http://plan9.bell-labs.com/magic/man2html/2/stat 389ee443996SEric Van Hensbergen */ 390ee443996SEric Van Hensbergen 391bd238fb4SLatchesar Ionkov struct p9_wstat { 392bd238fb4SLatchesar Ionkov u16 size; 393bd238fb4SLatchesar Ionkov u16 type; 394bd238fb4SLatchesar Ionkov u32 dev; 395bd238fb4SLatchesar Ionkov struct p9_qid qid; 396bd238fb4SLatchesar Ionkov u32 mode; 397bd238fb4SLatchesar Ionkov u32 atime; 398bd238fb4SLatchesar Ionkov u32 mtime; 399bd238fb4SLatchesar Ionkov u64 length; 4007880b43bSAl Viro const char *name; 4017880b43bSAl Viro const char *uid; 4027880b43bSAl Viro const char *gid; 4037880b43bSAl Viro const char *muid; 404bd238fb4SLatchesar Ionkov char *extension; /* 9p2000.u extensions */ 405447c5094SEric W. Biederman kuid_t n_uid; /* 9p2000.u extensions */ 406447c5094SEric W. Biederman kgid_t n_gid; /* 9p2000.u extensions */ 407447c5094SEric W. Biederman kuid_t n_muid; /* 9p2000.u extensions */ 408bd238fb4SLatchesar Ionkov }; 409bd238fb4SLatchesar Ionkov 410f0853122SSripathi Kodi struct p9_stat_dotl { 411f0853122SSripathi Kodi u64 st_result_mask; 412f0853122SSripathi Kodi struct p9_qid qid; 413f0853122SSripathi Kodi u32 st_mode; 414447c5094SEric W. Biederman kuid_t st_uid; 415447c5094SEric W. Biederman kgid_t st_gid; 416f0853122SSripathi Kodi u64 st_nlink; 417f0853122SSripathi Kodi u64 st_rdev; 418f0853122SSripathi Kodi u64 st_size; 419f0853122SSripathi Kodi u64 st_blksize; 420f0853122SSripathi Kodi u64 st_blocks; 421f0853122SSripathi Kodi u64 st_atime_sec; 422f0853122SSripathi Kodi u64 st_atime_nsec; 423f0853122SSripathi Kodi u64 st_mtime_sec; 424f0853122SSripathi Kodi u64 st_mtime_nsec; 425f0853122SSripathi Kodi u64 st_ctime_sec; 426f0853122SSripathi Kodi u64 st_ctime_nsec; 427f0853122SSripathi Kodi u64 st_btime_sec; 428f0853122SSripathi Kodi u64 st_btime_nsec; 429f0853122SSripathi Kodi u64 st_gen; 430f0853122SSripathi Kodi u64 st_data_version; 431f0853122SSripathi Kodi }; 432f0853122SSripathi Kodi 433f0853122SSripathi Kodi #define P9_STATS_MODE 0x00000001ULL 434f0853122SSripathi Kodi #define P9_STATS_NLINK 0x00000002ULL 435f0853122SSripathi Kodi #define P9_STATS_UID 0x00000004ULL 436f0853122SSripathi Kodi #define P9_STATS_GID 0x00000008ULL 437f0853122SSripathi Kodi #define P9_STATS_RDEV 0x00000010ULL 438f0853122SSripathi Kodi #define P9_STATS_ATIME 0x00000020ULL 439f0853122SSripathi Kodi #define P9_STATS_MTIME 0x00000040ULL 440f0853122SSripathi Kodi #define P9_STATS_CTIME 0x00000080ULL 441f0853122SSripathi Kodi #define P9_STATS_INO 0x00000100ULL 442f0853122SSripathi Kodi #define P9_STATS_SIZE 0x00000200ULL 443f0853122SSripathi Kodi #define P9_STATS_BLOCKS 0x00000400ULL 444f0853122SSripathi Kodi 445f0853122SSripathi Kodi #define P9_STATS_BTIME 0x00000800ULL 446f0853122SSripathi Kodi #define P9_STATS_GEN 0x00001000ULL 447f0853122SSripathi Kodi #define P9_STATS_DATA_VERSION 0x00002000ULL 448f0853122SSripathi Kodi 449f0853122SSripathi Kodi #define P9_STATS_BASIC 0x000007ffULL /* Mask for fields up to BLOCKS */ 450f0853122SSripathi Kodi #define P9_STATS_ALL 0x00003fffULL /* Mask for All fields above */ 451f0853122SSripathi Kodi 45287d7845aSSripathi Kodi /** 45387d7845aSSripathi Kodi * struct p9_iattr_dotl - P9 inode attribute for setattr 45487d7845aSSripathi Kodi * @valid: bitfield specifying which fields are valid 45587d7845aSSripathi Kodi * same as in struct iattr 45687d7845aSSripathi Kodi * @mode: File permission bits 45787d7845aSSripathi Kodi * @uid: user id of owner 45887d7845aSSripathi Kodi * @gid: group id 45987d7845aSSripathi Kodi * @size: File size 46087d7845aSSripathi Kodi * @atime_sec: Last access time, seconds 46187d7845aSSripathi Kodi * @atime_nsec: Last access time, nanoseconds 46287d7845aSSripathi Kodi * @mtime_sec: Last modification time, seconds 46387d7845aSSripathi Kodi * @mtime_nsec: Last modification time, nanoseconds 46487d7845aSSripathi Kodi */ 46587d7845aSSripathi Kodi 46687d7845aSSripathi Kodi struct p9_iattr_dotl { 46787d7845aSSripathi Kodi u32 valid; 46887d7845aSSripathi Kodi u32 mode; 469447c5094SEric W. Biederman kuid_t uid; 470447c5094SEric W. Biederman kgid_t gid; 47187d7845aSSripathi Kodi u64 size; 47287d7845aSSripathi Kodi u64 atime_sec; 47387d7845aSSripathi Kodi u64 atime_nsec; 47487d7845aSSripathi Kodi u64 mtime_sec; 47587d7845aSSripathi Kodi u64 mtime_nsec; 47687d7845aSSripathi Kodi }; 47787d7845aSSripathi Kodi 478a099027cSM. Mohan Kumar #define P9_LOCK_SUCCESS 0 479a099027cSM. Mohan Kumar #define P9_LOCK_BLOCKED 1 480a099027cSM. Mohan Kumar #define P9_LOCK_ERROR 2 481a099027cSM. Mohan Kumar #define P9_LOCK_GRACE 3 482a099027cSM. Mohan Kumar 483a099027cSM. Mohan Kumar #define P9_LOCK_FLAGS_BLOCK 1 484a099027cSM. Mohan Kumar #define P9_LOCK_FLAGS_RECLAIM 2 485a099027cSM. Mohan Kumar 486a099027cSM. Mohan Kumar /* struct p9_flock: POSIX lock structure 487a099027cSM. Mohan Kumar * @type - type of lock 488a099027cSM. Mohan Kumar * @flags - lock flags 489a099027cSM. Mohan Kumar * @start - starting offset of the lock 490a099027cSM. Mohan Kumar * @length - number of bytes 491a099027cSM. Mohan Kumar * @proc_id - process id which wants to take lock 492a099027cSM. Mohan Kumar * @client_id - client id 493a099027cSM. Mohan Kumar */ 494a099027cSM. Mohan Kumar 495a099027cSM. Mohan Kumar struct p9_flock { 496a099027cSM. Mohan Kumar u8 type; 497a099027cSM. Mohan Kumar u32 flags; 498a099027cSM. Mohan Kumar u64 start; 499a099027cSM. Mohan Kumar u64 length; 500a099027cSM. Mohan Kumar u32 proc_id; 501a099027cSM. Mohan Kumar char *client_id; 502a099027cSM. Mohan Kumar }; 503a099027cSM. Mohan Kumar 5041d769cd1SM. Mohan Kumar /* struct p9_getlock: getlock structure 5051d769cd1SM. Mohan Kumar * @type - type of lock 5061d769cd1SM. Mohan Kumar * @start - starting offset of the lock 5071d769cd1SM. Mohan Kumar * @length - number of bytes 5081d769cd1SM. Mohan Kumar * @proc_id - process id which wants to take lock 5091d769cd1SM. Mohan Kumar * @client_id - client id 5101d769cd1SM. Mohan Kumar */ 5111d769cd1SM. Mohan Kumar 5121d769cd1SM. Mohan Kumar struct p9_getlock { 5131d769cd1SM. Mohan Kumar u8 type; 5141d769cd1SM. Mohan Kumar u64 start; 5151d769cd1SM. Mohan Kumar u64 length; 5161d769cd1SM. Mohan Kumar u32 proc_id; 5171d769cd1SM. Mohan Kumar char *client_id; 5181d769cd1SM. Mohan Kumar }; 5191d769cd1SM. Mohan Kumar 520bda8e775SSripathi Kodi struct p9_rstatfs { 521bda8e775SSripathi Kodi u32 type; 522bda8e775SSripathi Kodi u32 bsize; 523bda8e775SSripathi Kodi u64 blocks; 524bda8e775SSripathi Kodi u64 bfree; 525bda8e775SSripathi Kodi u64 bavail; 526bda8e775SSripathi Kodi u64 files; 527bda8e775SSripathi Kodi u64 ffree; 528bda8e775SSripathi Kodi u64 fsid; 529bda8e775SSripathi Kodi u32 namelen; 530bda8e775SSripathi Kodi }; 531bda8e775SSripathi Kodi 532ee443996SEric Van Hensbergen /** 533ee443996SEric Van Hensbergen * struct p9_fcall - primary packet structure 534ee443996SEric Van Hensbergen * @size: prefixed length of the structure 535ee443996SEric Van Hensbergen * @id: protocol operating identifier of type &p9_msg_t 536ee443996SEric Van Hensbergen * @tag: transaction id of the request 537ace51c4dSEric Van Hensbergen * @offset: used by marshalling routines to track current position in buffer 538f735195dSVenkateswararao Jujjuri (JV) * @capacity: used by marshalling routines to track total malloc'd capacity 539ee443996SEric Van Hensbergen * @sdata: payload 5408e4c2eeeSChristian Schoenebeck * @zc: whether zero-copy is used 541bd238fb4SLatchesar Ionkov * 542ee443996SEric Van Hensbergen * &p9_fcall represents the structure for all 9P RPC 543ee443996SEric Van Hensbergen * transactions. Requests are packaged into fcalls, and reponses 544ee443996SEric Van Hensbergen * must be extracted from them. 545ee443996SEric Van Hensbergen * 546ee443996SEric Van Hensbergen * See Also: http://plan9.bell-labs.com/magic/man2html/2/fcall 547bd238fb4SLatchesar Ionkov */ 548bd238fb4SLatchesar Ionkov 549bd238fb4SLatchesar Ionkov struct p9_fcall { 550bd238fb4SLatchesar Ionkov u32 size; 551bd238fb4SLatchesar Ionkov u8 id; 552bd238fb4SLatchesar Ionkov u16 tag; 553ace51c4dSEric Van Hensbergen 554ace51c4dSEric Van Hensbergen size_t offset; 555ace51c4dSEric Van Hensbergen size_t capacity; 556ace51c4dSEric Van Hensbergen 55791a76be3SDominique Martinet struct kmem_cache *cache; 55808bb3a50SSasha Levin u8 *sdata; 5598e4c2eeeSChristian Schoenebeck bool zc; 560bd238fb4SLatchesar Ionkov }; 561bd238fb4SLatchesar Ionkov 562bd238fb4SLatchesar Ionkov int p9_errstr2errno(char *errstr, int len); 563bd238fb4SLatchesar Ionkov 564bd238fb4SLatchesar Ionkov int p9_error_init(void); 565bd238fb4SLatchesar Ionkov #endif /* NET_9P_H */ 566