mtrp:frame_format
Differences
This shows you the differences between two versions of the page.
| Both sides previous revisionPrevious revision | |||
| mtrp:frame_format [2026/06/10 13:14] – [2.4 Payload Responsibilities] mosh | mtrp:frame_format [2026/06/10 13:17] (current) – mosh | ||
|---|---|---|---|
| Line 3: | Line 3: | ||
| ===== 2.1 Purpose ===== | ===== 2.1 Purpose ===== | ||
| - | This document defines the high-level structure | + | This document defines the on-wire frame structure |
| - | ===== 2.2 Frame Model ===== | + | ===== 2.2 Scope ===== |
| + | |||
| + | This document describes: | ||
| + | |||
| + | * the serialized MTRP header | ||
| + | * payload placement | ||
| + | * optional CRC placement | ||
| + | * compact and native header formats | ||
| + | * the distinction between wire fields and local metadata | ||
| + | |||
| + | ===== 2.3 Frame Model ===== | ||
| An MTRP frame consists of: | An MTRP frame consists of: | ||
| - | * a protocol | + | * a serialized |
| * a payload | * a payload | ||
| - | * implementation-local metadata used during processing | + | * an optional CRC footer |
| + | * local metadata used internally by the router | ||
| - | Only the serialized | + | Only the serialized header, payload, |
| - | ===== 2.3 Header Layout ===== | + | Local metadata is not serialized as part of the MTRP frame. |
| - | The MTRP header carries the core routing-visible fields used for forwarding and protocol handling. | + | ===== 2.4 Native Frame Layout ===== |
| - | A conceptual full header | + | In native mode, the serialized frame layout is: |
| - | ^ Field ^ Size ^ Purpose ^ | + | * '' |
| - | | Version | 1 byte | Protocol version | | + | * '' |
| - | | Flags | 1 byte | Control and behavior flags | | + | * '' |
| - | | Network | + | * '' |
| - | | Origin Node ID | 2 bytes | Original sender node | | + | * '' |
| - | | Destination Node ID | 2 bytes | Intended destination node | | + | * '' |
| - | | Previous Hop Node ID | 2 bytes | Last forwarding node | | + | * '' |
| - | | Message | + | * '' |
| - | | TTL | 1 byte | Remaining hop count | | + | * '' |
| + | * '' | ||
| + | * '' | ||
| - | The exact serialized layout MUST match the implementation used by the current firmware. | + | Native header length is 15 bytes. |
| - | ===== 2.4 Header Semantics | + | ===== 2.5 Compact Frame Layout |
| - | ==== 2.4.1 Version ==== | + | In constrained mode, the serialized frame layout is: |
| + | |||
| + | * '' | ||
| + | * '' | ||
| + | * '' | ||
| + | * '' | ||
| + | * '' | ||
| + | * '' | ||
| + | * '' | ||
| + | * '' | ||
| + | * '' | ||
| + | * '' | ||
| + | |||
| + | Compact header length is 13 bytes. | ||
| + | |||
| + | ===== 2.6 Header Field Order ===== | ||
| + | |||
| + | The current serialized field order is identical in both modes after the first header bytes. | ||
| + | |||
| + | ^ Order ^ Native ^ Compact ^ Size ^ Notes ^ | ||
| + | | 1 | Flags | Flags | 1 byte | protocol flags | | ||
| + | | 2 | Version | Version/ | ||
| + | | 3 | Payload Length | Message ID | 2 bytes in native | compact mode does not store payload length separately | | ||
| + | | 4 | Message ID | Origin Node ID | 2 bytes | per-origin message identifier | | ||
| + | | 5 | Origin Node ID | Destination Node ID | 2 bytes | original sender | | ||
| + | | 6 | Destination Node ID | Previous Hop Node ID | 2 bytes | intended recipient | | ||
| + | | 7 | Previous Hop Node ID | Network ID | 2 bytes | most recent forwarding node | | ||
| + | | 8 | Network ID | TTL | 2 bytes native / 1 byte compact | logical network identifier | | ||
| + | | 9 | TTL | Payload | 1 byte | remaining hop count | | ||
| + | |||
| + | For clarity, the actual compact order on wire is: | ||
| + | |||
| + | - Flags | ||
| + | - Version/ | ||
| + | - Message ID | ||
| + | - Origin Node ID | ||
| + | - Destination Node ID | ||
| + | - Previous Hop Node ID | ||
| + | - Network ID | ||
| + | - TTL | ||
| + | |||
| + | ===== 2.7 Header Field Definitions ===== | ||
| + | |||
| + | ==== 2.7.1 Flags ==== | ||
| + | |||
| + | The flags byte carries protocol behavior bits. | ||
| + | |||
| + | Current flags are: | ||
| + | |||
| + | ^ Bit Mask ^ Name ^ Meaning ^ | ||
| + | | '' | ||
| + | | '' | ||
| + | | '' | ||
| + | | '' | ||
| + | | '' | ||
| + | | '' | ||
| + | | '' | ||
| + | | '' | ||
| + | |||
| + | ==== 2.7.2 Version ==== | ||
| The version field identifies the protocol/ | The version field identifies the protocol/ | ||
| - | ==== 2.4.2 Flags ==== | + | In native mode, version occupies one full byte. |
| - | The flags field carries protocol behavior | + | In compact mode, version occupies the upper 3 bits of the combined '' |
| - | * control/ | + | A received frame MUST match the implementation' |
| - | * relay requirement | + | |
| - | * compact-header signaling | + | |
| - | * future reliability signaling | + | |
| - | ==== 2.4.3 Network ID ==== | + | ==== 2.7.3 Payload Length |
| - | The network | + | In native mode, payload length is stored as a 16-bit value. |
| + | |||
| + | In compact mode, payload length is stored in the lower 5 bits of the combined '' | ||
| + | |||
| + | As currently implemented, | ||
| + | |||
| + | ==== 2.7.4 Message ID ==== | ||
| + | |||
| + | The message | ||
| - | ==== 2.4.4 Origin Node ID ==== | + | ==== 2.7.5 Origin Node ID ==== |
| The origin node ID identifies the original sender of the frame. | The origin node ID identifies the original sender of the frame. | ||
| - | ==== 2.4.5 Destination Node ID ==== | + | ==== 2.7.6 Destination Node ID ==== |
| The destination node ID identifies the intended recipient of the frame. | The destination node ID identifies the intended recipient of the frame. | ||
| - | ==== 2.4.6 Previous Hop Node ID ==== | + | ==== 2.7.7 Previous Hop Node ID ==== |
| The previous hop node ID identifies the node that most recently forwarded or transmitted the frame. | The previous hop node ID identifies the node that most recently forwarded or transmitted the frame. | ||
| - | ==== 2.4.7 Message | + | ==== 2.7.8 Network |
| - | The message | + | The network |
| - | ==== 2.4.8 TTL ==== | + | ==== 2.7.9 TTL ==== |
| The TTL field limits how many forwarding hops a frame may traverse. | The TTL field limits how many forwarding hops a frame may traverse. | ||
| - | ===== 2.5 Local Metadata | + | ===== 2.8 Compact Version/ |
| - | Local metadata is used by the router during internal processing and route resolution. | + | In compact mode, the second header byte is packed as follows: |
| - | Local metadata is not equivalent to the serialized wire header. | + | ^ Bit Range ^ Meaning ^ |
| + | | bits 7..5 | version | | ||
| + | | bits 4..0 | payload length | | ||
| - | Examples of local metadata include: | + | Equivalent expression: |
| - | * ingress path identifier | + | * '' |
| - | * ingress path metric | + | * '' |
| - | * resolved egress path identifier | + | |
| - | * resolved next-hop identifier | + | |
| - | * local delivery behavior flags | + | |
| - | ===== 2.6 Compact Operation ===== | + | This means: |
| - | On constrained transports, MTRP MAY use a compact | + | * compact |
| + | * compact mode supports a maximum serialized payload length of 31 bytes | ||
| - | Compact operation SHOULD preserve core routing semantics while reducing header cost on limited transports. | + | ===== 2.9 Payload ===== |
| - | Compact operation does not remove | + | The payload immediately follows |
| - | ===== 2.7 Broadcast and Unicast Semantics ===== | + | Payload length is determined by the serialized length field. |
| - | A frame MAY be addressed as either: | + | The payload may carry: |
| - | * unicast, for a specific destination node | + | * control messages |
| - | * broadcast, for network-wide or local-scope distribution | + | * route advertisements |
| + | * application data | ||
| - | Broadcast handling and unicast handling MAY differ in forwarding and reliability | + | ===== 2.10 Optional CRC Footer ===== |
| + | |||
| + | If the '' | ||
| + | |||
| + | Current | ||
| + | |||
| + | * CRC algorithm: CRC-16/ | ||
| + | * CRC is computed over '' | ||
| + | * CRC bytes are appended after the payload | ||
| + | * received CRC is validated during deserialization | ||
| + | |||
| + | If '' | ||
| + | |||
| + | ===== 2.11 Deserialization Rules ===== | ||
| + | |||
| + | On receive: | ||
| + | |||
| + | - the flags byte is read first | ||
| + | - '' | ||
| + | - version MUST match the current protocol version | ||
| + | - payload length MUST not exceed the configured maximum | ||
| + | - if '' | ||
| + | |||
| + | A frame that fails these checks MUST be rejected. | ||
| + | |||
| + | ===== 2.12 Local Metadata ===== | ||
| + | |||
| + | MTRP also carries internal metadata that is not serialized on wire. | ||
| + | |||
| + | Examples include: | ||
| + | |||
| + | * ingress path ID | ||
| + | * ingress path metric | ||
| + | * egress path ID | ||
| + | * egress next hop | ||
| + | * route resolution state | ||
| + | * fragment bookkeeping | ||
| + | * transport-source metadata | ||
| - | ===== 2.8 Current Limitations ===== | + | These values exist only for local router behavior. |
| - | The present documentation does not fully specify: | + | ===== 2.13 Current Notes ===== |
| - | * fragmentation format | + | * native mode uses a 15-byte header |
| - | * reliable-delivery extensions | + | * compact mode uses a 13-byte header |
| - | * end-to-end acknowledgment fields | + | * compact mode payload length is currently limited |
| - | * group-address | + | * compact mode sets the '' |
| + | * CRC is optional and controlled by the '' | ||
/var/www/wiki.moshnetworks.com/data/attic/mtrp/frame_format.1781097278.txt.gz · Last modified: by mosh
