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