Skip to content

Dense mesh

The problem

In a flood mesh, every repeater re-broadcasts every packet it hears. In a sparse rural area this is exactly what you want — maximum propagation. In a dense urban area it causes too many redundant retransmissions, filling the LoRa channel and slowing the network.

The Netherlands has many repeaters close together, so this problem shows up quickly. EU868 duty-cycle limits make every unnecessary retransmission expensive.

Dense stats

Before changing anything, check what is actually happening:

get dense.stats

This shows:

FieldDescription
flood_advert_rxFlood adverts received
flood_advert_fwdFlood adverts forwarded
flood_advert_dropFlood adverts dropped
flood_dup_packetsDuplicate flood packets seen
airtime_rx_msEstimated RX airtime (ms)
airtime_tx_msEstimated TX airtime (ms)
cad_busyCAD / channel-busy events
densityLocal node density estimate
congestionChannel congestion estimate

Reset counters with:

clear dense.stats

Stats are RAM-only and reset on reboot.

Flood advert forwarding

Control how aggressively flood adverts are forwarded:

get flood.advert.base
set flood.advert.base <0.0 .. 1.0>
ValueEffect
0Never forward received flood adverts
0.308Dense-mesh default — reduces forwarding as hop count grows
1Forward everything (original MeshCore behavior)

The default is 0.308. Existing networks keep working because the default is already applied.

Relay probability

Manually reduce how many flood packets are relayed:

get flood.relay.prob
set flood.relay.prob <0 .. 255>
ValueEffect
0Relay nothing
128Relay approximately half
255Relay everything allowed (default)

Dynamic mode

Dynamic mode is available but does not yet change behavior automatically. Enable it to collect data:

set flood.dynamic.enable on

Automatic tuning will be added once enough real-world data has been collected. Default is off.

Released under the MIT License.