Divested-WRT: No-nonsense hardened builds for Linksys WRT series

 OpenWrt SNAPSHOT, r22702-cf8d861978
 -----------------------------------------------------
root@OpenWrt:~# cat /etc/config/wireless

config wifi-device 'radio0'
        option type 'mac80211'
        option path 'soc/soc:pcie/pci0000:00/0000:00:01.0/0000:01:00.0'
        option channel '36'
        option band '5g'
        option htmode 'VHT80'
        option country 'RO'
        option cell_density '0'

config wifi-iface 'default_radio0'
        option device 'radio0'
        option network 'lan'
        option mode 'ap'
        option ssid ''
        option encryption 'psk2'
        option macaddr '
        option key ''

config wifi-device 'radio1'
        option type 'mac80211'
        option path 'soc/soc:pcie/pci0000:00/0000:00:02.0/0000:02:00.0'
        option channel '11'
        option band '2g'
        option htmode 'HT40'
        option country 'RO'
        option legacy_rates '1'
        option cell_density '0'
        option noscan '1'

config wifi-iface 'default_radio1'
        option device 'radio1'
        option network 'lan'
        option mode 'ap'
        option ssid '
        option encryption 'psk2'
        option macaddr ''
        option key ''

root@OpenWrt:~# cat /sys/kernel/debug/ieee80211/phy1/mwlwifi/info
driver name: mwlwifi
chip type: 88W8864
hw version: 7
driver version: 10.3.9.0
firmware version: 0x0702091a
power table loaded from dts: no
firmware region code: 0x30
mac address: 
2g: enable
5g: disable
antenna: 4 4
irq number: 82
ap macid support: 0000ffff
sta macid support: 00010000
macid used: 00000001
radio: enable
iobase0: a023d05d
iobase1: 913fb359
tx limit: 768
rx limit: 256
qe trigger number: 74711
root@OpenWrt:~#

Just to be clear are you saying there are still latency issues with the wifi updates?

Before this update I had done some minor testing and found no difference with packet steering on or off. Are you sure it is making a difference to your wifi quality?

Still trying to decide if I should update.

When we have all the latest changes in and tested, it'd be good to summarize what other wifi related settings are recommended (and why). Would someone be able to put something like this together? Maybe it could then be added to the device wiki page?

Eg.
AMSDU on/off
Packet steering on/off
Others?

The General Section on the WRT3200ACM wiki page already cites two sources that suggest that enabling "packet steering" is beneficial to workaround hardware scheduling issues.

The WRT AC Series wiki page has a section about Latency with 88W8864 (WRT1200 and WRT1900 series only) recommending to disable AMSDU. But this was prior to the patches by jbsky (mlwifi 10.3.9.1). Hence why this needs more testing. I only have WRT3200ACM to test with.

3 Likes

Yes, I am sure packet steering makes a difference when testing with iperf3 the full throughput.. also see my post above and cited sources from the wiki page

1 Like

20230502-00

  • update to 6c9b526e84e73880eaf72cb656b5908bc5c3f792
  • downgrades mwlwifi to 20200206-3 due to increased latency
  • adds back the amdsu patch

for anyone building themself: to downgrade mwlwifi:

git revert --no-edit ab3f151aa874837ae1ac56d5b1cc31bb6cd68681
1 Like

Thank you @SkewedZeppelin

By the way, with divested-wrt-snapshot-r22652+11 and packet steering enabled, and sitting near the router, and doing iperf3 -t 30 -c wrt3200acm from a macbook pro 2019 connected at 1300mbps:

❯ iperf3 -t 30 -c 192.168.100.1
Connecting to host 192.168.100.1, port 5201
[  5] local 192.168.100.247 port 49800 connected to 192.168.100.1 port 5201
[ ID] Interval           Transfer     Bitrate
[  5]   0.00-1.00   sec  55.8 MBytes   468 Mbits/sec
[  5]   1.00-2.00   sec  84.6 MBytes   710 Mbits/sec
[  5]   2.00-3.00   sec  87.8 MBytes   737 Mbits/sec
[  5]   3.00-4.00   sec  86.8 MBytes   728 Mbits/sec
[  5]   4.00-5.00   sec  93.6 MBytes   784 Mbits/sec
[  5]   5.00-6.00   sec  92.8 MBytes   779 Mbits/sec
[  5]   6.00-7.00   sec  94.0 MBytes   790 Mbits/sec
[  5]   7.00-8.00   sec  92.3 MBytes   774 Mbits/sec
[  5]   8.00-9.00   sec  93.3 MBytes   782 Mbits/sec
[  5]   9.00-10.00  sec  92.1 MBytes   773 Mbits/sec
[  5]  10.00-11.00  sec  93.5 MBytes   784 Mbits/sec
[  5]  11.00-12.00  sec  91.1 MBytes   764 Mbits/sec
[  5]  12.00-13.00  sec  93.7 MBytes   787 Mbits/sec
[  5]  13.00-14.00  sec  90.1 MBytes   755 Mbits/sec
[  5]  14.00-15.00  sec  92.1 MBytes   774 Mbits/sec
[  5]  15.00-16.00  sec  91.9 MBytes   771 Mbits/sec
[  5]  16.00-17.00  sec  90.5 MBytes   759 Mbits/sec
[  5]  17.00-18.00  sec  91.9 MBytes   770 Mbits/sec
[  5]  18.00-19.00  sec  94.6 MBytes   793 Mbits/sec
[  5]  19.00-20.00  sec  92.0 MBytes   772 Mbits/sec
[  5]  20.00-21.00  sec  95.0 MBytes   797 Mbits/sec
[  5]  21.00-22.00  sec  92.9 MBytes   778 Mbits/sec
[  5]  22.00-23.00  sec  85.4 MBytes   717 Mbits/sec
[  5]  23.00-24.00  sec  84.1 MBytes   706 Mbits/sec
[  5]  24.00-25.00  sec  82.7 MBytes   693 Mbits/sec
[  5]  25.00-26.00  sec  84.9 MBytes   712 Mbits/sec
[  5]  26.00-27.00  sec  93.8 MBytes   787 Mbits/sec
[  5]  27.00-28.00  sec  86.9 MBytes   729 Mbits/sec
[  5]  28.00-29.00  sec  73.7 MBytes   618 Mbits/sec
[  5]  29.00-30.00  sec  77.2 MBytes   648 Mbits/sec
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval           Transfer     Bitrate
[  5]   0.00-30.00  sec  2.59 GBytes   741 Mbits/sec                  sender
[  5]   0.00-30.01  sec  2.59 GBytes   741 Mbits/sec                  receiver

iperf Done.

From Lenovo Thinkbook on the same table in front of the router connected at 1733Mbps (as I have 160Mhz enabled on the 5GHz band of the WRT3200ACM), I am getting consistently 1.0Gbps throughput with iperf3.

Impressive, no?

Thanks again @SkewedZeppelin for all your continued brilliant work on Divested-WRT!

I conducted my tests again with divested-wrt-snapshot-r22702+10

root@WRT3200ACM:~# cat /sys/kernel/debug/ieee80211/phy0/mwlwifi/tx_amsdu
tx amsdu: enable
root@WRT3200ACM:~# grep -A2 globals /etc/config/network
config globals 'globals'
	option ula_prefix 'fdff:c666:414c::/48'
	option packet_steering '1'

The best throughput I now get:

- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval           Transfer     Bitrate
[  5]   0.00-30.00  sec  2.54 GBytes   728 Mbits/sec                  sender
[  5]   0.00-30.01  sec  2.54 GBytes   728 Mbits/sec                  receiver

The worst throughput:

- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval           Transfer     Bitrate
[  5]   0.00-30.00  sec  2.33 GBytes   667 Mbits/sec                  sender
[  5]   0.00-30.02  sec  2.33 GBytes   666 Mbits/sec                  receiver

With old mlwifi (20200206-3)
--- 192.168.100.1 ping statistics ---
38 packets transmitted, 38 packets received, 0.0% packet loss
round-trip min/avg/max/stddev = 2.564/7.462/11.055/2.903 ms

With mlwifi 10.3.9.1-20230429
--- 192.168.100.1 ping statistics ---
38 packets transmitted, 38 packets received, 0.0% packet loss
round-trip min/avg/max/stddev = 2.310/4.677/10.057/3.014 ms

As you can see, with comparable configuration (both packet_steering enabled), and AMSDU enabled with latest mlwifi (vs AMSDU disabled in old mlwifi), I get a bit less throughput (666Mbps-728Mbps) vs old mlwifi (consistently 741Mbps), but I do get better latency.

Edit:
After wifi has been up for a little longer, further test of throughput shows better results with mlwifi 10.3.9.1 than the old mlwifi (20200206-3)

[ ID] Interval           Transfer     Bitrate
[  5]   0.00-30.00  sec  2.75 GBytes   789 Mbits/sec                  sender
[  5]   0.00-30.01  sec  2.75 GBytes   788 Mbits/sec                  receiver

@SkewedZeppelin I think it is worth giving mlwifi 10.3.9.1 another spin, because as you can see above, according to my tests, with packet_steering enabled and AMSDU on, and after leaving wifi stabilize for at least 15 minutes, I am getting better throughput and better latency indeed. :slight_smile:

Latency to router was unchanged when I was testing between old and new.
(ie. pinging the gateway like you demonstrate)

However latency of a connection actually passing through the bridge was for whatever reason significantly higher (40+ms added).
I was able to consistently reproduce higher latency on new mwlwifi with all other aspects the same.

edit: my testing is on wrt1900acsv2

1 Like

strange.. according to my tests through the bridge via Ookla speed test, I was getting comparable ping (5 to 6ms only).

Edit: my testing is on wrt3200acm EU (v1)

@SkewedZeppelin I am curious, with mlwifi 10.3.9.1 , if you disable AMSDU as suggested here, do you still experience the higher latency?

Yes, I tested new mwlwifi with amsdu enabled and disabled.
enabled does seem to be fixed at least per the original issue which was frequent latency spikes iirc

1 Like

strange also, as according to @jbsky's upstream PR408 , he shows he is using wrt1900ac v1.
I wonder if there are differences in terms of the bridge between wrt1900acs and wrt1900ac?

Where are the following packages:

  • luci-app-ddns
  • ddns-scripts
  • ddns-scripts-services
  • drill
  • curl
  • netdata

I want to have a working ddns client + netdata on my router.

When I installed snapshot r22652 on my 1900acs router, these packages were available to install.
When I installed snapshot r22702 they were not.
Snapshot r22706 I did not try yet.

What channel are you using for the 160Mhz? When I try to enable 160MHz I cannot connect to my wireless network at all.

@xopher channel 36, with "force" enabled (in luci device configuration in the top -> advanced -> it says "force 40mhz mode", but the option is universal for all channel width modes).
if you have EU version of the wrt3200acm router, you have to remove radio2

  1. opkg remove kmod-mwifiex-sdio kmod-btmrvl mwifiex-sdio-firmware
  2. remove the radio2 section from /etc/config/wireless
  3. keep both radio0 and radio1 country set to FR
  4. reboot
2 Likes

Appreciate the answer! Will try this on my wrt32x.

Any downside in removing radio2, and if not why is this not the default setting?

What do the "kmod-mwifiex-sdio", "kmod-btmrvl" and "mwifiex-sdio-firmware" modules refer to, specifically radio2?