summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLuke T. Shumaker <lukeshu@lukeshu.com>2025-02-03 15:06:50 -0700
committerLuke T. Shumaker <lukeshu@lukeshu.com>2025-02-03 21:05:29 -0700
commit265e2b6dc3496fa701df5085d5572efc6c90937d (patch)
tree1bb3970a4c1cc2abd26754ff92fd0e94a34b0160
parentf4da6d8931add68837776809533b88fbdb5b79c4 (diff)
lib9p: idl: Styx: Fill out
-rw-r--r--lib9p/idl/1996-Styx.9p.wip64
1 files changed, 54 insertions, 10 deletions
diff --git a/lib9p/idl/1996-Styx.9p.wip b/lib9p/idl/1996-Styx.9p.wip
index d9d3399..6ba4509 100644
--- a/lib9p/idl/1996-Styx.9p.wip
+++ b/lib9p/idl/1996-Styx.9p.wip
@@ -1,15 +1,59 @@
# lib9p/idl/1996-Styx.9p - Definitions of Styx messages
#
-# Copyright (C) 2024 Luke T. Shumaker <lukeshu@lukeshu.com>
+# Copyright (C) 2024-2025 Luke T. Shumaker <lukeshu@lukeshu.com>
# SPDX-License-Identifier: AGPL-3.0-or-later
# Styx was a variant of the 9P protocol used by the Inferno operating
-# system. Message framing looks like 9P1 (1995), but semantics look
-# more like 9P2000 (2002). I am not sure whether there are Styx
-# protocol differences between Inferno 1e, 2e, or 3e (4e adopted
-# 9P2000).
-#
-# - 1996 beta
-# - 1997 1.0
-# - 1999 2nd ed
-# - 2001 3rd ed
+# system (before it switched to 9P2000 in 4th edition). It looks
+# exactly like 9P1 but with different message-type numbers and without
+# `clwalk` or `session`, and no authentication in `attach`.
+#
+# There do not appear to be Styx protocol differences between Inferno
+# 1e, 2e, or 3e.
+#
+# - 1996 beta https://github.com/inferno-os/inferno-1e0/blob/main/ see `man/html/proto*.htm`, `include/styx.h`, and `Linux/386/include/lib9.h`
+# - 1997 1e https://github.com/inferno-os/inferno-1e1/blob/master/ see `man/html/mpgs{113..124}.htm`, `include/styx.h`, `os/port/lib.h`, and `os/fs/fs.c`
+# - 1999 2e https://github.com/inferno-os/inferno-2e/blob/master/ see `include/styx.h`, `os/port/lib.h`, and `os/kfs/fs.c` (no public manpages)
+# - 2001 3e https://github.com/inferno-os/inferno-3e/blob/master/ see `include/man/5/`, `include/styx.h`, `os/port/lib.h`, and `os/kfs/fs.c`
+version "Styx"
+
+from ./1992-9P1.9p import tag, fid, qid, name, errstr, o, ch, stat
+
+# A Styx session goes:
+#
+# [nop()]
+# attach()
+# ...
+
+msg Tnop = "typ[1,val=0] tag[tag,val=0xFFFF]"
+msg Rnop = "typ[1,val=1] tag[tag,val=0xFFFF]"
+#msg Terror = "typ[1,val=2] illegal"
+msg Rerror = "typ[1,val=3] tag[tag] ename[errstr]"
+msg Tflush = "typ[1,val=4] tag[tag] oldtag[tag]"
+msg Rflush = "typ[1,val=5] tag[tag]"
+msg Tclone = "typ[1,val=6] tag[tag] fid[fid] newfid[fid]"
+msg Rclone = "typ[1,val=7] tag[tag] fid[fid]"
+msg Twalk = "typ[1,val=8] tag[tag] fid[fid] name[name]"
+msg Rwalk = "typ[1,val=9] tag[tag] fid[fid] qid[qid]"
+msg Topen = "typ[1,val=10] tag[tag] fid[fid] mode[o]"
+msg Ropen = "typ[1,val=11] tag[tag] fid[fid] qid[qid]"
+msg Tcreate = "typ[1,val=12] tag[tag] fid[fid] name[name] perm[ch] mode[o]"
+msg Rcreate = "typ[1,val=13] tag[tag] fid[fid] qid[qid]"
+# For `offset:max`, see `fs.c` `f_read()` and `f_write()`.
+# For `count:max`, see `styx.h:MAXFDATA'.
+msg Tread = "typ[1,val=14] tag[tag] fid[fid] offset[8,max=s64_max] count[2,max=8192]"
+msg Rread = "typ[1,val=15] tag[tag] fid[fid] count[2,max=8192] pad[1] count*(data[1])"
+msg Twrite = "typ[1,val=16] tag[tag] fid[fid] offset[8,max=s64_max] count[2,max=8192] pad[1] count*(data[1])"
+msg Rwrite = "typ[1,val=17] tag[tag] fid[fid] count[2,max=8192]"
+msg Tclunk = "typ[1,val=18] tag[tag] fid[fid]"
+msg Rclunk = "typ[1,val=19] tag[tag] fid[fid]"
+msg Tremove = "typ[1,val=20] tag[tag] fid[fid]"
+msg Rremove = "typ[1,val=21] tag[tag] fid[fid]"
+msg Tstat = "typ[1,val=22] tag[tag] fid[fid]"
+msg Rstat = "typ[1,val=23] tag[tag] fid[fid] stat[stat]"
+msg Twstat = "typ[1,val=24] tag[tag] fid[fid] stat[stat]"
+msg Rwstat = "typ[1,val=25] tag[tag] fid[fid]"
+#msg Tsession = "typ[1,val=26]" # The 1e kernel used Tsession in structs internally, but never transmitted it.
+#msg Rsession = "typ[1,val=27]" # Implied by Tsession.
+msg Tattach = "typ[1,val=28] tag[tag] fid[fid] uid[name] aname[name]"
+msg Rattach = "typ[1,val=29] tag[tag] fid[fid] qid[qid]"