Skip to content

Conversation

@tvancott42
Copy link
Collaborator

Summary

This release improves Wi-Fi speed test accuracy and fixes mesh link rate reporting.

Wireless Rate Snapshots

  • Captures Wi-Fi PHY rates during active speed tests, not just at completion
  • Uses the higher of snapshot vs current rates to avoid misleading readings when rates drop after traffic stops
  • Detects AP roaming during tests and skips stale snapshot data when client switches APs
  • Works with browser tests, iperf3 client tests, and iperf3 SSH tests

Mesh Link Fixes

  • Fixed TX/RX rate display in mesh link tooltips to show correct directional perspective
  • Corrected efficiency calculations for mesh uplinks

Other

  • Added debounce and proper timer cleanup to UPnP notes input

Test Plan

  • Browser speed tests capture and use snapshots correctly
  • iperf3 client tests preserve snapshots for merge
  • iperf3 SSH tests capture snapshots between phases
  • AP roam detection skips snapshot when client changes APs
  • Mesh link rates display correctly in UI

The wireless mesh hop stores TX/RX from the child AP's perspective,
but GetDirectionalRatesFromPath() was returning them without flipping
to match the direction mapping (FromDevice/ToDevice). This caused
incorrect efficiency calculations for mesh AP speed tests.

Added tests for GetDirectionalRatesFromPath() and IsAsymmetric().
The mesh hop stores TX/RX from the child AP's perspective, but the
tooltip should display from the parent AP's perspective to be consistent
with the RX=FromDevice, TX=ToDevice convention used elsewhere.
Captures Wi-Fi PHY rates during active speed tests and compares with
rates at test completion, using the higher of the two values. This
guards against rate fluctuations that can cause misleadingly low
readings when rates collapse after traffic stops.

Features:
- Browser tests: JS callback captures snapshot 3 seconds into download
- iperf3 client tests: snapshot captured when first direction arrives
- iperf3 SSH tests: snapshot captured between Phase 1 and Phase 2
- AP roam detection: skips snapshot if client changed APs (rates not comparable)
- Cache invalidation ensures fresh topology for current vs snapshot comparison

Also includes:
- Asymmetric link threshold lowered to 9% for more split displays
- Symmetric links show the higher of Tx/Rx rates
- Debug logging shows captured and compared rates
- Fix IsAsymmetric test threshold from 10% to 9% to match implementation
- Add WirelessRateSnapshotTests.cs with 23 tests covering:
  - Model tests (dictionary init, case-insensitive MAC lookups)
  - Rate comparison logic (Math.Max selection)
  - Roaming detection (same/different AP, null handling)
  - Mesh device snapshot scenarios
- Add SnapshotIntegrationTests.cs with 17 integration tests covering:
  - Asymmetric wireless client paths
  - Mesh AP target paths with GetDirectionalRatesFromPath
  - Snapshot rate selection simulation
  - End-to-end path analysis
  - MLO client snapshot handling
- Add test fixtures: CreateAsymmetricWirelessClientPath, CreateMeshApTargetPath
@tvancott42 tvancott42 merged commit f4818b7 into main Jan 29, 2026
1 check passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants