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

My N100 mini pc comes with:

Intel Corporation Ethernet Controller I225-V

have not seen any dropouts on Ubuntu 22, it ran 24h for over a year before I flashed openwrt.

1 Like

I used to build NSS-enabled images for my ipq806x routers. Some are posted on this epic thread. It was a ton of work.

Gave up, flashed vanilla OpenWrt, moved them to access points (now replaced with Flint2 units), and switched to OpenWrt x86/64 appliances (as ACwifidude did, I keep following his steps, it would seem) with J6412 CPU and i226-V (rev 04) Ethernet ports. Containerized OpenVPN, Wireguard, PiHole, LibreNMS and more. Much simpler to manage.

Zero issues. No drop outs. Rock solid. 2 years in. Will last long time, as long as I can live with a 2.5GBE backbone.

N100 won't be an issue. The revision of the i226-V might. Using a recent kernel with recent drivers will go a long way. (This has a bit more information than the typical "Anyone getting crap from i226-V chips? Yeah! I do!" low value threads you find here or there).

Need serious networking and have money to spare? Go x86/64 (N100 or anything comparable). You won't regret it.

Hacking NSS was fun. Would still be at it if I had the time (this latest twist of removing DSA from 24.10 so NSS works again was genius). Would continue with it for fun. If you have the time, enjoy; have fun!

1 Like

Because... it's pure genius, I wish I had thought of it, as far as I follow the latest posts on the thread, someone reverted the DSA conversion of ipq806x for these NSS builds.
These builds are running 24.10... but a very special version of it. Means getting latest mainstream kernel and packages, and still using NSS. Smartest thing ever to keep NSS going.

I am not smart enough to debate the benefits of DSA. DSA threw me a curveball with a package I support, and it was really tough (for me) to fix. IMO weird stuff happens with DSA. Just know it's here to stay, as is apk, and many other large OpenWrt enhancements.
Edit: Here the reason why DSA is taking over swconfig.

So... it's always about fun decisions... use vanilla OpenWrt without NSS? Or use these very special builds with NSS but no DSA and very limited support? Whatever works for you is good.

Thank you for you explanation. I'm using a c2600 device as an accesspoint, but find it a waste to not be able to use the nss cores. seems i'm not using the device to its full potential. I've been doing this for years, and every once in a while i check the status of the nss builds.

My wish would be to run vanilla openwrt with nss cores enabled, but it seems this is not going to happen. Now that dsa creates an extra obstacle for ipq806*, i'm really wondering if my c2600 if futureproof in that way.

I have no need for wifi 7, and the 1733mhz max speed on 5ghz for the c2600 is more then i need. But i'm looking for a device that can be fully utilized using openwrt with minimum binary blobs and closed source stuff. That doesnt seem to be the case on ipq8064. So now i'm considering switching to a mediatek device with better support. Will open a new topic for this soon.

Do you really care about DSA? Do you really need it? Because NSS with 24.10.1 with swconfig works great.
I wouldn't worry about DSA.

1 Like

I have an EA7500 with the IPQ8064 CPU. Is it possible for me to use an NSS firmware with this device?

so far r30006-93b21a89ad is fine for me
Uptime is 4 days now.

NSS with C2600 as an access point...

If you feel like reading an old post, I posted this ages ago on this thread:

NSS cores (maybe core, as I think these patches end up using just one, BTW, but I'm probably wrong) noticeably help an access point. In the end it was not worth the hassle of using NSS builds for 11ac WiFi, and I wanted to upgrade to 11ax.

Priority for our setup is mainstream support and simpler upgrades (and minimal time spent on pampering it). Vanilla OpenWrt works well on a C2600 access point. NSS builds (my way) were a PITA to build, had their quirks, and I had to maintain my own repo (simpler nowadays with GitHub, but nevertheless). Compared to being able to use the online ImageBuilder, use standard repos, and being able to rely on the full OpenWrt community for support, decision was easy for me.

It's your setup and your call if you want something different. If I had the time I'd be tinkering with this in a hearbeat.

IMO, don't replace the C2600 if you are OK with 11ac WiFi. That's the spirit of OpenWrt... keep a good device out of landfill if it still works for you.

My wish would be to use an device which can run a very simple access point setup based on a vanilla build. I dont want to spend to much time and effort constantly reading up on nss builds and dsa vs swconfig issues. I would like to run a vanilla build which on its own utilses the full hardware of the device, not having to run special builds in order to enable certain parts of the hardware in my device. And with a vanilla build, the simplicity when new openwrt releases are out, to just upgrade it with a stable release buil though luci. This is why i'm considering migrating from c2600 to something mediatek based. More on that later.

@apccv Thank you for your reply. Your findings make it clear that the c2600 really needs its nss cores enabled to be able to run on advertised speeds. I'm wondering how this goes for an ac mediatek based ac 2600 class device. Will open a new topic for that soon.

a binary build? Or did you build it from source. May I ask which one?

@asvio
modules/luci-mod-network/htdocs/luci-static/resources/view/network/wireless.js
file has changed recently and the patch for QAM-256 has to be refreshed.

@asvio @sqter
I've just seen this in the log.

[489730.505277] Frequency Set to 110000000
[489730.505469] Frequency Supported - 
[489730.505480] 110000000 Hz 
[489730.507982] 600000000 Hz 
[489730.511558] 800000000 Hz 
[489730.514292] 
[489730.520453] Current Inst Per Ms b54
[489730.522987] ------------[ cut here ]------------
[489730.524896] WARNING: CPU: 0 PID: 13423 at include/linux/thread_info.h:249 proc_sys_call_handler+0x248/0x274
[489730.529618] Modules linked in: ksmbd ecm(O) nft_fib_inet nf_flow_table_inet ath10k_pci(O) ath10k_core(O) ath(O) xt_DSCP wireguard nft_reject_ipv6 nft_reject_ipv4 nft_reject_inet nft_reject nft_redir nft_quota nft_numgen nft_nat nft_masq nft_log nft_limit nft_hash nft_flow_offload nft_fib_ipv6 nft_fib_ipv4 nft_fib nft_ct nft_compat nft_chain_nat nf_tables nf_nat nf_flow_table nf_conntrack_netlink nf_conntrack mac80211(O) libchacha20poly1305 iptable_mangle iptable_filter ipt_REJECT ipt_ECN ip_tables curve25519_neon cfg80211(O) xt_time xt_tcpudp xt_tcpmss xt_statistic 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_CLASSIFY x_tables sch_cake ppp_async poly1305_arm nfnetlink nf_reject_ipv6 nf_reject_ipv4 nf_log_syslog nf_defrag_ipv6 nf_defrag_ipv4 libcurve25519_generic crc_ccitt compat(O) chacha_neon ntfs3 sch_tbf sch_ingress sch_htb sch_hfsc em_u32 cls_u32 cls_route cls_matchall cls_fw cls_flow cls_basic act_skbedit act_mirred act_gact qca_nss_tunipip6(O)
[489730.530350]  qca_nss_tun6rd(O) qca_nss_cfi_cryptoapi(O) qca_nss_qdisc(O) qca_nss_crypto(O) qca_nss_pptp(O) pptp qca_nss_pppoe(O) pppoe pppox qca_nss_l2tpv2(O) ppp_generic slhc ledtrig_usbport qca_mcs(O) nls_ucs2_utils cifs_arc4 asn1_decoder msdos ip_gre gre ifb sit ip6_tunnel oid_registry tunnel6 tunnel4 tun nls_utf8 nls_iso8859_15 nls_iso8859_1 nls_cp437 nls_cp1250 seqiv md5 geniv ecb des_generic libdes cmac authencesn authenc leds_gpio xhci_plat_hcd xhci_pci xhci_hcd dwc3 dwc3_qcom ohci_platform ohci_hcd phy_qcom_ipq806x_usb ahci fsl_mph_dr_of ehci_platform ehci_fsl sd_mod ahci_platform libahci_platform libahci libata scsi_mod scsi_common ehci_hcd qca_nss_drv(O) qca_nss_gmac(O) ramoops reed_solomon pstore gpio_button_hotplug(O) xfs libcrc32c vfat fat f2fs ext4 mbcache jbd2 exfat crc32c_generic crc32_generic [last unloaded: ksmbd]
[489730.681101] CPU: 0 PID: 13423 Comm: sysctl Tainted: G           O       6.6.93 #0
[489730.702382] Hardware name: Generic DT based system
[489730.709759]  unwind_backtrace from show_stack+0x10/0x14
[489730.714528]  show_stack from dump_stack_lvl+0x40/0x4c
[489730.720083]  dump_stack_lvl from __warn+0x94/0xbc
[489730.725030]  __warn from warn_slowpath_fmt+0x158/0x15c
[489730.729803]  warn_slowpath_fmt from proc_sys_call_handler+0x248/0x274
[489730.734929]  proc_sys_call_handler from vfs_read+0x1ac/0x298
[489730.741523]  vfs_read from ksys_read+0x54/0xc4
[489730.747337]  ksys_read from ret_fast_syscall+0x0/0x54
[489730.751678] Exception stack(0xd5151fa8 to 0xd5151ff0)
[489730.756890] 1fa0:                   00000000 00000000 00000007 b6f1b100 00000400 00000000
[489730.762014] 1fc0: 00000000 00000000 0008a618 00000003 00000000 b6f1b100 b6faf820 00000000
[489730.770260] 1fe0: bed9e878 bed9e868 b6f8be88 b6f8b0a0
[489730.779923] ---[ end trace 0000000000000000 ]---
[489730.797859] Min SKB reuse sizes - 
[489730.797873] core 0: 1984 
[489730.797912] core 1: 1984 
[489730.800389] 
[489730.807972] 
[489730.807972] Help: (/proc/sys/dev/nss/ipip6/help) 
[489730.807972] 			1. To add maprule(rule_type=1(BMR)/2(FMR)):
[489730.807972] 			echo dev=<map-mape/MAP-E netdevice> rule_type=<1/2> ipv6_prefix=<XXXX::XXXX> ipv6_prefix_len=<XX> ipv4_prefix=<X.X.X.X> ipv4_prefix_len=<XX> 
[489730.807972] 			ipv6_suffix=<XXXX::XXXX> ipv6_sufffix_len=<XX> ea_len=<XX> psid_offset=<XX> > add_map_rule 
[489730.807972] 			2. a. To delete maprule(FMR):
[489730.807972] 			echo dev=<map-mape/MAP-E netdevice> rule_type=<2> ipv6_prefix=<XXXX::XXXX> ipv6_prefix_len=<XX> ipv4_prefix=<X.X.X.X> ipv4_prefix_len=<XX> 
[489730.807972] 			ipv6_suffix=<XXXX::XXXX> ipv6_sufffix_len=<XX> ea_len=<XX> psid_offset=<XX> > remove_map_rule 
[489730.807972] 			b. To delete maprule(BMR):
[489730.807972] 			echo dev=<map-mape/MAP-E netdevice> rule_type=<1> > remove_map_rule
[489730.807972] 			3. To flush FMR entries:
[489730.807972] 			echo dev=<map-mape/MAP-E netdevice> > flush_fmr_rule
[489730.871785] 			4. To enable/disable frag id: 
[489730.871785] 			echo frag_id_update=<0/1> > frag_id 
[489730.871785] 			=====end of help=====
[489731.089972] ICMPv6: process `sysctl' is using deprecated sysctl (syscall) net.ipv6.neigh.br-lan.base_reachable_time - use net.ipv6.neigh.br-lan.base_reachable_time_ms instead
[489837.662260] Frequency Set to 110000000
[489837.662444] Frequency Supported - 
[489837.662453] 110000000 Hz 
[489837.664950] 600000000 Hz 
[489837.668750] 800000000 Hz 
[489837.671189] 
[489837.676770] Current Inst Per Ms c51
[489837.705512] Min SKB reuse sizes - 
[489837.705526] core 0: 1984 
[489837.705581] core 1: 1984 
[489837.707918] 
[489837.715715] 
[489837.715715] Help: (/proc/sys/dev/nss/ipip6/help) 
[489837.715715] 			1. To add maprule(rule_type=1(BMR)/2(FMR)):
[489837.715715] 			echo dev=<map-mape/MAP-E netdevice> rule_type=<1/2> ipv6_prefix=<XXXX::XXXX> ipv6_prefix_len=<XX> ipv4_prefix=<X.X.X.X> ipv4_prefix_len=<XX> 
[489837.715715] 			ipv6_suffix=<XXXX::XXXX> ipv6_sufffix_len=<XX> ea_len=<XX> psid_offset=<XX> > add_map_rule 
[489837.715715] 			2. a. To delete maprule(FMR):
[489837.715715] 			echo dev=<map-mape/MAP-E netdevice> rule_type=<2> ipv6_prefix=<XXXX::XXXX> ipv6_prefix_len=<XX> ipv4_prefix=<X.X.X.X> ipv4_prefix_len=<XX> 
[489837.715715] 			ipv6_suffix=<XXXX::XXXX> ipv6_sufffix_len=<XX> ea_len=<XX> psid_offset=<XX> > remove_map_rule 
[489837.715715] 			b. To delete maprule(BMR):
[489837.715715] 			echo dev=<map-mape/MAP-E netdevice> rule_type=<1> > remove_map_rule
[489837.715715] 			3. To flush FMR entries:
[489837.715715] 			echo dev=<map-mape/MAP-E netdevice> > flush_fmr_rule
[489837.779973] 			4. To enable/disable frag id: 
[489837.779973] 			echo frag_id_update=<0/1> > frag_id 
[489837.779973] 			=====end of help=====
[489876.717022] Frequency Set to 110000000
[489876.717206] Frequency Supported - 
[489876.717215] 110000000 Hz 
[489876.719760] 600000000 Hz 
[489876.723159] 800000000 Hz 
[489876.725920] 
[489876.731485] Current Inst Per Ms e20
[489876.760171] Min SKB reuse sizes - 
[489876.760184] core 0: 1984 
[489876.760222] core 1: 1984 
[489876.762482] 
[489876.770360] 
[489876.770360] Help: (/proc/sys/dev/nss/ipip6/help) 
[489876.770360] 			1. To add maprule(rule_type=1(BMR)/2(FMR)):
[489876.770360] 			echo dev=<map-mape/MAP-E netdevice> rule_type=<1/2> ipv6_prefix=<XXXX::XXXX> ipv6_prefix_len=<XX> ipv4_prefix=<X.X.X.X> ipv4_prefix_len=<XX> 
[489876.770360] 			ipv6_suffix=<XXXX::XXXX> ipv6_sufffix_len=<XX> ea_len=<XX> psid_offset=<XX> > add_map_rule 
[489876.770360] 			2. a. To delete maprule(FMR):
[489876.770360] 			echo dev=<map-mape/MAP-E netdevice> rule_type=<2> ipv6_prefix=<XXXX::XXXX> ipv6_prefix_len=<XX> ipv4_prefix=<X.X.X.X> ipv4_prefix_len=<XX> 
[489876.770360] 			ipv6_suffix=<XXXX::XXXX> ipv6_sufffix_len=<XX> ea_len=<XX> psid_offset=<XX> > remove_map_rule 
[489876.770360] 			b. To delete maprule(BMR):
[489876.770360] 			echo dev=<map-mape/MAP-E netdevice> rule_type=<1> > remove_map_rule
[489876.770360] 			3. To flush FMR entries:
[489876.770360] 			echo dev=<map-mape/MAP-E netdevice> > flush_fmr_rule
[489876.833576] 			4. To enable/disable frag id: 
[489876.833576] 			echo frag_id_update=<0/1> > frag_id 
[489876.833576] 			=====end of help=====
[489952.184537] Frequency Set to 110000000
[489952.184721] Frequency Supported - 
[489952.184731] 110000000 Hz 
[489952.187191] 600000000 Hz 
[489952.190758] 800000000 Hz 
[489952.193436] 
[489952.199099] Current Inst Per Ms c79
[489952.227940] Min SKB reuse sizes - 
[489952.227954] core 0: 1984 
[489952.227990] core 1: 1984 
[489952.230252] 
[489952.237854] 
[489952.237854] Help: (/proc/sys/dev/nss/ipip6/help) 
[489952.237854] 			1. To add maprule(rule_type=1(BMR)/2(FMR)):
[489952.237854] 			echo dev=<map-mape/MAP-E netdevice> rule_type=<1/2> ipv6_prefix=<XXXX::XXXX> ipv6_prefix_len=<XX> ipv4_prefix=<X.X.X.X> ipv4_prefix_len=<XX> 
[489952.237854] 			ipv6_suffix=<XXXX::XXXX> ipv6_sufffix_len=<XX> ea_len=<XX> psid_offset=<XX> > add_map_rule 
[489952.237854] 			2. a. To delete maprule(FMR):
[489952.237854] 			echo dev=<map-mape/MAP-E netdevice> rule_type=<2> ipv6_prefix=<XXXX::XXXX> ipv6_prefix_len=<XX> ipv4_prefix=<X.X.X.X> ipv4_prefix_len=<XX> 
[489952.237854] 			ipv6_suffix=<XXXX::XXXX> ipv6_sufffix_len=<XX> ea_len=<XX> psid_offset=<XX> > remove_map_rule 
[489952.237854] 			b. To delete maprule(BMR):
[489952.237854] 			echo dev=<map-mape/MAP-E netdevice> rule_type=<1> > remove_map_rule
[489952.237854] 			3. To flush FMR entries:
[489952.237854] 			echo dev=<map-mape/MAP-E netdevice> > flush_fmr_rule
[489952.301383] 			4. To enable/disable frag id: 
[489952.301383] 			echo frag_id_update=<0/1> > frag_id 
[489952.301383] 			=====end of help=====
1 Like

Thanks, I was able to compile the latest commit from two days ago.

Only issue I ran into was constant version errors during make's building steps. The version format seems to be quite strict. I simply took what was being used and removed some illegal characters and added -r1 at the end of the hardcoded version for a few packages. Placed the hard coded version into the makefile. I don't care if version info don't make sense, IDK why make was throwing a fit over it.

Aside for the version formatting errors, It fully compiled and installed onto the R7800 painlessly.

The reason that I went through this trouble is because on the old 23.05 nss build, wifi was pretty good and internet was stable and quick. I then moved to generic 24.10 but that was worse overall and wifi was dropping quite often as I have a lot of devices that connect to wifi for "smart" home controlling that she enjoys and I don't really care about. Yet the generic 24.10 build was struggling to keep them connected. Let's hope this new 24.10 + nss build that I compiled works wonders.

Just unsure how to check if nss is being used properly. :sweat_smile:

Does anyone want to attempt using github actions to build firmware?

I have tested the 23.05 version for the EA7500v1 and it seems to work very well. Is there a way to upgrade this version to 24.10?

Thank you.

The easiest way to check if NSS is working is to use htop or btop. The packages are available from the software menu in Luci as purely htop or btop. Once installed, ssh into the router and just type the command htop or btop and you'll get a nice resource monitor pop up in your ssh window. Then on a computer just run a speedtest and watch the CPU usage. If NSS is working, you'll see the CPU usage stay at 0-2% for all cores. This assumes simple setup with basic firewall rules, no traffic shaping, etc.

Yep, It is working. I have SQM using fq_codel + nss-rk.qos as I believe that further enables better use of the nss cores. Aside from that with 25 devices on 2.4GHz and 15 devices on 5GHz, the r7800 is able to handle it without breaking a sweat. Most devices on 2.4GHz are some smart devices from home depot. I know zigbee would be better so that it isn't all on wifi but I don't care, everything works without issue. Maybe in the future once more devices change over to having wifi 6/7 as an option to connect to, I might just upgrade to spread the load onto the various types of antennas. However, it really doesn't matter at the moment considering all devices are simply able to connect just fine on the wifi.

Just wondering if this( https://github.com/rickkdotnet/sqm-scripts-nss ) is applicable here. As I wonder if adding that "quantum 304" to the advanced settings would make it better for getting better speed on those specific packets.

The other configuration notes for the nss-rk.qos seems a bit confusing to me. I am not sure which latency it is talking about, latency between public internet and client devices, or between client devices and router. On the other hand, everything is working fine. Except for wifi calling with verizon being flaky. Maybe I should turn off SQM all together?

At the same time, I'm wondering if cake as a discipline is better. Very little information to go off of here about how each one works.

Would you be able to help me compile 24.10.1 with NSS for an EA7500V1, please? I dont need SQM or anything. I pretty much use default settings other than custom DNS. I wont even be using the wifi.

well and if possible, then for Askey RT4230W too))

hi i had left it following random reboot, fortunately i knew how to solve it
no it did not stop as far as i know but the last version supporting nss is the 23.05 you also have the possibility to have the 23.05 and 24.10 version without the nss version
actually i'm back on the main software netduma because i don't find any improvement on openwrt with a fiber connection 1000up 1000down

Kong’s early april NSS build had some kernel panic issues iirc, current late april build has been stable so far.