Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

24.10-nss #41

Closed
wants to merge 151 commits into from
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
151 commits
Select commit Hold shift + click to select a range
5ca30be
feeds: Add nss-packages repo
qosmio Jul 14, 2024
76733d9
nat46: patches for QCA NSS ECM
bitthief Feb 3, 2023
22430c1
package: kernel: nat46: use standard build functions
qosmio May 6, 2024
3142c5f
iproute2: add NSS QDISC support
bitthief Feb 3, 2023
5d926ec
qualcommax: dts: add NSS nodes to IPQ807x devices
bitthief Jul 17, 2023
3eec2bf
qualcommax: net: QCA NSS igs support
bitthief Jul 17, 2023
ab97e8b
qualcommax: net: QCA NSS qdisc ifb support
bitthief Jul 17, 2023
0c46731
ath11k-nss: Add NSS WiFi feature
qosmio Dec 16, 2023
0a15ad3
ath11k_nss: handle qca-nss-drv symbol dependancies
qosmio Jan 8, 2024
5ae6381
ath11k_nss: fix ordering of sysctl values
qosmio Jan 8, 2024
aa85ccb
ath11k_nss: bugfix overwriting high watermark
qosmio Jan 9, 2024
aadb83c
ath11k_nss: Handle 256/512/1G boards automatically
qosmio Jan 11, 2024
18be56a
ath11k_nss: Add support to account memory stats
qosmio Jan 11, 2024
cb2e243
ath11k_nss: allow specifying pbuf 'memory_profile'
qosmio Jan 11, 2024
e0d5abb
ath11k_nss: ath11k support dynamic vlan
qosmio Jan 13, 2024
e0ae7fc
ath11k_nss: fix `'ppdu_info' is a pointer...` error
qosmio Jan 13, 2024
a1fafda
ath11k_nss: bugfix NSS memleak + enhancements
qosmio Jan 16, 2024
98ea88c
ath11k_nss: set pbuf script off by default
qosmio Jan 17, 2024
25ace5f
ath11k_nss: squash and refactor patches
qosmio Jan 17, 2024
8aab1b4
qualcommax: Introduce skbuff_recycle for performance
qosmio Mar 9, 2024
797721a
ath11k_nss: set pbuf to 'auto'
qosmio Mar 25, 2024
e0555f0
ath11k_nss: refresh and fixup patches
qosmio Mar 25, 2024
6ea65de
qualcommax: NSS: kernel 6.6 support (squash)
qosmio Mar 25, 2024
d6f12e1
qualcommax: remove uneeded btcoex dts
qosmio Mar 9, 2024
0b2afaa
qualcommax: Move QCE to user selectable module
qosmio Mar 25, 2024
f97f392
qualcommax: NSS: kernel 6.6 support
qosmio Mar 25, 2024
4d54426
cryptodev-linux: Add hooks for QCA NSS
qosmio Mar 25, 2024
9e6709e
feeds: NSS: point to 6.x branch
qosmio Mar 25, 2024
faf3801
qualcommax: disable swiotlb for 64mb in saving.
qosmio Mar 31, 2024
192d313
qualcommax: qca-mcs support for kernel >= 6.6.29
qosmio Apr 30, 2024
727c8d2
feeds: nss-packages: switch to branch 12.5-6.x
qosmio May 5, 2024
0ebf9cb
ath11k_nss: fix invalid access to memory
qosmio May 5, 2024
e2528c8
qualcommax: NSS: Add support for all ipq807x targets
qosmio May 7, 2024
9ab9631
ath11k_nss: revert AMPDU in radiotap header
qosmio May 15, 2024
3057fa6
qualcommax: NSS: Set required NSS packages and options
qosmio May 25, 2024
9a018b5
iproute2: Fixup NSS patches for GCC 14.x
qosmio Jun 1, 2024
a36eb6b
ath11k_nss: mac80211 fix pending airtime
qosmio Jun 2, 2024
983e736
ath11k_nss: mac80211: remove STA txq pending airtime underflow warning
qosmio Jun 2, 2024
f16d34a
ath11k_nss: change warning levels
qosmio Jun 2, 2024
ba992ce
ath11k_nss: fix incorrect tx/rx stats WDS
qosmio Jun 2, 2024
c2752c0
ath11k_nss: correctly free skb using ieee80211_free_txskb()
qosmio Jun 2, 2024
67550ff
ath11k_nss: Add lock when accessing idr_pool of tx_ring
qosmio Jun 2, 2024
dbee72b
ath11k_nss: mac80211 Use C99 flexible arrays instead of zero-length a…
qosmio Jun 2, 2024
efd490c
qualcommax: NSS: Add support for sxk80, mx8500
qosmio Jun 2, 2024
6653755
qualcommax: NSS: Add DTS entries for nss-macsec
qosmio Jun 2, 2024
af0fbd7
qualcommax: NSS: ECM: Fixes for Bridge VLAN Filtering
qosmio Jun 2, 2024
772eaeb
ath11k_nss: Fix IPQ6018 wifi offloading
qosmio Jun 7, 2024
8f4256a
qualcommax: add ramoops memory region
qosmio Jun 10, 2024
cb44848
ath11k_nss: modularize nss-pbuf options
qosmio Jun 22, 2024
e4f65b2
ath11k_nss: Organize patch order and formatting
qosmio Jun 22, 2024
720098b
ath11k_nss: Drop unnecessary iphone fix patch
qosmio Jun 27, 2024
ee3609e
wifi_nss: Add threaded NAPI for ath10k and ath11k
qosmio Jun 27, 2024
860b883
ath11k_nss: Add mac80211 based AQL support
qosmio Jun 27, 2024
c0bb109
qualcommax: Fix threaded NAPI scheduling
qosmio Jun 28, 2024
f6d2ff4
qualcommax: clean up kernel config, align with QSDK
qosmio Jul 3, 2024
416ab89
qualcommax: NSS: introduce helper functions for NAPI threading
qosmio Jul 3, 2024
4952ed8
wifi_nss: Use NAPI threaded helper functions
qosmio Jul 3, 2024
d9b94e7
ath11k_nss: fix incorrectly applied ath11k_pci threaded napi patch
qosmio Jul 3, 2024
9aa8a1b
qualcommax: NSS: Add default packages drv, ecm, bridge-mgr
qosmio Jul 3, 2024
4c0e93f
ath10k-ct: Bump patch for 6.4 to 6.7
qosmio Jul 3, 2024
a545742
ath10k-ct: Use NAPI threaded helper functions
qosmio Jul 3, 2024
c4030cf
ath11k_nss: add tracing for update_muedca_params_event
qosmio Jul 4, 2024
135faf0
Revert "qualcommax: NSS: introduce helper functions for NAPI threading"
qosmio Jul 5, 2024
76241a1
wifi_nss: Revert using napi threaded helper function
qosmio Jul 5, 2024
1bcf970
ath11k_nss: fix monitor mode
qosmio Jul 6, 2024
62a0ded
hostapd: handle updated MU-EDCA params from driver
qosmio Jul 6, 2024
07da446
Revert "ath11k_nss: Add mac80211 based AQL support"
qosmio Jul 8, 2024
351379f
ath11k_nss: add missing NL80211_ATTR_HE_MUEDCA_PARAMS
qosmio Jul 8, 2024
7bde58f
qualcommax: add coherent_pool=2M swiotlb=noforce
qosmio Jul 8, 2024
64e8e3e
qualcommax: skbuff_recycle: allow specifiying max size
qosmio Jul 9, 2024
120e331
qualcommax: NSS: Enable NSS for Asus RT-AX89X
qosmio Jul 10, 2024
3bb1590
ath11k_nss: Refresh patches
qosmio Jul 10, 2024
dd16a97
ath11k_nss: Check for NSS FW 11.4 and build accordingly
qosmio Jul 10, 2024
6b7353f
ath11k_nss: Bump version 6.6.15 to 6.9.9
qosmio Jul 13, 2024
2916c41
ath11k_nss: optimize qca-nss-pbuf init script
qosmio Jul 13, 2024
bad1787
qualcommax: Switch to upstream default config
qosmio Jul 13, 2024
9620212
qualcommax: Add new menu item for IPQ settings
qosmio Jul 13, 2024
8e763fb
qualcommax: skbuff_recycle: add proc option to enable/disable
qosmio Jul 13, 2024
da97ba6
qualcommax: skbuff: at latest changes from QSDK
qosmio Jul 13, 2024
9920b8b
iproute2: NSS: sync patch from QSDK 12.5
qosmio Jul 13, 2024
85ae03a
qualcommax: enable skb_recycle for IPQ > 256M
qosmio Jul 14, 2024
c0a02a7
qualcommax: add notes about SKB_RECYCLER_PREALLOC and SKB_FIXED_SIZE_2K
qosmio Jul 14, 2024
d544421
qualcommax: NSS: Refresh patches against 6.6.41
qosmio Jul 22, 2024
2d9e383
ath11k_nss: Revert logic from coconut branch in NSS redirect
qosmio Jul 22, 2024
c0c98bf
ath11k_nss: Possible fix for WDS
qosmio Aug 1, 2024
b4355a1
ath11k_nss: Fix RX thermal throttling on newer 2.12 firmware
qosmio Aug 1, 2024
cf5675b
ath11k_nss: WAR for association failure issue with WDS
qosmio Aug 1, 2024
7aed7ad
ath11k_nss: fix bss transition firmware crash
BrainSlayer Aug 6, 2024
e695718
ath11k_nss: utilize existing function to get arvif from dev
qosmio Aug 9, 2024
95caf06
qualcommax: NSS: refresh patches for 6.6.51
qosmio Aug 9, 2024
ba8246e
hostapd: fix MUEDCA patch for hostapd 2024-09-15
qosmio Sep 19, 2024
5903d02
ath11k_nss: skip status ring entry processing (V5)
qosmio Sep 20, 2024
3bfc789
ath11k_nss: Refresh patches for 6.9.9
qosmio Sep 20, 2024
3fb7799
nat46: Bump to version 2024-08-12
qosmio Sep 21, 2024
cddfec8
ath11k_nss: Remove unecessary ignore frags patch
qosmio Sep 28, 2024
e05628e
ath11k_nss: Fix patches for backports 6.11
qosmio Sep 26, 2024
239addc
ath11k_nss: Refresh patches for backports 6.11
qosmio Sep 27, 2024
4692d03
ath11k_nss: Revert patch for 512M + 2KB RX header
qosmio Sep 27, 2024
15ffe44
ath11k_nss: Consolidate Allow-fast-rx-by-bypassing-stats-update
qosmio Sep 30, 2024
37de89f
ath11k_nss: remove call trace while rebooting AP
qosmio Sep 29, 2024
22e910d
ath11k_nss: mac80211: fix NULL pointer access, Klocwork issue
qosmio Sep 28, 2024
7e264a3
ath11k_nss: fix WDS instability by disabling NAWDS mode
qosmio Sep 29, 2024
ec07f28
Revert "ath11k_nss: Revert patch for 512M + 2KB RX header"
qosmio Sep 30, 2024
9a63ff7
ath11k_nss: Fix iface stats showing up as 0
qosmio Sep 30, 2024
a8654bf
docs: Update README for NSS specific info
qosmio Oct 1, 2024
514c576
nss-setup: Add example NSS configs/scripts
qosmio Aug 10, 2024
e07dfad
nss-setup: Refactor and add options for setting up nodes to use DHCP
qosmio Aug 12, 2024
ad70e44
nss-setup: fix led configs not generating
qosmio Aug 12, 2024
611457a
nss-setup: Add additional notes
qosmio Sep 20, 2024
037b350
feeds: fix disable nss feed from being packaged
qosmio Sep 26, 2024
a93118b
nss-setup: change default optimization to '-O2'
qosmio Oct 1, 2024
379890b
nss-setup: Make sure user selects their own target
qosmio Oct 1, 2024
b3d9cb4
ath11k_nss: 6.11.2: fix 235-003-ath11k-add-AP_VLAN-vif-support-for-WD…
qosmio Oct 4, 2024
d129ff2
ath11k_nss: 6.11.2: fix 999-783-001-wifi-ath11k-Fix-BCCA-counter-for-…
qosmio Oct 4, 2024
794ac07
ath11k_nss: Delete 999-783-001-wifi-ath11k-Fix-BCCA-counter-for-EMA.p…
qosmio Oct 5, 2024
faf8053
ath11k_nss: Possible workaround to 0 wifi stats
qosmio Oct 4, 2024
964cb60
ath11k_nss: Add diagnostic gathering utility
qosmio Oct 5, 2024
9800872
ath11k_nss: Enhance nss_diag to properly list ifaces
qosmio Oct 5, 2024
2cfc65f
ath11k_nss: only show peer ast warning if NSS is off
qosmio Oct 9, 2024
0dfa527
ath11k_nss: Refresh patches for backports 6.11.2
qosmio Oct 1, 2024
6c11c07
iproute2: NSS fixup for 6.11.0
qosmio Oct 5, 2024
4ee82e1
docs: Change default branch
qosmio Oct 1, 2024
77ec1c0
docs: Add donation links
qosmio Oct 8, 2024
32517ee
ath11k_nss: consistently use ath11k_sta_to_arsta
qosmio Oct 9, 2024
51f6b24
qualcommax: Remove swiotlb 64m savings patch
qosmio Oct 11, 2024
760b934
ath11k_nss: Remove generic-ndo-get_stats64 patch
qosmio Oct 11, 2024
55d7ae1
qualcommax: add console-size + increase record-size
qosmio Oct 12, 2024
03422cd
qualcommax: NSS: refresh patches for 6.6.56
qosmio Oct 12, 2024
cd6d226
ath10k: change 'peer unmap' warning to debug
qosmio Oct 12, 2024
576c0c4
nss-setup: Reorg and make uci-defaults pluggable
qosmio Oct 12, 2024
2a0be66
nss-setup: Optimize mesh node/sat configs
qosmio Oct 12, 2024
c741aae
nss-setup: Include example for setting up VLANs
qosmio Oct 12, 2024
8ef3f5c
nss-setup: clean up mesh base and sat config
qosmio Oct 13, 2024
a41d636
nss-setup: explicitly require nss-ecm
qosmio Oct 14, 2024
ac3117e
nss-setup: reorg seed file with additional instructions and clarifica…
qosmio Oct 16, 2024
0a22724
qualcommax: ath10k-ct: bump patch for 6.7 to 6.10
AgustinLorenzo Oct 19, 2024
9fa6701
ath11k_nss: add disable_mesh_chksum_ath11k.hotplug
qosmio Oct 20, 2024
3a09652
ath11k_nss: Improve NSS event callback handling
qosmio Oct 20, 2024
cbfe810
ath10k-ct: fix incompatible pointer type
qosmio Oct 20, 2024
125e62a
qualcommax: set non-ct ath10k as default
qosmio Oct 20, 2024
1faee13
ath11k_nss: replace rcu_read_unlock with spin_unlock
qosmio Oct 20, 2024
b0d8214
nss-setup: Initial README for examples
qosmio Oct 21, 2024
1855ae7
ath11k_nss: Rebase against 87033c3
qosmio Oct 25, 2024
933e8dc
nss-setup: update wifi configs for WPA3
qosmio Oct 26, 2024
8bbbfd2
ath11k_nss: Refactor nss_diag interface display
qosmio Oct 27, 2024
e703c51
nss-setup: fix network in wifi + formatting
qosmio Oct 29, 2024
19305f3
nss-setup: Detail advanced setup with trunk ports
bgcngm Nov 3, 2024
f1fa501
qualcommax: NSS: refresh patches for 6.6.60
qosmio Nov 14, 2024
2c499e1
ath11k_nss: Fix null pointer dereference in BSS transition handling
qosmio Nov 15, 2024
be336b7
ath11k_nss: nss_diag: check for opkg/apk
qosmio Nov 20, 2024
4d17e5b
ath11k_nss: Refresh patches against rebase 53eab61
qosmio Nov 20, 2024
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions Config.in
Original file line number Diff line number Diff line change
Expand Up @@ -38,3 +38,5 @@ source "target/sdk/Config.in"
source "target/toolchain/Config.in"

source "tmp/.config-package.in"

source "config/Config-ipq.in"
206 changes: 133 additions & 73 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,108 +1,168 @@
![OpenWrt logo](include/logo.png)
# NSS Fork for IPQ807x
| Branch | mac80211 Version | Notes |
|-----------------------------------------------------------------------------------------|------------------|----------------------------------------------------------------------|
| [qualcommax-6.x-nss-wifi](https://github.com/qosmio/openwrt-ipq/tree/qualcommax-6.x-nss-wifi) |6.11|Current with upstream|
| [qualcommax-6.x-nss-mx4300](https://github.com/qosmio/openwrt-ipq/tree/qualcommax-6.x-nss-mx4300) |6.11|Current with upstream. [Supports Linksys MX4300](https://github.com/openwrt/openwrt/pull/16070) |
| [qualcommax-6.x-nss-wifi-6.9](https://github.com/qosmio/openwrt-ipq/tree/qualcommax-6.x-nss-wifi-6.9) |6.9.9|Current with upstream, except older mac80211|
| [qualcommax-6.x-nss-mx4300-6.9](https://github.com/qosmio/openwrt-ipq/tree/qualcommax-6.x-nss-mx4300-6.11) |6.9.9|Current with upstream, except older mac80211. [Supports Linksys MX4300](https://github.com/openwrt/openwrt/pull/16070) |

OpenWrt Project is a Linux operating system targeting embedded devices. Instead
of trying to create a single, static firmware, OpenWrt provides a fully
writable filesystem with package management. This frees you from the
application selection and configuration provided by the vendor and allows you
to customize the device through the use of packages to suit any application.
For developers, OpenWrt is the framework to build an application without having
to build a complete firmware around it; for users this means the ability for
full customization, to use the device in ways never envisioned.
NOTE: The 6.9 branches are meant for folks having issues with the current 6.11.2 version of backports/mac80211. These are mostly just meant as a workaround for the time being. I don't plan on supporting these branches longterm.

Sunshine!
The MX4300 branches will soon be merged in once the PR for MX4300 is approved upstream.

## Download
## Table of Contents
- [Overview](#overview)
- [What's NSS?](#whats-nss)
- [How Does OpenWrt "Offload" Traffic?](#how-does-openwrt-offload-traffic)
- [How Is NSS Different from OpenWrt's Offloading Options?](#how-is-nss-different-from-openwrts-offloading-options)
- [Do I Need NSS?](#do-i-need-nss)
- [OK, I Want NSS. Does My Device Support It?](#ok-i-want-nss-does-my-device-support-it)
- [Quickstart](#quickstart)
- [Important Note](#important-note)
- [Donate](#donate)

Built firmware images are available for many architectures and come with a
package selection to be used as WiFi home router. To quickly find a factory
image usable to migrate from a vendor stock firmware to OpenWrt, try the
*Firmware Selector*.
---

* [OpenWrt Firmware Selector](https://firmware-selector.openwrt.org/)
## Overview
This repository contains a fork of OpenWrt that integrates Qualcomm's NSS (Network Subsystem) support for the IPQ807x and IPQ6018 series of SoCs. The goal of this project is to provide enhanced network performance and reliability through hardware offloading, leveraging NSS's capabilities to improve throughput and reduce CPU load.

If your device is supported, please follow the **Info** link to see install
instructions or consult the support resources listed below.
---
#### What's NSS?

##
NSS (**N**etwork **S**ub**s**ystem) is a specialized hardware offloading engine developed by Qualcomm, integrated into their IPQ series SoCs (System-on-Chip), such as the IPQ807x and IPQ6018. NSS is designed to handle high-throughput network tasks like NAT, routing, and even security tasks such as IPsec, without burdening the main CPU cores.

An advanced user may require additional or specific package. (Toolchain, SDK, ...) For everything else than simple firmware download, try the wiki download page:
---
#### How Does OpenWrt "Offload" Traffic?

* [OpenWrt Wiki Download](https://openwrt.org/downloads)
OpenWrt offers three primary methods for offloading network traffic, each aimed at reducing CPU load and improving throughput:

## Development
1. **Packet Steering**: Distributes network processing across multiple CPU cores. It helps balance the load on multi-core CPUs but still relies on the CPU to handle packet processing.

To build your own firmware you need a GNU/Linux, BSD or macOS system (case
sensitive filesystem required). Cygwin is unsupported because of the lack of a
case sensitive file system.
2. **Software Flow Offloading**: Accelerates traffic processing by using the CPU’s fast path, allowing more efficient handling of routing and NAT (Network Address Translation) by bypassing the kernel's normal slow path. This relies entirely on the CPU to speed up packet forwarding.

### Requirements
3. **Hardware Flow Offloading**: Available only on select devices (e.g., Mediatek), this method offloads packet forwarding directly to the network hardware using kernel-based mechanisms (nftables/iptables) to accelerate traffic. However, this is limited to devices that have hardware acceleration capabilities supported by OpenWrt.

You need the following tools to compile OpenWrt, the package names vary between
distributions. A complete list with distribution specific packages is found in
the [Build System Setup](https://openwrt.org/docs/guide-developer/build-system/install-buildsystem)
documentation.
---
#### Why Isn't NSS Supported in Vanilla OpenWrt?

```
binutils bzip2 diff find flex gawk gcc-6+ getopt grep install libc-dev libz-dev
make4.1+ perl python3.7+ rsync subversion unzip which
```
NSS requires proprietary binaries (NSS firmware) and extensive patches to the Linux kernel and networking stack. Qualcomm does not openly release the necessary firmware or detailed documentation on how to integrate NSS support, making it extremely difficult for the OpenWrt community to maintain. The required patches are invasive and complex, altering significant portions of the network stack, which makes upstream integration into OpenWrt unlikely. Maintaining compatibility with each new kernel version is another barrier, as Qualcomm’s support for these patches is minimal and sporadic.

### Quickstart
---

1. Run `./scripts/feeds update -a` to obtain all the latest package definitions
defined in feeds.conf / feeds.conf.default
#### How Is NSS Different from OpenWrt's Offloading Options?

2. Run `./scripts/feeds install -a` to install symlinks for all obtained
packages into package/feeds/
The main difference between NSS and OpenWrt's offloading methods is that NSS provides **hardware acceleration** directly within the SoC, bypassing the CPU almost entirely for certain network tasks. OpenWrt's offloading, on the other hand, relies heavily on the **CPU** to manage and accelerate traffic, either via multi-core CPU distribution (Packet Steering) or kernel-level acceleration (Software/Hardware Flow Offloading).

3. Run `make menuconfig` to select your preferred configuration for the
toolchain, target system & firmware packages.
NSS doesn’t play nice with OpenWrt’s built-in offloading because they conflict in how they handle packets, leading to performance issues or even outright failures.

4. Run `make` to build your firmware. This will download all sources, build the
cross-compile toolchain and then cross-compile the GNU/Linux kernel & all chosen
applications for your target system.
---

### Related Repositories
#### Key Differences:

The main repository uses multiple sub-repositories to manage packages of
different categories. All packages are installed via the OpenWrt package
manager called `opkg`. If you're looking to develop the web interface or port
packages to OpenWrt, please find the fitting repository below.
- **Packet Steering**: While it redistributes packet processing across multiple CPU cores, it still involves the CPU heavily. With NSS, dedicated hardware cores handle packet processing, so packet steering can interfere by unnecessarily involving the CPU, reducing the benefits of offloading to hardware.

* [LuCI Web Interface](https://github.com/openwrt/luci): Modern and modular
interface to control the device via a web browser.
- **Software Flow Offloading**: This uses kernel-level mechanisms (nftables/iptables) to accelerate packet forwarding by utilizing the CPU’s fast path. NSS, however, bypasses the kernel’s networking stack and offloads these tasks directly to the hardware. If both are enabled, packet handling may be done redundantly in software and hardware, leading to inefficiencies or conflicts.

* [OpenWrt Packages](https://github.com/openwrt/packages): Community repository
of ported packages.
- **Hardware Flow Offloading**: Available only for certain devices like Mediatek, this method offloads packet processing to specific hardware via kernel drivers. However, this hardware-based acceleration is entirely separate from NSS and not as efficient on Qualcomm devices. Using it alongside NSS can lead to unpredictable behavior, as both try to accelerate traffic but in incompatible ways.

* [OpenWrt Routing](https://github.com/openwrt/routing): Packages specifically
focused on (mesh) routing.
---

* [OpenWrt Video](https://github.com/openwrt/video): Packages specifically
focused on display servers and clients (Xorg and Wayland).
#### Do I Need NSS?

## Support Information
Here are some reasons you might need NSS:

For a list of supported devices see the [OpenWrt Hardware Database](https://openwrt.org/supported_devices)
- You require high network throughput (e.g., gigabit speeds) on devices like the IPQ807x or IPQ6018 series.
- Your router handles resource-intensive tasks like NAT, VPN (IPsec), or other routing-heavy activities that would otherwise overwhelm the CPU.
- You’re seeking better performance than what OpenWrt’s software and hardware offloading options can provide.

### Documentation
However, it’s important to note that **NSS is NOT supported upstream** in OpenWrt. As of now, there are only a few community-driven projects that maintain NSS patches.

* [Quick Start Guide](https://openwrt.org/docs/guide-quick-start/start)
* [User Guide](https://openwrt.org/docs/guide-user/start)
* [Developer Documentation](https://openwrt.org/docs/guide-developer/start)
* [Technical Reference](https://openwrt.org/docs/techref/start)
I personally maintain an NSS fork of OpenWrt [qosmio/openwrt-ipq](https://github.com/qosmio/openwrt-ipq) and the necessary NSS packages [qosmio/nss-packages](https://github.com/qosmio/nss-packages).

### Support Community
---

* [Forum](https://forum.openwrt.org): For usage, projects, discussions and hardware advise.
* [Support Chat](https://webchat.oftc.net/#openwrt): Channel `#openwrt` on **oftc.net**.
#### OK, I Want NSS. Does My Device Support It?

### Developer Community
NSS is available for most Qualcomm IPQ807x and IPQ6018 devices. If your device is part of this chipset family and supported in OpenWrt, it can run NSS.

* [Bug Reports](https://bugs.openwrt.org): Report bugs in OpenWrt
* [Dev Mailing List](https://lists.openwrt.org/mailman/listinfo/openwrt-devel): Send patches
* [Dev Chat](https://webchat.oftc.net/#openwrt-devel): Channel `#openwrt-devel` on **oftc.net**.
Supported devices include, but are not limited to:
- Devices based on the **IPQ807x** (e.g., some high-end Netgear and TP-Link routers)
- Devices based on the **IPQ6018** (e.g., certain enterprise routers)

## License
---

OpenWrt is licensed under GPL-2.0
## Quickstart

1. Clone this repository:
```bash
git clone https://github.com/qosmio/openwrt-ipq -b qualcommax-6.x-nss-wifi
cd openwrt-ipq
```
2. Update feeds:
```bash
./scripts/feeds update
./scripts/feeds install -a
```
3. Copy over the seed file
```bash
cp nss-setup/config-nss.seed .config
```
4. Open the `.config` in a text editor, find your device, and remove the "#" and change `"is not set"` to `"=y"`

Example:
```diff
-# CONFIG_TARGET_qualcommax_ipq807x_DEVICE_dynalink_dl-wrx36 is not set
+CONFIG_TARGET_qualcommax_ipq807x_DEVICE_dynalink_dl-wrx36=y
```
6. Generate the full config
```bash
make defconfig V=s
```
7. Now run full build
```bash
make download -j$(nproc) V=s
make -j$(nproc) V=s
```
---
### Important Note:

Many users report issues after enabling Packet Steering or Flow Offloading (Software or Hardware), often because they are used to these options or they get carried over during a sysupgrade. Even if the setup seems to work initially, it is not optimized for NSS offloading, and you are losing the full benefits of hardware acceleration.

If you plan to use NSS, **start fresh** and **disable all other offloading options**.

By default OpenWrt's offloading is disabled, but if you ever happen to enable it accidentally, make sure you disable it.

---
```bash
uci set network.@device[0].packet_steering=0
uci set network.@device[0].flow_offloading=0
uci set network.@device[0].flow_offloading_hw=0
uci commit network
```
If you have questions or issues, please join the discussion on OpenWrt's forums.
[Qualcomm NSS Build](https://forum.openwrt.org/t/qualcommax-nss-build)

## Please remember when posting about an issue:
1. Include your device make and model.
2. Relevant logs and screenshots.
3. State clearly and concisely the issue you're having.
> "My router doesn't work", "I'm getting an error"

Is not something I can help with.
4. Include the specific commit you're building from.
> "I'm building from latest"

Also not helpful as I'm always pushing changes...

5. Be respectful and mindful. I dedicate my free time to maintain and improve this project, and I do it for the benefit of the community. Remember that I'm not a full-time developer or support team—I'm just an individual sharing my work. Constructive feedback is always welcome, but please refrain from being overly critical or demanding.

## Support the Project

I never really thought about setting up donations before, but with so many people being receptive and appreciative and asking how to contribute, I figured, why not? Of course, this project also builds on the incredible work done by the talented devs upstream who put in countless hours into OpenWrt itself. I’ll definitely continue working on this, but if you’d like to support, every bit helps.

[![Donate with PayPal](./paypal.png)](https://www.paypal.com/donate?business=3V3H2SZFY7DNQ&item_name=Maintaining+NSS+fork+of+OpenWRT+and+NSS+packages.)
<a href="https://cash.app/$austinzk">
<img src="./cashapp.png" alt="Cashapp" width="150px"/>
</a>

Consider donating to the [OpenWrt Foundation](https://openwrt.org/donate)
Binary file added cashapp.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
150 changes: 150 additions & 0 deletions config/Config-ipq.in
Original file line number Diff line number Diff line change
@@ -0,0 +1,150 @@
# vim: set ft=kconfig
menu "Qualcomm IPQ Options"

comment "Kernel build options"

choice KERNEL_IPQ_MEM_PROFILE
prompt "IPQ memory profile"
default IPQ_MEM_PROFILE_512 if TARGET_qualcommax_ipq807x_DEVICE_edimax_cax1800
default IPQ_MEM_PROFILE_512 if TARGET_qualcommax_ipq807x_DEVICE_compex_wpq87
default IPQ_MEM_PROFILE_512 if TARGET_qualcommax_ipq807x_DEVICE_linksys_mx4200v1
default IPQ_MEM_PROFILE_512 if TARGET_qualcommax_ipq807x_DEVICE_redmi_ax6
default IPQ_MEM_PROFILE_512 if TARGET_qualcommax_ipq807x_DEVICE_xiaomi_ax3600
default IPQ_MEM_PROFILE_512 if TARGET_qualcommax_ipq807x_DEVICE_zte_mf269

config IPQ_MEM_PROFILE_1024
bool "1024"
config IPQ_MEM_PROFILE_512
bool "512"
config IPQ_MEM_PROFILE_256
bool "256"
endchoice

config KERNEL_IPQ_MEM_PROFILE
int
default 1024 if IPQ_MEM_PROFILE_1024
default 512 if IPQ_MEM_PROFILE_512
default 256 if IPQ_MEM_PROFILE_256

help
This option select memory profile to used, which defines
the reserved memory configuration used in device tree

config KERNEL_SKB_RECYCLER
bool "Generic SKB recycling"
default y if KERNEL_IPQ_MEM_PROFILE > 256

choice KERNEL_SKB_RECYCLE_SIZE
prompt "SKB recycler size"
default SKB_RECYCLE_SIZE_2304
default SKB_RECYCLE_SIZE_1856 if KERNEL_IPQ_MEM_PROFILE < 1024

depends on KERNEL_SKB_RECYCLER
config SKB_RECYCLE_SIZE_1856
bool "1856"
config SKB_RECYCLE_SIZE_2304
bool "2304"
endchoice

config KERNEL_SKB_RECYCLE_SIZE
int
depends on KERNEL_SKB_RECYCLER
default 2304 if SKB_RECYCLE_SIZE_2304
default 1856 if SKB_RECYCLE_SIZE_1856

help
SKB recycler default size

config KERNEL_SKB_RECYCLER_MULTI_CPU
bool "Cross-CPU recycling for CPU-locked workloads"
depends on KERNEL_SKB_RECYCLER
default y

config KERNEL_SKB_RECYCLER_PREALLOC
bool "Enable preallocation of SKBs (For SFE not NSS)"
depends on KERNEL_SKB_RECYCLER
default n
help
NOTE: This is primarily for platforms utilizing SFE (Shortcut Forwarding Engine)
and not NSS (Network Subsystem) offload.

NSS offload platforms mostly utilize the SKB recycling feature when managing memory.
Mostly when to "reclaim" it.

This option enables preallocation of SKBs.
The default is '16384' which means 16384 x 4096 (Size of SKB) = 64MB.

config KERNEL_SKB_RECYCLE_MAX_PREALLOC_SKBS
int "Number of SKBs to be preallocated"
depends on KERNEL_SKB_RECYCLER_PREALLOC
default 16384

config KERNEL_SKB_FIXED_SIZE_2K
bool "SKB size fixed at 2K"
default n
default y if KERNEL_IPQ_MEM_PROFILE < 512
help
SKB size fixed at 2K. Primarily for platforms with less than 512MB memory.

config KERNEL_ALLOC_SKB_PAGE_FRAG_DISABLE
depends on KERNEL_SKB_RECYCLER
bool "Disable alloc skb page frag"
default n

choice KERNEL_PREEMPTION
prompt "Kernel preemption level"
default KERNEL_PREEMPT

config KERNEL_PREEMPT_NONE
bool "No Forced Preemption (Server)"
help
This is the traditional Linux preemption model, geared towards
throughput. It will still provide good latencies most of the time,
but there are no guarantees and occasional longer delays are
possible.

Select this option if you are building a kernel for a server or
scientific/computation system, or if you want to maximize the
raw processing power of the kernel, irrespective of scheduling
latencies.

config KERNEL_PREEMPT_NONE_BUILD
depends on KERNEL_PREEMPT_NONE
bool
default y

config KERNEL_PREEMPT
bool "Preemptible Kernel (Low-Latency)"
help
This option reduces the latency of the kernel by making
all kernel code (that is not executing in a critical section)
preemptible. This allows reaction to interactive events by
permitting a low priority process to be preempted involuntarily
even if it is in kernel mode executing a system call and would
otherwise not be about to reach a natural preemption point.
This allows applications to run more 'smoothly' even when the
system is under load, at the cost of slightly lower throughput
and a slight runtime overhead to kernel code.

Select this if you are building a kernel for a desktop or
embedded system with latency requirements in the milliseconds
range.

if KERNEL_PREEMPT
config KERNEL_PREEMPT_RCU
bool "Preemptible RCU"
default y
select KERNEL_PREEMPT_COUNT
help
This option selects the RCU implementation that is
designed for very large SMP systems with hundreds or
thousands of CPUs, but for which real-time response
is also required. It also scales down nicely to
smaller systems.

Select this option if you are unsure.

endif
endchoice

endmenu
Loading