Repository navigation
v1.22.0
v1.22.0 — 负载延迟探测 + 过热保护
亮点
负载延迟探测(缓冲膨胀,诚实边界版)
总览页新增「缓冲膨胀」卡:一键测"空闲延迟 vs 负载下延迟",8 流 CDN 下载产生真实下行负载,同窗 ping 采样,差值 + 负载规模(load_mbps)一起落盘。
- 负载不足(<50Mbps)时判
weak并明示"结果仅供参考"——直接来自实测教训:负载没拉起时 0ms 差值是假阴性 - 判定分级:稳定(<10ms) / 轻度(<30) / 中度(<100) / 重度(≥100)
- 诚实边界:CDN 单流被恒限 ~24Mbps,本机 8 流负载上限 ~200Mbps——千兆线路上本探测验证的是整形健康度与容量下界,不是满载 bufferbloat(满载需 flent 式外部负载源)。README 与脚本头均如实写明
过热保护(thermal guard)
netsteer-check(每分钟 cron)采样最热温区:
- 数值落
/tmp/netsteer/health.json(内存盘,每分钟写不伤 flash;跨阈值事件才写 uci/log) - ≥85°C:日志告警,10 分钟防刷屏
- ≥95°C:自动降档 steering(过热保护优先于吞吐),事故日志落
/etc/netsteer/incidents/thermal-*.log;温度回落不自动升档(宁漏勿误),UI 提示手动恢复 - 总览页新增「设备温度」卡:正常绿 / 偏热(≥85°C)无色 / 过热(≥95°C)红
其他
netsteer-audit新增health(温度)、mtu_fix(MSS 钳制检出)、bloat(探测结果透传)字段- rpcd ACL 白名单新增
netsteer-bloat - 修复:
for z in firewall.@zone[*]被 shell glob 吞掉导致 mtu_fix 恒 0(改 uci show 解析)
真机验证(R5C aarch64)
- 正常态:8 流负载 159Mbps,idle 5ms → loaded 6ms,bloat 1ms =
ok(cake 整形工作正确的判定) - SQM 关闭态:116Mbps 负载无整形,无排队 →
ok(不满载不误报,宁漏勿误) - 温度监测:health.json 实时更新(46°C),UI 温度格渲染正确
- 单测 431 全绿(含 bloatMeta/tempMeta 18 项新断言)/ e2e 18 项全绿 / doctor VERDICT OK
Full Changelog: v1.21.0...v1.22.0
v1.22.0 — Loaded-latency probe + thermal guard
Highlights
Loaded-latency probe (bufferbloat, honest-boundary edition)
New "Bufferbloat" card on the dashboard: one tap measures idle latency vs loaded latency. An 8-stream CDN download generates real downstream load, ping samples the same window, and both the delta and the measured load (load_mbps) are persisted.
- When load fails to ramp (<50 Mbps) the verdict is
weakwith an explicit "reference only" note — a direct lesson from field testing: a 0 ms delta with no load is a false negative - Verdict tiers: stable(<10ms) / light(<30) / mid(<100) / severe(≥100)
- Honest boundary: CDNs rate-limit each stream to ~24 Mbps; on-device 8-stream load tops out around 200 Mbps — on gigabit links this validates shaping health and a capacity lower bound, not full-saturation bufferbloat (which needs flent-style external load). Stated plainly in both READMEs and the script header.
Thermal guard
netsteer-check (per-minute cron) samples the hottest thermal zone:
- Values go to
/tmp/netsteer/health.json(tmpfs — per-minute writes never touch flash; uci/log writes only on threshold crossings) - ≥85°C: logged warning with 10-minute anti-spam
- ≥95°C: auto-downgrade to the steering profile (thermal protection beats throughput), incident log at
/etc/netsteer/incidents/thermal-*.log; no auto-restore on cooldown (better-silent-than-wrong) — the UI tells you when to re-enable - New "Device temperature" card on the dashboard: green normal / plain ≥85°C / red ≥95°C
Other
netsteer-auditgainshealth(temperature),mtu_fix(MSS-clamp detection),bloat(probe passthrough)- rpcd ACL whitelist adds
netsteer-bloat - Fixed:
for z in firewall.@zone[*]swallowed by shell globbing made mtu_fix always 0 (now parsed via uci show)
Device verification (R5C aarch64)
- Normal: 8-stream load at 159 Mbps, idle 5 ms → loaded 6 ms, bloat 1 ms =
ok(correct reading for healthy cake shaping) - SQM off: 116 Mbps load unshaped, no queueing →
ok(no false alarm on an unloaded link) - Thermal: health.json live updates (46°C), UI card renders correctly
- 431 unit tests green (18 new bloatMeta/tempMeta assertions) / 18 e2e checks green / doctor VERDICT OK
Full Changelog: v1.21.0...v1.22.0
Download the .apk matching your device architecture (check /etc/apk/arch on the router).
Install (OpenWrt 24.10+/25.12):
apk add --allow-untrusted /tmp/luci-app-netsteer-*.apk
Built automatically by CI from this tag — unit tests + 4-arch build matrix.
Every package is verified with apk verify before it is attached.