Belkin RT3200/Linksys E8450 WiFi AX discussion

My understanding has been that QoS is incompatible with software and hardware offloading. Do you see any difference in your bufferbloat scores with offloading on or off?

Yes, offloading disables SQM, as my tests showed before. But, unlike SQM, qosify seems to work when offloading is used, because it showed limited download speed with normal snapshot builds even if offloading was selected. With this new "wed" build, the speed is not limited anymore, only the CPU is slightly busier with ~10%. Regarding the bufferbloat, I am not a specialist for testing this and it wasn't an issue for me before: the "classic" dslreports and waveform test sites usually reported A for the bufferbloat test.


Hi everyone this is really interesting, I only have fiber in 3 months I can't wait to test

but qosify is not sufficiently developed unlike the script we use with elan,

my video game is really perfect with its script while with qosify my game is really slow, I don't understand why

1 Like

hi all,
first time trying to use openwrt and have struggled to try to revert the belkin rt3200 router back to stock. I followed the steps in the github but when i get to the spot where it says:

mtd write /tmp/mtd0 /dev/mtd0

i keep getting a "Couldn't open image file: /tmp/mtd0!"

When I created the MTDx files from the openwrt backup page, i dont see the mtdx files (just the 4 Openwrt.mtdx.bin). Should that process be creating the "mtdx" files too? I also tried to copy/paste those mtdx files from the /dev folder and still got the error above.

Finally, I did go through all the steps with the errors above happening but when i restart (tried a few different methods) the router page is still openwrt and not the belkin stock one.

Have searched all through this thread and it has helped but i can't get it back to stock still. Any help appreciated, thanks

First of all, check the size of the files you got when making the backup via LuCI.
If the sizes look reasonable, upload the files via SCP and use their correct name when writing (/tmp/OpenWrt.mtdx.bin -> /tmp/mtdx).

1 Like

just did that now and followed the rest of the steps. it still loads into OpenWRT instead of the stock/Belkin screen. is there some other way of restarting the router? I've tried just a reboot, reboot + power cord out/in, reboot + power cord out/in + hold reset button. None of those 3 methods worked.

If you actually wrote valid backup files to the router, a power cycle will very certainly boot with what ever is in the flash then. Please double-check your backup files and be slow and careful with what you are doing, as mistakes can very easily brick the router.

1 Like

ok thanks.

i'm pretty sure these are valid. i barely have changed any settings within OpenWRT.

This was my latest ssh:

root@OpenWrt:~# ubidetach -d 0
root@OpenWrt:~# insmod mtd-rw i_want_a_brick=1
root@OpenWrt:~# mtd write /tmp/OpenWrt.mtd0.bin /dev/mtd0
Unlocking /dev/mtd0 ...

Writing from /tmp/OpenWrt.mtd0.bin to /dev/mtd0 ...
root@OpenWrt:~# mtd write /tmp/OpenWrt.mtd1.bin /dev/mtd1
Unlocking /dev/mtd1 ...

Writing from /tmp/OpenWrt.mtd1.bin to /dev/mtd1 ...
root@OpenWrt:~# mtd write /tmp/OpenWrt.mtd2.bin /dev/mtd2
Unlocking /dev/mtd2 ...

Writing from /tmp/OpenWrt.mtd2.bin to /dev/mtd2 ...
root@OpenWrt:~# mtd write /tmp/OpenWrt.mtd3.bin /dev/mtd3
Unlocking /dev/mtd3 ...

Writing from /tmp/OpenWrt.mtd3.bin to /dev/mtd3 ...
root@OpenWrt:~# mtd -p 0x200000 write /tmp/FW_RT3200_1.0.01.101415_prod.img /dev/mtd3
Unlocking /dev/mtd3 ...
Seeking on mtd device '/dev/mtd3' to: 2097152

Writing from /tmp/FW_RT3200_1.0.01.101415_prod.img to /dev/mtd3 ...
root@OpenWrt:~# client_loop: send disconnect: Connection reset

Capture d’écran 2022-01-04 à 22.55.22

i can see the option is add like i would like (qosify)

are they already available in the last snapshot? thanks

@Gix was right about CPU governor, it is not worth using "ondemand" (old) because it is obsolete and now it is replaced by "schedutil" (new) and you don't need to change the minimum frequency because the router boot after a reboot without problems.

I edited my previous post on how to change the CPU governor (Click)

Information about "schedutil" CPU governor:

"schedutil" is a new EAS governor found in recent versions of the Linux Kernel (4.7+) that aims to integrate better with the Linux Kernel scheduler. It uses the kernel's scheduler to receive CPU utilisation information and make decisions from this input. As a direct result, schedutil can respond to CPU load faster and more accurate than normal governors such as Interactive that rely on timers.

Most Linux distributions still aren't defaulting to the "performance" governor but either using the "ondemand" or with newer kernels is often using "schedutil".

The "schedutil" governor aims at better integration with the Linux kernel scheduler. Load estimation is achieved through the scheduler's Per-Entity Load Tracking (PELT) mechanism, which also provides information about the recent load [1].
This governor currently does load based DVFS only for tasks managed by CFS. RT and DL scheduler tasks are always run at the highest frequency. Unlike all the other governors.

For most workloads, the CPUFreq Schedutil governor on Linux 5.11 (once the recent frequency invariance patch lands, which was patched into our kernel build) tends to perform pretty close to the performance governor. There are some exceptions but improvements are being made.

CPU governor Schedutil now works as well as Performance for the games I've tried

I've been running my Ubuntu 2700x / Vega64 / Kernel 5.4 system on Performance mode for ages because it gave clear gaming benefits. I've been pleasantly surprised today to find that Schedutil now works just as well - but keeps my CPU clocked down when it's not busy.

This is nice. Give it a try fellow Performance CPU Governor people and maybe save some pennies on your electricity bills.


More information about CPU Governors:

P.S. "schedutil" (NEW) > "ondemand" (OLD)


The file sizes look correct. The only good explanation is that you must have done the backup after the device has already been flashed with OpenWrt, hence that's what you are restoring now.


Well, being a test version of course it isn't all perfect. The router crashed this morning, Here is the log if the developers need it:

<1>[ 7586.067092] Unable to handle kernel paging request at virtual address dead000000000110
<1>[ 7586.075021] Mem abort info:
<1>[ 7586.078011]   ESR = 0x96000004
<1>[ 7586.081070]   EC = 0x25: DABT (current EL), IL = 32 bits
<1>[ 7586.086380]   SET = 0, FnV = 0
<1>[ 7586.089574]   EA = 0, S1PTW = 0
<1>[ 7586.092812] Data abort info:
<1>[ 7586.095691]   ISV = 0, ISS = 0x00000004
<1>[ 7586.099546]   CM = 0, WnR = 0
<1>[ 7586.102617] [dead000000000110] address between user and kernel address ranges
<0>[ 7586.109774] Internal error: Oops: 96000004 [#1] SMP
<7>[ 7586.114752] Modules linked in: xt_connlimit pppoe ppp_async nf_conncount iptable_nat xt_state xt_nat xt_helper xt_conntrack xt_connmark xt_connbytes xt_REDIRECT xt_MASQUERADE xt_FLOWOFFLOAD xt_CT wireguard pppox ppp_generic nf_nat_tftp nf_nat_snmp_basic nf_nat_sip nf_nat_pptp nf_nat_irc nf_nat_h323 nf_nat_ftp nf_nat_amanda nf_nat nf_flow_table nf_conntrack_tftp nf_conntrack_snmp nf_conntrack_sip nf_conntrack_pptp nf_conntrack_netlink nf_conntrack_irc nf_conntrack_h323 nf_conntrack_ftp nf_conntrack_broadcast nf_conntrack_amanda nf_conntrack mt7915e mt7615e mt7615_common mt76_connac_lib mt76 mac80211 libchacha20poly1305 libblake2s ipt_REJECT chacha_neon cfg80211 xt_time xt_tcpudp xt_tcpmss xt_statistic xt_recent xt_multiport xt_mark xt_mac xt_limit xt_length xt_hl xt_ecn xt_dscp xt_comment xt_TCPMSS xt_LOG xt_HL xt_DSCP xt_CLASSIFY ts_kmp ts_fsm ts_bm slhc sch_cake poly1305_neon nf_reject_ipv4 nf_log_ipv4 nf_defrag_ipv6 nf_defrag_ipv4 libcurve25519_generic libchacha libblake2s_generic
<7>[ 7586.115171]  iptable_raw iptable_mangle iptable_filter ipt_ECN ip_tables hwmon crc_ccitt compat asn1_decoder sch_teql sch_sfq sch_red sch_prio sch_pie sch_multiq sch_gred sch_fq sch_dsmark sch_codel em_text em_nbyte em_meta em_cmp act_simple act_police act_pedit act_ipt act_csum libcrc32c cls_bpf act_bpf sch_tbf sch_ingress sch_htb sch_hfsc em_u32 cls_u32 cls_tcindex cls_route cls_matchall cls_fw cls_flow cls_basic act_skbedit act_mirred act_gact xt_set ip_set_list_set ip_set_hash_netportnet ip_set_hash_netport ip_set_hash_netnet ip_set_hash_netiface ip_set_hash_net ip_set_hash_mac ip_set_hash_ipportnet ip_set_hash_ipportip ip_set_hash_ipport ip_set_hash_ipmark ip_set_hash_ip ip_set_bitmap_port ip_set_bitmap_ipmac ip_set_bitmap_ip ip_set nfnetlink nf_log_ipv6 nf_log_common ip6table_mangle ip6table_filter ip6_tables ip6t_REJECT x_tables nf_reject_ipv6 ifb ip6_udp_tunnel udp_tunnel ntfs seqiv usb_storage leds_gpio xhci_plat_hcd fsl_mph_dr_of ehci_platform ehci_fsl ehci_hcd
<7>[ 7586.202590]  gpio_button_hotplug exfat
<7>[ 7586.292308] CPU: 1 PID: 7709 Comm: kworker/u4:2 Tainted: G S                5.10.87 #0
<7>[ 7586.300222] Hardware name: Linksys E8450 (UBI) (DT)
<7>[ 7586.305128] Workqueue: nf_ft_offload_stats nf_flow_rule_route_ipv4 [nf_flow_table]
<7>[ 7586.312709] pstate: 20000005 (nzCv daif -PAN -UAO -TCO BTYPE=--)
<7>[ 7586.318722] pc : nf_flow_offload_ip_hook+0xd88/0xf80 [nf_flow_table]
<7>[ 7586.325081] lr : nf_flow_offload_ip_hook+0xd9c/0xf80 [nf_flow_table]
<7>[ 7586.331431] sp : ffffffc0157a3c20
<7>[ 7586.334744] x29: ffffffc0157a3c20 x28: 0000000000000000 
<7>[ 7586.340063] x27: ffffff80054e1ec8 x26: 0000000000000000 
<7>[ 7586.345382] x25: ffffff80054e7a00 x24: ffffffc008d7b648 
<7>[ 7586.350701] x23: ffffffc0157a3d40 x22: 0000000000000002 
<7>[ 7586.356020] x21: ffffffc008d7b638 x20: 0000000000000000 
<7>[ 7586.361339] x19: dead0000000000f0 x18: 0000000000000000 
<7>[ 7586.366658] x17: 0001af94112ef4fe x16: 0001af94112ef4fe 
<7>[ 7586.371976] x15: 0000000000000006 x14: 0000000000000000 
<7>[ 7586.377295] x13: ffffffc008d7b540 x12: ffffffffffffffff 
<7>[ 7586.382614] x11: 0000000000000001 x10: ffffff8000005100 
<7>[ 7586.387932] x9 : ffffff8003d5517c x8 : 0000000000000000 
<7>[ 7586.393251] x7 : ffffffffffffffff x6 : 685c040000000000 
<7>[ 7586.398570] x5 : 0000000000000002 x4 : 0000000000000000 
<7>[ 7586.403888] x3 : ffffff80057f4200 x2 : 0000000000000000 
<7>[ 7586.409206] x1 : dead000000000100 x0 : 0000000000000001 
<7>[ 7586.414525] Call trace:
<7>[ 7586.416981]  nf_flow_offload_ip_hook+0xd88/0xf80 [nf_flow_table]
<7>[ 7586.422993]  nf_flow_rule_route_ipv4+0x764/0x81c [nf_flow_table]
<7>[ 7586.429005]  process_one_work+0x1d4/0x370
<7>[ 7586.433015]  worker_thread+0x180/0x4f0
<7>[ 7586.436767]  kthread+0x120/0x124
<7>[ 7586.439999]  ret_from_fork+0x10/0x18
<0>[ 7586.443584] Code: d1004013 eb0002bf 54000580 52800014 (f9401263) 
<4>[ 7586.449680] ---[ end trace 8e4e63fa6b3dada6 ]---
<0>[ 7586.476252] Kernel panic - not syncing: Oops: Fatal exception
<2>[ 7586.482009] SMP: stopping secondary CPUs
<0>[ 7586.485938] Kernel Offset: disabled
<0>[ 7586.489428] CPU features: 0x0000002,04002004
<0>[ 7586.493694] Memory Limit: none

LE: Another issue I've noticed, having an Android mobile phone and a Google Nest Hub 2nd gen, both connected to the same 5Ghz WLAN network. Using the "wed" testing version, the Google Home App saw all my devices fine, but when accessing the Nest Hub it said in a banner something like that "some settings are unavailable, check that your devices are on the same Wi-Fi network". Volume control and other functions worked OK, only the "restart device" function did not have any effect. Now I've reverted to the "master" version and the banner message disappeared and I can restart the Nest Hub from the Home App. Maybe this helps for further diagnosing.

1 Like

is there anyway to flash back to stock if this is the case?

Idle Power Usage Measured (Belkin RT3200)

Stock firmware

  • 4.9W when just plugged in out of the box (no setup complete). No ethernet connected.
  • 5.4W with two ethernet cables connected (1 LAN, 1 WAN).

OpenWRT firmware SNAPSHOT r18125-b764cb9e5b (dangowrt/linksys-e8450-openwrt-installer Release v0.6.1)

  • 4W when powered on but no ethernet connected and OpenWRT default settings.
  • 3.7W when powered on but no ethernet connected, after running echo "schedutil" > /sys/devices/system/cpu/cpufreq/policy0/scaling_governor.
  • 4.5W idle with two ethernet cables connected and OpenWRT default settings (1 LAN, 1 WAN).
  • 4.3W idle with two ethernet cables connected (1 LAN, 1 WAN), after running echo "schedutil" > /sys/devices/system/cpu/cpufreq/policy0/scaling_governor.

OpenWRT firmware SNAPSHOT r18470-cb85aea869 (5-1-2022)

  • 4.3W idle with two ethernet cables connected (1 LAN, 1 WAN), after running echo "schedutil" > /sys/devices/system/cpu/cpufreq/policy0/scaling_governor
  • 5.4W idle with two ethernet cables connected (1 LAN, 1 WAN), after running echo "schedutil" > /sys/devices/system/cpu/cpufreq/policy0/scaling_governor and WiFi radios (2.4Ghz and 5Ghz) enabled.


Forgot to enable the WiFi radio on OpenWRT, which was the reason the power usage on OpenWRT was lower than on stock firmware. With the schedutil governor power usage is about the same as on stock.


Interesting! According to your screenshot the CPU actually runs at 30Mhz most of the time. So does that mean 30Mhz actually works fine (in combination with schedutil) and doesn't need to be fixed as proposed in

I can confirm reboot works fine with schedutil without changing the minimum frequency.

1 Like

Anyone tested to see if this breaks SQM?

Yes, many have confirmed that 30 MHz seems to work, but consumes just as much energy as 300 MHz does and the label of that lowest frequency in mt7622.dtsi device tree also hints that 300MHz was intended there.


I made another pull request, which includes the 300mhz fix by @fda. Hopefully this one will be merged :slight_smile:

1 Like

Hi guys.. I'm usually a lurker but today i fucked up bad.

I was trying to install the snapshot on my RT3200.. everything was going swell 'til the part in the guide where you powercycle the router. I tried powercycling the router three times but it kept booting back up to the OpenWRT recovery.. I had a 'smart' idea. I decided to flash to the stock OEM firmware in the OpenWRT temp recovery in hopes that it would boot back to the oem firmware. But Alas, I believe i have a bricked RT3200 which just flashes twice every second now.

How do I unbrick? i'm going to run off tomorrow to Central Computers and buy a TTL to USB

1 Like

Hello everyone, I will be on a gigabit connection this afternoon at 2 p.m. in Switzerland, it is currently 11:30 a.m. at home,

Do you want me to carry out tests as a qosify example or the script I am currently using from elan or specific commands, I would write to you around 2:15 p.m. Swiss time when I was installed at my uncle's house he told me that he was fiberglass but I do not know if it is 1GO or 10go because it is possible in Switzerland thank you

@dlakelan @moeller0 @elan @daniel

1 Like