Blame


1 fb1a36c0 2022-01-09 op /*
2 fb1a36c0 2022-01-09 op * Copyright (c) 2021, 2022 Omar Polo <op@omarpolo.com>
3 fb1a36c0 2022-01-09 op *
4 fb1a36c0 2022-01-09 op * Permission to use, copy, modify, and distribute this software for any
5 fb1a36c0 2022-01-09 op * purpose with or without fee is hereby granted, provided that the above
6 fb1a36c0 2022-01-09 op * copyright notice and this permission notice appear in all copies.
7 fb1a36c0 2022-01-09 op *
8 fb1a36c0 2022-01-09 op * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
9 fb1a36c0 2022-01-09 op * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
10 fb1a36c0 2022-01-09 op * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
11 fb1a36c0 2022-01-09 op * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
12 fb1a36c0 2022-01-09 op * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
13 fb1a36c0 2022-01-09 op * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
14 fb1a36c0 2022-01-09 op * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
15 fb1a36c0 2022-01-09 op */
16 fb1a36c0 2022-01-09 op
17 fb1a36c0 2022-01-09 op #ifndef KAMI_H
18 fb1a36c0 2022-01-09 op #define KAMI_H
19 fb1a36c0 2022-01-09 op
20 fb1a36c0 2022-01-09 op /*
21 fb1a36c0 2022-01-09 op * 9p message header.
22 fb1a36c0 2022-01-09 op *
23 fb1a36c0 2022-01-09 op * The message itself is len bytes long (counting the whole header
24 fb1a36c0 2022-01-09 op * too.)
25 fb1a36c0 2022-01-09 op */
26 fb1a36c0 2022-01-09 op struct np_msg_header {
27 fb1a36c0 2022-01-09 op uint32_t len;
28 fb1a36c0 2022-01-09 op uint8_t type;
29 fb1a36c0 2022-01-09 op uint16_t tag;
30 fb1a36c0 2022-01-09 op };
31 fb1a36c0 2022-01-09 op
32 fb1a36c0 2022-01-09 op struct qid {
33 fb1a36c0 2022-01-09 op uint64_t path;
34 fb1a36c0 2022-01-09 op uint32_t vers;
35 fb1a36c0 2022-01-09 op uint8_t type;
36 fb1a36c0 2022-01-09 op };
37 fb1a36c0 2022-01-09 op
38 fb1a36c0 2022-01-09 op /* useful constants */
39 fb1a36c0 2022-01-09 op #define HEADERSIZE (4 + 1 + 2)
40 fb1a36c0 2022-01-09 op #define VERSION9P "9P2000"
41 fb1a36c0 2022-01-09 op #define MSIZE9P ((uint32_t)4*1024*1024)
42 fb1a36c0 2022-01-09 op #define NOTAG ((uint16_t)~0U)
43 fb1a36c0 2022-01-09 op #define NOFID ((uint32_t)~0U)
44 fb1a36c0 2022-01-09 op #define NOUID (-1)
45 fb1a36c0 2022-01-09 op #define QIDSIZE 13
46 fb1a36c0 2022-01-09 op #define MAXWELEM 16
47 fb1a36c0 2022-01-09 op
48 fb1a36c0 2022-01-09 op #define NPSTATSIZ(namlen, uidnam, gidnam, unam) \
49 fb1a36c0 2022-01-09 op (6 + QIDSIZE + 20 + 2 + namlen + 2 + uidnam + 2 + gidnam + 2 + unam)
50 fb1a36c0 2022-01-09 op
51 fb1a36c0 2022-01-09 op /* bits in Qid.type */
52 fb1a36c0 2022-01-09 op #define QTDIR 0x80 /* type bit for directories */
53 fb1a36c0 2022-01-09 op #define QTAPPEND 0x40 /* type bit for append only files */
54 fb1a36c0 2022-01-09 op #define QTEXCL 0x20 /* type bit for exclusive use files */
55 fb1a36c0 2022-01-09 op #define QTMOUNT 0x10 /* type bit for mounted channel */
56 fb1a36c0 2022-01-09 op #define QTAUTH 0x08 /* type bit for authentication file */
57 fb1a36c0 2022-01-09 op #define QTTMP 0x04 /* type bit for non-backed-up file */
58 fb1a36c0 2022-01-09 op #define QTSYMLINK 0x02 /* type bit for symbolic link */
59 fb1a36c0 2022-01-09 op #define QTFILE 0x00 /* type bits for plain file */
60 fb1a36c0 2022-01-09 op
61 fb1a36c0 2022-01-09 op /* Topen mode/flags */
62 fb1a36c0 2022-01-09 op #define KOREAD 0x00
63 fb1a36c0 2022-01-09 op #define KOWRITE 0x01
64 fb1a36c0 2022-01-09 op #define KORDWR 0x02
65 fb1a36c0 2022-01-09 op #define KOEXEC 0x03
66 fb1a36c0 2022-01-09 op #define KOTRUNC 0x10
67 fb1a36c0 2022-01-09 op #define KORCLOSE 0x40
68 fb1a36c0 2022-01-09 op
69 fb1a36c0 2022-01-09 op /* 9p message types */
70 fb1a36c0 2022-01-09 op enum {
71 fb1a36c0 2022-01-09 op Treaddir = 40, /* .L */
72 fb1a36c0 2022-01-09 op Rreaddir,
73 fb1a36c0 2022-01-09 op
74 fb1a36c0 2022-01-09 op Tversion = 100,
75 fb1a36c0 2022-01-09 op Rversion,
76 fb1a36c0 2022-01-09 op Tauth = 102,
77 fb1a36c0 2022-01-09 op Rauth,
78 fb1a36c0 2022-01-09 op Tattach = 104,
79 fb1a36c0 2022-01-09 op Rattach,
80 fb1a36c0 2022-01-09 op Terror = 106, /* illegal */
81 fb1a36c0 2022-01-09 op Rerror,
82 fb1a36c0 2022-01-09 op Tflush = 108,
83 fb1a36c0 2022-01-09 op Rflush,
84 fb1a36c0 2022-01-09 op Twalk = 110,
85 fb1a36c0 2022-01-09 op Rwalk,
86 fb1a36c0 2022-01-09 op Topen = 112,
87 fb1a36c0 2022-01-09 op Ropen,
88 fb1a36c0 2022-01-09 op Tcreate = 114,
89 fb1a36c0 2022-01-09 op Rcreate,
90 fb1a36c0 2022-01-09 op Tread = 116,
91 fb1a36c0 2022-01-09 op Rread,
92 fb1a36c0 2022-01-09 op Twrite = 118,
93 fb1a36c0 2022-01-09 op Rwrite,
94 fb1a36c0 2022-01-09 op Tclunk = 120,
95 fb1a36c0 2022-01-09 op Rclunk,
96 fb1a36c0 2022-01-09 op Tremove = 122,
97 fb1a36c0 2022-01-09 op Rremove,
98 fb1a36c0 2022-01-09 op Tstat = 124,
99 fb1a36c0 2022-01-09 op Rstat,
100 fb1a36c0 2022-01-09 op Twstat = 126,
101 fb1a36c0 2022-01-09 op Rwstat,
102 fb1a36c0 2022-01-09 op Tmax,
103 fb1a36c0 2022-01-09 op
104 fb1a36c0 2022-01-09 op /*
105 fb1a36c0 2022-01-09 op * plan9ports' include/fcall.h also has a
106 fb1a36c0 2022-01-09 op *
107 fb1a36c0 2022-01-09 op * Topenfd = 98,
108 fb1a36c0 2022-01-09 op * Ropenfd,
109 fb1a36c0 2022-01-09 op *
110 fb1a36c0 2022-01-09 op * which it's not mentioned in the 9p "rfc" over at
111 fb1a36c0 2022-01-09 op * 9p.cat-v.org. Ignoring that for now.
112 fb1a36c0 2022-01-09 op */
113 fb1a36c0 2022-01-09 op };
114 fb1a36c0 2022-01-09 op
115 fb1a36c0 2022-01-09 op #endif