Goal
Route ONE physical uplink's internet (4G or Starlink Mini) across a 3-node mesh triangle so a node with no direct uplink reaches the public internet over 2 mesh hops — the "Starlink without satellites" service MVP.
Context
This is the P2 DEMO GATE for the TRI-NET mesh track. Honest status: trios-mesh passes unit tests in simulation ONLY — never on real hardware [-sim]; the daemon does not yet exist as a repo (to be created as gHashTag/trios-mesh, cross-compiled to arm-linux Cortex-A9 for the Mini's PS). [-sim]
Now unblocked because the FPGA hardware is physically connected (both boards in hand). Boards for this phase:
- P201/P203 Mini = Zynq-7020
xc7z020 + AD9361 SDR (dual Cortex-A9 ARM-Linux) — runs the trios-mesh daemon + 5.8 GHz radio-PHY; the flying/relay node. NOTE: onboard PA is only ~10–15 dBm — an external PA+LNA @ 5.8 GHz (from P1) is required for any real over-air range; do not assume range from the onboard PA alone.
- ALINX AX7203 =
xc7a200t (IDCODE 0x13636093, part-number field 0x3636, per fpga/openxc7-synth/ax7203_al321.cfg) — already hardware-proven bench compute node for metrics/video capture. The Artix-7 openxc7 flow does not apply to the Zynq Mini.
Each of the 3 nodes is deployed fixed on a roof/mast at 10–30 m. ONE uplink modem attaches to a single node; trios-mesh MILESTONE 4 = NAT + ETX-routed forwarding of that uplink across the triangle. Multi-hop reach: the far (non-uplink) node reaches the internet via 2 hops. Depends entirely on M3 (iperf3 over 2 hops on attenuators) already passing on real hardware, plus uplink-modem + mast/weatherproofing procurement.
Tasks
Acceptance criteria
- All 3 Mini nodes hold a 5.8 GHz mesh link (external PA+LNA in place);
trios-mesh neighbor tables show 3 bidirectional neighbors with live ETX metrics.
- Laptop on the non-uplink node:
curl https://api.ipify.org returns the uplink's public IP (not the LAN/carrier-NAT of the laptop's own node) — routed over 2 mesh hops.
traceroute/ip route get 8.8.8.8 from the far node shows the path traversing the middle relay then the uplink node.
- iperf3 from the non-uplink node to an internet endpoint shows > 5 Mbit/s sustained over 2 hops (baseline; single-carrier fallback acceptable).
- Every packet on the mesh path is AEAD-encrypted (ChaCha20-Poly1305, unique 96-bit nonce, replay window active) — verified by a plaintext-scan of a captured radio trace showing no cleartext IP payloads.
Dependencies
phi^2 + phi^-2 = 3
Goal
Route ONE physical uplink's internet (4G or Starlink Mini) across a 3-node mesh triangle so a node with no direct uplink reaches the public internet over 2 mesh hops — the "Starlink without satellites" service MVP.
Context
This is the P2 DEMO GATE for the TRI-NET mesh track. Honest status:
trios-meshpasses unit tests in simulation ONLY — never on real hardware[-sim]; the daemon does not yet exist as a repo (to be created asgHashTag/trios-mesh, cross-compiled to arm-linux Cortex-A9 for the Mini's PS).[-sim]Now unblocked because the FPGA hardware is physically connected (both boards in hand). Boards for this phase:
xc7z020+ AD9361 SDR (dual Cortex-A9 ARM-Linux) — runs thetrios-meshdaemon + 5.8 GHz radio-PHY; the flying/relay node. NOTE: onboard PA is only ~10–15 dBm — an external PA+LNA @ 5.8 GHz (from P1) is required for any real over-air range; do not assume range from the onboard PA alone.xc7a200t(IDCODE0x13636093, part-number field0x3636, perfpga/openxc7-synth/ax7203_al321.cfg) — already hardware-proven bench compute node for metrics/video capture. The Artix-7 openxc7 flow does not apply to the Zynq Mini.Each of the 3 nodes is deployed fixed on a roof/mast at 10–30 m. ONE uplink modem attaches to a single node;
trios-meshMILESTONE 4 = NAT + ETX-routed forwarding of that uplink across the triangle. Multi-hop reach: the far (non-uplink) node reaches the internet via 2 hops. Depends entirely on M3 (iperf3 over 2 hops on attenuators) already passing on real hardware, plus uplink-modem + mast/weatherproofing procurement.Tasks
trios-meshM4a — NAT: on the uplink node, add masquerade/NAT from the mesh TUN (10.42.0.0/24) to the uplink WAN iface; advertise a default route into the mesh.trios-meshM4b — default-route propagation: originate a gateway advertisement so non-uplink nodes install a default route via best-ETX next hop toward the uplink node.trios-meshM4c — 2-hop forwarding: confirm the far node's default route resolves through the middle relay (2 ETX hops), IP-forwarding + encrypt/decrypt per hop (X25519 session + ChaCha20-Poly1305 AEAD)[-sim → hw].curl -s https://api.ipify.orgreturns the uplink modem's public IP (proves traffic egressed via the shared uplink over 2 mesh hops).fpga/FLASH_HISTORY.md/ a newMESH_HISTORY.md; publish Apache-2.0 code togHashTag/trios-mesh.Acceptance criteria
trios-meshneighbor tables show 3 bidirectional neighbors with live ETX metrics.curl https://api.ipify.orgreturns the uplink's public IP (not the LAN/carrier-NAT of the laptop's own node) — routed over 2 mesh hops.traceroute/ip route get 8.8.8.8from the far node shows the path traversing the middle relay then the uplink node.Dependencies
phi^2 + phi^-2 = 3