Adding OpenWrt support for Xiaomi AX3600 (Part 1)

A question: does NAT offload support IPv6? If so, how to enable? I need this since my school has a weird network structure.🥲

1 Like

It should already work as there is IPv6 frontend enabled

1 Like

Unfortunately my lan attached devices are horribly slow with the current builds and I need to get back to stock. What is the actual procedure from within OpenWrt to get back to stock?

You are probably missing NSS offloading packages as this thing can route 1G NAT without any issues.

If you want to get back to stock, then simply flash the stock FW with ubiformat to both rootfs partitions, I would suggest using xqrepacked FW to preserve SSH, and have the call back home things disabled.

1 Like

Make sure to enable:

Network device
kmod-qca-nss-drv
kmod-qca-nss-dp
kmod-qca-nss-drv-pppoe (optional?)
kmod-qca-ssdk-nohnat

Network support
kmod-qca-nss-ecm

Firmware
nss-firmware-ipq8074

The NATing performance is pretty decent, I am able to max my 500Mbit/s connection. Before selecting those modules, I was limited to about 400Mbit/s.

I've only been running this for a few hours, so it's far too early to give proper feedback.
I can confirm that the European wireless regulatory data is messed up (e.g., cannot use channels above 11 in the 2.4Ghz). I also cannot use the 160Mhz channels in 5Ghz; I am assuming the issue is related, probably affecting the DFS.

I have two AX3600, one woks as the main router, while the other is just an AP. The system load is always near 1.00 in the main router, while the one that works just as an AP is near 0.00.

EDIT: I also did sysupgrade to flash the build with NSS enabled and it all went fine. Amazing work so far! :slight_smile:

2 Likes

PPoE is optional

Thanks for reminding me about the 1.0 load, that is due to NSS DRV polling statistics using non interruptable delays.
That can be easily solved, but I forgot about it completely.

Yeah, regulatory DB inside of the ath11k firmware is out of date, I have not found a solution for that.

2 Likes

Thanks a lot, unfortunately speed is still slow. I will test it with the stock firmware, maybe the cause is not OpenWrt but some stupid issue with my network storage...

thanks! I flashed it but it still boots up OpenWrt, probably I have to tell the system to boot from the other partition? How can I do this from within OpenWrt?

1 Like

Like I said, flash it to both rootfs partitions.
Ideally from OpenWrt initramfs, then after reboot it will boot from one, format the overlay etc.

Check the current boot partition:

root@AX3600:~# fw_printenv flag_boot_rootfs
flag_boot_rootfs=1

then switch to the other:

fw_setenv flag_last_success 0
fw_setenv flag_boot_rootfs 0
2 Likes

worked - thx!

transfer speed to my network storage is unfortunately much better with stock (nearly 100 MB/sec reading), while it was 70 MB/ with the the current build. I was wondering whether I have to enable the qss stuff somewhere in the config??

I also got this with dmesg:

[    7.860606] ffffffc00892f680: set sdma ffffff80030adb00
[    7.862379] ffffffc00892f680: meminfo init succeed
[    7.887562] qca-nss 39400000.nss: Direct firmware load for qca-nss1.bin failed with error -2
[    7.887602] qca-nss 39400000.nss: Falling back to sysfs fallback for: qca-nss1.bin
[    7.905362] node size 2 # items 4
[    7.905397] memory: 40000000 536870912 (avl 394989568) items 4 active_cores 2
[    7.907693] addr/size storage words 2 2 # words 4 in DTS, ddr size 1000000
[    7.914791] ffffffc00892f680: nss core 0 booted successfully
[    7.970180] nss_driver - fw of size 291560  bytes copied to load addr: 40800000, nss_id : 1
[    7.971206] Supported Frequencies - 
[    7.971214] 187.2 MHz 
[    7.977361] 748.8 MHz 
[    7.981176] 1.4976 GHz 

my router is an AX6 ...

Very sorry, just realized that enabling ecm is bad for performance (try doing a "rmmod ecm" when running OpenWRT to check that).

This is probably the culprit:
Network support
kmod-qca-nss-ecm (should be disabled?)

(many thanks to @dchard, who did all that testing in May)

1 Like

That makes no sense as ECM is what enables offloading

okidoki, will give it another try later :+1:

I am on a build from 3 days ago, and LAN speeds are OK. Must be a local issue at him.

C:\Users\Administrator\Desktop\Iperf_3.9>iperf3.exe -c 192.168.2.200
Connecting to host 192.168.2.200, port 5201
[  5] local 192.168.2.2 port 51018 connected to 192.168.2.200 port 5201
[ ID] Interval           Transfer     Bitrate
[  5]   0.00-1.00   sec   112 MBytes   937 Mbits/sec
[  5]   1.00-2.00   sec   111 MBytes   931 Mbits/sec
[  5]   2.00-3.00   sec   111 MBytes   931 Mbits/sec
[  5]   3.00-4.00   sec   110 MBytes   922 Mbits/sec
[  5]   4.00-5.00   sec   111 MBytes   930 Mbits/sec
[  5]   5.00-6.00   sec   110 MBytes   921 Mbits/sec
[  5]   6.00-7.00   sec   111 MBytes   932 Mbits/sec
[  5]   7.00-8.00   sec   110 MBytes   921 Mbits/sec
[  5]   8.00-9.00   sec   110 MBytes   921 Mbits/sec
[  5]   9.00-10.00  sec   111 MBytes   931 Mbits/sec
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval           Transfer     Bitrate
[  5]   0.00-10.00  sec  1.08 GBytes   928 Mbits/sec                  sender
[  5]   0.00-10.05  sec  1.08 GBytes   922 Mbits/sec                  receiver

iperf Done.

C:\Users\Administrator\Desktop\Iperf_3.9>iperf3.exe -c 192.168.2.200 -R
Connecting to host 192.168.2.200, port 5201
Reverse mode, remote host 192.168.2.200 is sending
[  5] local 192.168.2.2 port 51027 connected to 192.168.2.200 port 5201
[ ID] Interval           Transfer     Bitrate
[  5]   0.00-1.00   sec   113 MBytes   951 Mbits/sec
[  5]   1.00-2.00   sec   113 MBytes   949 Mbits/sec
[  5]   2.00-3.00   sec   112 MBytes   940 Mbits/sec
[  5]   3.00-4.00   sec   113 MBytes   949 Mbits/sec
[  5]   4.00-5.00   sec   113 MBytes   949 Mbits/sec
[  5]   5.00-6.00   sec   112 MBytes   940 Mbits/sec
[  5]   6.00-7.00   sec   112 MBytes   940 Mbits/sec
[  5]   7.00-8.00   sec   113 MBytes   949 Mbits/sec
[  5]   8.00-9.00   sec   113 MBytes   949 Mbits/sec
[  5]   9.00-10.00  sec   113 MBytes   949 Mbits/sec
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval           Transfer     Bitrate         Retr
[  5]   0.00-10.06  sec  1.10 GBytes   943 Mbits/sec    0             sender
[  5]   0.00-10.00  sec  1.10 GBytes   947 Mbits/sec                  receiver

The only issue is really the leak with ath11k :slight_smile:

I don't know why disabling ECM is performing better here, but even with ECM I am not seeing acceleration in the TX path of the nss-drv in one of my AX3600s. The most significant difference in the "problematic unit" is that I have configured two bridges, and one of the interfaces (eth3) is in br-new instead br-lan (along with wlan0). The other AX3600 is showing TX as expected.

I do admit that (in my case) I am not doing a proper LAN-LAN measurement (e.g., using iperf with two wired computers), but rather LAN-WLAN1; that introduces the extra variable that maybe the issue is with the radio and not the LAN performance (I'll have to test that later).

Nevertheless, enabling the ECM reproducibly lowers my transfers speeds to about 50MB/s (in the "problematic unit"), while disabling ECM (through rmmod) immediatly doubles my transfer speed to over 100MB/s (as is usually achievable in my location with my AX210 card). Units are MB/s because I'm measuring the goodput of a large file transfer from my NAS.

root@AX3600:~#  cat /sys/kernel/debug/qca-nss-drv/stats/ipv4

________________________________________________________________________________

<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< IPV4 >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
________________________________________________________________________________

        ipv4_rx_pkts           = 14062060        common
        ipv4_rx_byts           = 20298325314     common
        ipv4_tx_pkts           = 0               common
        ipv4_tx_byts           = 0               common
        ipv4_rx_queue[0]_drops = 0               drop
        ipv4_rx_queue[1]_drops = 0               drop
        ipv4_rx_queue[2]_drops = 0               drop
        ipv4_rx_queue[3]_drops = 0               drop
1 Like

Hm... It seems you are correct:

________________________________________________________________________________

<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< IPV4 >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
________________________________________________________________________________

        ipv4_rx_pkts           = 27727893        common
        ipv4_rx_byts           = 24408000066     common
        ipv4_tx_pkts           = 0               common
        ipv4_tx_byts           = 0               common
        ipv4_rx_queue[0]_drops = 0               drop
        ipv4_rx_queue[1]_drops = 0               drop
        ipv4_rx_queue[2]_drops = 0               drop
        ipv4_rx_queue[3]_drops = 0               drop

And I also see much higher CPU loads during LAN-LAN (wired) iperf3 tests then before...

MOD: as well as during PPPoE speedtests... Something is definitely not right. @robimarko do you have any idea what could this be? All of this worked fine before with minimal CPU load.

PPPoE stats:

root@XAX6:~# cat /sys/kernel/debug/qca-nss-drv/stats/pppoe

#pppoe base node stats start

        pppoe_rx_packets               = 11053678        common
        pppoe_rx_bytes                 = 6543668207      common
        pppoe_tx_packets               = 0               common
        pppoe_tx_bytes                 = 0               common
        pppoe_rx_dropped[0]            = 0               drop
        pppoe_rx_dropped[1]            = 0               drop
        pppoe_rx_dropped[2]            = 0               drop
        pppoe_rx_dropped[3]            = 0               drop

Both tx and rx worked before thats for sure.

Hm, no idea.
It's possible that a kernel update did this.

@Ansuel Any hints?

btw ECM doesn't work for me.

It crashes the router as soon as the pppoe connection is up.