Frame types#
The type byte is the first discriminator in the 8-byte header.
dir reads c2h for client to hub, h2c for hub to client, any for
either direction. plane reads control for a CBOR payload, data for
a packed payload, raw for a fixed layout defined in its own clause.
An endpoint that receives an unknown frame type ignores the frame. The header always carries the length, so skipping is safe.
| Code | Name | Direction | Plane | Clause |
|---|---|---|---|---|
0x00 |
HELLO |
c2h |
control |
§6.2 |
0x01 |
WELCOME |
h2c |
control |
§6.3 |
0x03 |
PING |
any |
raw |
§6.5 |
0x04 |
PONG |
any |
raw |
§6.5 |
0x05 |
CLOCK |
any |
raw |
§7.1 |
0x06 |
SUBSCRIBE |
c2h |
control |
§6.6 |
0x07 |
UNSUBSCRIBE |
c2h |
control |
§6.6 |
0x08 |
GRANT |
h2c |
control |
§10.2 |
0x0B |
STATE |
h2c |
data |
§9.1 |
0x0C |
STREAM |
any |
data |
§9.2 |
0x0D |
INTENT |
c2h |
control |
§9.3 |
0x0E |
ECHO |
h2c |
control |
§9.3 |
0x0F |
EVENT |
h2c |
control |
§9.4 |
0x10 |
NACK |
h2c |
control |
§16.1 |
0x11 |
GOODBYE |
any |
control |
§6.8 |
0x12 |
PROBE |
any |
raw |
§6.4 |
0x13 |
PROBE_REPORT |
c2h |
control |
§6.4 |
0x14 |
PAIR_REQ |
c2h |
control |
§12.2 |
0x15 |
PAIR_GRANT |
h2c |
control |
§12.2 |
0x16 |
ACKMASK |
any |
raw |
§13.3 |
0x17 |
BEACON |
h2c |
raw |
§13.7, §13.3.1 |
0x18 |
PUBLISH |
c2h |
control |
§6.6 |
0x19 |
CATALOG_READY |
c2h |
raw |
§8.4 |
0x1A |
BLOB_REQ |
c2h |
control |
§8.4 |
0x1B |
BLOB_CHUNK |
h2c |
raw |
§8.4 |
0x1C |
AUTH |
c2h |
control |
§12.2 |
0x1D |
HUB_SIG |
h2c |
control |
§12.2 |
0x1E |
DISCOVER_PROBE |
c2h |
raw |
§13.8, §13.3.1 |
0x1F |
DISCOVER_REPLY |
h2c |
raw |
§13.8 |
0x20 |
BLOB_DONE |
any |
raw |
§8.4 |
0x21 |
JOIN_REQ |
c2h |
raw |
§13.3.2 |
0x22 |
JOIN_REPLY |
h2c |
raw |
§13.3.2 |
0xE5 |
ESTOP |
any |
raw |
§5.5, §11.2 |
Burned and reserved ranges#
Frame types 0x09 and 0x0A are burned. They carried the retired
CATALOG_REQ and CATALOG_CHUNK verbs. They are never reallocated, so a
stale peer meets an unknown type and fails loudly instead of misreading a
blob transfer.
Types 0x80 to 0xDF are experimental. They never appear in a tagged
release. Types 0xE0 to 0xFF are reserved, except 0xE5 (ESTOP).
Header flags#
Bits not listed are zero on send and ignored on receive.
| Mask | Bit | Name | Clause |
|---|---|---|---|
0x01 |
bit 0 |
FRAG_START |
§5.6 |
0x02 |
bit 1 |
FRAG_MORE |
§5.6 |
FRAG_START plus FRAG_MORE marks the first fragment. FRAG_MORE alone
marks a middle fragment. FRAG_START alone marks an unfragmented frame.
Neither flag, after prior fragments, marks the last fragment.
DEMO-CANDIDATE: capture one real frame's 8-byte header live and annotate each byte against this table.