Firefighters demonstrating a bucket brigade

Simulating A Mesh Network For Reticulum Testing

Introduction

This article discusses radio transceivers 7 that employ the Reticulum protocol. The Reticulum protocol defines the structure of bytes that are transmitted via radio, Ethernet, Bluetooth, and other forms of communication. Here, I’m addressing LoRa8 radio protocol only. Radio transceivers using Reticulum and its LoRa interface listen for and transmit radio signals which carry packets of digital bits much like a computer’s wifi or ethernet sends packets. LoRa operates on radio bands which governments have reserved for low power transmission. Hence, the power limitation of radio communication is that you cannot broadcast above a certain power threshold so your ability to exchange packets with another transceiver can vary greatly depending upon whether you can see the other person and what physical obstacles may be in between. I’ve found I can transmit from my basement and the signal can reach several houses down the street; my transmissions cannot traverse the City of Salem. Think of LoRa transmissions as being something akin to low power walkie talkies; many consumer brands are effective only for several city blocks and then the signal attenuates or becomes weaker 9 Here, I look into the concept of Mesh networking and testing Reticulum’s ability to move packets across several nodes.

Mesh Networking

A mesh network is a network topology in which the infrastructure nodes (i.e., bridges, switches, and other infrastructure devices) connect directly, dynamically and non-hierarchically to as many other nodes as possible and cooperate with one another to efficiently route data to and from clients. 10 The magic of a mesh network is that you can increase the overall transmission distance between you and another transceiver who would ordinarily be out of range, but if there are other participants in the same mesh network between the two of you, your packets could be delivered with the help of the intermediate participants who forward your packets through the network to your intended recipient.

A clever metaphor is a fire bucket brigade.  Each person is a node passing a bucket of water to their neighbor.  A person can only reach a couple of feet to the neighbor, it cannot reach 300 yards.  So the the chain of people passing the bucket from one to the next give the brigade a far reach essentially transporting the water 300 yards.

Firefighters demonstrating a bucket brigade
Los Angeles County Firefighers Demonstrating A Bucket Brigade (2019)

For example, using Puget Mesh, a person in Port Angeles can communicate with a person in Olympia which is approximately 125 miles away as the crow flies.

 

Map of Puget Sound with Radio nodes
Map of Puget Mesh Network

A core concept of a Mesh networks is that the limitation of the transmission distance between two units, or “nodes”, can be expanded by having other nodes also serve as intermediaries, or “transport”.  A transport node simply forwards packets and pass along messages destined to a recipient who would normally be out of reach by the sender.  Using the above example, here is a possible route packets travel from Port Angeles to Olympia: there are 10 intermediate nodes passing the packets to the recipient.

Map with arrows showing a route through 10 nodes
Hypothetical Route Through 10 Nodes

Thus, a participant is not only a sender and receiver, it can serve as a “transport” or broker that passes someone else’s message onto another unit, which may also be a transport node, or the final destination.

colored diagram of three blocks with round gradients indicating loss of signal strength as the distance increases.
3 Transmitters, circles represent the outer limit of transmission capability, i.e. a 1.2 mile radius

In the illustration above, all three transmitters can reach about 1.2 miles before the signal is too weak to be useful or received.  A is green and the green circle represents the perimeter of its transmission capability. Therefore,

  • A (green) can reach B which is 1 mile away
  • C (gold)can reach B which is 1 mile away
  • B (blue) can reach A and C which are 1 mile away in opposite directions
  • A cannot reach C, and C cannot reach A because they are out or range for each other.

1 Intermediary (single hop)

Suppose A & B can reach each other, and B & C can reach each other.  But A & C cannot reach each other.  That could be the case if radio transmissions where 1.2 miles and A, B & C are 2 miles apart from each other in a straight line.  Given the nature of radio transmission, if I wanted to isolate A & C, I would need to place the units 2 or more miles away from each other.  That requirement of distance being between two transceivers makes testing very problematic.  I do not have 6 other people at my disposal to go out onto the streets and disperse whenever I want to perform a test.

So for lab testing, I can simulate a long distance, and thus inability to receive radio transmissions, using software and simply specify that A is prohibited from reading transmissions from C and C is prohibited from reading transmissions from A, even though they might be inches apart on my desktop.  This artificial “block” that I program in for each unit simulates being out in the field and unable to reach each other.  Using this software block technique, I can simulate a real time network with gaps between certain units as if they were too far apart and out of range.

Then, the next task is: define which pairs of of units should have software blocks.  For a 3 unit test, that’s easy, just block A->C and C->A.  But when we expand the field of testing to include more units, the task of defining what I call “blocking pairs” becomes more challenging.

I posed this issue to ChatGPT and it provided me with a Perl Script, line_topology_blocks.pl, where I can provide the names of my units and it will provide the blocking pair directives 11

 

Hence, to simulate that type of topography, here is a diagram:

3 blocks showing AMY-BOB and BOB-CY being 1 miles apart, and AMY-CY being 2 miles apart with red arrowheads
AMY-BOB-CY

Here is a Mermaid diagram:

3 blocks with AMY-CY blocked
1 Hop: AMY-BOB-CY

And here is the blocking rule:

# Blocking rules 
# -------------- 
ALLOW AMY <-> BOB 
ALLOW BOB <-> CY 
BLOCK AMY <-> CY

3 Intermediaries (hops)

Suppose AMY & BOB can reach each other, BOB & CY can reach each other, CY & DAN can reach each other and DAN & ED can reach each other.  But AMY & ED cannot reach each other.  In order to have the packet move through BOB->CY->DAN->ED, we have to create blocks so the packet doesn’t take a shorter route, e.g. CY->ED and bypass DAN.

5 units, 3 hopsHere are the blocking rules for a 3 hop, 5 unit test:

# Blocking rules 
# -------------- 
ALLOW AMY <-> BOB 
ALLOW BOB <-> CY 
ALLOW CY <-> DAN 
ALLOW DAN <-> ED 
BLOCK AMY <-> CY 
BLOCK AMY <-> DAN 
BLOCK AMY <-> ED 
BLOCK BOB <-> DAN 
BLOCK BOB <-> ED 
BLOCK CY <-> ED
diagram of 5 nodes
5 units, 3 hops

5 Intermediaries (hops)

With 7 T-Beam, aka “nodes”, all within their respective transmissions ranges presents a network such as this.  There would be no need for any node to serve as a transport node since all units have direct access.

7 phone poles in a circle all having wires to the other six
7 Telephones, all with direct lines to one another

Goal: is to isolate AMY from GUY.  So this is the topology I want simulated: AMY’s packets must go through the other 5 nodes to reach GUY.  This will force units BOB, CY, DAN, ED & FLO to act as transports.

7 telephone poles all in a chain of a single line
7 Telephones on a single line

With 7 units, I can force the AMY-GUY communication to route through 5 intermediaries using these blocking rules:

# Blocking rules
# --------------
ALLOW AMY <-> BOB
ALLOW BOB <-> CY
ALLOW CY <-> DAN
ALLOW DAN <-> ED
ALLOW ED <-> FLO
ALLOW FLO <-> GUY
BLOCK AMY <-> CY
BLOCK AMY <-> DAN
BLOCK AMY <-> ED
BLOCK AMY <-> FLO
BLOCK AMY <-> GUY
BLOCK BOB <-> DAN
BLOCK BOB <-> ED
BLOCK BOB <-> FLO
BLOCK BOB <-> GUY
BLOCK CY <-> ED
BLOCK CY <-> FLO
BLOCK CY <-> GUY
BLOCK DAN <-> FLO
BLOCK DAN <-> GUY
BLOCK ED <-> GUY

Here’s an illustration of the 7 units with paths, in blue, that are allowed, and blockers, in gray, that are implemented.

Seven Nodes

Script To Create Blocking Diagram and Compiler Directives

Here is a session running line_topology_blocks.pl.  The Mermaid portion is a technology that lets you build charts using text, in this instance, it is really helpful to quickly illustrate what is connected and what is blocked.  Here is a screenshot showing my VSCodium 12 session, with the Markdown Preview Mermaid Support plugin displaying my markdown recipe.

VSCodium desktop with markdown file and preview image
Mermaid Preview in VSCodium
Script started on 2026-06-13 01:39:45-07:00 [TERM="xterm-256color" TTY="/dev/pts/3" COLUMNS="178" LINES="26"]
[ rnsenv|script ] jlpoole@jp
"ansi1 ansi34"> /usr/local/src/microreticulum/microReticulumTbeam/exercises/205_sustained_link/scripts $ date

Sat Jun 13 01:39:47 PDT 2026
[ rnsenv|script ] jlpoole@jp /usr/local/src/microreticulum/microReticulumTbeam/exercises/205_sustained_link/scripts $ date makescript topology_block./line_topology_block.pl AMY BOB  CY DAN ED FLO GUY

# Blocking rules
# --------------
ALLOW AMY <-> BOB
ALLOW BOB <-> CY
ALLOW CY <-> DAN
ALLOW DAN <-> ED
ALLOW ED <-> FLO
ALLOW FLO <-> GUY
BLOCK AMY <-> CY
BLOCK AMY <-> DAN
BLOCK AMY <-> ED
BLOCK AMY <-> FLO
BLOCK AMY <-> GUY
BLOCK BOB <-> DAN
BLOCK BOB <-> ED
BLOCK BOB <-> FLO
BLOCK BOB <-> GUY
BLOCK CY <-> ED
BLOCK CY <-> FLO
BLOCK CY <-> GUY
BLOCK DAN <-> FLO
BLOCK DAN <-> GUY
BLOCK ED <-> GUY

# platformio.ini block directives
# -------------------------------
; Declare any blocked physical pairs here. The build script converts all
; enabled SIM_PHY_BLOCK_<UNIT>_<UNIT> definitions into a generic matrix.
-D SIM_PHY_BLOCK_AMY_CY=1
-D SIM_PHY_BLOCK_AMY_DAN=1
-D SIM_PHY_BLOCK_AMY_ED=1
-D SIM_PHY_BLOCK_AMY_FLO=1
-D SIM_PHY_BLOCK_AMY_GUY=1
-D SIM_PHY_BLOCK_BOB_DAN=1
-D SIM_PHY_BLOCK_BOB_ED=1
-D SIM_PHY_BLOCK_BOB_FLO=1
-D SIM_PHY_BLOCK_BOB_GUY=1
-D SIM_PHY_BLOCK_CY_ED=1
-D SIM_PHY_BLOCK_CY_FLO=1
-D SIM_PHY_BLOCK_CY_GUY=1
-D SIM_PHY_BLOCK_DAN_FLO=1
-D SIM_PHY_BLOCK_DAN_GUY=1
-D SIM_PHY_BLOCK_ED_GUY=1

# Mermaid
# -------
```mermaid
flowchart LR
    AMY talk_001@<-- Talk --> BOB
    BOB talk_002@<-- Talk --> CY
    CY talk_003@<-- Talk --> DAN
    DAN talk_004@<-- Talk --> ED
    ED talk_005@<-- Talk --> FLO
    FLO talk_006@<-- Talk --> GUY
    AMY blocked_007@-. Blocked .-CY
    AMY blocked_008@-. Blocked .-DAN
    AMY blocked_009@-. Blocked .-ED
    AMY blocked_010@-. Blocked .-FLO
    AMY blocked_011@-. Blocked .-GUY
    BOB blocked_012@-. Blocked .-DAN
    BOB blocked_013@-. Blocked .-ED
    BOB blocked_014@-. Blocked .-FLO
    BOB blocked_015@-. Blocked .-GUY
    CY blocked_016@-. Blocked .-ED
    CY blocked_017@-. Blocked .-FLO
    CY blocked_018@-. Blocked .-GUY
    DAN blocked_019@-. Blocked .-FLO
    DAN blocked_020@-. Blocked .-GUY
    ED blocked_021@-. Blocked .-GUY

    classDef talk stroke:blue,stroke-width:2px,color:green;
    classDef blocked stroke:#A9A9A9,stroke-width:2px,color:#A9A9A9,stroke-dasharray:5 5;
    class talk_001,talk_002,talk_003,talk_004,talk_005,talk_006 talk
    class blocked_007,blocked_008,blocked_009,blocked_010,blocked_011,blocked_012,blocked_013,blocked_014,blocked_015,blocked_016,blocked_017,blocked_018,blocked_019,blocked_020,blocked_021 blocked
```
[ rnsenv|script ] jlpoole@jp /usr/local/src/microreticulum/microReticulumTbeam/exercises/205_sustained_link/scripts $ exit

exit

Script done on 2026-06-13 01:39:55-07:00 [COMMAND_EXIT_CODE="0"]

  1. A transceiver is an electronic device which is a combination of a radio transmitter and a receiver, hence the name. <a href="https://en.wikipedia.org/wiki/Transceiver">Wikipedia.</a>
  2. LoRa (from “long range”) is a physical proprietary radio communication technique based on spread spectrum modulation. LoRa can be thought of as a radio signal technology, similar to Wi-Fi or cellular. Wikipedia
  3. In physics, attenuation is the gradual loss of flux intensity [radio power] through a medium. For instance, dark glasses attenuate sunlight, lead attenuates X-rays, and water and air attenuate both light and sound at variable attenuation rates. <a href="https://en.wikipedia.org/wiki/Attenuation">Wikipedia</a>
  4. <a href="https://en.wikipedia.org/wiki/Mesh_networking">Wikipedia: Mesh Networking</a>
  5. I use “directive” to mean a compile time flag telling the compiler to do something special, e.g. create a software block between two units. An example of such a flag is to cause BOB and CY not to see each other’s packets is: “-D SIM_PHY_BLOCK_BOB_CY=1”.  When the compiler is presented with such a directive, it will enact a block of both of the corresponding unit on each named unit, so BOB will block DAN’s transmissions and DAN will block BOB’s transmissions.
  6. An opensource alternative to Microsoft’s Visual Studio Code.
  7. A transceiver is an electronic device which is a combination of a radio transmitter and a receiver, hence the name. Wikipedia.
  8. LoRa (from “long range”) is a physical proprietary radio communication technique based on spread spectrum modulation. LoRa can be thought of as a radio signal technology, similar to Wi-Fi or cellular. Wikipedia
  9. In physics, attenuation is the gradual loss of flux intensity [radio power] through a medium. For instance, dark glasses attenuate sunlight, lead attenuates X-rays, and water and air attenuate both light and sound at variable attenuation rates. Wikipedia
  10. Wikipedia: Mesh Networking
  11. I use “directive” to mean a compile time flag telling the compiler to do something special, e.g. create a software block between two units. An example of such a flag is to cause BOB and CY not to see each other’s packets is: “-D SIM_PHY_BLOCK_BOB_CY=1”.  When the compiler is presented with such a directive, it will enact a block of both of the corresponding unit on each named unit, so BOB will block DAN’s transmissions and DAN will block BOB’s transmissions.
  12. An opensource alternative to Microsoft’s Visual Studio Code.

Comments

Leave a Reply

Your email address will not be published. Required fields are marked *