Overview & LuCI (RU/EN)Полный гайд (RU)Скрипты / ToolkitTFTP UnbrickРазбор 19 проблем (RU)Post-Mortem (EN)ReleasesWiki

Field Post-Mortem: All 19 Real-World Bugs on Tenda AC10 V1.0, 2000 MB Stress Test & r3 Roadmap

This is the unfiltered engineering log from bringing up, stress-testing (2000 MB heavy payload + concurrent iPhone Wi-Fi load), and operating Hybrid OpenWrt 4.14.187 and Stock+ (V15.03.06.23) on a live Tenda AC10 V1.0 (Realtek RTL8197FS-VE5 + RTL8822BE + RTL8367RB-VB) behind a MAC-locked residential ISP. Every fix below is baked into build_hybrid_openwrt_ac10.sh and offline_autonomous_tools/, and the remaining hardware bottlenecks uncovered under stress are tracked in the r3 roadmap below.


Summary Table: What Broke, Why It Happened & What Fixed It (Bugs #1–#19)

# Area What Happened on Real Hardware Root Cause Status in r2 / Stock+ & r3 Plan
1 Flash / RAM & V2/V3 Trap OOM panics on 128 MB builds; hard-bricked V2.0/V3.0 boards V1.0 physically has 8 MB SPI NOR (W25Q64FV, 0xEF4017) and 64 MB DDR2 inside the SoC package; V2/V3 use RTL8197FH (2 MB Flash, eCos) Fixed 8 MB partition map (0x7B0000 firmware slot) & 64 MB RAM tuning; hard revision check (Ver: V1.0, V15.03.06.xx)
2 Realtek Booter AutoBurn (0x80001C2C) Flashing a 2-segment image silently wiped mtd0 bootloader Branch delay-slot bug (move $s7, $s2 while $s2=0) resets the 2nd segment's flash target to 0x00000000 Single-segment monolithic cs6c image (burnAddr = 0x00030000, 16-bit BE sum 0x0000)
3 TFTP Recovery (192.168.1.6) ping 192.168.1.6 never replies; blue WAN jack stays dead in recovery Parser at 0x80001010 drops every non-UDP (!= 0x11) packet (zero ICMP code); 0x8000ED48 powers down WAN Port 3 PHY Plug into yellow LAN 1–3, detect readiness via ARP (50:0F:F5:00:00:01), push straight to 192.168.1.6:69/UDP
4 Stock Tenda Web Upgrade Stock UI rejects standard OpenWrt images with "Format error!" check_fw_valid() in libcommon.so requires a 64-byte trx2 U-Boot header (0x27051956, ih_os=2, ih_ver=0x00030028 for AC10) Dedicated webupgrade.bin wrapped in the exact 64-byte trx2 header (also accepted by TFTP AutoBurn)
5 RTL8367RB Switch & Odd WAN Port Dead Ethernet ports and broken WAN VLAN on D-Link DIR-842 builds AC10 V1.0 wires blue WAN to odd Port 3 (mask 0x08), LAN 1–3 to Ports 2..0 (0x07), reset to GPIO 58; odd-port PVID wrote [15:0] instead of [31:16] Custom tenda-ac10-v1.dts (&gpio1 26), 9 MIPS32 LE binary patches in vmlinux, and +0x4000 lzma-loader shift
6 First Boot: Read-Only Overlay & Failsafe Settings wiped on reboot; occasional boot hang in failsafe Leftover stock Tenda SquashFS XZ bytes in mtd5 block JFFS2 creation; floating GPIO 6 (WPS) triggers false failsafe Auto-erase foreign headers in /lib/preinit/80_mount_root + pi_preinit_no_failsafe="y" in 00_preinit.conf
7 5 GHz RTL8822BE: Blank eFuse & VHT80 Drops -17 dB weak signal, INTERFACE_CREATION_FAILED, link drops every 2–11s at 80 MHz Unburned OTP eFuse (0xFF) leaves xtal_cap=0 and Skyworth SE5003L1 eFEM unpowered (RFE 0); B-cut chip times out polling RF reg 0x33 in VHT80 ELF relocation patch in rtw88_8822b.ko for RFE Type 6, mtd1 XCAP/MAC injection via /bin/set-mib.sh, PCIe-pinned wlan1, stable VHT20 ch36 (23 dBm) default
8 hwnat=1 Wi-Fi -> WAN Blackhole Wired PC gets 940 Mbps while phones on Wi-Fi say "Connected, no internet" rtl819x_hwnat ASIC TLU drops software-bridged frames crossing br-lan (wlan1 -> eth0.1) Default hwnat=0 + firewall.flow_offloading='1' (~350–500 Mbps wired) while keeping role='router' & fabric_autoreset=3
9 Cold-Boot Cloned WAN MAC Race Unplugging power broke WAN routing on MAC-locked ISPs wait_netif_mac() in dir842-asic waited only for eth0.2 (LAN) and ran gw_prog before netifd applied cloned network.wan.macaddr to eth0.1 Updated wait_netif_mac() to wait for both eth0.2 and eth0.1 before gw_prog, plus executable S99asic-wifi-settle
10 iPhone / Mac DNS Warning & 20s Stalls Slow initial page loads & yellow "This network is blocking encrypted DNS traffic" warning Default ula_prefix IPv6 stalls Happy Eyeballs on IPv4 ISPs; advertising 192.168.0.1 first fails Apple RFC 9462 DDR TLS cert checks Removed ula_prefix, disabled ra/dhcpv6, set DHCP Option 6,1.1.1.1,8.8.8.8,192.168.0.1 (instant HTTP/3 QUIC DoH to 1.1.1.1:443)
11 Shared /24 ISP VLAN Exposure & AP/Bridge Mode Sockets exposed on WAN during reloads; hardcoded LAN IP breaks LuCI in AP/Bridge mode Default dnsmasq listens on WAN; static IP binding prevents managing router on non-default subnets Socket & firewall lockdown: dnsmasq notinterface='eth0.1', uhttpd listens on 0.0.0.0:80 & [::]:80 with rfc1918_filter='1', WAN eth0.1 port 80 dropped
12 2.4 GHz TX Power & uTP Torrent Load Short 2.4 GHz range; latency spikes during heavy BitTorrent swarms Donor DIR-842 rtl8192cd.ko lacks SKY85303-11 (Type 5) PA tables; uTP floods conntrack and BK_QUEUE manual_edca=1 + mtd1 calibration, nf_conntrack_max=16384, udp_timeout=60, plus CONFIG_PA_SKYWORKS_85303=y prepared for source rebuilds
13 mtd1 Colon Corruption & GPIO 59–62 Hang Editing MAC with colons breaks mtd1; probing GPIO > 58 freezes CPU HW_NIC0_ADDR= (0x2086F) is 12 raw hex bytes without colons; GPIO 59–62 (GPIO 61) share pinmux 0xB8000820 with SPI NOR Flash Enforced 12-hex colon-free tooling; documented strict ban on touching GPIO 59–62 (GPIO 58 is valid switch reset)
14 Offline Post-Flash ISP Setup No internet after flash until cloned MAC & WAN settings are typed in Fresh OpenWrt boots with factory MAC; 64 KB log buffer rolled over too fast 1-click offline Configure_OpenWrt_ISP_WAN_and_WiFi.bat/.ps1 (RouterCfm.cfg -> SSH UCI) + log_size='256'
15 ~40 Mbps 5 GHz Wi-Fi Cap on iPhone in OpenWrt (VHT20) iPhone 5 GHz throughput tops out at ~40 Mbps instead of the 200+ Mbps ISP tier Locking VHT20 (20 MHz, 1x1 PHY 58.5–86.7 Mbps) caps TCP at ~40–45 Mbps, while enabling VHT80/VHT40 in rtw88_8822be triggers RX/EAPOL deafness on B-cut silicon Stock+ (V15.03.06.23) vendor rtl8192cd driver runs full VHT80 (80 MHz, 866.7 Mbps PHY, 200+ Mbps real TCP); r3 roadmap targets porting vendor rtl8192cd / HalMac VHT80 sequence
16 Switch FABRIC WEDGE (SIRR FULL_RST) Under 2000 MB + Wi-Fi Load During sustained 2000 MB downloads + concurrent Wi-Fi load, Wi-Fi freezes for ~2s every 20–60s With hwnat=0, single-core MIPS 24Kc saturates on PCIe (rtw88) + NAPI softirqs; internal RTL8197F switch RX-FIFO lags (large-frame FCS fail=54..152) and dir842_sw_watchdog triggers SIRR FULL_RST Stock+ (V15.03.06.23) uses hardware fastpath + rtl_hw_qos + RGMII flow control (zero resets at any load); r3 roadmap adds 802.3x Pause & L2/L3 bridge fastpath
17 In-OS mtd -r write ... firmware Abort & Auto-TFTP Fallback Writing 2-segment stock (cr6c+hsqs, 7.59 MB) via live mtd write inside OpenWrt aborts mid-way OpenWrt mtd2 (firmware) overlaps mounted SquashFS mtd4 (0x1D9900) and JFFS2 mtd5; erasing 0x1D9900 faults the running mtd binary On partial hsqs checksum failure (0x8000D844), Realtek Booter v3.4.11B.9 automatically enters TFTP mode (192.168.1.6:69) without holding RST; flash via Offline_TFTP_Recovery_and_Flash.bat
18 Multi-Homed PC Routing Trap (Phone Tether + Ethernet) When tethering internet from iPhone (172.20.10.1) while flashing via Ethernet, packets route to the phone (Destination host unreachable) During router reboot, Ethernet briefly falls back to APIPA (169.254.x.x) and Windows routes 192.168.0.1 / 192.168.1.6 to the default gateway (172.20.10.1) Updated Offline_TFTP_Recovery_and_Flash.ps1 with explicit interface routing and 15-second step-by-step SPI flash burn progress feedback
19 False HttpRequestException on /cgi-bin/UploadCfg Reboot Restore_Optimized_Config_and_WAN.ps1 threw a socket exception right after uploading RouterCfm.cfg even though Stock+ applied cleanly Stock Tenda httpd writes /dev/mtd6 and calls sys_reboot() immediately inside /cgi-bin/UploadCfg, resetting the TCP socket before HTTP response close Patched Restore_Optimized_Config_and_WAN.ps1 to recognize connection-reset-on-reboot after authenticated POST as [PASS]

Deep Dive on the Hardest Bugs

1. Realtek Booter v3.4.11B.9: Delay-Slot Self-Destruct ($s7=0), No Ping & Dead WAN Jack

2. Odd WAN Port 3 & Nine Surgical Kernel Patches (RTL8367RB-VB)

D-Link DIR-842 R1 puts WAN on even Port 4; Tenda AC10 V1.0 wires WAN to odd Port 3 and LAN 1..3 to Ports 2, 1, 0 (reset on GPIO 58 / &gpio1 26). Upstream PVID setup wrote odd-port PVID bits into [15:0] instead of upper halfword [31:16]. build_hybrid_openwrt_ac10.sh applies 9 MIPS32 LE patches across vmlinux (LAN=0x107, WAN=0x108, GW_JACK_WAN=3, sll $a1, $a1, 16, L2 masks 0x08/0x07) and shifts lzma-loader .data/.bss/_stack by +0x4000 to fit the DTB-patched kernel cleanly.

3. Blank 0xFF eFuse, Skyworth SE5003L1 (RFE Type 6) & Why Default Is VHT20

Tenda shipped the RTL8822BE PCIe card with an unprogrammed OTP eFuse (0xFF). Unpatched rtw88 defaulted to xtal_cap=0 and rfe_option=0 (-17 dB signal loss with external Skyworth SE5003L1 PA/LNA bypassed), and at VHT80 on this B-cut silicon backports-5.8 periodically timed out polling RF register 0x33 in rtw8822b_config_trx_mode, dropping clients every few seconds. Extending .rodata + .rel.rodata in rtw88_8822b.ko with rfe_info[6] (rtw8822b_config_rfe_efem, BB regs 0x82C/0x830/0x838/0x83C), injecting unit-specific HW_WLAN0_11N_XCAP + MAC via /bin/set-mib.sh, and defaulting to VHT20 Channel 36 (23 dBm) gave rock-solid 5 GHz uptime with zero drops.

4. Concurrent Wired + Wi-Fi (hwnat=0 + Flow Offloading) & Cold-Boot WAN MAC Sync

With hwnat=1, wired NAT hits 940 Mbps at 0.5% CPU, but the ASIC TLU drops software-bridged Wi-Fi packets crossing br-lan (wlan1 -> eth0.1). Shipping hwnat=0 + firewall.@defaults[0].flow_offloading='1' (while keeping dir842.asic.role='router' and fabric_autoreset=3) gives ~350–500 Mbps across wired and Wi-Fi simultaneously out of the box, while wired-only gigabit users can flip echo 1 > /sys/module/rtl819x/parameters/hwnat anytime. We also patched wait_netif_mac() in /etc/init.d/dir842-asic to wait for both eth0.2 and cloned eth0.1 MACs before running gw_prog on cold boot.

5. Apple iOS Encrypted DNS (RFC 9462 DDR) & Socket Isolation

Deleting OpenWrt's default unrouted ula_prefix and setting DHCP Option 6,1.1.1.1,8.8.8.8,192.168.0.1 lets iPhones and Macs immediately negotiate HTTP/3 QUIC DoH with 1.1.1.1:443 — eliminating both the 20-second IPv6 Happy Eyeballs stall and iOS's yellow "This network is blocking encrypted DNS traffic" warning. Finally, dnsmasq is isolated with notinterface='eth0.1', while uhttpd binds to wildcard sockets 0.0.0.0:80 and [::]:80 protected by RFC 1918 private network filtering (rfc1918_filter='1') and an explicit firewall DROP rule on WAN eth0.1 port 80. This eliminates exposure on shared ISP /24 segments while preserving seamless access to LuCI when the router is configured in Access Point (AP) or Bridge mode across any private LAN subnet.

6. Live 2000 MB Heavy-Load Stress Test & iPhone VHT20 vs VHT80 Findings (Bugs #15–#19)

Running a sustained 2000 MB multi-stream download test alongside concurrent iPhone 5 GHz Wi-Fi traffic revealed the exact hardware/driver boundary between Hybrid OpenWrt 4.14.187 (r2) and Stock+ (V15.03.06.23):

  1. 5 GHz Wi-Fi Speed Cap (~40 Mbps on OpenWrt VHT20 vs 200+ Mbps on Stock+ VHT80):
  2. In Hybrid OpenWrt 4.14 (r2), rtw88_8822be (backports-5.8) is locked to VHT20 (20 MHz) because switching B-cut silicon on the RTL8197FS PCIe root complex into VHT80 (80 MHz) or VHT40 breaks secondary-channel CCA/RX ring state (clients either stall on 4-way WPA2 EAPOL or suffer RX deafness). At VHT20 (58.5–86.7 Mbps 1x1 PHY), real TCP throughput on an iPhone ceilings at ~40–45 Mbps.
  3. In Stock+ (V15.03.06.23), Realtek's monolithic rtl8192cd driver with native HalMac and full RFE Type 6 (Skyworth SE5003L1) tables runs VHT80 (80 MHz, 866.7 Mbps 2x2 PHY) rock-solid, delivering full 200–450+ Mbps over 5 GHz Wi-Fi.

  4. Periodic 2-Second Wi-Fi Stalls Under Heavy Load in OpenWrt (FABRIC WEDGE / SIRR FULL_RST):

  5. During the 2000 MB stress test with hwnat=0, the single-core MIPS 24Kc (1 GHz) handles both rtw88_8822be PCIe interrupts and eth0 NAPI in software.
  6. Under heavy burst load, CPU Port 6 (CPU_PORT) of the internal RTL8197F switch core experiences RX-FIFO drain lag on 1518-byte frames arriving from RTL8367RB (Port 0 RGMII), incrementing dot3StatsFCSErrors (large-frame FCS fail=54..152). Every 20–60 seconds, dir842_sw_watchdog triggers recovery level 3 (SIRR FULL_RST), resetting the switch fabric and flushing the L2 MAC table for ~2 seconds.
  7. In Stock+ (V15.03.06.23), kernel fastpath + rtl_hw_qos + RGMII flow control (802.3x Pause) keep CPU utilization <15% with zero FABRIC WEDGE events under multi-gigabyte loads.

  8. In-OS mtd -r write ... firmware Abort & Automatic Bootloader TFTP Recovery (192.168.1.6):

  9. Writing the 2-segment factory image (cr6c+hsqs, 7.59 MB) directly to /dev/mtd2 (firmware, 0x030000..0x7E0000) from inside running OpenWrt erases the mounted SquashFS rootfs (mtd4 at 0x1D9900), causing the running mtd process to fault mid-write.
  10. Key Recovery Discovery: When hsqs is only partially written, Realtek Booter v3.4.11B.9 (0x000000) fails check_rootfs_image (0x8000D844) on cold boot and automatically enters TFTP recovery mode at 192.168.1.6:69 WITHOUT needing to hold the physical RST button! Running Offline_TFTP_Recovery_and_Flash.bat immediately pushes Tenda_AC10_V1_Stock_TFTP_Recovery.bin in 4.2 seconds.

Completed Engineering Milestones in Hybrid OpenWrt 4.14.187 r3 (v4.14.187-r3-ac10-hybrid — Completed ✅)

Phase 1. Autonomous Recovery & Multi-Homed Tooling Hardening (Completed ✅)

Phase 2. Full VHT80 (80 MHz, 200+ Mbps) 5 GHz Support in OpenWrt r3 (Completed ✅)

Phase 3. Eliminating FABRIC WEDGE (SIRR FULL_RST) Under 2000+ MB Load in OpenWrt r3 (Completed ✅)

Phase 4. In-OS ramfs Rollback (OpenWrt -> Stock+) Without TFTP