Pure Erlang implementation of 9p2000 protocol
filesystem
fs
9p2000
erlang
9p
1% SPDX-FileCopyrightText: 2025 Łukasz Niemier <~@hauleth.dev>
2%
3% SPDX-License-Identifier: Apache-2.0
4
5-define(version, ~"9P2000").
6
7-define(notag, 16#FFFF).
8-define(nofid, 16#FFFFFFFF).
9
10-define(max_packet_size, 8168).
11
12-define(int, little-unsigned-unit:8).
13-define(len, 2/?int).
14
15-define(Tversion, 100).
16-define(Rversion, 101).
17
18-define(Tauth, 102).
19-define(Rauth, 103).
20
21-define(Tattach, 104).
22-define(Rattach, 105).
23
24-define(Rerror, 107).
25
26-define(Tflush, 108).
27-define(Rflush, 109).
28
29-define(Twalk, 110).
30-define(Rwalk, 111).
31
32-define(Topen, 112).
33-define(Ropen, 113).
34
35-define(Tcreate, 114).
36-define(Rcreate, 115).
37
38-define(Tread, 116).
39-define(Rread, 117).
40
41-define(Twrite, 118).
42-define(Rwrite, 119).
43
44-define(Tclunk, 120).
45-define(Rclunk, 121).
46
47-define(Tremove, 122).
48-define(Rremove, 123).
49
50-define(Tstat, 124).
51-define(Rstat, 125).
52
53-define(Twstat, 126).
54-define(Rwstat, 127).
55
56-record(qid, {type, version, path}).
57-record(fid, {qid, path, state}).
58
59-record(tversion, {max_packet_size, version}).
60-record(rversion, {max_packet_size, version}).
61
62-record(tauth, {afid, uname, aname}).
63-record(rauth, {aqid}).
64
65-record(rerror, {msg}).
66
67-record(tflush, {tag}).
68-record(rflush, {}).
69
70-record(tattach, {fid, afid, uname, aname}).
71-record(rattach, {qid}).
72
73-record(twalk, {fid, new_fid, names}).
74-record(rwalk, {qids}).
75
76-record(topen, {fid, mode}).
77-record(ropen, {qid, io_unit}).
78
79-record(tcreate, {fid, name, perm, mode}).
80-record(rcreate, {qid, io_unit}).
81
82-record(tread, {fid, offset, len}).
83-record(rread, {data}).
84
85-record(twrite, {fid, offset, data}).
86-record(rwrite, {len}).
87
88-record(tclunk, {fid}).
89-record(rclunk, {}).
90
91-record(tremove, {fid}).
92-record(rremove, {}).
93
94-record(tstat, {fid}).
95-record(rstat, {stat}).
96
97-record(twstat, {fid, stat}).
98-record(rwstat, {}).