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 4cce062e 2022-01-16 op struct np_stat {
39 4cce062e 2022-01-16 op uint16_t type;
40 4cce062e 2022-01-16 op uint32_t dev;
41 4cce062e 2022-01-16 op struct qid qid;
42 4cce062e 2022-01-16 op uint32_t mode;
43 4cce062e 2022-01-16 op uint32_t atime;
44 4cce062e 2022-01-16 op uint32_t mtime;
45 4cce062e 2022-01-16 op uint64_t length;
46 4cce062e 2022-01-16 op char *name;
47 4cce062e 2022-01-16 op char *uid;
48 4cce062e 2022-01-16 op char *gid;
49 4cce062e 2022-01-16 op char *muid;
50 4cce062e 2022-01-16 op };
51 4cce062e 2022-01-16 op
52 fb1a36c0 2022-01-09 op /* useful constants */
53 fb1a36c0 2022-01-09 op #define HEADERSIZE (4 + 1 + 2)
54 fb1a36c0 2022-01-09 op #define VERSION9P "9P2000"
55 fb1a36c0 2022-01-09 op #define MSIZE9P ((uint32_t)4*1024*1024)
56 fb1a36c0 2022-01-09 op #define NOTAG ((uint16_t)~0U)
57 fb1a36c0 2022-01-09 op #define NOFID ((uint32_t)~0U)
58 fb1a36c0 2022-01-09 op #define NOUID (-1)
59 fb1a36c0 2022-01-09 op #define QIDSIZE 13
60 fb1a36c0 2022-01-09 op #define MAXWELEM 16
61 fb1a36c0 2022-01-09 op
62 fb1a36c0 2022-01-09 op #define NPSTATSIZ(namlen, uidnam, gidnam, unam) \
63 fb1a36c0 2022-01-09 op (6 + QIDSIZE + 20 + 2 + namlen + 2 + uidnam + 2 + gidnam + 2 + unam)
64 fb1a36c0 2022-01-09 op
65 fb1a36c0 2022-01-09 op /* bits in Qid.type */
66 fb1a36c0 2022-01-09 op #define QTDIR 0x80 /* type bit for directories */
67 fb1a36c0 2022-01-09 op #define QTAPPEND 0x40 /* type bit for append only files */
68 fb1a36c0 2022-01-09 op #define QTEXCL 0x20 /* type bit for exclusive use files */
69 fb1a36c0 2022-01-09 op #define QTMOUNT 0x10 /* type bit for mounted channel */
70 fb1a36c0 2022-01-09 op #define QTAUTH 0x08 /* type bit for authentication file */
71 fb1a36c0 2022-01-09 op #define QTTMP 0x04 /* type bit for non-backed-up file */
72 fb1a36c0 2022-01-09 op #define QTSYMLINK 0x02 /* type bit for symbolic link */
73 fb1a36c0 2022-01-09 op #define QTFILE 0x00 /* type bits for plain file */
74 fb1a36c0 2022-01-09 op
75 fb1a36c0 2022-01-09 op /* Topen mode/flags */
76 fb1a36c0 2022-01-09 op #define KOREAD 0x00
77 fb1a36c0 2022-01-09 op #define KOWRITE 0x01
78 fb1a36c0 2022-01-09 op #define KORDWR 0x02
79 fb1a36c0 2022-01-09 op #define KOEXEC 0x03
80 fb1a36c0 2022-01-09 op #define KOTRUNC 0x10
81 fb1a36c0 2022-01-09 op #define KORCLOSE 0x40
82 fb1a36c0 2022-01-09 op
83 fb1a36c0 2022-01-09 op /* 9p message types */
84 fb1a36c0 2022-01-09 op enum {
85 fb1a36c0 2022-01-09 op Treaddir = 40, /* .L */
86 fb1a36c0 2022-01-09 op Rreaddir,
87 fb1a36c0 2022-01-09 op
88 fb1a36c0 2022-01-09 op Tversion = 100,
89 fb1a36c0 2022-01-09 op Rversion,
90 fb1a36c0 2022-01-09 op Tauth = 102,
91 fb1a36c0 2022-01-09 op Rauth,
92 fb1a36c0 2022-01-09 op Tattach = 104,
93 fb1a36c0 2022-01-09 op Rattach,
94 fb1a36c0 2022-01-09 op Terror = 106, /* illegal */
95 fb1a36c0 2022-01-09 op Rerror,
96 fb1a36c0 2022-01-09 op Tflush = 108,
97 fb1a36c0 2022-01-09 op Rflush,
98 fb1a36c0 2022-01-09 op Twalk = 110,
99 fb1a36c0 2022-01-09 op Rwalk,
100 fb1a36c0 2022-01-09 op Topen = 112,
101 fb1a36c0 2022-01-09 op Ropen,
102 fb1a36c0 2022-01-09 op Tcreate = 114,
103 fb1a36c0 2022-01-09 op Rcreate,
104 fb1a36c0 2022-01-09 op Tread = 116,
105 fb1a36c0 2022-01-09 op Rread,
106 fb1a36c0 2022-01-09 op Twrite = 118,
107 fb1a36c0 2022-01-09 op Rwrite,
108 fb1a36c0 2022-01-09 op Tclunk = 120,
109 fb1a36c0 2022-01-09 op Rclunk,
110 fb1a36c0 2022-01-09 op Tremove = 122,
111 fb1a36c0 2022-01-09 op Rremove,
112 fb1a36c0 2022-01-09 op Tstat = 124,
113 fb1a36c0 2022-01-09 op Rstat,
114 fb1a36c0 2022-01-09 op Twstat = 126,
115 fb1a36c0 2022-01-09 op Rwstat,
116 fb1a36c0 2022-01-09 op Tmax,
117 fb1a36c0 2022-01-09 op
118 fb1a36c0 2022-01-09 op /*
119 fb1a36c0 2022-01-09 op * plan9ports' include/fcall.h also has a
120 fb1a36c0 2022-01-09 op *
121 fb1a36c0 2022-01-09 op * Topenfd = 98,
122 fb1a36c0 2022-01-09 op * Ropenfd,
123 fb1a36c0 2022-01-09 op *
124 fb1a36c0 2022-01-09 op * which it's not mentioned in the 9p "rfc" over at
125 fb1a36c0 2022-01-09 op * 9p.cat-v.org. Ignoring that for now.
126 fb1a36c0 2022-01-09 op */
127 fb1a36c0 2022-01-09 op };
128 fb1a36c0 2022-01-09 op
129 fb1a36c0 2022-01-09 op #endif