DutchMeshCore.nl-MQTT

Packet Format

This document describes the MeshCore packet format.

Version 1 Packet Format

This is the protocol level packet structure used in MeshCore firmware v1.12.0

[header][transport_codes(optional)][path_length][path][payload]

Packet Format

Field Size (bytes) Description
header 1 Contains routing type, payload type, and payload version
transport_codes 4 (optional) 2x 16-bit transport codes (if ROUTE_TYPE_TRANSPORT_*)
path_length 1 Encodes path hash size in bits 6-7 and hop count in bits 0-5
path up to 64 (MAX_PATH_SIZE) Stores hop_count * hash_size bytes of path data if applicable
payload up to 184 (MAX_PACKET_PAYLOAD) Data for the provided Payload Type

NOTE: see the Payloads documentation for more information about the content of specific payload types.

Header Format

Bit 0 means the lowest bit (1s place)

Bits Mask Field Description
0-1 0x03 Route Type Flood, Direct, etc
2-5 0x3C Payload Type Request, Response, ACK, etc
6-7 0xC0 Payload Version Versioning of the payload format

Route Types

Value Name Description
0x00 ROUTE_TYPE_TRANSPORT_FLOOD Flood Routing + Transport Codes
0x01 ROUTE_TYPE_FLOOD Flood Routing
0x02 ROUTE_TYPE_DIRECT Direct Routing
0x03 ROUTE_TYPE_TRANSPORT_DIRECT Direct Routing + Transport Codes

Path Length Encoding

path_length is not a raw byte count. It packs both hash size and hop count:

Bits Field Meaning
0-5 Hop Count Number of path hashes (0-63)
6-7 Hash Size Code Stored as hash_size - 1

Hash size codes:

Bits 6-7 Hash Size Notes
0b00 1 byte Legacy / default mode
0b01 2 bytes Supported in current firmware
0b10 3 bytes Supported in current firmware
0b11 4 bytes Reserved / invalid

Examples:

Payload Types

Value Name Description
0x00 PAYLOAD_TYPE_REQ Request (destination/source hashes + MAC)
0x01 PAYLOAD_TYPE_RESPONSE Response to REQ or ANON_REQ
0x02 PAYLOAD_TYPE_TXT_MSG Plain text message
0x03 PAYLOAD_TYPE_ACK Acknowledgment
0x04 PAYLOAD_TYPE_ADVERT Node advertisement
0x05 PAYLOAD_TYPE_GRP_TXT Group text message (unverified)
0x06 PAYLOAD_TYPE_GRP_DATA Group datagram (unverified)
0x07 PAYLOAD_TYPE_ANON_REQ Anonymous request
0x08 PAYLOAD_TYPE_PATH Returned path
0x09 PAYLOAD_TYPE_TRACE Trace a path, collecting SNR for each hop
0x0A PAYLOAD_TYPE_MULTIPART Packet is part of a sequence of packets
0x0B PAYLOAD_TYPE_CONTROL Control packet data (unencrypted)
0x0C reserved reserved
0x0D reserved reserved
0x0E reserved reserved
0x0F PAYLOAD_TYPE_RAW_CUSTOM Custom packet (raw bytes, custom encryption)

Payload Versions

Value Version Description
0x00 1 1-byte src/dest hashes, 2-byte MAC
0x01 2 Future version (e.g., 2-byte hashes, 4-byte MAC)
0x02 3 Future version
0x03 4 Future version