Problem
MeshCore networks are vulnerable to disruption from intentional spammers, misconfigured nodes, or high-traffic events. See https://mc-spamdetector.nl/incidents?status=all&type=all&hours=0 for recent events on the NL mesh. For the Dutch mesh a volunteer group (NOC) is monitoring and trying to coordinate the mesh through such events.
Current mitigation relies on in-person triangulation and activation of the regional social clusters. When mitigation of such disruptive events using adjustments to the repeater configuration is possible, this either requires local repeater admin access or that the mesh is still functional enough to send/receive commands to the repeater remotely. During such events, the mesh is both not functional and at the same time wired access to repeaters is not easily obtained locally. To make the mesh more resilient to high-traffic events, this gate mechanism based on regions is proposed for discussion.
Proposed Mechanism
Repeaters autonomously gate inter-region traffic based on locally measured TX duty cycle. Each repeater has a configured region list, where order defines priority:
nl-ge-nij (local cluster, highest priority)
└─ nl-ge
└─ nl
└─ eu
When TX duty cycle exceeds a configurable threshold T1, the repeater progressively drops traffic from the back of the list forward:
- Duty cycle > T1 → stop forwarding
eu traffic
- Still above threshold → stop forwarding
nl traffic
- Still above threshold → stop forwarding
nl-ge traffic
- Last
nl-ge-nij cluster always protected
Recovery
As duty cycle drops below T_recover (where T_recover < T1), the repeater re-enables regions from the innermost outward, one step at a time. The gap between T1 and T_recover provides hysteresis, preventing rapid oscillation. One known risk: when an event ends, repeaters independently observe the drop at roughly the same time and begin re-enabling simultaneously, potentially causing a brief surge of traffic that re-triggers gating. A small randomised per-repeater recovery delay (e.g. 0-30s jitter per step) would reduce this risk.
TX duty cycle
TX duty cycle is a locally observable metric. Each repeater acts independently based on its own radio behaviour, preserving the decentralised nature of the mesh.
Failure behaviour
Under sustained disruption, the mesh degrades gracefully: each repeater converges on its smallest sustainable local cluster. The network self-partitions into isolated but functional local cells rather than collapsing entirely. Once disruption subsides, the mesh recovers outward, restoring broader connectivity step by step.
Notes
- Requires hierarchy in the regions configuration
- Thresholds, TX duty cycle window length, and hysteresis values are parameters to be defined
- This mechanism protects other regions (ie "the broader mesh") from a local event. It does not protect a local cluster from a local source.
Path Forward
This proposal has been shared in the Dutch MeshCore communities, both on the mesh and in Telegram, and is refined based on feedback. Next steps: continue refining the pitch based on broader discussion. If this is considered a viable proposal (since I'm not developing myself and rather not want to introduce AI code I don't understand) gather volunteers to develop and implement as a custom firmware feature to test on an observed mesh segment, gather duty cycle needed parameters data, and submit a PR if results support it.
Problem
MeshCore networks are vulnerable to disruption from intentional spammers, misconfigured nodes, or high-traffic events. See https://mc-spamdetector.nl/incidents?status=all&type=all&hours=0 for recent events on the NL mesh. For the Dutch mesh a volunteer group (NOC) is monitoring and trying to coordinate the mesh through such events.
Current mitigation relies on in-person triangulation and activation of the regional social clusters. When mitigation of such disruptive events using adjustments to the repeater configuration is possible, this either requires local repeater admin access or that the mesh is still functional enough to send/receive commands to the repeater remotely. During such events, the mesh is both not functional and at the same time wired access to repeaters is not easily obtained locally. To make the mesh more resilient to high-traffic events, this gate mechanism based on regions is proposed for discussion.
Proposed Mechanism
Repeaters autonomously gate inter-region traffic based on locally measured TX duty cycle. Each repeater has a configured region list, where order defines priority:
When TX duty cycle exceeds a configurable threshold T1, the repeater progressively drops traffic from the back of the list forward:
eutrafficnltrafficnl-getrafficnl-ge-nijcluster always protectedRecovery
As duty cycle drops below T_recover (where T_recover < T1), the repeater re-enables regions from the innermost outward, one step at a time. The gap between T1 and T_recover provides hysteresis, preventing rapid oscillation. One known risk: when an event ends, repeaters independently observe the drop at roughly the same time and begin re-enabling simultaneously, potentially causing a brief surge of traffic that re-triggers gating. A small randomised per-repeater recovery delay (e.g. 0-30s jitter per step) would reduce this risk.
TX duty cycle
TX duty cycle is a locally observable metric. Each repeater acts independently based on its own radio behaviour, preserving the decentralised nature of the mesh.
Failure behaviour
Under sustained disruption, the mesh degrades gracefully: each repeater converges on its smallest sustainable local cluster. The network self-partitions into isolated but functional local cells rather than collapsing entirely. Once disruption subsides, the mesh recovers outward, restoring broader connectivity step by step.
Notes
Path Forward
This proposal has been shared in the Dutch MeshCore communities, both on the mesh and in Telegram, and is refined based on feedback. Next steps: continue refining the pitch based on broader discussion. If this is considered a viable proposal (since I'm not developing myself and rather not want to introduce AI code I don't understand) gather volunteers to develop and implement as a custom firmware feature to test on an observed mesh segment, gather duty cycle needed parameters data, and submit a PR if results support it.