43 ‐ Mesh network - kamilsss655/uv-k5-firmware-custom GitHub Wiki
NUNU Protocol
This firmware since v.21.0 incorporates message hopping mesh network functionality called the "NUNU Protocol".
[!TIP] You can download early beta NUNU Protocol release here.
Which allows to extend the range of infrastructure-less communications via intermediate stations (nodes).
This way of communications can also be described as flooding.
The protocol is based on the Meshtastic principles.
Videos
For a quick explanation of Meshtastic please check out video below:
Video of the NUNU Protocol showing message hopping with 3 radios:
Video of the NUNU Protocol with 4 radios:
Functionalities
NUNU Protocol implements:
- Carrier-Sense Multiple Access with Collision Avoidance
- the radio will not TX if the line is busy to avoid collisions
- if the line is busy the radio will wait with TX for the random amount of time, until the line is free
- of course there might be a case when 2 radios TX at the same time because they didn't hear each other (also known as the hidden node problem).
- CRC codes to determine if packet has been corrupted in transit
- all messages with incorrect CRC codes are ignored
- this is a vital part of the protocol as it prevents hopping incorrect packets through the mesh network
- Give and take approach
- Users can only request that their messages be hopped if they contribute to the network by hopping messages for others
- controlled via the
MsgAckmenu option
- Encryption is supported
- The nodes that receive encrypted packets without having the right encryption key will not understand them, but will still hop them forward
- This enables communities to share the mesh network and still have ability to have both public and private conversations
- Hopping state which once entered
- drops all incoming packets
- prevents user sending new messages
Packet structure
Packet structure:
| Size (in bytes) | Name | Description |
|---|---|---|
| 4 | sync word | Sync word for this FW 0x30 0x72 0x57 0x6C |
| 1 | header | Packet header |
| 30 | payload | Packet payload (can be encrypted) |
| 13 | nonce | Packet nonce used for encryption |
| 8 | crc | Error detecting code (based on the display hash function) |
Header structure:
| Size (in bits) | Name | Description |
|---|---|---|
| 5 | type | Header type |
| 3 | hop | Hop count (max 7 hops) |
Header types:
| Value | Name | Description |
|---|---|---|
| 0 | MESSAGE_PACKET | Unencrypted message |
| 1 | ENCRYPTED_MESSAGE_PACKET | Encrypted message |
| 2 | INVALID_PACKET | Invalid packet, headers greater and equal to this one as treated as invalid packets |
