Scope: Each candidate routing approach for Loomwave, with the control-overhead math the
brief requires: how much channel each spends on hellos / LSAs / adverts / route discovery, at
the target network sizes, plus cold-start discovery, topology-change handling, INFRA-present
vs absent behaviour, and convergence targets. The brief's hard line: a routing protocol that
consumes 40% of channel for control is unacceptable. All airtime from the verified LoRa model
in mac-layer-options.md (LongFast SF11/BW250, 32 B ToA = 0.477 s, 16 B = 0.354 s,
64 B = 0.723 s).
Any control packet that is flooded costs ~N transmissions (one per rebroadcaster). If N nodes each originate such control traffic every period P, channel load is:
L_control ≈ N² · ToA_ctrl / P
The N² is the killer. It is the same pathology as data flooding
(meshtastic-routing-analysis.md §8.1 —
the derivation + "why N²" intuition), and it reappears in every flood-based control
scheme below. The design conclusion, derived in §6, is that Loomwave control traffic must
be O(N), which requires aggregating it through INFRA rather than flooding it peer-to-peer.
State: none. Discovery: none (every packet floods). Topology change: irrelevant (stateless), but every change is "handled" by re-flooding everything.
Overhead: there is no separate control plane — the data plane is the flood, so the cost
is the N² data load already quantified (mac-layer-options.md §2): collapses below ~11 nodes
on LongFast. The only true control is unsigned NodeInfo/position broadcasts, which are
themselves floods and add to the N² load.
INFRA present/absent: no distinction; an elevated node just floods harder and gathers more
hidden-node collisions (hidden-node-analysis.md §1).
Convergence: a flood reaches all D-hop nodes in D · (ToA + mean back-off):
| 3 hops | 5 hops | 8 hops | |
|---|---|---|---|
| LongFast per-hop ≈ 701 ms | 2.1 s | 3.5 s | 5.6 s |
| MediumFast per-hop ≈ 244 ms | 0.7 s | 1.2 s | 2.0 s |
Fast convergence is flooding's only virtue, and it is bought at unacceptable overhead. Verdict: reject as routing; retain only as discovery-plane primitive, rate-capped.
State: each node holds the full topology. Discovery: flood Link-State Advertisements (LSAs) + periodic hellos. Topology change: flood a new LSA.
Overhead (each node floods one ~16 B LSA every H seconds, L = N²·ToA₁₆/H):
| N | H = 60 s | H = 300 s |
|---|---|---|
| 10 | 59% | 12% |
| 50 | 1475% | 295% |
| 100 | 5900% | 1180% |
| 500 | 147500% | 29500% |
Verdict: link-state's LSA flood is O(N²) and collapses past ~10 nodes even at a
sluggish 5-minute refresh. Full link-state across the whole mesh is categorically
disqualified on LoRa. However, its core idea — a topology view enabling optimal and
spatial-reuse routing — is exactly what spatial-TDMA (mac-layer-options.md §5) needs. The
resolution (§6): run link-state only among the few INFRA nodes (I ≈ 2–6), where I² is
tiny, not among all N clients.
State: per-destination source path (held at endpoints, not transit nodes).
Discovery: first contact floods; destination returns the reverse path directly
(meshcore-routing-analysis.md §4). Adverts flood for identity/presence.
Overhead. Two components:
1. Adverts (≥64 B, flooded every A seconds): L = N²·ToA₆₄/A:
| N | A = 600 s | A = 1800 s | A = 3600 s |
|---|---|---|---|
| 10 | 12% | 4% | 2% |
| 50 | 301% | 100% | 50% |
| 100 | 1205% | 402% | 201% |
| 500 | 30125% | 10042% | 5021% |
meshcore-routing-analysis.md §7.2).Once paths exist, data is cheap: a D-hop DIRECT packet costs exactly D transmissions, and the path adds only D × (1–3) header bytes. This is path-vector's win and why MeshCore out-scales Meshtastic for steady traffic.
Topology change: brittle — a single moved relay kills the source route, forcing a fresh discovery flood. No repair, no alternates.
INFRA present/absent: no special role; INFRA is just another flooding node. (Loomwave should change this — see §6.)
Convergence: first-contact discovery = one flood (§1 table) + one direct return ≈ 2 × per-hop·D ≈ 4–11 s at LongFast for 3–8 hops.
Verdict: right data-plane idea (flood-once, then routed), wrong control-plane scaling (advert flood is O(N²); discovery re-floods on churn). Keep the source/next-hop routing, replace flooded adverts with capped + INFRA-aggregated discovery.
State: routes cached on demand. Discovery: flood a Route Request (RREQ); destination unicasts a Route Reply (RREP). Topology change: route error + re-discover.
Overhead (each discovery = one ~N-transmission RREQ flood):
| N | 1 disc/min | 5 disc/min | 10 disc/min |
|---|---|---|---|
| 10 | 6% | 30% | 59% |
| 50 | 30% | 148% | 295% |
| 100 | 59% | 295% | 590% |
Verdict: AODV trades proactive overhead for per-discovery overhead, so cost tracks the rate of new flows. For Loomwave's traffic profile — bursty, small, infrequent senders, many distinct (src,dst) pairs — discoveries are frequent relative to data, so AODV pays the flood cost constantly with little amortisation. The brief explicitly flags this ("poor for bursty small nets with infrequent senders"); the math confirms it: even 1 discovery/min at N=100 burns 59% of channel. Reject as primary; the on-demand idea survives only as the CSMA-fallback route-find when no INFRA is present.
State: per-destination next-hop + hops + expiry (distance-vector, small header
regardless of path length — reticulum-routing-analysis.md §4,§6). Discovery: signed
announces, flooded but hard-capped at ANNOUNCE_CAP = 2% of channel, fewer-hops-first.
The crucial subtlety the cap exposes. Capping control at 2% does not make flooded
announces scale — it converts the overhead problem into a latency problem. At 2% of a
LongFast channel, only 0.02 / 0.723 s = 0.0277 announce-transmissions/s ≈ 99.6/hour can
propagate. Each announce needs ~N rebroadcasts, so the minimum sustainable per-node announce
interval is:
min_announce_interval ≈ N / (ANNOUNCE_CAP / ToA_announce)
| N | full announce-propagations/hour (channel-wide) | min per-node announce interval |
|---|---|---|
| 10 | 10.0 | ~6 min |
| 50 | 2.0 | ~30 min |
| 100 | 1.0 | ~60 min |
| 500 | 0.2 | ~5 hours |
Verdict: Reticulum's cap keeps the channel alive (overhead bounded at 2%, never collapses) — a decisive improvement over §1–4 — but the price is convergence latency that grows with N²: at 100 nodes a node's presence/route refreshes only ~hourly; at 500 nodes, every few hours. That is acceptable for Reticulum's internet-bridged use but too slow for Loomwave's high-churn event scenario, where a node must become reachable within seconds-to- minutes. The distance-vector next-hop table and the cap are keepers; flat flooded announces across all N are not.
Every flooded-control scheme above is O(N²) and therefore either collapses (overhead) or crawls (capped latency). The escape is structural, not parametric: make control O(N) by aggregating it through INFRA, exploiting the asymmetric-role mandate.
Design (to be validated in Stage 2 sim):
mac-layer-options.md §3),
not to the whole mesh. Cost per registration = 1 transmission, not N. Total client
control load = N · ToA / P_reg (linear), e.g. N=100, 32 B, every 300 s ⇒
100·0.477/300 = 15.9%… still high if every client refreshes often, so registration
cadence is itself scheduled and slow (presence is also implicit from data slots).I²·ToA/H — at I=6, H=60 s: 36·0.354/60 = 21% of channel on the backbone link;
if INFRA use a separate SF/slot allocation or higher airtime budget (their role allows),
this is affordable and gives the full topology view that link-state (§2) wanted but
couldn't have mesh-wide. This is also what spatial-TDMA (mac-layer-options.md §5) needs.hidden-node-analysis.md §3. The protocol must detect coordinator
presence and switch (the key MAC/routing interlock).Control-overhead budget of the recommended design (LongFast, dense-event N=100, 4 INFRA):
| Control element | Size | ToA | Rate | Mechanism | Channel util |
|---|---|---|---|---|---|
| Client registration | 32 B | 477 ms | 1 / 600 s · 100 | scheduled unicast (O(N)) | 8.0% |
| INFRA backbone LSA | 16 B | 354 ms | 1 / 60 s · 4² | link-state among INFRA | 8.3% |
| Slot beacon | 32 B | 477 ms | 1 / 30 s | coordination | 1.6% |
| Discovery announces | 32 B | 477 ms | ANNOUNCE_CAP | flood, capped | ≤2.0% |
| Total control | ≈ 20% |
~20% control overhead at 100 nodes — under the 40% red line — vs link-state's 5900% or uncapped adverts' 1205% for the same network. Registration cadence is the dominant term and the main tuning knob; slowing it (or leaning on implicit presence from data slots) drops total control toward ~12%. The O(N²) schemes cannot reach the red line at this N at all.
| Scenario | N / INFRA | Cold-start route discovery | Topology-change recovery | Mechanism |
|---|---|---|---|---|
| Sparse-rural | 10 / 2 | < 5 s (flood, §1) | < 5 s | capped flood + DV |
| Dense-event | 100 / 4 | < 30 s (register + backbone LSA) | < 15 s (INFRA re-route) | INFRA-aggregated DV |
| Neighbourhood | 50 / 6 | < 20 s | < 10 s (spatial reuse, more INFRA) | INFRA link-state + spatial-TDMA |
| INFRA-absent (any) | — | minutes (AODV on-demand) | slow / best-effort | CSMA fallback |
These are targets to validate in sim, derived from the per-hop convergence math (§1) plus registration/backbone cadence; they are not yet measured.
| Approach | Control overhead @ N=100 | Scales to 500? | Topology-change | Cold-start | Verdict |
|---|---|---|---|---|---|
| Flooding | data-plane collapse | ✗ | re-flood all | instant | discovery only |
| Link-state (mesh-wide) | 1180–5900% | ✗ | LSA flood | fast | reject mesh-wide; use INFRA-only |
| Path-vector (MeshCore) | 201–1205% adverts | ✗ (advert flood) | brittle, re-discover | medium | keep data routing, fix control |
| Reactive AODV | 59%/disc-min | ✗ at flow rate | re-discover | per-flow | INFRA-absent fallback only |
| Reticulum capped DV | ≤2% (but ~1 h convergence) | overhead yes / latency no | DV update | slow at scale | keep DV + cap, not flat-flood |
| INFRA-aggregated (rec.) | ~20% (→~12%) | yes (O(N)) | INFRA re-route, fast | < 30 s | recommended |
The throughline matching all three codebase analyses: confine flooding to a rate-capped discovery plane, route data via a small distance-vector/next-hop table, and aggregate control through INFRA to convert O(N²) into O(N). Final selection awaits Stage-2 sim measurement of convergence and delivery under realistic churn.