Ipq806x NSS build (Netgear R7800 / TP-Link C2600 / Linksys EA8500)

The DSA performance seems to be pretty good. :sunglasses: Thank you for the kind words!

i can't say the same for tp-link onhub (as dumb ap)

Connecting to host, port 5201
[  5] local port 55638 connected to port 5201
[ ID] Interval           Transfer     Bitrate         Retr  Cwnd
[  5]   0.00-1.00   sec  67.6 MBytes   567 Mbits/sec    0    270 KBytes       
[  5]   1.00-2.00   sec  17.1 MBytes   144 Mbits/sec    0    344 KBytes       
[  5]   2.00-3.00   sec  50.4 MBytes   423 Mbits/sec    0    344 KBytes       
[  5]   3.00-4.00   sec  45.2 MBytes   379 Mbits/sec    0    344 KBytes       
[  5]   4.00-5.00   sec  47.5 MBytes   398 Mbits/sec    0    344 KBytes       
[  5]   5.00-6.00   sec  62.9 MBytes   528 Mbits/sec    0    433 KBytes       
[  5]   6.00-7.00   sec  48.2 MBytes   405 Mbits/sec    0    433 KBytes       
[  5]   7.00-8.00   sec  33.9 MBytes   284 Mbits/sec    0    551 KBytes       
[  5]   8.00-9.00   sec  32.2 MBytes   270 Mbits/sec    0    551 KBytes       
[  5]   9.00-10.01  sec  63.2 MBytes   529 Mbits/sec    0    551 KBytes       
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval           Transfer     Bitrate         Retr
[  5]   0.00-10.01  sec   685 MBytes   574 Mbits/sec    0             sender
[  5]   0.00-10.01  sec   685 MBytes   574 Mbits/sec                  receiver

iperf Done.

13.10 is PC with cable as server, the onhub itself as client.
but with -R its OK.

Please don't run iperf3 on the router.

even as a client? only trying to measure the port lan speed
how to test the connection using cable, then?

Neither as client, nor as server - always test the throughput through the router, because that's
a) the only thing you really care about
b) what the router is optimized to do

See my notes: HOW-TO iperf3 throughput testing

1 Like

Has anyone successfully built a firmware image with NSS support for the OnHub routers? With the 23.05.3 files?

The performance of the normal builds have been grossly downplayed in this thread. But they have always matched or surpassed the nss builds in both wifi and routing speeds (with a little more cpu usage).

In the end, it really just comes down to how important sqm is to you, and espescially for those that have 400+mbit speeds. Then again, if you have those kind of speeds, the effects of bufferbloat are less of an issue. And then you had the various stability issues that have plagued the nss builds.

But yeah, I get it. Unlocking hidden powers for free and all that😎


I have just switched to this FW from stock as was only getting 300mbps max download on my 500mbps plan.

Good news, can hit 500mbps now :grinning:

I've hit a problem though, I don't seem to be able to connect to my self hosted websites using the external DNS name for the service, the browser just hangs waiting for a response.

For example I host homeassistant and nextcloud, eg. they have public DNS names of homeassistant.mydomain.com and nextcloud.mydomain.com

From a local LAN machine I would normally connect to https://homeassistant.mydomain.com but this now just hangs, I have to use the internal IP address eg

I didn't have this issue with the previous stock FW so guess I may be missing a setting?


ps. if I am connected remotely (WAN not LAN) I can access https://homeassistant.mydomain.com no problem

Did you try what's written in the second post?

1 Like

Much appreciated, I missed that! :+1:

Is this project dead? I see no new builds for months already :frowning:

I have stopped building because ipq806x NSS is not compatible with DSA in master and the soon to be next stable branch (24.xx?). The newer wifi 6 devices offer substancial performance benefit and I’ve jumped to the GL-MT6000.

If you would like to replicate a 23.05 build you can using the instructions in post #2 above.

here some comments from my work. the problem with the poor performance on nss is a design flaw of nss at all. nss has just one queue for eth0 and eth1. so standard nss gmac driver uses one napi thread (depending how you use it) and just a single cpu core for handling all the traffic on network stack side (i speak only for the case if you forward standard lan to wan traffic but not wifi nss forwarding). but with the stmmac driver you use 2 different napi queues individually for each interface which can be handled on individual cpu cores. this is not possible with nss without a redesign of the driver. i'm still thinking about a proper solution here and still playing with it for finding the best solution.


This fixes build on latest kernel, I already have builds up and running it on my unit.

diff --git a/target/linux/ipq806x/patches-5.15/999-300-qca-mcs-support.patch b/target/linux/ipq806x/patches-5.15/999-300-qca-mcs-support.patch
index 2353929c97..aafc902f68 100644
--- a/target/linux/ipq806x/patches-5.15/999-300-qca-mcs-support.patch
+++ b/target/linux/ipq806x/patches-5.15/999-300-qca-mcs-support.patch
@@ -42,7 +42,7 @@
  int nbp_backup_change(struct net_bridge_port *p, struct net_device *backup_dev);
  /* br_input.c */
-+int br_pass_frame_up(struct sk_buff *skb); /* QCA qca-mcs support */
++int br_pass_frame_up(struct sk_buff *skb, bool promisc); /* QCA qca-mcs support */
  int br_handle_frame_finish(struct net *net, struct sock *sk, struct sk_buff *skb);
  rx_handler_func_t *br_get_rx_handler(const struct net_device *dev);
@@ -124,8 +124,8 @@
        return netif_receive_skb(skb);
--static int br_pass_frame_up(struct sk_buff *skb)
-+int br_pass_frame_up(struct sk_buff *skb)
+-static int br_pass_frame_up(struct sk_buff *skb, bool promisc)
++int br_pass_frame_up(struct sk_buff *skb, bool promisc)
        struct net_device *indev, *brdev = BR_INPUT_SKB_CB(skb)->brdev;
        struct net_bridge *br = netdev_priv(brdev);

But his test only mentions wifi, thus not clear if the gain comes from dsa or ath10k+mac changes. When I switched to dsa on my non nss unit dsa was slower.


Why aren't NSS drivers in some kind of package you can add in the Firmware Selector when building an image? Or something you can add on later with opkg install NSSdrivers or something like that?

because nss requires massive kernel patches and a different ethernet driver. technically its possible to run classic and nss mode side by side. i made this for the dd-wrt implementation. but the problem is that nss drivers arent compatible with the dsa switch drivers due the nature how it works. but even this can be resolved but means that you need different network scripts for each implementation within openwrt. i dont think that this will happen

It worked after removing CONFIG_PACKAGE_kmod-qca-mcs=y, otherwise it fails to compile.

debian:~/Downloads/openwrt$ patch -p 1 -i 999-300-qca-mcs-support.patch
patching file target/linux/ipq806x/patches-5.15/999-300-qca-mcs-support.patch
Hunk #2 succeeded at 124 with fuzz 2.

1 Like

Right, sorry. You also need to add this patch:

cat feeds/nss/qca-mcs/patches/0002-kernel-br_pass_frame_up.patch 
--- a/mc_osdep.h
+++ b/mc_osdep.h
@@ -24,7 +24,11 @@
 static inline int os_br_pass_frame_up(struct sk_buff *skb)
+       return br_pass_frame_up(skb, false);
        return br_pass_frame_up(skb);
 static inline int os_br_pass_frame_up(struct sk_buff *skb)