mirror of
https://github.com/mikecarper/MeshCore.git
synced 2026-10-29 22:02:31 +00:00
Record eight-peer UDP bridge builds and validation limits
This commit is contained in:
1 parent
f4a9a05f75
commit
624efe152d
3 files changed
+198
No files matched your search
@@ -11,6 +11,7 @@ Completed validation reports, experiments, and test guides are collected here. O
|
||||
|
||||
## Radio and RF
|
||||
|
||||
- [Eight-peer WiFi UDP bridge: V3/V4/R8 Full build and host validation, 2026-10-22](udp_bridge_2026-10-22.md)
|
||||
- [RS-232 bridge diagnostics: host/build checks and existing RAK Full RAM failure, 2026-10-22](rs232_bridge_diagnostics_2026-10-22.md)
|
||||
- [ESP-NOW bridge diagnostics: V4 and V4 R8 TFT Full build/host validation, 2026-10-22](espnow_bridge_diagnostics_2026-10-22.md)
|
||||
- [V3/V4/T096 radio2 with two fixed witnesses, matched SF7/BW62.5 at preamble 32, 2026-10-22](radio2_simultaneous_receivers_2026-10-22.md)
|
||||
|
||||
@@ -0,0 +1,97 @@
|
||||
<!-- meshcore-hosted-doc-link:start -->
|
||||
<p class="meshcore-hosted-doc-link"><a href="https://mikecarper.github.io/MeshCore/test-results/udp_bridge_2026-10-22/">View this page on MeshCore Docs</a>.</p>
|
||||
<!-- meshcore-hosted-doc-link:end -->
|
||||
|
||||
# Eight-peer WiFi UDP bridge, 22 October 2026
|
||||
|
||||
Status: **host tests and all three Full repeater builds PASS**. No radio was
|
||||
flashed or contacted. Physical WiFi/UDP delivery, router policy, LoRa forwarding
|
||||
and OTA operation remain outside this validation.
|
||||
|
||||
Clean firmware source
|
||||
[`f4a9a05f7`](https://github.com/mikecarper/MeshCore/commit/f4a9a05f7)
|
||||
was built with the canonical builder, version
|
||||
`v1.18.0.1-halo-keymind-cascade-dev`, Cascade runtime defaults and the USA
|
||||
Cascade preset. The [safe receipt](udp_bridge_2026-10-22.safe.json) binds
|
||||
source, build recipes, linked memory measurements and package hashes.
|
||||
|
||||
## Resulting behavior
|
||||
|
||||
Supported ESP32 Full repeaters gain a default-off UDP bridge with eight
|
||||
explicit IPv4/port peer slots. One bounded, nonblocking socket runs only on a
|
||||
connected station with an IP address and exact station-only SDK mode. It
|
||||
pauses on disconnection, AP/AP+STA, browser/deferred WiFi OTA and manual WiFi
|
||||
shutdown, then restores eligible saved intent. It can join using existing
|
||||
WiFi credentials without an MQTT broker or a running MQTT worker.
|
||||
|
||||
Packets use versioned HMAC-SHA256 authentication with the existing
|
||||
`bridge.secret`; no new password is added. Fresh challenge/proof exchanges
|
||||
establish boot sessions, with receiver-boot binding and monotonic receive
|
||||
sequences rejecting replayed mesh packets and probes. Changing the shared secret
|
||||
closes old sessions and discards old queued work before further socket service.
|
||||
Authentication does not encrypt the UDP payload.
|
||||
|
||||
Local LoRa traffic can fan out to the eight direct destinations. Incoming
|
||||
UDP enters the local LoRa mesh, with the usual filters and admission rules;
|
||||
it is not forwarded to other UDP peers. A volatile packet-origin marker
|
||||
prevents later LoRa TX callbacks, including OTA retries, from exporting that
|
||||
same UDP ingress packet again. The marker survives retry copies, is never
|
||||
serialized, and fits existing packet padding. Unrelated builds do not gain it.
|
||||
|
||||
The [setup and diagnostic guide](../udp_bridge_setup.md) covers saved settings,
|
||||
status, counters, one-way probes and runtime USB summaries. `ready` counts
|
||||
authenticated boot sessions, not current peer liveness. Match a fresh probe's
|
||||
ID and increased receive count on the destination to establish reachability.
|
||||
Probes do not allocate mesh packets, echo, retry or reach LoRa. Automatic
|
||||
handshake controls have their own bounded retry policy.
|
||||
|
||||
## Embedded build results
|
||||
|
||||
| Requested target | Selected Full environment | Available internal bytes | Required heap bytes | Model margin | Result |
|
||||
| --- | --- | ---: | ---: | ---: | --- |
|
||||
| `Heltec_v3_repeater` | `Heltec_v3_repeater_observer_mqtt` | 209,392 | 209,040 | 352 | PASS |
|
||||
| `heltec_v4_repeater` | `heltec_v4_repeater_observer_mqtt` | 202,496 | 197,776 | 4,720 | PASS |
|
||||
| `heltec_v4_r8_tft_repeater` | `heltec_v4_r8_tft_repeater_observer_mqtt` | 200,264 | 195,728 | 4,536 | PASS |
|
||||
|
||||
Each image passes application and merged packaging, linked capability checks
|
||||
including `bridge.udp`, and unchanged memory/size gates. All capability
|
||||
receipts have empty feature-reduction lists. No feature or reserve was removed.
|
||||
|
||||
The enabled-case model adds 5,120 bytes even though UDP defaults off: a source-
|
||||
asserted 3,072-byte object allowance and 2,048 bytes for the bounded socket and
|
||||
receive buffering. The socket requires a successful 768-byte receive-limit
|
||||
configuration. WiFi stack memory is counted once alongside MQTT, with UART
|
||||
and other existing allocations still reserved. The V3 model margin is small;
|
||||
these linked capacity estimates are not running free-heap, fragmentation or
|
||||
maximum-load measurements. Physical startup/load/soak checks remain necessary.
|
||||
|
||||
An initial compile attempt at `5e25faa3d` exposed aggregate initialization
|
||||
unsupported by the pinned ESP32 compiler. `f4a9a05f7` uses explicit field
|
||||
assignment. The host suite now compiles the production UDP implementation
|
||||
with strict C++11 before linking its test driver. The earlier failure is
|
||||
retained privately and excluded from qualifying packages.
|
||||
|
||||
## Host checks
|
||||
|
||||
- Eight sanitized core methods in both native-USB and ordinary-console builds:
|
||||
strict framing and a Python HMAC known-answer vector, mutations/oversize,
|
||||
old-session and reboot replay rejection, simultaneous eight-peer startup,
|
||||
fan-out, targeted probes, key rotation, pool/backpressure, socket errors,
|
||||
network changes and bounded logging.
|
||||
- Three config/OTA methods: strict CLI and local-only test/reset, checked
|
||||
standalone settings, write faults/power interruption, unchanged common
|
||||
preferences, and correct pause/restore including manually paused UDP.
|
||||
- Two integration methods across owner combinations: exact STA versus AP and
|
||||
stale SDK state, reconnect, manual-off grace, MQTT independence, foreground
|
||||
power ownership, setup/OTA transitions and failed settings saves.
|
||||
- Production packet/pool/dispatcher checks: nonserialized origin, retry-copy
|
||||
preservation, reuse/parser reset and unchanged packet size. Bridge-only USB
|
||||
formatter checks include a UDP-only build with compile-time debug off.
|
||||
- Build-profile, allocation-boundary, existing network/wireless/power/RAM,
|
||||
bridge recovery/filter/ingress, MQTT/UART and USB preference regressions.
|
||||
- Hosted documentation links and strict documentation rendering.
|
||||
|
||||
Router client isolation cannot be diagnosed conclusively from a successful
|
||||
WiFi association alone. The physical network must allow the configured peers
|
||||
to exchange UDP. This work did not change router settings or attempt to bypass
|
||||
network isolation.
|
||||
@@ -0,0 +1,100 @@
|
||||
{
|
||||
"schema_version": 1,
|
||||
"date": "2026-10-22",
|
||||
"source_commit": "f4a9a05f7574d7a0cabd16749bc7a4c5f8b18ad9",
|
||||
"source_clean_at_build": true,
|
||||
"firmware_version": "v1.18.0.1-halo-keymind-cascade-dev-f4a9a05f",
|
||||
"runtime_profile": "cascade",
|
||||
"radio_preset": "usa-cascade-fixed",
|
||||
"scope": "Host and build/package validation only. No hardware flashed or contacted. No physical UDP, LoRa or OTA operation was performed.",
|
||||
"physical_validation_performed": false,
|
||||
"builds": [
|
||||
{
|
||||
"requested_target": "Heltec_v3_repeater",
|
||||
"environment": "Heltec_v3_repeater_observer_mqtt",
|
||||
"build_profile": "full",
|
||||
"capability_verification_passed": true,
|
||||
"feature_reductions": [],
|
||||
"capabilities_sha256": "6c954ddafd0d5ee4d36132690768ce46a496d732724469aa8d645dc49fca8956",
|
||||
"build_recipe_sha256": "0243c8212027f3e917ad7dcb2f0a816baf98d7c5078a7b009698870caa5cf3a8",
|
||||
"memory": {
|
||||
"passed": true,
|
||||
"available_internal_bytes": 209392,
|
||||
"largest_internal_region_bytes": 176624,
|
||||
"required_heap_bytes": 209040,
|
||||
"required_contiguous_bytes": 21184,
|
||||
"scope": "Linked capacity before runtime allocation; physical boot/load/soak validation remains required."
|
||||
},
|
||||
"artifacts": [
|
||||
{
|
||||
"file": "Heltec_v3_repeater_observer_mqtt-full-usb-wifi-ota-v1.18.0.1-halo-keymind-cascade-dev-f4a9a05f-merged.bin",
|
||||
"bytes": 2351832,
|
||||
"sha256": "66fb35aa36fe5e1132c6e7af18fc30ed7bddf253e687b4b6fd77314cc0328571"
|
||||
},
|
||||
{
|
||||
"file": "Heltec_v3_repeater_observer_mqtt-full-usb-wifi-ota-v1.18.0.1-halo-keymind-cascade-dev-f4a9a05f.bin",
|
||||
"bytes": 2286296,
|
||||
"sha256": "edf4b5ec0a19193b993d060a7b0091404dad20e5aed6a3c0499df6bcbe782bdd"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"requested_target": "heltec_v4_repeater",
|
||||
"environment": "heltec_v4_repeater_observer_mqtt",
|
||||
"build_profile": "full",
|
||||
"capability_verification_passed": true,
|
||||
"feature_reductions": [],
|
||||
"capabilities_sha256": "175c10f43a3ca20aca3b0dacc8efe958fa9e20a0a2859ca15dcc9c588ea91964",
|
||||
"build_recipe_sha256": "5c45f84cc75c5c95fd541ee426bd7d486057726fc7abbfcf4e551bbb79d2e1ef",
|
||||
"memory": {
|
||||
"passed": true,
|
||||
"available_internal_bytes": 202496,
|
||||
"largest_internal_region_bytes": 169728,
|
||||
"required_heap_bytes": 197776,
|
||||
"required_contiguous_bytes": 21184,
|
||||
"scope": "Linked capacity before runtime allocation; physical boot/load/soak validation remains required."
|
||||
},
|
||||
"artifacts": [
|
||||
{
|
||||
"file": "heltec_v4_repeater_observer_mqtt-full-usb-wifi-ota-v1.18.0.1-halo-keymind-cascade-dev-f4a9a05f-merged.bin",
|
||||
"bytes": 2393368,
|
||||
"sha256": "cb4e7bbf483b41c038af2fbe5aa072b75d88fe76acf27b352e2d51262129b921"
|
||||
},
|
||||
{
|
||||
"file": "heltec_v4_repeater_observer_mqtt-full-usb-wifi-ota-v1.18.0.1-halo-keymind-cascade-dev-f4a9a05f.bin",
|
||||
"bytes": 2327832,
|
||||
"sha256": "be1128f7b0687964a93afd496bcad2f7a3a30d95d9b9393ea079284b9959603d"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"requested_target": "heltec_v4_r8_tft_repeater",
|
||||
"environment": "heltec_v4_r8_tft_repeater_observer_mqtt",
|
||||
"build_profile": "full",
|
||||
"capability_verification_passed": true,
|
||||
"feature_reductions": [],
|
||||
"capabilities_sha256": "4c8562503bc0b5f359f8c0eb49365cac2136d3713ab30803015333a844bbe6f7",
|
||||
"build_recipe_sha256": "d4fa8acc970de47faa0812d3e19f297af21f1cdeff32c2426b76bca63e197801",
|
||||
"memory": {
|
||||
"passed": true,
|
||||
"available_internal_bytes": 200264,
|
||||
"largest_internal_region_bytes": 167496,
|
||||
"required_heap_bytes": 195728,
|
||||
"required_contiguous_bytes": 21184,
|
||||
"scope": "Linked capacity before runtime allocation; physical boot/load/soak validation remains required."
|
||||
},
|
||||
"artifacts": [
|
||||
{
|
||||
"file": "heltec_v4_r8_tft_repeater_observer_mqtt-full-usb-wifi-ota-v1.18.0.1-halo-keymind-cascade-dev-f4a9a05f-merged.bin",
|
||||
"bytes": 2407368,
|
||||
"sha256": "915df5f10c27da036a8c97052d360ce42dcbee3c51c654c1cab57b19039b7513"
|
||||
},
|
||||
{
|
||||
"file": "heltec_v4_r8_tft_repeater_observer_mqtt-full-usb-wifi-ota-v1.18.0.1-halo-keymind-cascade-dev-f4a9a05f.bin",
|
||||
"bytes": 2341832,
|
||||
"sha256": "0ad127295e5ec0b810d69627a8d2b6aadc9ef6b8db54fd0d4d5ca7b09d867144"
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
Reference in new issue
Block a user