diff options
author | Luke T. Shumaker <lukeshu@lukeshu.com> | 2024-10-03 12:50:36 -0600 |
---|---|---|
committer | Luke T. Shumaker <lukeshu@lukeshu.com> | 2024-10-03 12:50:36 -0600 |
commit | f401359d87f3375efdd39801652cc18574240049 (patch) | |
tree | 41b87fa415c356eb4e66fe545a89c254cf4c3cc3 /lib9p/types.c | |
parent | 4d451f90eba193a4ca2848c4ac7acccda96ed008 (diff) |
lib9p: Rename the generated files
Diffstat (limited to 'lib9p/types.c')
-rw-r--r-- | lib9p/types.c | 1247 |
1 files changed, 0 insertions, 1247 deletions
diff --git a/lib9p/types.c b/lib9p/types.c deleted file mode 100644 index 0343a48..0000000 --- a/lib9p/types.c +++ /dev/null @@ -1,1247 +0,0 @@ -/* Generated by `./lib9p/types.gen lib9p/9P2000.txt lib9p/9P2000.u.txt lib9p/9P2000.e.txt`. DO NOT EDIT! */ - -#include <assert.h> -#include <stdbool.h> -#include <stddef.h> /* for size_t */ -#include <inttypes.h> /* for PRI* macros */ -#include <string.h> /* for memset() */ - -#include <lib9p/9p.h> - -#include "internal.h" - -/* strings ********************************************************************/ - -static const char *version_strs[LIB9P_VER_NUM] = { - [LIB9P_VER_unknown] = "unknown", - [LIB9P_VER_9P2000] = "9P2000", - [LIB9P_VER_9P2000_e] = "9P2000.e", - [LIB9P_VER_9P2000_u] = "9P2000.u", -}; - -const char *lib9p_version_str(enum lib9p_version ver) { - assert(0 <= ver && ver < LIB9P_VER_NUM); - return version_strs[ver]; -} - -static const char *msg_type_strs[0x100] = { - [0x00] = "0x00", - [0x01] = "0x01", - [0x02] = "0x02", - [0x03] = "0x03", - [0x04] = "0x04", - [0x05] = "0x05", - [0x06] = "0x06", - [0x07] = "0x07", - [0x08] = "0x08", - [0x09] = "0x09", - [0x0A] = "0x0A", - [0x0B] = "0x0B", - [0x0C] = "0x0C", - [0x0D] = "0x0D", - [0x0E] = "0x0E", - [0x0F] = "0x0F", - [0x10] = "0x10", - [0x11] = "0x11", - [0x12] = "0x12", - [0x13] = "0x13", - [0x14] = "0x14", - [0x15] = "0x15", - [0x16] = "0x16", - [0x17] = "0x17", - [0x18] = "0x18", - [0x19] = "0x19", - [0x1A] = "0x1A", - [0x1B] = "0x1B", - [0x1C] = "0x1C", - [0x1D] = "0x1D", - [0x1E] = "0x1E", - [0x1F] = "0x1F", - [0x20] = "0x20", - [0x21] = "0x21", - [0x22] = "0x22", - [0x23] = "0x23", - [0x24] = "0x24", - [0x25] = "0x25", - [0x26] = "0x26", - [0x27] = "0x27", - [0x28] = "0x28", - [0x29] = "0x29", - [0x2A] = "0x2A", - [0x2B] = "0x2B", - [0x2C] = "0x2C", - [0x2D] = "0x2D", - [0x2E] = "0x2E", - [0x2F] = "0x2F", - [0x30] = "0x30", - [0x31] = "0x31", - [0x32] = "0x32", - [0x33] = "0x33", - [0x34] = "0x34", - [0x35] = "0x35", - [0x36] = "0x36", - [0x37] = "0x37", - [0x38] = "0x38", - [0x39] = "0x39", - [0x3A] = "0x3A", - [0x3B] = "0x3B", - [0x3C] = "0x3C", - [0x3D] = "0x3D", - [0x3E] = "0x3E", - [0x3F] = "0x3F", - [0x40] = "0x40", - [0x41] = "0x41", - [0x42] = "0x42", - [0x43] = "0x43", - [0x44] = "0x44", - [0x45] = "0x45", - [0x46] = "0x46", - [0x47] = "0x47", - [0x48] = "0x48", - [0x49] = "0x49", - [0x4A] = "0x4A", - [0x4B] = "0x4B", - [0x4C] = "0x4C", - [0x4D] = "0x4D", - [0x4E] = "0x4E", - [0x4F] = "0x4F", - [0x50] = "0x50", - [0x51] = "0x51", - [0x52] = "0x52", - [0x53] = "0x53", - [0x54] = "0x54", - [0x55] = "0x55", - [0x56] = "0x56", - [0x57] = "0x57", - [0x58] = "0x58", - [0x59] = "0x59", - [0x5A] = "0x5A", - [0x5B] = "0x5B", - [0x5C] = "0x5C", - [0x5D] = "0x5D", - [0x5E] = "0x5E", - [0x5F] = "0x5F", - [0x60] = "0x60", - [0x61] = "0x61", - [0x62] = "0x62", - [0x63] = "0x63", - [0x64] = "Tversion", - [0x65] = "Rversion", - [0x66] = "Tauth", - [0x67] = "Rauth", - [0x68] = "Tattach", - [0x69] = "Rattach", - [0x6A] = "0x6A", - [0x6B] = "Rerror", - [0x6C] = "Tflush", - [0x6D] = "Rflush", - [0x6E] = "Twalk", - [0x6F] = "Rwalk", - [0x70] = "Topen", - [0x71] = "Ropen", - [0x72] = "Tcreate", - [0x73] = "Rcreate", - [0x74] = "Tread", - [0x75] = "Rread", - [0x76] = "Twrite", - [0x77] = "Rwrite", - [0x78] = "Tclunk", - [0x79] = "Rclunk", - [0x7A] = "Tremove", - [0x7B] = "Rremove", - [0x7C] = "Tstat", - [0x7D] = "Rstat", - [0x7E] = "Twstat", - [0x7F] = "Rwstat", - [0x80] = "0x80", - [0x81] = "0x81", - [0x82] = "0x82", - [0x83] = "0x83", - [0x84] = "0x84", - [0x85] = "0x85", - [0x86] = "0x86", - [0x87] = "0x87", - [0x88] = "0x88", - [0x89] = "0x89", - [0x8A] = "0x8A", - [0x8B] = "0x8B", - [0x8C] = "0x8C", - [0x8D] = "0x8D", - [0x8E] = "0x8E", - [0x8F] = "0x8F", - [0x90] = "0x90", - [0x91] = "0x91", - [0x92] = "0x92", - [0x93] = "0x93", - [0x94] = "0x94", - [0x95] = "0x95", - [0x96] = "Tsession", - [0x97] = "Rsession", - [0x98] = "Tsread", - [0x99] = "Rsread", - [0x9A] = "Tswrite", - [0x9B] = "Rswrite", - [0x9C] = "0x9C", - [0x9D] = "0x9D", - [0x9E] = "0x9E", - [0x9F] = "0x9F", - [0xA0] = "0xA0", - [0xA1] = "0xA1", - [0xA2] = "0xA2", - [0xA3] = "0xA3", - [0xA4] = "0xA4", - [0xA5] = "0xA5", - [0xA6] = "0xA6", - [0xA7] = "0xA7", - [0xA8] = "0xA8", - [0xA9] = "0xA9", - [0xAA] = "0xAA", - [0xAB] = "0xAB", - [0xAC] = "0xAC", - [0xAD] = "0xAD", - [0xAE] = "0xAE", - [0xAF] = "0xAF", - [0xB0] = "0xB0", - [0xB1] = "0xB1", - [0xB2] = "0xB2", - [0xB3] = "0xB3", - [0xB4] = "0xB4", - [0xB5] = "0xB5", - [0xB6] = "0xB6", - [0xB7] = "0xB7", - [0xB8] = "0xB8", - [0xB9] = "0xB9", - [0xBA] = "0xBA", - [0xBB] = "0xBB", - [0xBC] = "0xBC", - [0xBD] = "0xBD", - [0xBE] = "0xBE", - [0xBF] = "0xBF", - [0xC0] = "0xC0", - [0xC1] = "0xC1", - [0xC2] = "0xC2", - [0xC3] = "0xC3", - [0xC4] = "0xC4", - [0xC5] = "0xC5", - [0xC6] = "0xC6", - [0xC7] = "0xC7", - [0xC8] = "0xC8", - [0xC9] = "0xC9", - [0xCA] = "0xCA", - [0xCB] = "0xCB", - [0xCC] = "0xCC", - [0xCD] = "0xCD", - [0xCE] = "0xCE", - [0xCF] = "0xCF", - [0xD0] = "0xD0", - [0xD1] = "0xD1", - [0xD2] = "0xD2", - [0xD3] = "0xD3", - [0xD4] = "0xD4", - [0xD5] = "0xD5", - [0xD6] = "0xD6", - [0xD7] = "0xD7", - [0xD8] = "0xD8", - [0xD9] = "0xD9", - [0xDA] = "0xDA", - [0xDB] = "0xDB", - [0xDC] = "0xDC", - [0xDD] = "0xDD", - [0xDE] = "0xDE", - [0xDF] = "0xDF", - [0xE0] = "0xE0", - [0xE1] = "0xE1", - [0xE2] = "0xE2", - [0xE3] = "0xE3", - [0xE4] = "0xE4", - [0xE5] = "0xE5", - [0xE6] = "0xE6", - [0xE7] = "0xE7", - [0xE8] = "0xE8", - [0xE9] = "0xE9", - [0xEA] = "0xEA", - [0xEB] = "0xEB", - [0xEC] = "0xEC", - [0xED] = "0xED", - [0xEE] = "0xEE", - [0xEF] = "0xEF", - [0xF0] = "0xF0", - [0xF1] = "0xF1", - [0xF2] = "0xF2", - [0xF3] = "0xF3", - [0xF4] = "0xF4", - [0xF5] = "0xF5", - [0xF6] = "0xF6", - [0xF7] = "0xF7", - [0xF8] = "0xF8", - [0xF9] = "0xF9", - [0xFA] = "0xFA", - [0xFB] = "0xFB", - [0xFC] = "0xFC", - [0xFD] = "0xFD", - [0xFE] = "0xFE", - [0xFF] = "0xFF", -}; - -const char *lib9p_msg_type_str(enum lib9p_msg_type typ) { - assert(0 <= typ && typ <= 0xFF); - return msg_type_strs[typ]; -} - -/* validate_* *****************************************************************/ - -static ALWAYS_INLINE bool _validate_size_net(struct _validate_ctx *ctx, uint32_t n) { - if (__builtin_add_overflow(ctx->net_offset, n, &ctx->net_offset)) - /* If needed-net-size overflowed uint32_t, then - * there's no way that actual-net-size will live up to - * that. */ - return lib9p_error(ctx->ctx, LINUX_EBADMSG, "message is too short for content"); - if (ctx->net_offset > ctx->net_size) - return lib9p_error(ctx->ctx, LINUX_EBADMSG, "message is too short for content"); - return false; -} - -static ALWAYS_INLINE bool _validate_size_host(struct _validate_ctx *ctx, size_t n) { - if (__builtin_add_overflow(ctx->host_extra, n, &ctx->host_extra)) - /* If needed-host-size overflowed size_t, then there's - * no way that actual-net-size will live up to - * that. */ - return lib9p_error(ctx->ctx, LINUX_EBADMSG, "message is too short for content"); - return false; -} - -static ALWAYS_INLINE bool _validate_list(struct _validate_ctx *ctx, - size_t cnt, size_t max, - _validate_fn_t item_fn, size_t item_host_size) { - if (max && cnt > max) - return lib9p_errorf(ctx->ctx, LINUX_EBADMSG, "list size is too large (%zu > %zu)", - cnt, max); - for (size_t i = 0; i < cnt; i++) - if (_validate_size_host(ctx, item_host_size) || item_fn(ctx)) - return true; - return false; -} - -#define validate_1(ctx) _validate_size_net(ctx, 1) -#define validate_2(ctx) _validate_size_net(ctx, 2) -#define validate_4(ctx) _validate_size_net(ctx, 4) -#define validate_8(ctx) _validate_size_net(ctx, 8) - -static ALWAYS_INLINE bool validate_d(struct _validate_ctx *ctx) { - uint32_t base_offset = ctx->net_offset; - if (validate_4(ctx)) - return true; - uint32_t len = decode_u32le(&ctx->net_bytes[base_offset]); - return _validate_size_net(ctx, len) || _validate_size_host(ctx, len); -} - -static ALWAYS_INLINE bool validate_s(struct _validate_ctx *ctx) { - uint32_t base_offset = ctx->net_offset; - if (validate_2(ctx)) - return true; - uint16_t len = decode_u16le(&ctx->net_bytes[base_offset]); - if (_validate_size_net(ctx, len) || _validate_size_host(ctx, ((size_t)len)+1)) - return true; - if (!is_valid_utf8_without_nul(&ctx->net_bytes[base_offset+2], len)) - return lib9p_error(ctx->ctx, LINUX_EBADMSG, "message contains invalid UTF-8"); - return false; -} - -static ALWAYS_INLINE bool validate_dm(struct _validate_ctx *ctx) { - if (validate_4(ctx)) - return true; - static const lib9p_dm_t masks[LIB9P_VER_NUM] = { - [LIB9P_VER_9P2000] = 0b11101100000000000000000111111111, - [LIB9P_VER_9P2000_e] = 0b11101100000000000000000111111111, - [LIB9P_VER_9P2000_u] = 0b11101100101111000000000111111111, - }; - lib9p_dm_t mask = masks[ctx->ctx->version]; - lib9p_dm_t val = decode_u32le(&ctx->net_bytes[ctx->net_offset-4]); - if (val & ~mask) - return lib9p_errorf(ctx->ctx, LINUX_EBADMSG, "unknown bits in dm bitfield: %#04"PRIx32, - val & ~mask); - return false; -} - -static ALWAYS_INLINE bool validate_qt(struct _validate_ctx *ctx) { - if (validate_1(ctx)) - return true; - static const lib9p_qt_t masks[LIB9P_VER_NUM] = { - [LIB9P_VER_9P2000] = 0b11101100, - [LIB9P_VER_9P2000_e] = 0b11101100, - [LIB9P_VER_9P2000_u] = 0b11101110, - }; - lib9p_qt_t mask = masks[ctx->ctx->version]; - lib9p_qt_t val = decode_u8le(&ctx->net_bytes[ctx->net_offset-1]); - if (val & ~mask) - return lib9p_errorf(ctx->ctx, LINUX_EBADMSG, "unknown bits in qt bitfield: %#01"PRIx8, - val & ~mask); - return false; -} - -static ALWAYS_INLINE bool validate_qid(struct _validate_ctx *ctx) { - return validate_qt(ctx) - || validate_4(ctx) - || validate_8(ctx); -} - -static ALWAYS_INLINE bool validate_stat(struct _validate_ctx *ctx) { - return validate_2(ctx) - || validate_2(ctx) - || validate_4(ctx) - || validate_qid(ctx) - || validate_dm(ctx) - || validate_4(ctx) - || validate_4(ctx) - || validate_8(ctx) - || validate_s(ctx) - || validate_s(ctx) - || validate_s(ctx) - || validate_s(ctx) - || ( (ctx->ctx->version==LIB9P_VER_9P2000_u) && validate_s(ctx) ) - || ( (ctx->ctx->version==LIB9P_VER_9P2000_u) && validate_4(ctx) ) - || ( (ctx->ctx->version==LIB9P_VER_9P2000_u) && validate_4(ctx) ) - || ( (ctx->ctx->version==LIB9P_VER_9P2000_u) && validate_4(ctx) ); -} - -static ALWAYS_INLINE bool validate_o(struct _validate_ctx *ctx) { - if (validate_1(ctx)) - return true; - static const lib9p_o_t mask = 0b01010011; - lib9p_o_t val = decode_u8le(&ctx->net_bytes[ctx->net_offset-1]); - if (val & ~mask) - return lib9p_errorf(ctx->ctx, LINUX_EBADMSG, "unknown bits in o bitfield: %#01"PRIx8, - val & ~mask); - return false; -} - -static FLATTEN bool validate_Tversion(struct _validate_ctx *ctx) { - return validate_4(ctx) - || validate_s(ctx); -} - -static FLATTEN bool validate_Rversion(struct _validate_ctx *ctx) { - return validate_4(ctx) - || validate_s(ctx); -} - -static FLATTEN bool validate_Tauth(struct _validate_ctx *ctx) { - return validate_4(ctx) - || validate_s(ctx) - || validate_s(ctx) - || ( (ctx->ctx->version==LIB9P_VER_9P2000_u) && validate_4(ctx) ); -} - -static FLATTEN bool validate_Rauth(struct _validate_ctx *ctx) { - return validate_qid(ctx); -} - -static FLATTEN bool validate_Tattach(struct _validate_ctx *ctx) { - return validate_4(ctx) - || validate_4(ctx) - || validate_s(ctx) - || validate_s(ctx); -} - -static FLATTEN bool validate_Rattach(struct _validate_ctx *ctx) { - return validate_qid(ctx); -} - -static FLATTEN bool validate_Rerror(struct _validate_ctx *ctx) { - return validate_s(ctx) - || ( (ctx->ctx->version==LIB9P_VER_9P2000_u) && validate_4(ctx) ); -} - -static FLATTEN bool validate_Tflush(struct _validate_ctx *ctx) { - return validate_2(ctx); -} - -static FLATTEN bool validate_Rflush(struct _validate_ctx *UNUSED(ctx)) { - return false; -} - -static FLATTEN bool validate_Twalk(struct _validate_ctx *ctx) { - return validate_4(ctx) - || validate_4(ctx) - || validate_2(ctx) - || _validate_list(ctx, decode_u16le(&ctx->net_bytes[ctx->net_offset-2]), 16, validate_s, sizeof(struct lib9p_s)); -} - -static FLATTEN bool validate_Rwalk(struct _validate_ctx *ctx) { - return validate_2(ctx) - || _validate_list(ctx, decode_u16le(&ctx->net_bytes[ctx->net_offset-2]), 16, validate_qid, sizeof(struct lib9p_qid)); -} - -static FLATTEN bool validate_Topen(struct _validate_ctx *ctx) { - return validate_4(ctx) - || validate_o(ctx); -} - -static FLATTEN bool validate_Ropen(struct _validate_ctx *ctx) { - return validate_qid(ctx) - || validate_4(ctx); -} - -static FLATTEN bool validate_Tcreate(struct _validate_ctx *ctx) { - return validate_4(ctx) - || validate_s(ctx) - || validate_dm(ctx) - || validate_o(ctx); -} - -static FLATTEN bool validate_Rcreate(struct _validate_ctx *ctx) { - return validate_qid(ctx) - || validate_4(ctx); -} - -static FLATTEN bool validate_Tread(struct _validate_ctx *ctx) { - return validate_4(ctx) - || validate_8(ctx) - || validate_4(ctx); -} - -static FLATTEN bool validate_Rread(struct _validate_ctx *ctx) { - return validate_d(ctx); -} - -static FLATTEN bool validate_Twrite(struct _validate_ctx *ctx) { - return validate_4(ctx) - || validate_8(ctx) - || validate_d(ctx); -} - -static FLATTEN bool validate_Rwrite(struct _validate_ctx *ctx) { - return validate_4(ctx); -} - -static FLATTEN bool validate_Tclunk(struct _validate_ctx *ctx) { - return validate_4(ctx); -} - -static FLATTEN bool validate_Rclunk(struct _validate_ctx *UNUSED(ctx)) { - return false; -} - -static FLATTEN bool validate_Tremove(struct _validate_ctx *ctx) { - return validate_4(ctx); -} - -static FLATTEN bool validate_Rremove(struct _validate_ctx *UNUSED(ctx)) { - return false; -} - -static FLATTEN bool validate_Tstat(struct _validate_ctx *ctx) { - return validate_4(ctx); -} - -static FLATTEN bool validate_Rstat(struct _validate_ctx *ctx) { - return validate_stat(ctx); -} - -static FLATTEN bool validate_Twstat(struct _validate_ctx *ctx) { - return validate_4(ctx) - || validate_stat(ctx); -} - -static FLATTEN bool validate_Rwstat(struct _validate_ctx *UNUSED(ctx)) { - return false; -} - -static FLATTEN bool validate_Tsession(struct _validate_ctx *ctx) { - return validate_8(ctx); -} - -static FLATTEN bool validate_Rsession(struct _validate_ctx *UNUSED(ctx)) { - return false; -} - -static FLATTEN bool validate_Tsread(struct _validate_ctx *ctx) { - return validate_4(ctx) - || validate_2(ctx) - || _validate_list(ctx, decode_u16le(&ctx->net_bytes[ctx->net_offset-2]), 0, validate_s, sizeof(struct lib9p_s)); -} - -static FLATTEN bool validate_Rsread(struct _validate_ctx *ctx) { - return validate_d(ctx); -} - -static FLATTEN bool validate_Tswrite(struct _validate_ctx *ctx) { - return validate_4(ctx) - || validate_2(ctx) - || _validate_list(ctx, decode_u16le(&ctx->net_bytes[ctx->net_offset-2]), 0, validate_s, sizeof(struct lib9p_s)) - || validate_d(ctx); -} - -static FLATTEN bool validate_Rswrite(struct _validate_ctx *ctx) { - return validate_4(ctx); -} - -/* unmarshal_* ****************************************************************/ - -static ALWAYS_INLINE void unmarshal_1(struct _unmarshal_ctx *ctx, uint8_t *out) { - *out = decode_u8le(&ctx->net_bytes[ctx->net_offset]); - ctx->net_offset += 1; -} - -static ALWAYS_INLINE void unmarshal_2(struct _unmarshal_ctx *ctx, uint16_t *out) { - *out = decode_u16le(&ctx->net_bytes[ctx->net_offset]); - ctx->net_offset += 2; -} - -static ALWAYS_INLINE void unmarshal_4(struct _unmarshal_ctx *ctx, uint32_t *out) { - *out = decode_u32le(&ctx->net_bytes[ctx->net_offset]); - ctx->net_offset += 4; -} - -static ALWAYS_INLINE void unmarshal_8(struct _unmarshal_ctx *ctx, uint64_t *out) { - *out = decode_u64le(&ctx->net_bytes[ctx->net_offset]); - ctx->net_offset += 8; -} - -static ALWAYS_INLINE void unmarshal_d(struct _unmarshal_ctx *ctx, struct lib9p_d *out) { - memset(out, 0, sizeof(*out)); - unmarshal_4(ctx, &out->len); - out->dat = ctx->extra; - ctx->extra += sizeof(out->dat[0]) * out->len; - for (typeof(out->len) i = 0; i < out->len; i++) - unmarshal_1(ctx, &out->dat[i]); -} - -static ALWAYS_INLINE void unmarshal_s(struct _unmarshal_ctx *ctx, struct lib9p_s *out) { - memset(out, 0, sizeof(*out)); - unmarshal_2(ctx, &out->len); - out->utf8 = ctx->extra; - ctx->extra += sizeof(out->utf8[0]) * out->len; - for (typeof(out->len) i = 0; i < out->len; i++) - unmarshal_1(ctx, &out->utf8[i]); -} - -static ALWAYS_INLINE void unmarshal_dm(struct _unmarshal_ctx *ctx, lib9p_dm_t *out) { - unmarshal_4(ctx, (uint32_t *)out); -} - -static ALWAYS_INLINE void unmarshal_qt(struct _unmarshal_ctx *ctx, lib9p_qt_t *out) { - unmarshal_1(ctx, (uint8_t *)out); -} - -static ALWAYS_INLINE void unmarshal_qid(struct _unmarshal_ctx *ctx, struct lib9p_qid *out) { - memset(out, 0, sizeof(*out)); - unmarshal_qt(ctx, &out->type); - unmarshal_4(ctx, &out->vers); - unmarshal_8(ctx, &out->path); -} - -static ALWAYS_INLINE void unmarshal_stat(struct _unmarshal_ctx *ctx, struct lib9p_stat *out) { - memset(out, 0, sizeof(*out)); - unmarshal_2(ctx, &out->stat_size); - unmarshal_2(ctx, &out->kern_type); - unmarshal_4(ctx, &out->kern_dev); - unmarshal_qid(ctx, &out->file_qid); - unmarshal_dm(ctx, &out->file_mode); - unmarshal_4(ctx, &out->file_atime); - unmarshal_4(ctx, &out->file_mtime); - unmarshal_8(ctx, &out->file_size); - unmarshal_s(ctx, &out->file_name); - unmarshal_s(ctx, &out->file_owner_uid); - unmarshal_s(ctx, &out->file_owner_gid); - unmarshal_s(ctx, &out->file_last_modified_uid); - if ( (ctx->ctx->version==LIB9P_VER_9P2000_u) ) unmarshal_s(ctx, &out->file_extension); - if ( (ctx->ctx->version==LIB9P_VER_9P2000_u) ) unmarshal_4(ctx, &out->file_owner_n_uid); - if ( (ctx->ctx->version==LIB9P_VER_9P2000_u) ) unmarshal_4(ctx, &out->file_owner_n_gid); - if ( (ctx->ctx->version==LIB9P_VER_9P2000_u) ) unmarshal_4(ctx, &out->file_last_modified_n_uid); -} - -static ALWAYS_INLINE void unmarshal_o(struct _unmarshal_ctx *ctx, lib9p_o_t *out) { - unmarshal_1(ctx, (uint8_t *)out); -} - -static FLATTEN void unmarshal_Tversion(struct _unmarshal_ctx *ctx, struct lib9p_msg_Tversion *out) { - memset(out, 0, sizeof(*out)); - unmarshal_4(ctx, &out->max_msg_size); - unmarshal_s(ctx, &out->version); -} - -static FLATTEN void unmarshal_Rversion(struct _unmarshal_ctx *ctx, struct lib9p_msg_Rversion *out) { - memset(out, 0, sizeof(*out)); - unmarshal_4(ctx, &out->max_msg_size); - unmarshal_s(ctx, &out->version); -} - -static FLATTEN void unmarshal_Tauth(struct _unmarshal_ctx *ctx, struct lib9p_msg_Tauth *out) { - memset(out, 0, sizeof(*out)); - unmarshal_4(ctx, &out->afid); - unmarshal_s(ctx, &out->uname); - unmarshal_s(ctx, &out->aname); - if ( (ctx->ctx->version==LIB9P_VER_9P2000_u) ) unmarshal_4(ctx, &out->n_uname); -} - -static FLATTEN void unmarshal_Rauth(struct _unmarshal_ctx *ctx, struct lib9p_msg_Rauth *out) { - memset(out, 0, sizeof(*out)); - unmarshal_qid(ctx, &out->aqid); -} - -static FLATTEN void unmarshal_Tattach(struct _unmarshal_ctx *ctx, struct lib9p_msg_Tattach *out) { - memset(out, 0, sizeof(*out)); - unmarshal_4(ctx, &out->fid); - unmarshal_4(ctx, &out->afid); - unmarshal_s(ctx, &out->uname); - unmarshal_s(ctx, &out->aname); -} - -static FLATTEN void unmarshal_Rattach(struct _unmarshal_ctx *ctx, struct lib9p_msg_Rattach *out) { - memset(out, 0, sizeof(*out)); - unmarshal_qid(ctx, &out->qid); -} - -static FLATTEN void unmarshal_Rerror(struct _unmarshal_ctx *ctx, struct lib9p_msg_Rerror *out) { - memset(out, 0, sizeof(*out)); - unmarshal_s(ctx, &out->ename); - if ( (ctx->ctx->version==LIB9P_VER_9P2000_u) ) unmarshal_4(ctx, &out->errno); -} - -static FLATTEN void unmarshal_Tflush(struct _unmarshal_ctx *ctx, struct lib9p_msg_Tflush *out) { - memset(out, 0, sizeof(*out)); - unmarshal_2(ctx, &out->oldtag); -} - -static FLATTEN void unmarshal_Rflush(struct _unmarshal_ctx *UNUSED(ctx), struct lib9p_msg_Rflush *out) { - memset(out, 0, sizeof(*out)); -} - -static FLATTEN void unmarshal_Twalk(struct _unmarshal_ctx *ctx, struct lib9p_msg_Twalk *out) { - memset(out, 0, sizeof(*out)); - unmarshal_4(ctx, &out->fid); - unmarshal_4(ctx, &out->newfid); - unmarshal_2(ctx, &out->nwname); - out->wname = ctx->extra; - ctx->extra += sizeof(out->wname[0]) * out->nwname; - for (typeof(out->nwname) i = 0; i < out->nwname; i++) - unmarshal_s(ctx, &out->wname[i]); -} - -static FLATTEN void unmarshal_Rwalk(struct _unmarshal_ctx *ctx, struct lib9p_msg_Rwalk *out) { - memset(out, 0, sizeof(*out)); - unmarshal_2(ctx, &out->nwqid); - out->wqid = ctx->extra; - ctx->extra += sizeof(out->wqid[0]) * out->nwqid; - for (typeof(out->nwqid) i = 0; i < out->nwqid; i++) - unmarshal_qid(ctx, &out->wqid[i]); -} - -static FLATTEN void unmarshal_Topen(struct _unmarshal_ctx *ctx, struct lib9p_msg_Topen *out) { - memset(out, 0, sizeof(*out)); - unmarshal_4(ctx, &out->fid); - unmarshal_o(ctx, &out->mode); -} - -static FLATTEN void unmarshal_Ropen(struct _unmarshal_ctx *ctx, struct lib9p_msg_Ropen *out) { - memset(out, 0, sizeof(*out)); - unmarshal_qid(ctx, &out->qid); - unmarshal_4(ctx, &out->iounit); -} - -static FLATTEN void unmarshal_Tcreate(struct _unmarshal_ctx *ctx, struct lib9p_msg_Tcreate *out) { - memset(out, 0, sizeof(*out)); - unmarshal_4(ctx, &out->fid); - unmarshal_s(ctx, &out->name); - unmarshal_dm(ctx, &out->perm); - unmarshal_o(ctx, &out->mode); -} - -static FLATTEN void unmarshal_Rcreate(struct _unmarshal_ctx *ctx, struct lib9p_msg_Rcreate *out) { - memset(out, 0, sizeof(*out)); - unmarshal_qid(ctx, &out->qid); - unmarshal_4(ctx, &out->iounit); -} - -static FLATTEN void unmarshal_Tread(struct _unmarshal_ctx *ctx, struct lib9p_msg_Tread *out) { - memset(out, 0, sizeof(*out)); - unmarshal_4(ctx, &out->fid); - unmarshal_8(ctx, &out->offset); - unmarshal_4(ctx, &out->count); -} - -static FLATTEN void unmarshal_Rread(struct _unmarshal_ctx *ctx, struct lib9p_msg_Rread *out) { - memset(out, 0, sizeof(*out)); - unmarshal_d(ctx, &out->data); -} - -static FLATTEN void unmarshal_Twrite(struct _unmarshal_ctx *ctx, struct lib9p_msg_Twrite *out) { - memset(out, 0, sizeof(*out)); - unmarshal_4(ctx, &out->fid); - unmarshal_8(ctx, &out->offset); - unmarshal_d(ctx, &out->data); -} - -static FLATTEN void unmarshal_Rwrite(struct _unmarshal_ctx *ctx, struct lib9p_msg_Rwrite *out) { - memset(out, 0, sizeof(*out)); - unmarshal_4(ctx, &out->count); -} - -static FLATTEN void unmarshal_Tclunk(struct _unmarshal_ctx *ctx, struct lib9p_msg_Tclunk *out) { - memset(out, 0, sizeof(*out)); - unmarshal_4(ctx, &out->fid); -} - -static FLATTEN void unmarshal_Rclunk(struct _unmarshal_ctx *UNUSED(ctx), struct lib9p_msg_Rclunk *out) { - memset(out, 0, sizeof(*out)); -} - -static FLATTEN void unmarshal_Tremove(struct _unmarshal_ctx *ctx, struct lib9p_msg_Tremove *out) { - memset(out, 0, sizeof(*out)); - unmarshal_4(ctx, &out->fid); -} - -static FLATTEN void unmarshal_Rremove(struct _unmarshal_ctx *UNUSED(ctx), struct lib9p_msg_Rremove *out) { - memset(out, 0, sizeof(*out)); -} - -static FLATTEN void unmarshal_Tstat(struct _unmarshal_ctx *ctx, struct lib9p_msg_Tstat *out) { - memset(out, 0, sizeof(*out)); - unmarshal_4(ctx, &out->fid); -} - -static FLATTEN void unmarshal_Rstat(struct _unmarshal_ctx *ctx, struct lib9p_msg_Rstat *out) { - memset(out, 0, sizeof(*out)); - unmarshal_stat(ctx, &out->stat); -} - -static FLATTEN void unmarshal_Twstat(struct _unmarshal_ctx *ctx, struct lib9p_msg_Twstat *out) { - memset(out, 0, sizeof(*out)); - unmarshal_4(ctx, &out->fid); - unmarshal_stat(ctx, &out->stat); -} - -static FLATTEN void unmarshal_Rwstat(struct _unmarshal_ctx *UNUSED(ctx), struct lib9p_msg_Rwstat *out) { - memset(out, 0, sizeof(*out)); -} - -static FLATTEN void unmarshal_Tsession(struct _unmarshal_ctx *ctx, struct lib9p_msg_Tsession *out) { - memset(out, 0, sizeof(*out)); - unmarshal_8(ctx, &out->key); -} - -static FLATTEN void unmarshal_Rsession(struct _unmarshal_ctx *UNUSED(ctx), struct lib9p_msg_Rsession *out) { - memset(out, 0, sizeof(*out)); -} - -static FLATTEN void unmarshal_Tsread(struct _unmarshal_ctx *ctx, struct lib9p_msg_Tsread *out) { - memset(out, 0, sizeof(*out)); - unmarshal_4(ctx, &out->fid); - unmarshal_2(ctx, &out->nwname); - out->wname = ctx->extra; - ctx->extra += sizeof(out->wname[0]) * out->nwname; - for (typeof(out->nwname) i = 0; i < out->nwname; i++) - unmarshal_s(ctx, &out->wname[i]); -} - -static FLATTEN void unmarshal_Rsread(struct _unmarshal_ctx *ctx, struct lib9p_msg_Rsread *out) { - memset(out, 0, sizeof(*out)); - unmarshal_d(ctx, &out->data); -} - -static FLATTEN void unmarshal_Tswrite(struct _unmarshal_ctx *ctx, struct lib9p_msg_Tswrite *out) { - memset(out, 0, sizeof(*out)); - unmarshal_4(ctx, &out->fid); - unmarshal_2(ctx, &out->nwname); - out->wname = ctx->extra; - ctx->extra += sizeof(out->wname[0]) * out->nwname; - for (typeof(out->nwname) i = 0; i < out->nwname; i++) - unmarshal_s(ctx, &out->wname[i]); - unmarshal_d(ctx, &out->data); -} - -static FLATTEN void unmarshal_Rswrite(struct _unmarshal_ctx *ctx, struct lib9p_msg_Rswrite *out) { - memset(out, 0, sizeof(*out)); - unmarshal_4(ctx, &out->count); -} - -/* marshal_* ******************************************************************/ - -static ALWAYS_INLINE bool _marshal_too_large(struct _marshal_ctx *ctx) { - lib9p_errorf(ctx->ctx, LINUX_ERANGE, "%s too large to marshal into %s limit (limit=%"PRIu32")", - (ctx->net_bytes[4] % 2 == 0) ? "T-message" : "R-message", - ctx->ctx->version ? "negotiated" : ((ctx->net_bytes[4] % 2 == 0) ? "client" : "server"), - ctx->ctx->max_msg_size); - return true; -} - -static ALWAYS_INLINE bool marshal_1(struct _marshal_ctx *ctx, uint8_t *val) { - if (ctx->net_offset + 1 > ctx->ctx->max_msg_size) - return _marshal_too_large(ctx); - ctx->net_bytes[ctx->net_offset] = *val; - ctx->net_offset += 1; - return false; -} - -static ALWAYS_INLINE bool marshal_2(struct _marshal_ctx *ctx, uint16_t *val) { - if (ctx->net_offset + 2 > ctx->ctx->max_msg_size) - return _marshal_too_large(ctx); - encode_u16le(*val, &ctx->net_bytes[ctx->net_offset]); - ctx->net_offset += 2; - return false; -} - -static ALWAYS_INLINE bool marshal_4(struct _marshal_ctx *ctx, uint32_t *val) { - if (ctx->net_offset + 4 > ctx->ctx->max_msg_size) - return true; - encode_u32le(*val, &ctx->net_bytes[ctx->net_offset]); - ctx->net_offset += 4; - return false; -} - -static ALWAYS_INLINE bool marshal_8(struct _marshal_ctx *ctx, uint64_t *val) { - if (ctx->net_offset + 8 > ctx->ctx->max_msg_size) - return true; - encode_u64le(*val, &ctx->net_bytes[ctx->net_offset]); - ctx->net_offset += 8; - return false; -} - -static ALWAYS_INLINE bool marshal_d(struct _marshal_ctx *ctx, struct lib9p_d *val) { - return marshal_4(ctx, &val->len) - || ({ - bool err = false; - for (typeof(val->len) i = 0; i < val->len && !err; i++) - err = marshal_1(ctx, &val->dat[i]); - err; - }); -} - -static ALWAYS_INLINE bool marshal_s(struct _marshal_ctx *ctx, struct lib9p_s *val) { - return marshal_2(ctx, &val->len) - || ({ - bool err = false; - for (typeof(val->len) i = 0; i < val->len && !err; i++) - err = marshal_1(ctx, &val->utf8[i]); - err; - }); -} - -static ALWAYS_INLINE bool marshal_dm(struct _marshal_ctx *ctx, lib9p_dm_t *val) { - return marshal_4(ctx, (uint32_t *)val); -} - -static ALWAYS_INLINE bool marshal_qt(struct _marshal_ctx *ctx, lib9p_qt_t *val) { - return marshal_1(ctx, (uint8_t *)val); -} - -static ALWAYS_INLINE bool marshal_qid(struct _marshal_ctx *ctx, struct lib9p_qid *val) { - return marshal_qt(ctx, &val->type) - || marshal_4(ctx, &val->vers) - || marshal_8(ctx, &val->path); -} - -static ALWAYS_INLINE bool marshal_stat(struct _marshal_ctx *ctx, struct lib9p_stat *val) { - return marshal_2(ctx, &val->stat_size) - || marshal_2(ctx, &val->kern_type) - || marshal_4(ctx, &val->kern_dev) - || marshal_qid(ctx, &val->file_qid) - || marshal_dm(ctx, &val->file_mode) - || marshal_4(ctx, &val->file_atime) - || marshal_4(ctx, &val->file_mtime) - || marshal_8(ctx, &val->file_size) - || marshal_s(ctx, &val->file_name) - || marshal_s(ctx, &val->file_owner_uid) - || marshal_s(ctx, &val->file_owner_gid) - || marshal_s(ctx, &val->file_last_modified_uid) - || ( (ctx->ctx->version==LIB9P_VER_9P2000_u) && marshal_s(ctx, &val->file_extension) ) - || ( (ctx->ctx->version==LIB9P_VER_9P2000_u) && marshal_4(ctx, &val->file_owner_n_uid) ) - || ( (ctx->ctx->version==LIB9P_VER_9P2000_u) && marshal_4(ctx, &val->file_owner_n_gid) ) - || ( (ctx->ctx->version==LIB9P_VER_9P2000_u) && marshal_4(ctx, &val->file_last_modified_n_uid) ); -} - -static ALWAYS_INLINE bool marshal_o(struct _marshal_ctx *ctx, lib9p_o_t *val) { - return marshal_1(ctx, (uint8_t *)val); -} - -static FLATTEN bool marshal_Tversion(struct _marshal_ctx *ctx, struct lib9p_msg_Tversion *val) { - return marshal_4(ctx, &val->max_msg_size) - || marshal_s(ctx, &val->version); -} - -static FLATTEN bool marshal_Rversion(struct _marshal_ctx *ctx, struct lib9p_msg_Rversion *val) { - return marshal_4(ctx, &val->max_msg_size) - || marshal_s(ctx, &val->version); -} - -static FLATTEN bool marshal_Tauth(struct _marshal_ctx *ctx, struct lib9p_msg_Tauth *val) { - return marshal_4(ctx, &val->afid) - || marshal_s(ctx, &val->uname) - || marshal_s(ctx, &val->aname) - || ( (ctx->ctx->version==LIB9P_VER_9P2000_u) && marshal_4(ctx, &val->n_uname) ); -} - -static FLATTEN bool marshal_Rauth(struct _marshal_ctx *ctx, struct lib9p_msg_Rauth *val) { - return marshal_qid(ctx, &val->aqid); -} - -static FLATTEN bool marshal_Tattach(struct _marshal_ctx *ctx, struct lib9p_msg_Tattach *val) { - return marshal_4(ctx, &val->fid) - || marshal_4(ctx, &val->afid) - || marshal_s(ctx, &val->uname) - || marshal_s(ctx, &val->aname); -} - -static FLATTEN bool marshal_Rattach(struct _marshal_ctx *ctx, struct lib9p_msg_Rattach *val) { - return marshal_qid(ctx, &val->qid); -} - -static FLATTEN bool marshal_Rerror(struct _marshal_ctx *ctx, struct lib9p_msg_Rerror *val) { - return marshal_s(ctx, &val->ename) - || ( (ctx->ctx->version==LIB9P_VER_9P2000_u) && marshal_4(ctx, &val->errno) ); -} - -static FLATTEN bool marshal_Tflush(struct _marshal_ctx *ctx, struct lib9p_msg_Tflush *val) { - return marshal_2(ctx, &val->oldtag); -} - -static FLATTEN bool marshal_Rflush(struct _marshal_ctx *UNUSED(ctx), struct lib9p_msg_Rflush *UNUSED(val)) { - return false; -} - -static FLATTEN bool marshal_Twalk(struct _marshal_ctx *ctx, struct lib9p_msg_Twalk *val) { - return marshal_4(ctx, &val->fid) - || marshal_4(ctx, &val->newfid) - || marshal_2(ctx, &val->nwname) - || ({ - bool err = false; - for (typeof(val->nwname) i = 0; i < val->nwname && !err; i++) - err = marshal_s(ctx, &val->wname[i]); - err; - }); -} - -static FLATTEN bool marshal_Rwalk(struct _marshal_ctx *ctx, struct lib9p_msg_Rwalk *val) { - return marshal_2(ctx, &val->nwqid) - || ({ - bool err = false; - for (typeof(val->nwqid) i = 0; i < val->nwqid && !err; i++) - err = marshal_qid(ctx, &val->wqid[i]); - err; - }); -} - -static FLATTEN bool marshal_Topen(struct _marshal_ctx *ctx, struct lib9p_msg_Topen *val) { - return marshal_4(ctx, &val->fid) - || marshal_o(ctx, &val->mode); -} - -static FLATTEN bool marshal_Ropen(struct _marshal_ctx *ctx, struct lib9p_msg_Ropen *val) { - return marshal_qid(ctx, &val->qid) - || marshal_4(ctx, &val->iounit); -} - -static FLATTEN bool marshal_Tcreate(struct _marshal_ctx *ctx, struct lib9p_msg_Tcreate *val) { - return marshal_4(ctx, &val->fid) - || marshal_s(ctx, &val->name) - || marshal_dm(ctx, &val->perm) - || marshal_o(ctx, &val->mode); -} - -static FLATTEN bool marshal_Rcreate(struct _marshal_ctx *ctx, struct lib9p_msg_Rcreate *val) { - return marshal_qid(ctx, &val->qid) - || marshal_4(ctx, &val->iounit); -} - -static FLATTEN bool marshal_Tread(struct _marshal_ctx *ctx, struct lib9p_msg_Tread *val) { - return marshal_4(ctx, &val->fid) - || marshal_8(ctx, &val->offset) - || marshal_4(ctx, &val->count); -} - -static FLATTEN bool marshal_Rread(struct _marshal_ctx *ctx, struct lib9p_msg_Rread *val) { - return marshal_d(ctx, &val->data); -} - -static FLATTEN bool marshal_Twrite(struct _marshal_ctx *ctx, struct lib9p_msg_Twrite *val) { - return marshal_4(ctx, &val->fid) - || marshal_8(ctx, &val->offset) - || marshal_d(ctx, &val->data); -} - -static FLATTEN bool marshal_Rwrite(struct _marshal_ctx *ctx, struct lib9p_msg_Rwrite *val) { - return marshal_4(ctx, &val->count); -} - -static FLATTEN bool marshal_Tclunk(struct _marshal_ctx *ctx, struct lib9p_msg_Tclunk *val) { - return marshal_4(ctx, &val->fid); -} - -static FLATTEN bool marshal_Rclunk(struct _marshal_ctx *UNUSED(ctx), struct lib9p_msg_Rclunk *UNUSED(val)) { - return false; -} - -static FLATTEN bool marshal_Tremove(struct _marshal_ctx *ctx, struct lib9p_msg_Tremove *val) { - return marshal_4(ctx, &val->fid); -} - -static FLATTEN bool marshal_Rremove(struct _marshal_ctx *UNUSED(ctx), struct lib9p_msg_Rremove *UNUSED(val)) { - return false; -} - -static FLATTEN bool marshal_Tstat(struct _marshal_ctx *ctx, struct lib9p_msg_Tstat *val) { - return marshal_4(ctx, &val->fid); -} - -static FLATTEN bool marshal_Rstat(struct _marshal_ctx *ctx, struct lib9p_msg_Rstat *val) { - return marshal_stat(ctx, &val->stat); -} - -static FLATTEN bool marshal_Twstat(struct _marshal_ctx *ctx, struct lib9p_msg_Twstat *val) { - return marshal_4(ctx, &val->fid) - || marshal_stat(ctx, &val->stat); -} - -static FLATTEN bool marshal_Rwstat(struct _marshal_ctx *UNUSED(ctx), struct lib9p_msg_Rwstat *UNUSED(val)) { - return false; -} - -static FLATTEN bool marshal_Tsession(struct _marshal_ctx *ctx, struct lib9p_msg_Tsession *val) { - return marshal_8(ctx, &val->key); -} - -static FLATTEN bool marshal_Rsession(struct _marshal_ctx *UNUSED(ctx), struct lib9p_msg_Rsession *UNUSED(val)) { - return false; -} - -static FLATTEN bool marshal_Tsread(struct _marshal_ctx *ctx, struct lib9p_msg_Tsread *val) { - return marshal_4(ctx, &val->fid) - || marshal_2(ctx, &val->nwname) - || ({ - bool err = false; - for (typeof(val->nwname) i = 0; i < val->nwname && !err; i++) - err = marshal_s(ctx, &val->wname[i]); - err; - }); -} - -static FLATTEN bool marshal_Rsread(struct _marshal_ctx *ctx, struct lib9p_msg_Rsread *val) { - return marshal_d(ctx, &val->data); -} - -static FLATTEN bool marshal_Tswrite(struct _marshal_ctx *ctx, struct lib9p_msg_Tswrite *val) { - return marshal_4(ctx, &val->fid) - || marshal_2(ctx, &val->nwname) - || ({ - bool err = false; - for (typeof(val->nwname) i = 0; i < val->nwname && !err; i++) - err = marshal_s(ctx, &val->wname[i]); - err; - }) - || marshal_d(ctx, &val->data); -} - -static FLATTEN bool marshal_Rswrite(struct _marshal_ctx *ctx, struct lib9p_msg_Rswrite *val) { - return marshal_4(ctx, &val->count); -} - -/* vtables ********************************************************************/ - -#define _MSG(typ) [LIB9P_TYP_##typ] = { \ - .basesize = sizeof(struct lib9p_msg_##typ), \ - .validate = validate_##typ, \ - .unmarshal = (_unmarshal_fn_t)unmarshal_##typ, \ - .marshal = (_marshal_fn_t)marshal_##typ, \ - } - -struct _vtable_version _lib9p_vtables[LIB9P_VER_NUM] = { - [LIB9P_VER_unknown] = { .msgs = { - _MSG(Tversion), - _MSG(Rversion), - _MSG(Rerror), - }}, - [LIB9P_VER_9P2000] = { .msgs = { - _MSG(Tversion), - _MSG(Rversion), - _MSG(Tauth), - _MSG(Rauth), - _MSG(Tattach), - _MSG(Rattach), - _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), - }}, - [LIB9P_VER_9P2000_e] = { .msgs = { - _MSG(Tversion), - _MSG(Rversion), - _MSG(Tauth), - _MSG(Rauth), - _MSG(Tattach), - _MSG(Rattach), - _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), - _MSG(Tsession), - _MSG(Rsession), - _MSG(Tsread), - _MSG(Rsread), - _MSG(Tswrite), - _MSG(Rswrite), - }}, - [LIB9P_VER_9P2000_u] = { .msgs = { - _MSG(Tversion), - _MSG(Rversion), - _MSG(Tauth), - _MSG(Rauth), - _MSG(Tattach), - _MSG(Rattach), - _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), - }}, -}; |