summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rwxr-xr-xbuild-aux/stack.c.gen21
-rw-r--r--lib9p/9p.c16
-rw-r--r--lib9p/9p.generated.c1390
-rwxr-xr-xlib9p/idl.gen63
-rw-r--r--lib9p/internal.h18
5 files changed, 412 insertions, 1096 deletions
diff --git a/build-aux/stack.c.gen b/build-aux/stack.c.gen
index 61d7bce..a3288b0 100755
--- a/build-aux/stack.c.gen
+++ b/build-aux/stack.c.gen
@@ -1,7 +1,7 @@
#!/usr/bin/env python3
# build-aux/stack.c.gen - Analyze stack sizes for compiled objects
#
-# 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
import os.path
@@ -375,25 +375,18 @@ def main(
if m := re_tmessage_handler.fullmatch(line):
tmessage_handlers.add(m.group("handler"))
- lib9p_versions: dict[str, set[str]] | None = None
+ lib9p_msgs: set[str] = set()
if any(fname.endswith("lib9p/9p.c") for fname in c_fnames):
generated_c = next(
fname for fname in c_fnames if fname.endswith("lib9p/9p.generated.c")
)
- re_lib9p_msg_entry = re.compile(r"^\s*_MSG\((?P<typ>\S+)\),$")
- lib9p_versions = {
- "validate": set(),
- "marshal": set(),
- "unmarshal": set(),
- }
+ re_lib9p_msg_entry = re.compile(r"^\s*_MSG_(?:[A-Z]+)\((?P<typ>\S+)\),$")
with open(generated_c, "r") as fh:
for line in fh:
line = line.rstrip()
if m := re_lib9p_msg_entry.fullmatch(line):
typ = m.group("typ")
- lib9p_versions["validate"].add(f"validate_{typ}")
- lib9p_versions["unmarshal"].add(f"unmarshal_{typ}")
- lib9p_versions["marshal"].add(f"marshal_{typ}")
+ lib9p_msgs.add(typ)
re_call_vcall = re.compile(r"VCALL\((?P<obj>[^,]+), (?P<meth>[^,)]+)[,)].*")
@@ -417,10 +410,10 @@ def main(
]
if tmessage_handlers and "/srv.c:" in loc and "tmessage_handlers[typ](" in line:
return sorted(tmessage_handlers)
- if lib9p_versions and "/9p.c:" in loc:
- for meth in lib9p_versions.keys():
+ if lib9p_msgs and "/9p.c:" in loc:
+ for meth in ["validate", "unmarshal", "marshal"]:
if line.startswith(f"table.{meth}("):
- return sorted(lib9p_versions[meth])
+ return sorted(f"{meth}_{msg}" for msg in lib9p_msgs)
return None
hooks_indirect_callees += [sbc_indirect_callees]
diff --git a/lib9p/9p.c b/lib9p/9p.c
index a3d81d0..b464f63 100644
--- a/lib9p/9p.c
+++ b/lib9p/9p.c
@@ -1,6 +1,6 @@
/* lib9p/9p.c - Base 9P protocol utilities for both clients and servers
*
- * 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
*/
@@ -9,6 +9,9 @@
#include <stdio.h> /* for vsnprintf() */
#include <string.h> /* for strncpy() */
+#define LOG_NAME 9P
+#include <libmisc/log.h> /* for const_byte_str() */
+
#include <lib9p/9p.h>
#include "internal.h"
@@ -69,7 +72,7 @@ const char *lib9p_msg_type_str(struct lib9p_ctx *ctx, enum lib9p_msg_type typ) {
#pragma GCC diagnostic ignored "-Wtype-limits"
assert(0 <= typ && typ <= 0xFF);
#pragma GCC diagnostic pop
- return _lib9p_versions[ctx->version].msgs[typ].name;
+ return _lib9p_table_msg_name[ctx->version][typ] ?: const_byte_str(typ);
}
/* main message functions *****************************************************/
@@ -87,7 +90,7 @@ ssize_t lib9p_validate(struct lib9p_ctx *ctx, uint8_t *net_bytes) {
if (subctx.net_size < 5)
return lib9p_error(ctx, LINUX_EBADMSG, "message is impossibly short");
uint8_t typ = net_bytes[4];
- struct _table_msg table = _lib9p_versions[ctx->version].msgs[typ];
+ struct _lib9p_recv_tentry table = ((typ % 2 == 0) ? _lib9p_table_Tmsg_recv : _lib9p_table_Rmsg_recv)[ctx->version][typ/2];
if (!table.validate)
return lib9p_errorf(ctx, LINUX_EOPNOTSUPP, "unknown message type: %s (protocol_version=%s)",
lib9p_msg_type_str(ctx, typ), lib9p_version_str(ctx->version));
@@ -116,8 +119,9 @@ void lib9p_unmarshal(struct lib9p_ctx *ctx, uint8_t *net_bytes,
.net_offset = 0,
};
- *ret_typ = net_bytes[4];
- struct _table_msg table = _lib9p_versions[ctx->version].msgs[*ret_typ];
+ enum lib9p_msg_type typ = net_bytes[4];
+ *ret_typ = typ;
+ struct _lib9p_recv_tentry table = ((typ % 2 == 0) ? _lib9p_table_Tmsg_recv : _lib9p_table_Rmsg_recv)[ctx->version][typ/2];
subctx.extra = ret_body + table.basesize;
table.unmarshal(&subctx, ret_body);
}
@@ -130,7 +134,7 @@ bool lib9p_marshal(struct lib9p_ctx *ctx, enum lib9p_msg_type typ, void *body,
.net_offset = 0,
};
- struct _table_msg table = _lib9p_versions[ctx->version].msgs[typ];
+ struct _lib9p_send_tentry table = ((typ % 2 == 0) ? _lib9p_table_Tmsg_send : _lib9p_table_Rmsg_send)[ctx->version][typ/2];
return table.marshal(&subctx, body);
}
diff --git a/lib9p/9p.generated.c b/lib9p/9p.generated.c
index c260647..85e0e2b 100644
--- a/lib9p/9p.generated.c
+++ b/lib9p/9p.generated.c
@@ -1790,1056 +1790,368 @@ LM_FLATTEN static bool marshal_Rswrite(struct _marshal_ctx *ctx, struct lib9p_ms
#endif /* CONFIG_9P_ENABLE_9P2000_e */
/* tables / exports ***********************************************************/
-
-#define _MSG(typ) [LIB9P_TYP_##typ] = { \
- .name = #typ, \
+#define _MSG_NAME(typ) [LIB9P_TYP_##typ] = #typ
+#define _MSG_RECV(typ) [LIB9P_TYP_##typ/2] = { \
.basesize = sizeof(struct lib9p_msg_##typ), \
.validate = validate_##typ, \
.unmarshal = (_unmarshal_fn_t)unmarshal_##typ, \
- .marshal = (_marshal_fn_t)marshal_##typ, \
}
-#define _NONMSG(num) [num] = { \
- .name = #num, \
+#define _MSG_SEND(typ) [LIB9P_TYP_##typ/2] = { \
+ .marshal = (_marshal_fn_t)marshal_##typ, \
}
-struct _table_version _lib9p_versions[LIB9P_VER_NUM] = {
- [LIB9P_VER_unknown] = { .msgs = {
- _NONMSG(0x00),
- _NONMSG(0x01),
- _NONMSG(0x02),
- _NONMSG(0x03),
- _NONMSG(0x04),
- _NONMSG(0x05),
- _NONMSG(0x06),
- _NONMSG(0x07),
- _NONMSG(0x08),
- _NONMSG(0x09),
- _NONMSG(0x0A),
- _NONMSG(0x0B),
- _NONMSG(0x0C),
- _NONMSG(0x0D),
- _NONMSG(0x0E),
- _NONMSG(0x0F),
- _NONMSG(0x10),
- _NONMSG(0x11),
- _NONMSG(0x12),
- _NONMSG(0x13),
- _NONMSG(0x14),
- _NONMSG(0x15),
- _NONMSG(0x16),
- _NONMSG(0x17),
- _NONMSG(0x18),
- _NONMSG(0x19),
- _NONMSG(0x1A),
- _NONMSG(0x1B),
- _NONMSG(0x1C),
- _NONMSG(0x1D),
- _NONMSG(0x1E),
- _NONMSG(0x1F),
- _NONMSG(0x20),
- _NONMSG(0x21),
- _NONMSG(0x22),
- _NONMSG(0x23),
- _NONMSG(0x24),
- _NONMSG(0x25),
- _NONMSG(0x26),
- _NONMSG(0x27),
- _NONMSG(0x28),
- _NONMSG(0x29),
- _NONMSG(0x2A),
- _NONMSG(0x2B),
- _NONMSG(0x2C),
- _NONMSG(0x2D),
- _NONMSG(0x2E),
- _NONMSG(0x2F),
- _NONMSG(0x30),
- _NONMSG(0x31),
- _NONMSG(0x32),
- _NONMSG(0x33),
- _NONMSG(0x34),
- _NONMSG(0x35),
- _NONMSG(0x36),
- _NONMSG(0x37),
- _NONMSG(0x38),
- _NONMSG(0x39),
- _NONMSG(0x3A),
- _NONMSG(0x3B),
- _NONMSG(0x3C),
- _NONMSG(0x3D),
- _NONMSG(0x3E),
- _NONMSG(0x3F),
- _NONMSG(0x40),
- _NONMSG(0x41),
- _NONMSG(0x42),
- _NONMSG(0x43),
- _NONMSG(0x44),
- _NONMSG(0x45),
- _NONMSG(0x46),
- _NONMSG(0x47),
- _NONMSG(0x48),
- _NONMSG(0x49),
- _NONMSG(0x4A),
- _NONMSG(0x4B),
- _NONMSG(0x4C),
- _NONMSG(0x4D),
- _NONMSG(0x4E),
- _NONMSG(0x4F),
- _NONMSG(0x50),
- _NONMSG(0x51),
- _NONMSG(0x52),
- _NONMSG(0x53),
- _NONMSG(0x54),
- _NONMSG(0x55),
- _NONMSG(0x56),
- _NONMSG(0x57),
- _NONMSG(0x58),
- _NONMSG(0x59),
- _NONMSG(0x5A),
- _NONMSG(0x5B),
- _NONMSG(0x5C),
- _NONMSG(0x5D),
- _NONMSG(0x5E),
- _NONMSG(0x5F),
- _NONMSG(0x60),
- _NONMSG(0x61),
- _NONMSG(0x62),
- _NONMSG(0x63),
- _MSG(Tversion),
- _MSG(Rversion),
- _NONMSG(0x66),
- _NONMSG(0x67),
- _NONMSG(0x68),
- _NONMSG(0x69),
- _NONMSG(0x6A),
- _MSG(Rerror),
- _NONMSG(0x6C),
- _NONMSG(0x6D),
- _NONMSG(0x6E),
- _NONMSG(0x6F),
- _NONMSG(0x70),
- _NONMSG(0x71),
- _NONMSG(0x72),
- _NONMSG(0x73),
- _NONMSG(0x74),
- _NONMSG(0x75),
- _NONMSG(0x76),
- _NONMSG(0x77),
- _NONMSG(0x78),
- _NONMSG(0x79),
- _NONMSG(0x7A),
- _NONMSG(0x7B),
- _NONMSG(0x7C),
- _NONMSG(0x7D),
- _NONMSG(0x7E),
- _NONMSG(0x7F),
- _NONMSG(0x80),
- _NONMSG(0x81),
- _NONMSG(0x82),
- _NONMSG(0x83),
- _NONMSG(0x84),
- _NONMSG(0x85),
- _NONMSG(0x86),
- _NONMSG(0x87),
- _NONMSG(0x88),
- _NONMSG(0x89),
- _NONMSG(0x8A),
- _NONMSG(0x8B),
- _NONMSG(0x8C),
- _NONMSG(0x8D),
- _NONMSG(0x8E),
- _NONMSG(0x8F),
- _NONMSG(0x90),
- _NONMSG(0x91),
- _NONMSG(0x92),
- _NONMSG(0x93),
- _NONMSG(0x94),
- _NONMSG(0x95),
- _NONMSG(0x96),
- _NONMSG(0x97),
- _NONMSG(0x98),
- _NONMSG(0x99),
- _NONMSG(0x9A),
- _NONMSG(0x9B),
- _NONMSG(0x9C),
- _NONMSG(0x9D),
- _NONMSG(0x9E),
- _NONMSG(0x9F),
- _NONMSG(0xA0),
- _NONMSG(0xA1),
- _NONMSG(0xA2),
- _NONMSG(0xA3),
- _NONMSG(0xA4),
- _NONMSG(0xA5),
- _NONMSG(0xA6),
- _NONMSG(0xA7),
- _NONMSG(0xA8),
- _NONMSG(0xA9),
- _NONMSG(0xAA),
- _NONMSG(0xAB),
- _NONMSG(0xAC),
- _NONMSG(0xAD),
- _NONMSG(0xAE),
- _NONMSG(0xAF),
- _NONMSG(0xB0),
- _NONMSG(0xB1),
- _NONMSG(0xB2),
- _NONMSG(0xB3),
- _NONMSG(0xB4),
- _NONMSG(0xB5),
- _NONMSG(0xB6),
- _NONMSG(0xB7),
- _NONMSG(0xB8),
- _NONMSG(0xB9),
- _NONMSG(0xBA),
- _NONMSG(0xBB),
- _NONMSG(0xBC),
- _NONMSG(0xBD),
- _NONMSG(0xBE),
- _NONMSG(0xBF),
- _NONMSG(0xC0),
- _NONMSG(0xC1),
- _NONMSG(0xC2),
- _NONMSG(0xC3),
- _NONMSG(0xC4),
- _NONMSG(0xC5),
- _NONMSG(0xC6),
- _NONMSG(0xC7),
- _NONMSG(0xC8),
- _NONMSG(0xC9),
- _NONMSG(0xCA),
- _NONMSG(0xCB),
- _NONMSG(0xCC),
- _NONMSG(0xCD),
- _NONMSG(0xCE),
- _NONMSG(0xCF),
- _NONMSG(0xD0),
- _NONMSG(0xD1),
- _NONMSG(0xD2),
- _NONMSG(0xD3),
- _NONMSG(0xD4),
- _NONMSG(0xD5),
- _NONMSG(0xD6),
- _NONMSG(0xD7),
- _NONMSG(0xD8),
- _NONMSG(0xD9),
- _NONMSG(0xDA),
- _NONMSG(0xDB),
- _NONMSG(0xDC),
- _NONMSG(0xDD),
- _NONMSG(0xDE),
- _NONMSG(0xDF),
- _NONMSG(0xE0),
- _NONMSG(0xE1),
- _NONMSG(0xE2),
- _NONMSG(0xE3),
- _NONMSG(0xE4),
- _NONMSG(0xE5),
- _NONMSG(0xE6),
- _NONMSG(0xE7),
- _NONMSG(0xE8),
- _NONMSG(0xE9),
- _NONMSG(0xEA),
- _NONMSG(0xEB),
- _NONMSG(0xEC),
- _NONMSG(0xED),
- _NONMSG(0xEE),
- _NONMSG(0xEF),
- _NONMSG(0xF0),
- _NONMSG(0xF1),
- _NONMSG(0xF2),
- _NONMSG(0xF3),
- _NONMSG(0xF4),
- _NONMSG(0xF5),
- _NONMSG(0xF6),
- _NONMSG(0xF7),
- _NONMSG(0xF8),
- _NONMSG(0xF9),
- _NONMSG(0xFA),
- _NONMSG(0xFB),
- _NONMSG(0xFC),
- _NONMSG(0xFD),
- _NONMSG(0xFE),
- _NONMSG(0xFF),
- }},
+const char * _lib9p_table_msg_name[LIB9P_VER_NUM][0x100] = {
+ [LIB9P_VER_unknown] = {
+ _MSG_NAME(Tversion),
+ _MSG_NAME(Rversion),
+ _MSG_NAME(Rerror),
+ },
+#if CONFIG_9P_ENABLE_9P2000
+ [LIB9P_VER_9P2000] = {
+ _MSG_NAME(Tversion),
+ _MSG_NAME(Rversion),
+ _MSG_NAME(Tauth),
+ _MSG_NAME(Rauth),
+ _MSG_NAME(Tattach),
+ _MSG_NAME(Rattach),
+ _MSG_NAME(Rerror),
+ _MSG_NAME(Tflush),
+ _MSG_NAME(Rflush),
+ _MSG_NAME(Twalk),
+ _MSG_NAME(Rwalk),
+ _MSG_NAME(Topen),
+ _MSG_NAME(Ropen),
+ _MSG_NAME(Tcreate),
+ _MSG_NAME(Rcreate),
+ _MSG_NAME(Tread),
+ _MSG_NAME(Rread),
+ _MSG_NAME(Twrite),
+ _MSG_NAME(Rwrite),
+ _MSG_NAME(Tclunk),
+ _MSG_NAME(Rclunk),
+ _MSG_NAME(Tremove),
+ _MSG_NAME(Rremove),
+ _MSG_NAME(Tstat),
+ _MSG_NAME(Rstat),
+ _MSG_NAME(Twstat),
+ _MSG_NAME(Rwstat),
+ },
+#endif /* CONFIG_9P_ENABLE_9P2000 */
+#if CONFIG_9P_ENABLE_9P2000_e
+ [LIB9P_VER_9P2000_e] = {
+ _MSG_NAME(Tversion),
+ _MSG_NAME(Rversion),
+ _MSG_NAME(Tauth),
+ _MSG_NAME(Rauth),
+ _MSG_NAME(Tattach),
+ _MSG_NAME(Rattach),
+ _MSG_NAME(Rerror),
+ _MSG_NAME(Tflush),
+ _MSG_NAME(Rflush),
+ _MSG_NAME(Twalk),
+ _MSG_NAME(Rwalk),
+ _MSG_NAME(Topen),
+ _MSG_NAME(Ropen),
+ _MSG_NAME(Tcreate),
+ _MSG_NAME(Rcreate),
+ _MSG_NAME(Tread),
+ _MSG_NAME(Rread),
+ _MSG_NAME(Twrite),
+ _MSG_NAME(Rwrite),
+ _MSG_NAME(Tclunk),
+ _MSG_NAME(Rclunk),
+ _MSG_NAME(Tremove),
+ _MSG_NAME(Rremove),
+ _MSG_NAME(Tstat),
+ _MSG_NAME(Rstat),
+ _MSG_NAME(Twstat),
+ _MSG_NAME(Rwstat),
+ _MSG_NAME(Tsession),
+ _MSG_NAME(Rsession),
+ _MSG_NAME(Tsread),
+ _MSG_NAME(Rsread),
+ _MSG_NAME(Tswrite),
+ _MSG_NAME(Rswrite),
+ },
+#endif /* CONFIG_9P_ENABLE_9P2000_e */
+#if CONFIG_9P_ENABLE_9P2000_u
+ [LIB9P_VER_9P2000_u] = {
+ _MSG_NAME(Tversion),
+ _MSG_NAME(Rversion),
+ _MSG_NAME(Tauth),
+ _MSG_NAME(Rauth),
+ _MSG_NAME(Tattach),
+ _MSG_NAME(Rattach),
+ _MSG_NAME(Rerror),
+ _MSG_NAME(Tflush),
+ _MSG_NAME(Rflush),
+ _MSG_NAME(Twalk),
+ _MSG_NAME(Rwalk),
+ _MSG_NAME(Topen),
+ _MSG_NAME(Ropen),
+ _MSG_NAME(Tcreate),
+ _MSG_NAME(Rcreate),
+ _MSG_NAME(Tread),
+ _MSG_NAME(Rread),
+ _MSG_NAME(Twrite),
+ _MSG_NAME(Rwrite),
+ _MSG_NAME(Tclunk),
+ _MSG_NAME(Rclunk),
+ _MSG_NAME(Tremove),
+ _MSG_NAME(Rremove),
+ _MSG_NAME(Tstat),
+ _MSG_NAME(Rstat),
+ _MSG_NAME(Twstat),
+ _MSG_NAME(Rwstat),
+ },
+#endif /* CONFIG_9P_ENABLE_9P2000_u */
+};
+
+const struct _lib9p_recv_tentry _lib9p_table_Tmsg_recv[LIB9P_VER_NUM][0x80] = {
+ [LIB9P_VER_unknown] = {
+ _MSG_RECV(Tversion),
+ },
+#if CONFIG_9P_ENABLE_9P2000
+ [LIB9P_VER_9P2000] = {
+ _MSG_RECV(Tversion),
+ _MSG_RECV(Tauth),
+ _MSG_RECV(Tattach),
+ _MSG_RECV(Tflush),
+ _MSG_RECV(Twalk),
+ _MSG_RECV(Topen),
+ _MSG_RECV(Tcreate),
+ _MSG_RECV(Tread),
+ _MSG_RECV(Twrite),
+ _MSG_RECV(Tclunk),
+ _MSG_RECV(Tremove),
+ _MSG_RECV(Tstat),
+ _MSG_RECV(Twstat),
+ },
+#endif /* CONFIG_9P_ENABLE_9P2000 */
+#if CONFIG_9P_ENABLE_9P2000_e
+ [LIB9P_VER_9P2000_e] = {
+ _MSG_RECV(Tversion),
+ _MSG_RECV(Tauth),
+ _MSG_RECV(Tattach),
+ _MSG_RECV(Tflush),
+ _MSG_RECV(Twalk),
+ _MSG_RECV(Topen),
+ _MSG_RECV(Tcreate),
+ _MSG_RECV(Tread),
+ _MSG_RECV(Twrite),
+ _MSG_RECV(Tclunk),
+ _MSG_RECV(Tremove),
+ _MSG_RECV(Tstat),
+ _MSG_RECV(Twstat),
+ _MSG_RECV(Tsession),
+ _MSG_RECV(Tsread),
+ _MSG_RECV(Tswrite),
+ },
+#endif /* CONFIG_9P_ENABLE_9P2000_e */
+#if CONFIG_9P_ENABLE_9P2000_u
+ [LIB9P_VER_9P2000_u] = {
+ _MSG_RECV(Tversion),
+ _MSG_RECV(Tauth),
+ _MSG_RECV(Tattach),
+ _MSG_RECV(Tflush),
+ _MSG_RECV(Twalk),
+ _MSG_RECV(Topen),
+ _MSG_RECV(Tcreate),
+ _MSG_RECV(Tread),
+ _MSG_RECV(Twrite),
+ _MSG_RECV(Tclunk),
+ _MSG_RECV(Tremove),
+ _MSG_RECV(Tstat),
+ _MSG_RECV(Twstat),
+ },
+#endif /* CONFIG_9P_ENABLE_9P2000_u */
+};
+
+const struct _lib9p_recv_tentry _lib9p_table_Rmsg_recv[LIB9P_VER_NUM][0x80] = {
+ [LIB9P_VER_unknown] = {
+ _MSG_RECV(Rversion),
+ _MSG_RECV(Rerror),
+ },
+#if CONFIG_9P_ENABLE_9P2000
+ [LIB9P_VER_9P2000] = {
+ _MSG_RECV(Rversion),
+ _MSG_RECV(Rauth),
+ _MSG_RECV(Rattach),
+ _MSG_RECV(Rerror),
+ _MSG_RECV(Rflush),
+ _MSG_RECV(Rwalk),
+ _MSG_RECV(Ropen),
+ _MSG_RECV(Rcreate),
+ _MSG_RECV(Rread),
+ _MSG_RECV(Rwrite),
+ _MSG_RECV(Rclunk),
+ _MSG_RECV(Rremove),
+ _MSG_RECV(Rstat),
+ _MSG_RECV(Rwstat),
+ },
+#endif /* CONFIG_9P_ENABLE_9P2000 */
+#if CONFIG_9P_ENABLE_9P2000_e
+ [LIB9P_VER_9P2000_e] = {
+ _MSG_RECV(Rversion),
+ _MSG_RECV(Rauth),
+ _MSG_RECV(Rattach),
+ _MSG_RECV(Rerror),
+ _MSG_RECV(Rflush),
+ _MSG_RECV(Rwalk),
+ _MSG_RECV(Ropen),
+ _MSG_RECV(Rcreate),
+ _MSG_RECV(Rread),
+ _MSG_RECV(Rwrite),
+ _MSG_RECV(Rclunk),
+ _MSG_RECV(Rremove),
+ _MSG_RECV(Rstat),
+ _MSG_RECV(Rwstat),
+ _MSG_RECV(Rsession),
+ _MSG_RECV(Rsread),
+ _MSG_RECV(Rswrite),
+ },
+#endif /* CONFIG_9P_ENABLE_9P2000_e */
+#if CONFIG_9P_ENABLE_9P2000_u
+ [LIB9P_VER_9P2000_u] = {
+ _MSG_RECV(Rversion),
+ _MSG_RECV(Rauth),
+ _MSG_RECV(Rattach),
+ _MSG_RECV(Rerror),
+ _MSG_RECV(Rflush),
+ _MSG_RECV(Rwalk),
+ _MSG_RECV(Ropen),
+ _MSG_RECV(Rcreate),
+ _MSG_RECV(Rread),
+ _MSG_RECV(Rwrite),
+ _MSG_RECV(Rclunk),
+ _MSG_RECV(Rremove),
+ _MSG_RECV(Rstat),
+ _MSG_RECV(Rwstat),
+ },
+#endif /* CONFIG_9P_ENABLE_9P2000_u */
+};
+
+const struct _lib9p_send_tentry _lib9p_table_Tmsg_send[LIB9P_VER_NUM][0x80] = {
+ [LIB9P_VER_unknown] = {
+ _MSG_SEND(Tversion),
+ },
+#if CONFIG_9P_ENABLE_9P2000
+ [LIB9P_VER_9P2000] = {
+ _MSG_SEND(Tversion),
+ _MSG_SEND(Tauth),
+ _MSG_SEND(Tattach),
+ _MSG_SEND(Tflush),
+ _MSG_SEND(Twalk),
+ _MSG_SEND(Topen),
+ _MSG_SEND(Tcreate),
+ _MSG_SEND(Tread),
+ _MSG_SEND(Twrite),
+ _MSG_SEND(Tclunk),
+ _MSG_SEND(Tremove),
+ _MSG_SEND(Tstat),
+ _MSG_SEND(Twstat),
+ },
+#endif /* CONFIG_9P_ENABLE_9P2000 */
+#if CONFIG_9P_ENABLE_9P2000_e
+ [LIB9P_VER_9P2000_e] = {
+ _MSG_SEND(Tversion),
+ _MSG_SEND(Tauth),
+ _MSG_SEND(Tattach),
+ _MSG_SEND(Tflush),
+ _MSG_SEND(Twalk),
+ _MSG_SEND(Topen),
+ _MSG_SEND(Tcreate),
+ _MSG_SEND(Tread),
+ _MSG_SEND(Twrite),
+ _MSG_SEND(Tclunk),
+ _MSG_SEND(Tremove),
+ _MSG_SEND(Tstat),
+ _MSG_SEND(Twstat),
+ _MSG_SEND(Tsession),
+ _MSG_SEND(Tsread),
+ _MSG_SEND(Tswrite),
+ },
+#endif /* CONFIG_9P_ENABLE_9P2000_e */
+#if CONFIG_9P_ENABLE_9P2000_u
+ [LIB9P_VER_9P2000_u] = {
+ _MSG_SEND(Tversion),
+ _MSG_SEND(Tauth),
+ _MSG_SEND(Tattach),
+ _MSG_SEND(Tflush),
+ _MSG_SEND(Twalk),
+ _MSG_SEND(Topen),
+ _MSG_SEND(Tcreate),
+ _MSG_SEND(Tread),
+ _MSG_SEND(Twrite),
+ _MSG_SEND(Tclunk),
+ _MSG_SEND(Tremove),
+ _MSG_SEND(Tstat),
+ _MSG_SEND(Twstat),
+ },
+#endif /* CONFIG_9P_ENABLE_9P2000_u */
+};
+
+const struct _lib9p_send_tentry _lib9p_table_Rmsg_send[LIB9P_VER_NUM][0x80] = {
+ [LIB9P_VER_unknown] = {
+ _MSG_SEND(Rversion),
+ _MSG_SEND(Rerror),
+ },
#if CONFIG_9P_ENABLE_9P2000
- [LIB9P_VER_9P2000] = { .msgs = {
- _NONMSG(0x00),
- _NONMSG(0x01),
- _NONMSG(0x02),
- _NONMSG(0x03),
- _NONMSG(0x04),
- _NONMSG(0x05),
- _NONMSG(0x06),
- _NONMSG(0x07),
- _NONMSG(0x08),
- _NONMSG(0x09),
- _NONMSG(0x0A),
- _NONMSG(0x0B),
- _NONMSG(0x0C),
- _NONMSG(0x0D),
- _NONMSG(0x0E),
- _NONMSG(0x0F),
- _NONMSG(0x10),
- _NONMSG(0x11),
- _NONMSG(0x12),
- _NONMSG(0x13),
- _NONMSG(0x14),
- _NONMSG(0x15),
- _NONMSG(0x16),
- _NONMSG(0x17),
- _NONMSG(0x18),
- _NONMSG(0x19),
- _NONMSG(0x1A),
- _NONMSG(0x1B),
- _NONMSG(0x1C),
- _NONMSG(0x1D),
- _NONMSG(0x1E),
- _NONMSG(0x1F),
- _NONMSG(0x20),
- _NONMSG(0x21),
- _NONMSG(0x22),
- _NONMSG(0x23),
- _NONMSG(0x24),
- _NONMSG(0x25),
- _NONMSG(0x26),
- _NONMSG(0x27),
- _NONMSG(0x28),
- _NONMSG(0x29),
- _NONMSG(0x2A),
- _NONMSG(0x2B),
- _NONMSG(0x2C),
- _NONMSG(0x2D),
- _NONMSG(0x2E),
- _NONMSG(0x2F),
- _NONMSG(0x30),
- _NONMSG(0x31),
- _NONMSG(0x32),
- _NONMSG(0x33),
- _NONMSG(0x34),
- _NONMSG(0x35),
- _NONMSG(0x36),
- _NONMSG(0x37),
- _NONMSG(0x38),
- _NONMSG(0x39),
- _NONMSG(0x3A),
- _NONMSG(0x3B),
- _NONMSG(0x3C),
- _NONMSG(0x3D),
- _NONMSG(0x3E),
- _NONMSG(0x3F),
- _NONMSG(0x40),
- _NONMSG(0x41),
- _NONMSG(0x42),
- _NONMSG(0x43),
- _NONMSG(0x44),
- _NONMSG(0x45),
- _NONMSG(0x46),
- _NONMSG(0x47),
- _NONMSG(0x48),
- _NONMSG(0x49),
- _NONMSG(0x4A),
- _NONMSG(0x4B),
- _NONMSG(0x4C),
- _NONMSG(0x4D),
- _NONMSG(0x4E),
- _NONMSG(0x4F),
- _NONMSG(0x50),
- _NONMSG(0x51),
- _NONMSG(0x52),
- _NONMSG(0x53),
- _NONMSG(0x54),
- _NONMSG(0x55),
- _NONMSG(0x56),
- _NONMSG(0x57),
- _NONMSG(0x58),
- _NONMSG(0x59),
- _NONMSG(0x5A),
- _NONMSG(0x5B),
- _NONMSG(0x5C),
- _NONMSG(0x5D),
- _NONMSG(0x5E),
- _NONMSG(0x5F),
- _NONMSG(0x60),
- _NONMSG(0x61),
- _NONMSG(0x62),
- _NONMSG(0x63),
- _MSG(Tversion),
- _MSG(Rversion),
- _MSG(Tauth),
- _MSG(Rauth),
- _MSG(Tattach),
- _MSG(Rattach),
- _NONMSG(0x6A),
- _MSG(Rerror),
- _MSG(Tflush),
- _MSG(Rflush),
- _MSG(Twalk),
- _MSG(Rwalk),
- _MSG(Topen),
- _MSG(Ropen),
- _MSG(Tcreate),
- _MSG(Rcreate),
- _MSG(Tread),
- _MSG(Rread),
- _MSG(Twrite),
- _MSG(Rwrite),
- _MSG(Tclunk),
- _MSG(Rclunk),
- _MSG(Tremove),
- _MSG(Rremove),
- _MSG(Tstat),
- _MSG(Rstat),
- _MSG(Twstat),
- _MSG(Rwstat),
- _NONMSG(0x80),
- _NONMSG(0x81),
- _NONMSG(0x82),
- _NONMSG(0x83),
- _NONMSG(0x84),
- _NONMSG(0x85),
- _NONMSG(0x86),
- _NONMSG(0x87),
- _NONMSG(0x88),
- _NONMSG(0x89),
- _NONMSG(0x8A),
- _NONMSG(0x8B),
- _NONMSG(0x8C),
- _NONMSG(0x8D),
- _NONMSG(0x8E),
- _NONMSG(0x8F),
- _NONMSG(0x90),
- _NONMSG(0x91),
- _NONMSG(0x92),
- _NONMSG(0x93),
- _NONMSG(0x94),
- _NONMSG(0x95),
- _NONMSG(0x96),
- _NONMSG(0x97),
- _NONMSG(0x98),
- _NONMSG(0x99),
- _NONMSG(0x9A),
- _NONMSG(0x9B),
- _NONMSG(0x9C),
- _NONMSG(0x9D),
- _NONMSG(0x9E),
- _NONMSG(0x9F),
- _NONMSG(0xA0),
- _NONMSG(0xA1),
- _NONMSG(0xA2),
- _NONMSG(0xA3),
- _NONMSG(0xA4),
- _NONMSG(0xA5),
- _NONMSG(0xA6),
- _NONMSG(0xA7),
- _NONMSG(0xA8),
- _NONMSG(0xA9),
- _NONMSG(0xAA),
- _NONMSG(0xAB),
- _NONMSG(0xAC),
- _NONMSG(0xAD),
- _NONMSG(0xAE),
- _NONMSG(0xAF),
- _NONMSG(0xB0),
- _NONMSG(0xB1),
- _NONMSG(0xB2),
- _NONMSG(0xB3),
- _NONMSG(0xB4),
- _NONMSG(0xB5),
- _NONMSG(0xB6),
- _NONMSG(0xB7),
- _NONMSG(0xB8),
- _NONMSG(0xB9),
- _NONMSG(0xBA),
- _NONMSG(0xBB),
- _NONMSG(0xBC),
- _NONMSG(0xBD),
- _NONMSG(0xBE),
- _NONMSG(0xBF),
- _NONMSG(0xC0),
- _NONMSG(0xC1),
- _NONMSG(0xC2),
- _NONMSG(0xC3),
- _NONMSG(0xC4),
- _NONMSG(0xC5),
- _NONMSG(0xC6),
- _NONMSG(0xC7),
- _NONMSG(0xC8),
- _NONMSG(0xC9),
- _NONMSG(0xCA),
- _NONMSG(0xCB),
- _NONMSG(0xCC),
- _NONMSG(0xCD),
- _NONMSG(0xCE),
- _NONMSG(0xCF),
- _NONMSG(0xD0),
- _NONMSG(0xD1),
- _NONMSG(0xD2),
- _NONMSG(0xD3),
- _NONMSG(0xD4),
- _NONMSG(0xD5),
- _NONMSG(0xD6),
- _NONMSG(0xD7),
- _NONMSG(0xD8),
- _NONMSG(0xD9),
- _NONMSG(0xDA),
- _NONMSG(0xDB),
- _NONMSG(0xDC),
- _NONMSG(0xDD),
- _NONMSG(0xDE),
- _NONMSG(0xDF),
- _NONMSG(0xE0),
- _NONMSG(0xE1),
- _NONMSG(0xE2),
- _NONMSG(0xE3),
- _NONMSG(0xE4),
- _NONMSG(0xE5),
- _NONMSG(0xE6),
- _NONMSG(0xE7),
- _NONMSG(0xE8),
- _NONMSG(0xE9),
- _NONMSG(0xEA),
- _NONMSG(0xEB),
- _NONMSG(0xEC),
- _NONMSG(0xED),
- _NONMSG(0xEE),
- _NONMSG(0xEF),
- _NONMSG(0xF0),
- _NONMSG(0xF1),
- _NONMSG(0xF2),
- _NONMSG(0xF3),
- _NONMSG(0xF4),
- _NONMSG(0xF5),
- _NONMSG(0xF6),
- _NONMSG(0xF7),
- _NONMSG(0xF8),
- _NONMSG(0xF9),
- _NONMSG(0xFA),
- _NONMSG(0xFB),
- _NONMSG(0xFC),
- _NONMSG(0xFD),
- _NONMSG(0xFE),
- _NONMSG(0xFF),
- }},
+ [LIB9P_VER_9P2000] = {
+ _MSG_SEND(Rversion),
+ _MSG_SEND(Rauth),
+ _MSG_SEND(Rattach),
+ _MSG_SEND(Rerror),
+ _MSG_SEND(Rflush),
+ _MSG_SEND(Rwalk),
+ _MSG_SEND(Ropen),
+ _MSG_SEND(Rcreate),
+ _MSG_SEND(Rread),
+ _MSG_SEND(Rwrite),
+ _MSG_SEND(Rclunk),
+ _MSG_SEND(Rremove),
+ _MSG_SEND(Rstat),
+ _MSG_SEND(Rwstat),
+ },
#endif /* CONFIG_9P_ENABLE_9P2000 */
#if CONFIG_9P_ENABLE_9P2000_e
- [LIB9P_VER_9P2000_e] = { .msgs = {
- _NONMSG(0x00),
- _NONMSG(0x01),
- _NONMSG(0x02),
- _NONMSG(0x03),
- _NONMSG(0x04),
- _NONMSG(0x05),
- _NONMSG(0x06),
- _NONMSG(0x07),
- _NONMSG(0x08),
- _NONMSG(0x09),
- _NONMSG(0x0A),
- _NONMSG(0x0B),
- _NONMSG(0x0C),
- _NONMSG(0x0D),
- _NONMSG(0x0E),
- _NONMSG(0x0F),
- _NONMSG(0x10),
- _NONMSG(0x11),
- _NONMSG(0x12),
- _NONMSG(0x13),
- _NONMSG(0x14),
- _NONMSG(0x15),
- _NONMSG(0x16),
- _NONMSG(0x17),
- _NONMSG(0x18),
- _NONMSG(0x19),
- _NONMSG(0x1A),
- _NONMSG(0x1B),
- _NONMSG(0x1C),
- _NONMSG(0x1D),
- _NONMSG(0x1E),
- _NONMSG(0x1F),
- _NONMSG(0x20),
- _NONMSG(0x21),
- _NONMSG(0x22),
- _NONMSG(0x23),
- _NONMSG(0x24),
- _NONMSG(0x25),
- _NONMSG(0x26),
- _NONMSG(0x27),
- _NONMSG(0x28),
- _NONMSG(0x29),
- _NONMSG(0x2A),
- _NONMSG(0x2B),
- _NONMSG(0x2C),
- _NONMSG(0x2D),
- _NONMSG(0x2E),
- _NONMSG(0x2F),
- _NONMSG(0x30),
- _NONMSG(0x31),
- _NONMSG(0x32),
- _NONMSG(0x33),
- _NONMSG(0x34),
- _NONMSG(0x35),
- _NONMSG(0x36),
- _NONMSG(0x37),
- _NONMSG(0x38),
- _NONMSG(0x39),
- _NONMSG(0x3A),
- _NONMSG(0x3B),
- _NONMSG(0x3C),
- _NONMSG(0x3D),
- _NONMSG(0x3E),
- _NONMSG(0x3F),
- _NONMSG(0x40),
- _NONMSG(0x41),
- _NONMSG(0x42),
- _NONMSG(0x43),
- _NONMSG(0x44),
- _NONMSG(0x45),
- _NONMSG(0x46),
- _NONMSG(0x47),
- _NONMSG(0x48),
- _NONMSG(0x49),
- _NONMSG(0x4A),
- _NONMSG(0x4B),
- _NONMSG(0x4C),
- _NONMSG(0x4D),
- _NONMSG(0x4E),
- _NONMSG(0x4F),
- _NONMSG(0x50),
- _NONMSG(0x51),
- _NONMSG(0x52),
- _NONMSG(0x53),
- _NONMSG(0x54),
- _NONMSG(0x55),
- _NONMSG(0x56),
- _NONMSG(0x57),
- _NONMSG(0x58),
- _NONMSG(0x59),
- _NONMSG(0x5A),
- _NONMSG(0x5B),
- _NONMSG(0x5C),
- _NONMSG(0x5D),
- _NONMSG(0x5E),
- _NONMSG(0x5F),
- _NONMSG(0x60),
- _NONMSG(0x61),
- _NONMSG(0x62),
- _NONMSG(0x63),
- _MSG(Tversion),
- _MSG(Rversion),
- _MSG(Tauth),
- _MSG(Rauth),
- _MSG(Tattach),
- _MSG(Rattach),
- _NONMSG(0x6A),
- _MSG(Rerror),
- _MSG(Tflush),
- _MSG(Rflush),
- _MSG(Twalk),
- _MSG(Rwalk),
- _MSG(Topen),
- _MSG(Ropen),
- _MSG(Tcreate),
- _MSG(Rcreate),
- _MSG(Tread),
- _MSG(Rread),
- _MSG(Twrite),
- _MSG(Rwrite),
- _MSG(Tclunk),
- _MSG(Rclunk),
- _MSG(Tremove),
- _MSG(Rremove),
- _MSG(Tstat),
- _MSG(Rstat),
- _MSG(Twstat),
- _MSG(Rwstat),
- _NONMSG(0x80),
- _NONMSG(0x81),
- _NONMSG(0x82),
- _NONMSG(0x83),
- _NONMSG(0x84),
- _NONMSG(0x85),
- _NONMSG(0x86),
- _NONMSG(0x87),
- _NONMSG(0x88),
- _NONMSG(0x89),
- _NONMSG(0x8A),
- _NONMSG(0x8B),
- _NONMSG(0x8C),
- _NONMSG(0x8D),
- _NONMSG(0x8E),
- _NONMSG(0x8F),
- _NONMSG(0x90),
- _NONMSG(0x91),
- _NONMSG(0x92),
- _NONMSG(0x93),
- _NONMSG(0x94),
- _NONMSG(0x95),
- _MSG(Tsession),
- _MSG(Rsession),
- _MSG(Tsread),
- _MSG(Rsread),
- _MSG(Tswrite),
- _MSG(Rswrite),
- _NONMSG(0x9C),
- _NONMSG(0x9D),
- _NONMSG(0x9E),
- _NONMSG(0x9F),
- _NONMSG(0xA0),
- _NONMSG(0xA1),
- _NONMSG(0xA2),
- _NONMSG(0xA3),
- _NONMSG(0xA4),
- _NONMSG(0xA5),
- _NONMSG(0xA6),
- _NONMSG(0xA7),
- _NONMSG(0xA8),
- _NONMSG(0xA9),
- _NONMSG(0xAA),
- _NONMSG(0xAB),
- _NONMSG(0xAC),
- _NONMSG(0xAD),
- _NONMSG(0xAE),
- _NONMSG(0xAF),
- _NONMSG(0xB0),
- _NONMSG(0xB1),
- _NONMSG(0xB2),
- _NONMSG(0xB3),
- _NONMSG(0xB4),
- _NONMSG(0xB5),
- _NONMSG(0xB6),
- _NONMSG(0xB7),
- _NONMSG(0xB8),
- _NONMSG(0xB9),
- _NONMSG(0xBA),
- _NONMSG(0xBB),
- _NONMSG(0xBC),
- _NONMSG(0xBD),
- _NONMSG(0xBE),
- _NONMSG(0xBF),
- _NONMSG(0xC0),
- _NONMSG(0xC1),
- _NONMSG(0xC2),
- _NONMSG(0xC3),
- _NONMSG(0xC4),
- _NONMSG(0xC5),
- _NONMSG(0xC6),
- _NONMSG(0xC7),
- _NONMSG(0xC8),
- _NONMSG(0xC9),
- _NONMSG(0xCA),
- _NONMSG(0xCB),
- _NONMSG(0xCC),
- _NONMSG(0xCD),
- _NONMSG(0xCE),
- _NONMSG(0xCF),
- _NONMSG(0xD0),
- _NONMSG(0xD1),
- _NONMSG(0xD2),
- _NONMSG(0xD3),
- _NONMSG(0xD4),
- _NONMSG(0xD5),
- _NONMSG(0xD6),
- _NONMSG(0xD7),
- _NONMSG(0xD8),
- _NONMSG(0xD9),
- _NONMSG(0xDA),
- _NONMSG(0xDB),
- _NONMSG(0xDC),
- _NONMSG(0xDD),
- _NONMSG(0xDE),
- _NONMSG(0xDF),
- _NONMSG(0xE0),
- _NONMSG(0xE1),
- _NONMSG(0xE2),
- _NONMSG(0xE3),
- _NONMSG(0xE4),
- _NONMSG(0xE5),
- _NONMSG(0xE6),
- _NONMSG(0xE7),
- _NONMSG(0xE8),
- _NONMSG(0xE9),
- _NONMSG(0xEA),
- _NONMSG(0xEB),
- _NONMSG(0xEC),
- _NONMSG(0xED),
- _NONMSG(0xEE),
- _NONMSG(0xEF),
- _NONMSG(0xF0),
- _NONMSG(0xF1),
- _NONMSG(0xF2),
- _NONMSG(0xF3),
- _NONMSG(0xF4),
- _NONMSG(0xF5),
- _NONMSG(0xF6),
- _NONMSG(0xF7),
- _NONMSG(0xF8),
- _NONMSG(0xF9),
- _NONMSG(0xFA),
- _NONMSG(0xFB),
- _NONMSG(0xFC),
- _NONMSG(0xFD),
- _NONMSG(0xFE),
- _NONMSG(0xFF),
- }},
+ [LIB9P_VER_9P2000_e] = {
+ _MSG_SEND(Rversion),
+ _MSG_SEND(Rauth),
+ _MSG_SEND(Rattach),
+ _MSG_SEND(Rerror),
+ _MSG_SEND(Rflush),
+ _MSG_SEND(Rwalk),
+ _MSG_SEND(Ropen),
+ _MSG_SEND(Rcreate),
+ _MSG_SEND(Rread),
+ _MSG_SEND(Rwrite),
+ _MSG_SEND(Rclunk),
+ _MSG_SEND(Rremove),
+ _MSG_SEND(Rstat),
+ _MSG_SEND(Rwstat),
+ _MSG_SEND(Rsession),
+ _MSG_SEND(Rsread),
+ _MSG_SEND(Rswrite),
+ },
#endif /* CONFIG_9P_ENABLE_9P2000_e */
#if CONFIG_9P_ENABLE_9P2000_u
- [LIB9P_VER_9P2000_u] = { .msgs = {
- _NONMSG(0x00),
- _NONMSG(0x01),
- _NONMSG(0x02),
- _NONMSG(0x03),
- _NONMSG(0x04),
- _NONMSG(0x05),
- _NONMSG(0x06),
- _NONMSG(0x07),
- _NONMSG(0x08),
- _NONMSG(0x09),
- _NONMSG(0x0A),
- _NONMSG(0x0B),
- _NONMSG(0x0C),
- _NONMSG(0x0D),
- _NONMSG(0x0E),
- _NONMSG(0x0F),
- _NONMSG(0x10),
- _NONMSG(0x11),
- _NONMSG(0x12),
- _NONMSG(0x13),
- _NONMSG(0x14),
- _NONMSG(0x15),
- _NONMSG(0x16),
- _NONMSG(0x17),
- _NONMSG(0x18),
- _NONMSG(0x19),
- _NONMSG(0x1A),
- _NONMSG(0x1B),
- _NONMSG(0x1C),
- _NONMSG(0x1D),
- _NONMSG(0x1E),
- _NONMSG(0x1F),
- _NONMSG(0x20),
- _NONMSG(0x21),
- _NONMSG(0x22),
- _NONMSG(0x23),
- _NONMSG(0x24),
- _NONMSG(0x25),
- _NONMSG(0x26),
- _NONMSG(0x27),
- _NONMSG(0x28),
- _NONMSG(0x29),
- _NONMSG(0x2A),
- _NONMSG(0x2B),
- _NONMSG(0x2C),
- _NONMSG(0x2D),
- _NONMSG(0x2E),
- _NONMSG(0x2F),
- _NONMSG(0x30),
- _NONMSG(0x31),
- _NONMSG(0x32),
- _NONMSG(0x33),
- _NONMSG(0x34),
- _NONMSG(0x35),
- _NONMSG(0x36),
- _NONMSG(0x37),
- _NONMSG(0x38),
- _NONMSG(0x39),
- _NONMSG(0x3A),
- _NONMSG(0x3B),
- _NONMSG(0x3C),
- _NONMSG(0x3D),
- _NONMSG(0x3E),
- _NONMSG(0x3F),
- _NONMSG(0x40),
- _NONMSG(0x41),
- _NONMSG(0x42),
- _NONMSG(0x43),
- _NONMSG(0x44),
- _NONMSG(0x45),
- _NONMSG(0x46),
- _NONMSG(0x47),
- _NONMSG(0x48),
- _NONMSG(0x49),
- _NONMSG(0x4A),
- _NONMSG(0x4B),
- _NONMSG(0x4C),
- _NONMSG(0x4D),
- _NONMSG(0x4E),
- _NONMSG(0x4F),
- _NONMSG(0x50),
- _NONMSG(0x51),
- _NONMSG(0x52),
- _NONMSG(0x53),
- _NONMSG(0x54),
- _NONMSG(0x55),
- _NONMSG(0x56),
- _NONMSG(0x57),
- _NONMSG(0x58),
- _NONMSG(0x59),
- _NONMSG(0x5A),
- _NONMSG(0x5B),
- _NONMSG(0x5C),
- _NONMSG(0x5D),
- _NONMSG(0x5E),
- _NONMSG(0x5F),
- _NONMSG(0x60),
- _NONMSG(0x61),
- _NONMSG(0x62),
- _NONMSG(0x63),
- _MSG(Tversion),
- _MSG(Rversion),
- _MSG(Tauth),
- _MSG(Rauth),
- _MSG(Tattach),
- _MSG(Rattach),
- _NONMSG(0x6A),
- _MSG(Rerror),
- _MSG(Tflush),
- _MSG(Rflush),
- _MSG(Twalk),
- _MSG(Rwalk),
- _MSG(Topen),
- _MSG(Ropen),
- _MSG(Tcreate),
- _MSG(Rcreate),
- _MSG(Tread),
- _MSG(Rread),
- _MSG(Twrite),
- _MSG(Rwrite),
- _MSG(Tclunk),
- _MSG(Rclunk),
- _MSG(Tremove),
- _MSG(Rremove),
- _MSG(Tstat),
- _MSG(Rstat),
- _MSG(Twstat),
- _MSG(Rwstat),
- _NONMSG(0x80),
- _NONMSG(0x81),
- _NONMSG(0x82),
- _NONMSG(0x83),
- _NONMSG(0x84),
- _NONMSG(0x85),
- _NONMSG(0x86),
- _NONMSG(0x87),
- _NONMSG(0x88),
- _NONMSG(0x89),
- _NONMSG(0x8A),
- _NONMSG(0x8B),
- _NONMSG(0x8C),
- _NONMSG(0x8D),
- _NONMSG(0x8E),
- _NONMSG(0x8F),
- _NONMSG(0x90),
- _NONMSG(0x91),
- _NONMSG(0x92),
- _NONMSG(0x93),
- _NONMSG(0x94),
- _NONMSG(0x95),
- _NONMSG(0x96),
- _NONMSG(0x97),
- _NONMSG(0x98),
- _NONMSG(0x99),
- _NONMSG(0x9A),
- _NONMSG(0x9B),
- _NONMSG(0x9C),
- _NONMSG(0x9D),
- _NONMSG(0x9E),
- _NONMSG(0x9F),
- _NONMSG(0xA0),
- _NONMSG(0xA1),
- _NONMSG(0xA2),
- _NONMSG(0xA3),
- _NONMSG(0xA4),
- _NONMSG(0xA5),
- _NONMSG(0xA6),
- _NONMSG(0xA7),
- _NONMSG(0xA8),
- _NONMSG(0xA9),
- _NONMSG(0xAA),
- _NONMSG(0xAB),
- _NONMSG(0xAC),
- _NONMSG(0xAD),
- _NONMSG(0xAE),
- _NONMSG(0xAF),
- _NONMSG(0xB0),
- _NONMSG(0xB1),
- _NONMSG(0xB2),
- _NONMSG(0xB3),
- _NONMSG(0xB4),
- _NONMSG(0xB5),
- _NONMSG(0xB6),
- _NONMSG(0xB7),
- _NONMSG(0xB8),
- _NONMSG(0xB9),
- _NONMSG(0xBA),
- _NONMSG(0xBB),
- _NONMSG(0xBC),
- _NONMSG(0xBD),
- _NONMSG(0xBE),
- _NONMSG(0xBF),
- _NONMSG(0xC0),
- _NONMSG(0xC1),
- _NONMSG(0xC2),
- _NONMSG(0xC3),
- _NONMSG(0xC4),
- _NONMSG(0xC5),
- _NONMSG(0xC6),
- _NONMSG(0xC7),
- _NONMSG(0xC8),
- _NONMSG(0xC9),
- _NONMSG(0xCA),
- _NONMSG(0xCB),
- _NONMSG(0xCC),
- _NONMSG(0xCD),
- _NONMSG(0xCE),
- _NONMSG(0xCF),
- _NONMSG(0xD0),
- _NONMSG(0xD1),
- _NONMSG(0xD2),
- _NONMSG(0xD3),
- _NONMSG(0xD4),
- _NONMSG(0xD5),
- _NONMSG(0xD6),
- _NONMSG(0xD7),
- _NONMSG(0xD8),
- _NONMSG(0xD9),
- _NONMSG(0xDA),
- _NONMSG(0xDB),
- _NONMSG(0xDC),
- _NONMSG(0xDD),
- _NONMSG(0xDE),
- _NONMSG(0xDF),
- _NONMSG(0xE0),
- _NONMSG(0xE1),
- _NONMSG(0xE2),
- _NONMSG(0xE3),
- _NONMSG(0xE4),
- _NONMSG(0xE5),
- _NONMSG(0xE6),
- _NONMSG(0xE7),
- _NONMSG(0xE8),
- _NONMSG(0xE9),
- _NONMSG(0xEA),
- _NONMSG(0xEB),
- _NONMSG(0xEC),
- _NONMSG(0xED),
- _NONMSG(0xEE),
- _NONMSG(0xEF),
- _NONMSG(0xF0),
- _NONMSG(0xF1),
- _NONMSG(0xF2),
- _NONMSG(0xF3),
- _NONMSG(0xF4),
- _NONMSG(0xF5),
- _NONMSG(0xF6),
- _NONMSG(0xF7),
- _NONMSG(0xF8),
- _NONMSG(0xF9),
- _NONMSG(0xFA),
- _NONMSG(0xFB),
- _NONMSG(0xFC),
- _NONMSG(0xFD),
- _NONMSG(0xFE),
- _NONMSG(0xFF),
- }},
+ [LIB9P_VER_9P2000_u] = {
+ _MSG_SEND(Rversion),
+ _MSG_SEND(Rauth),
+ _MSG_SEND(Rattach),
+ _MSG_SEND(Rerror),
+ _MSG_SEND(Rflush),
+ _MSG_SEND(Rwalk),
+ _MSG_SEND(Ropen),
+ _MSG_SEND(Rcreate),
+ _MSG_SEND(Rread),
+ _MSG_SEND(Rwrite),
+ _MSG_SEND(Rclunk),
+ _MSG_SEND(Rremove),
+ _MSG_SEND(Rstat),
+ _MSG_SEND(Rwstat),
+ },
#endif /* CONFIG_9P_ENABLE_9P2000_u */
};
diff --git a/lib9p/idl.gen b/lib9p/idl.gen
index 72efb7b..47aa608 100755
--- a/lib9p/idl.gen
+++ b/lib9p/idl.gen
@@ -2,7 +2,7 @@
# lib9p/idl.gen - Generate C marshalers/unmarshalers for .9p files
# defining 9P protocol variants.
#
-# 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
import os.path
@@ -694,43 +694,48 @@ LM_ALWAYS_INLINE static bool marshal_8(struct _marshal_ctx *ctx, uint64_t *val)
for msg in [msg for msg in typs if isinstance(msg, idl.Message)]:
id2typ[msg.msgid] = msg
- ret += "\n"
+ ret += f"#define _MSG_NAME(typ) [{idprefix.upper()}TYP_##typ] = #typ\n"
ret += c_macro(
- f"#define _MSG(typ) [{idprefix.upper()}TYP_##typ] = {{",
- f"\t\t.name = #typ,",
+ f"#define _MSG_RECV(typ) [{idprefix.upper()}TYP_##typ/2] = {{",
f"\t\t.basesize = sizeof(struct {idprefix}msg_##typ),",
f"\t\t.validate = validate_##typ,",
f"\t\t.unmarshal = (_unmarshal_fn_t)unmarshal_##typ,",
- f"\t\t.marshal = (_marshal_fn_t)marshal_##typ,",
f"\t}}",
)
ret += c_macro(
- f"#define _NONMSG(num) [num] = {{", f"\t\t.name = #num,", f"\t}}"
+ f"#define _MSG_SEND(typ) [{idprefix.upper()}TYP_##typ/2] = {{",
+ f"\t\t.marshal = (_marshal_fn_t)marshal_##typ,",
+ f"\t}}",
)
- ret += "\n"
- ret += f"struct _table_version _{idprefix}versions[{c_ver_enum('NUM')}] = {{\n"
- for ver in ["unknown", *sorted(versions)]:
- if ver != "unknown":
- ret += ifdef_push(1, c_ver_ifdef({ver}))
- ret += f"\t[{c_ver_enum(ver)}] = {{ .msgs = {{\n"
-
- for n in range(0, 0x100):
- xmsg: idl.Message | None = id2typ.get(n, None)
- if xmsg:
- if ver == "unknown": # SPECIAL
- if xmsg.name not in ["Tversion", "Rversion", "Rerror"]:
- xmsg = None
- else:
- if ver not in xmsg.in_versions:
- xmsg = None
- if xmsg:
- ret += f"\t\t_MSG({xmsg.name}),\n"
- else:
- ret += "\t\t_NONMSG(0x{:02X}),\n".format(n)
- ret += "\t}},\n"
- ret += ifdef_pop(0)
- ret += "};\n"
+ tables = [
+ ("msg", "name", "char *", (0, 0x100, 1)),
+ ("Tmsg", "recv", f"struct _{idprefix}recv_tentry", (0, 0x100, 2)),
+ ("Rmsg", "recv", f"struct _{idprefix}recv_tentry", (1, 0x100, 2)),
+ ("Tmsg", "send", f"struct _{idprefix}send_tentry", (0, 0x100, 2)),
+ ("Rmsg", "send", f"struct _{idprefix}send_tentry", (1, 0x100, 2)),
+ ]
+ for grp, meth, tentry, rng in tables:
+ ret += "\n"
+ ret += f"const {tentry} _{idprefix}table_{grp}_{meth}[{c_ver_enum('NUM')}][{hex(len(range(*rng)))}] = {{\n"
+ for ver in ["unknown", *sorted(versions)]:
+ if ver != "unknown":
+ ret += ifdef_push(1, c_ver_ifdef({ver}))
+ ret += f"\t[{c_ver_enum(ver)}] = {{\n"
+ for n in range(*rng):
+ xmsg: idl.Message | None = id2typ.get(n, None)
+ if xmsg:
+ if ver == "unknown": # SPECIAL
+ if xmsg.name not in ["Tversion", "Rversion", "Rerror"]:
+ xmsg = None
+ else:
+ if ver not in xmsg.in_versions:
+ xmsg = None
+ if xmsg:
+ ret += f"\t\t_MSG_{meth.upper()}({xmsg.name}),\n"
+ ret += "\t},\n"
+ ret += ifdef_pop(0)
+ ret += "};\n"
ret += f"""
LM_FLATTEN bool _{idprefix}validate_stat(struct _validate_ctx *ctx) {{
diff --git a/lib9p/internal.h b/lib9p/internal.h
index b1a367d..5f49131 100644
--- a/lib9p/internal.h
+++ b/lib9p/internal.h
@@ -1,6 +1,6 @@
/* lib9p/internal.h - TODO
*
- * 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
*/
@@ -73,21 +73,23 @@ struct _marshal_ctx {
};
typedef bool (*_marshal_fn_t)(struct _marshal_ctx *ctx, void *host_val);
-/* tables *********************************************************************/
+/* tables / exports ***********************************************************/
-struct _table_msg {
- char *name;
+struct _lib9p_recv_tentry {
size_t basesize;
_validate_fn_t validate;
_unmarshal_fn_t unmarshal;
- _marshal_fn_t marshal;
};
-struct _table_version {
- struct _table_msg msgs[0x100];
+struct _lib9p_send_tentry {
+ _marshal_fn_t marshal;
};
-extern struct _table_version _lib9p_versions[LIB9P_VER_NUM];
+extern const char * _lib9p_table_msg_name[LIB9P_VER_NUM][0x100];
+extern const struct _lib9p_recv_tentry _lib9p_table_Tmsg_recv[LIB9P_VER_NUM][0x80];
+extern const struct _lib9p_recv_tentry _lib9p_table_Rmsg_recv[LIB9P_VER_NUM][0x80];
+extern const struct _lib9p_send_tentry _lib9p_table_Tmsg_send[LIB9P_VER_NUM][0x80];
+extern const struct _lib9p_send_tentry _lib9p_table_Rmsg_send[LIB9P_VER_NUM][0x80];
bool _lib9p_validate_stat(struct _validate_ctx *ctx);
void _lib9p_unmarshal_stat(struct _unmarshal_ctx *ctx, struct lib9p_stat *out);