v3.4.3 — packets dropped at the Runner on IPv6 DNS-over-TLS, radios lost on a network restart
- A packet with more than four fragments was dropped at the Runner (field, GT-BE98). The Runner's CPU
transmit path takes at most four page fragments per non-GSO packet (RUNNER_MAX_SG_FRAGS); the closed
bdmfrefuses the rest and the prebuiltenetdriver drops the packet, loggingskb->nr_frags N exceed max_sg_array 4, and the retransmit carries the same fragments and is dropped again. stubby writes small TLS
records to several upstreams from one thread, so once the upstream round trip is long - IPv6 DNS-over-TLS
through a 6in4 tunnel, any broker - a packet collects 5-10 fragments. The kernel now linearizes a non-GSO
packet with more thannet.core.reaper_tx_sg_max(4; 0 = stock) fragments before the driver sees it;
net.core.reaper_tx_sg_linearizedcounts how often. On an older imagenet.core.max_skb_frags=4is a
no-build workaround. Host testtest_kernel_runner_sg_cap.py;reaper_verifysection 28 checks the kernel
that was built. - 5 GHz and 6 GHz radios dead after a network restart with Dynamic puncturing on.
restart_net(an IPv6 or LAN change),allnet,net_and_phyandwps_enrtore the radios down without
stopping the radio readers - rpunctd arms a 4 s measurement window on every Dynamic radio each tick,
reaper_bwfloor and rchqd read every 15 s and 10 s - and never droppedwlready, so rpunctd's own guard was
blind; the wl1 and wl2 dongle firmware trapped seven seconds in and stayed down until a power cycle while
every client sat on 2.4 GHz. The readers now stop besidestop_acsd()in every teardown branch and in
restart_wireless, an armed window is waited out, and each reader also pauses on its own whilerc_service
names a radio-stopping service. Confirmed on the owner box: tworestart_net, radios up, no trap. A trapped
dongle cannot be revived from userspace (dhd devresetre-downloads the firmware and it traps again), so
prevention is the whole fix. Host testtest_wl_readers_quiesce.py. - Diagnostics v1.3.38. Section 15 reports the Runner cap,
max_skb_frags, the refused-packet lines (the
syslog count anchored on the kernel's own line) andtx_droppedper port; section 5 counts DNS-over-TLS
upstreams by family; section 7 names a radio that is on but whose driver has no adapter; 19b counts dongle
traps, lists the crash dumps by name and prints the restart that preceded each; the dmesg summary no longer
masks "exceed" as "N". Host testtest_diag_sanitizer.py.
Images & checksums (BQ16)
Two flashable images: + AI Advisor (default) and Standard (noMCP, all AI components compiled out entirely). Flash the *_nand_squashfs.pkgtb via Administration > Firmware Upgrade.
This is a beta release. Its filename carries
_BETAand the router reports the same string on the dashboard and the About page, so you can always tell which channel a flashed image came from. Stable releases carry no marker.
| Variant | File | SHA-256 |
|---|---|---|
| + AI Advisor | BQ16_3006_102.8_Reaper_v3.4.3_BETA_nand_squashfs.pkgtb
| 629e64858f35c108e492a1cd7fefaeae71e0b6b62ca6a8af9a10686f8f845b3c
|
| Standard | BQ16_3006_102.8_Reaper_v3.4.3_BETA_noMCP_nand_squashfs.pkgtb
| d08486fc0c961d6c45248aa40015d3df2950127f740693d96676700bbbdd2edb
|
Verify a download against the attached SHA256SUMS-BQ16-Reaper_v3.4.3.txt.
Corresponding source & reproducibility
The BQ16 image for v3.4.3-beta is built from this repository at tag v3.4.3-beta-BQ16: the pinned Asuswrt-Merlin base (3006.102.8-beta2, a7ebfa133a) plus the complete patch series. The tag freezes the exact source that produced it.
- Patches:
patches/ - Provenance record:
provenance/manifest.json - How to verify:
docs/REPRODUCIBILITY.mdanddocs/SOURCE-AVAILABILITY.md
The auto-attached Source code (zip/tar.gz) asset below is this repository at tag v3.4.3-beta-BQ16 (patches + docs).