Florian Eckert [Thu, 5 Mar 2026 12:28:11 +0000 (13:28 +0100)]
openvpn: use also append for dev_type and ovpnproto options
There is already the 'append' command, which assembles all parameters that
are called 'proto_run_command'. Let´s use that. To ensure that the
sequence is correct, the parameters must be added at the beginning, so that
user parameters can overwrite them.
Signed-off-by: Florian Eckert <redacted>
Florian Eckert [Thu, 5 Mar 2026 08:19:15 +0000 (09:19 +0100)]
openvpn: use common pattern for global variable
The common pattern for global variable is, to write the variable name in
capital letters. This improves maintainability in shell scripts.
Signed-off-by: Florian Eckert <redacted>
Florian Eckert [Thu, 5 Mar 2026 08:08:34 +0000 (09:08 +0100)]
openvpn: fix auth_user_pass option
The variable 'auth_file' is not used in the following programm sequence.
It therefore only makes sense to add it as a call parameter via 'append'
when calling the the 'proto_run_commmand'.
Signed-off-by: Florian Eckert <redacted>
Florian Eckert [Thu, 5 Mar 2026 07:58:48 +0000 (08:58 +0100)]
openvpn: rename openvpn proto option to ovpnproto option
This was forgotten during renameing of this option.
Fixes: e026ce0f ("openvpn: handle ovpnproto exclusively")
Signed-off-by: Florian Eckert <redacted>
Florian Eckert [Thu, 5 Mar 2026 07:57:26 +0000 (08:57 +0100)]
openvpn: remove net needed blank lines
There is always only one blank line between the sections.
Signed-off-by: Florian Eckert <redacted>
Wei-Ting Yang [Tue, 10 Mar 2026 11:26:30 +0000 (19:26 +0800)]
django: bump to version 6.0.3
Fix CVE-2026-25674.
Full release notes:
https://docs.djangoproject.com/en/6.0/releases/6.0.3/
Signed-off-by: Wei-Ting Yang <redacted>
Wei-Ting Yang [Tue, 10 Mar 2026 11:26:25 +0000 (19:26 +0800)]
django: clean up Makefile
- Add AUTHORS into PKG_LICENSE_FILES.
- Drop no longer required python3-pytz dependency.
- Remove obsolete CONFLICTS field.
Signed-off-by: Wei-Ting Yang <redacted>
Martin Schiller [Wed, 18 Feb 2026 06:51:33 +0000 (07:51 +0100)]
usbutils: use ALTERNATIVES
Use the ALTERNATIVES symlink handling to avoid conflicts with busybox
lsusb tool. Otherwise this package can not be installed if you also have
enabled lsusb from busybox.
Signed-off-by: Martin Schiller <redacted>
Martin Schiller [Wed, 18 Feb 2026 06:49:01 +0000 (07:49 +0100)]
pciutils: use ALTERNATIVES
Use the ALTERNATIVES symlink handling to avoid conflicts with busybox
lspci tool. Otherwise this package can not be installed if you also have
enabled lspci from busybox.
Signed-off-by: Martin Schiller <redacted>
Eric McDonald [Sat, 7 Mar 2026 23:09:38 +0000 (15:09 -0800)]
net-snmp: bump PKG_RELEASE
Bump PKG_RELEASE to reflect fixes to UCI init script config
generation for missing/unset options and RestrictOID handling.
Signed-off-by: Eric McDonald <redacted>
Eric McDonald [Sat, 7 Mar 2026 22:29:16 +0000 (14:29 -0800)]
net-snmp: fix newline when RestrictOID is neither yes nor no
snmpd_access_default_add, snmpd_access_HostName_add, and
snmpd_access_HostIP_add check if RestrictOID is `yes` or `no`
but fail to write a newline for other values of RestrictOID
(e.g., `true`, `false`) or if unset, corrupting the generated config.
Fix by using config_get_bool and restructuring to write either
a complete line or nothing. Also require RestrictedOID to be
non-empty when RestrictOID is enabled.
This is a breaking change for configs where RestrictOID is set
to a value that the old code did not match as `yes` (e.g., `true`,
`1`, `on`, `enabled`) but config_get_bool evaluates as true. In
practice, this is unlikely to affect existing installs unless a
user is unknowingly relying on unintended behavior or is deliberately
relying on the old code's non-standard boolean evaluation; this
latter case is considered unlikely by this commit's author. Configs
where RestrictOID is enabled but RestrictedOID is empty are also
affected; previously a directive with a trailing space was written,
now no directive is written.
Signed-off-by: Eric McDonald <redacted>
Eric McDonald [Sat, 7 Mar 2026 21:52:19 +0000 (13:52 -0800)]
net-snmp: add early return when IPMask is unset
snmpd_access_HostIP_add would write unintended output to the
config file if the IPMask option is not specified. Add an early
return to prevent writing in that case.
This is a breaking change for configs where IPMask is unset.
Previously, an empty IPMask option would result in a malformed
directive containing a trailing slash with no guaranteed newline,
the exact form of which depended on the values of other options.
Now, no directive is written.
Signed-off-by: Eric McDonald <redacted>
Eric McDonald [Sat, 7 Mar 2026 21:51:25 +0000 (13:51 -0800)]
net-snmp: add early return when HostIP is unset
snmpd_access_HostIP_add would write unintended output to the
config file if the HostIP option is not specified. Add an early
return to prevent writing in that case.
This is a breaking change for configs where HostIP is unset.
Previously, an empty HostIP option would result in a malformed
directive containing a bare /mask with no guaranteed newline, the
exact form of which depended on the values of other options.
Now, no directive is written.
Signed-off-by: Eric McDonald <redacted>
Eric McDonald [Sat, 7 Mar 2026 21:50:13 +0000 (13:50 -0800)]
net-snmp: add early return when HostName is unset
snmpd_access_HostName_add would write unintended output to the
config file if the HostName option is not specified. Add an early
return to prevent writing in that case.
This is a breaking change for configs where HostName is unset.
Previously, an empty HostName option would result in a malformed
directive with a trailing space and no guaranteed newline, the
exact form of which depended on the values of other options.
Now, no directive is written.
Signed-off-by: Eric McDonald <redacted>
Eric McDonald [Sat, 7 Mar 2026 21:48:14 +0000 (13:48 -0800)]
net-snmp: add early return when CommunityName is unset
snmpd_access_default_add, snmpd_access_HostName_add, and
snmpd_access_HostIP_add would write unintended output to the
config file if the CommunityName option is not specified. Add an
early return to each function to prevent writing in that case.
This is a breaking change for configs where CommunityName is
unset. Previously, an empty CommunityName option would result in
a malformed directive with a double space and no guaranteed
newline, the exact form of which depended on the values of other
options. Now, no directive is written.
Signed-off-by: Eric McDonald <redacted>
Eric McDonald [Sat, 7 Mar 2026 21:45:22 +0000 (13:45 -0800)]
net-snmp: add early return when Mode is unset
snmpd_access_default_add, snmpd_access_HostName_add, and
snmpd_access_HostIP_add would write unintended output to the
config file if the Mode option is not specified. Add an early
return to each function to prevent writing in that case.
This is a breaking change for configs where Mode is unset.
Previously, an empty Mode option would result in a malformed
directive with a leading space and no guaranteed newline, the
exact form of which depended on the values of other options.
Now, no directive is written.
Signed-off-by: Eric McDonald <redacted>
Niklas Thorild [Mon, 9 Mar 2026 22:17:17 +0000 (22:17 +0000)]
telegraf: update to 1.38.0
- Update Telegraf to v1.38.0
Signed-off-by: Niklas Thorild <redacted>
Afiq Nazrie [Sat, 7 Mar 2026 05:43:42 +0000 (12:43 +0700)]
adguardhome: add jail_mount_rw config option
Add jail_mount_rw config option to add directories with read-write
access.
Fixes: https://forum.openwrt.org/t/247253
Signed-off-by: Afiq Nazrie <redacted>
Chester A. Unal [Mon, 9 Mar 2026 14:45:05 +0000 (16:45 +0200)]
bsbf-resources: update to GIT HEAD of 2026-03-09
Update bsbf-resources to the GIT HEAD of 2026-03-09.
Signed-off-by: Chester A. Unal <redacted>
Vladimir Ulrich [Mon, 9 Mar 2026 04:55:37 +0000 (07:55 +0300)]
zoneinfo: updated to 2026a release
Updated package version and file hashes.
Signed-off-by: Vladimir Ulrich <redacted>
Oliver Sedlbauer [Fri, 6 Mar 2026 10:23:52 +0000 (11:23 +0100)]
lcd4linux: prevent concurrent layout switches
Add patch to prevent concurrent layout switches.
Signed-off-by: Oliver Sedlbauer <redacted>
Wesley Gimenes [Tue, 17 Feb 2026 06:21:11 +0000 (03:21 -0300)]
netbird: update to 0.66.2, patch for Go 1.26 build
Changelog: https://github.com/netbirdio/netbird/releases/tag/v0.66.2
NetBird `v0.66.x` adds support for exposing a local HTTP service
from the CLI with the `netbird expose`[1] command, but only for
self-hosted deployments. Cloud support is coming.
[1]: https://docs.netbird.io/manage/reverse-proxy/expose-from-cli
---
`0.65.x` highlights
Changelog: https://github.com/netbirdio/netbird/releases/tag/v0.65.3
NetBird `v0.65.x` now includes a built-in reverse proxy[1], but only for
self-hosted deployments and is currently in beta. Cloud support is
coming soon.
Important: pre-shared keys or Rosenpass are currently incompatible with
the reverse proxy feature.
[1]: https://docs.netbird.io/manage/reverse-proxy
---
`v0.63.x` highlights
Changelog: https://github.com/netbirdio/netbird/releases/tag/v0.63.0
NetBird now supports private DNS zones[1].
[1]: https://docs.netbird.io/manage/dns/custom-zones
---
`v0.62.x` highlights
Changelog: https://github.com/netbirdio/netbird/releases/tag/v0.62.3
Upstream minimum Go requirement raised from `v1.24.x` to `v1.25.x`,
see the go.mod[1].
[1]: https://github.com/netbirdio/netbird/blob/v0.62.3/go.mod#L3-L5
---
Building `netbird` with Go 1.26.x fails with errors:
```
[...]
/builder/dl/go-mod-cache/gvisor.dev/gvisor@v0.0.0-
20251031020517-
ecfcdd2f171c/pkg/sync/runtime_constants_go126.go:22:2: WaitReasonSelect redeclared in this block
/builder/dl/go-mod-cache/gvisor.dev/gvisor@v0.0.0-
20251031020517-
ecfcdd2f171c/pkg/sync/runtime_constants_go125.go:22:2: other declaration of WaitReasonSelect
/builder/dl/go-mod-cache/gvisor.dev/gvisor@v0.0.0-
20251031020517-
ecfcdd2f171c/pkg/sync/runtime_constants_go126.go:23:2: WaitReasonChanReceive redeclared in this block
/builder/dl/go-mod-cache/gvisor.dev/gvisor@v0.0.0-
20251031020517-
ecfcdd2f171c/pkg/sync/runtime_constants_go125.go:23:2: other declaration of WaitReasonChanReceive
/builder/dl/go-mod-cache/gvisor.dev/gvisor@v0.0.0-
20251031020517-
ecfcdd2f171c/pkg/sync/runtime_constants_go126.go:24:2: WaitReasonSemacquire redeclared in this block
/builder/dl/go-mod-cache/gvisor.dev/gvisor@v0.0.0-
20251031020517-
ecfcdd2f171c/pkg/sync/runtime_constants_go125.go:24:2: other declaration of WaitReasonSemacquire
[...]
```
Upstream Issue: https://github.com/netbirdio/netbird/issues/5290
Upstream PR: https://github.com/netbirdio/netbird/pull/5447
Signed-off-by: Wesley Gimenes <redacted>
Wesley Gimenes [Tue, 17 Feb 2026 05:45:20 +0000 (02:45 -0300)]
netbird: update to 0.61.2 (breaking change)
Changelog: https://github.com/netbirdio/netbird/releases/tag/v0.61.2
The second release of `netbird` that introduces a breaking change[1].
A backport will be provided for OpenWrt 25.12 but not for OpenWrt 24.10,
since OpenWrt 25.12 has not been released yet.
NetBird adds **fine-grained SSH access control**[2].
Self-hosters must update both the `management` and `dashboard`[3].
[1]: https://forum.netbird.io/t/upcoming-breaking-changes-to-netbird-ssh/401
[2]: https://docs.netbird.io/manage/peers/ssh#fine-grained-access-control
[3]: https://docs.netbird.io/manage/peers/ssh#v0-61-0
Signed-off-by: Wesley Gimenes <redacted>
Wesley Gimenes [Tue, 17 Feb 2026 07:04:06 +0000 (04:04 -0300)]
netbird: move state file to reduce storage wear
Add `NB_DNS_STATE_FILE="/var/lib/netbird/state.json"` to the init
environment. This moves the state from the directory
`/root/.config/netbird` to the file `/var/lib/netbird/state.json` to
avoid storage wear. Note: the file is not preserved across reboots.
The state file contains information such as locally disabled routes and
other data primarily useful for desktop clients. In OpenWrt setups,
these changes are normally handled by the NetBird `management` server.
This matches the behavior prior to `netbird` v0.52.x, I have not
received any reports that this file caused problems before, so it is
unlikely to cause issues now.
The previous state file `/root/.config/netbird/state.json` can be removed.
Signed-off-by: Wesley Gimenes <redacted>
Dirk Brenken [Sun, 8 Mar 2026 17:50:46 +0000 (18:50 +0100)]
adblock: update 4.5.2‑3
* the suspend/resume function now uses the external
DNS bridge when this function is used
* refine the f_nftadd function
* more file debug logging
* LuCI: add unfiltered DNS-Server to the DNS bridge selection
* LuCI: minor fixes
Signed-off-by: Dirk Brenken <redacted>
Stan Grishin [Sun, 8 Mar 2026 01:13:52 +0000 (01:13 +0000)]
pbr: update to 1.2.2-r10
* add support for OpenVPN netifd detection (thanks @egc112)
* add support for disable LAN->WAN forwarding when `strict_enforcement` is
set on start and restart (thanks @egc112)
* fix: always create marking chains for interfaces
* fix: insert DSCP/ICMP-related nft rules after marking chains
* fix: shellcheck-related improvements
Signed-off-by: Stan Grishin <redacted>
Stan Grishin [Sat, 7 Mar 2026 19:15:03 +0000 (19:15 +0000)]
adblock-fast: update to 1.2.2-r10
* bugfix: always print errors/warnings on non-quiet start
* bugfix: return proper enabled status in RPCD
* bugfix: return stupped status in RPCD when procd data is empty
* bugfix: correctly process verbosity=0
* delete LICENSE file and only keep it upstream
Signed-off-by: Stan Grishin <redacted>
Chester A. Unal [Thu, 5 Mar 2026 20:17:00 +0000 (22:17 +0200)]
bsbf-autoconf-dhcp: switch to wan_$DEVICENAME naming scheme
Use wan_$DEVICENAME naming scheme instead of using consecutive numbering
for the network name.
This makes it easier to match the network interface to the corresponding
network.
Signed-off-by: Chester A. Unal <redacted>
Chester A. Unal [Thu, 5 Mar 2026 16:54:20 +0000 (18:54 +0200)]
bsbf-autoconf-cellular: set device option for network
Set the device option for the network. This is solely for the ease of
matching the network to the corresponding network interface.
Signed-off-by: Chester A. Unal <redacted>
George Sapkin [Fri, 6 Mar 2026 14:02:51 +0000 (16:02 +0200)]
golang: bump 1.26 to 1.26.1
Fixes: CVE-2026-25679
Fixes: CVE-2026-27137
Fixes: CVE-2026-27138
Fixes: CVE-2026-27139
Fixes: CVE-2026-27142
Changes: https://github.com/golang/go/issues?q=milestone%3AGo1.26.1+label%3ACherryPickApproved
Signed-off-by: George Sapkin <redacted>
George Sapkin [Fri, 6 Mar 2026 14:21:34 +0000 (16:21 +0200)]
golang: remove broken mirror
Remove dl.google.com mirror because it's not responding.
Signed-off-by: George Sapkin <redacted>
Tung-Yi Chen [Thu, 5 Mar 2026 18:24:22 +0000 (02:24 +0800)]
tailscale: fix fw_mode env by using append_param
The previous commit
09c14817 introduced TS_NO_LOGS_NO_SUPPORT but
used procd_set_param for a subsequent environment variable. This
overwrote the previous env setting, causing fw_mode to be missed.
Switch to procd_append_param to ensure all environment variables are
properly passed to the process.
Signed-off-by: Tung-Yi Chen <redacted>
Yanase Yuki [Wed, 14 Jan 2026 08:03:02 +0000 (17:03 +0900)]
bridge-utils: remove package
bridge-utils is obsolete software because ip command has
bridge functionality. And OpenWrt uses BusyBox's brctl
by default, so most users will not be affected by this change.
Signed-off-by: Yanase Yuki <redacted>
Yanase Yuki [Wed, 14 Jan 2026 08:07:43 +0000 (17:07 +0900)]
moc: remove package
This software seems no longer maintained by upstream.
The latest upstream release is 10 years ago,
and no package depends on this.
Signed-off-by: Yanase Yuki <redacted>
Yanase Yuki [Wed, 14 Jan 2026 08:10:31 +0000 (17:10 +0900)]
svox: remove package
This software seems no longer maintained by upstream.
The latest upstream commit is 8 years ago,
and no package depends on this.
Signed-off-by: Yanase Yuki <redacted>
Yanase Yuki [Wed, 14 Jan 2026 08:14:25 +0000 (17:14 +0900)]
open2300: remove package
This software is no longer maintained by upstream.
No package depends on this.
Signed-off-by: Yanase Yuki <redacted>
Orne Brocaar [Wed, 4 Mar 2026 10:30:32 +0000 (10:30 +0000)]
rust: set llvm.download-ci-llvm=false
These LLVM builds get deleted after a certain time, causing Rust builds
to break as the LLVM build can no longer be downloaded.
Fixes #27331.
Signed-off-by: Orne Brocaar <redacted>
Dirk Brenken [Thu, 5 Mar 2026 20:03:45 +0000 (21:03 +0100)]
adblock: update 4.5.2‑2
* fixed the debug errorfile handling
* fixed a typo in the nftadd function
* minor cornercase improvements
* LuCI: minor cleanups & fixes
Signed-off-by: Dirk Brenken <redacted>
Sandro Jäckel [Sun, 1 Mar 2026 03:37:02 +0000 (04:37 +0100)]
tailscale: update to 1.94.2
Changelog: https://tailscale.com/changelog#2026-02-12
Signed-off-by: Sandro Jäckel <redacted>
George Sapkin [Wed, 4 Mar 2026 15:11:53 +0000 (17:11 +0200)]
adguardhome: add GC and thread control variables
Add Go GC and threading control variables - GOGC, GOMEMLIMIT, and
GOMAXPROCS - to allow more granular control of the memory management on
lower memory devices.
Fixes: https://github.com/openwrt/packages/issues/28676
Link: https://go.dev/doc/gc-guide#GOGC
Link: https://pkg.go.dev/runtime#pkg-overview
Link: https://go.dev/blog/container-aware-gomaxprocs
Signed-off-by: George Sapkin <redacted>
George Sapkin [Wed, 4 Mar 2026 14:06:25 +0000 (16:06 +0200)]
syncthing: bump to 2.0.15
Changes: https://github.com/syncthing/syncthing/releases/tag/v2.0.15
Signed-off-by: George Sapkin <redacted>
George Sapkin [Wed, 4 Mar 2026 15:30:02 +0000 (17:30 +0200)]
yt-dlp: bump to 2026.03.03
Changes: https://github.com/yt-dlp/yt-dlp/releases/tag/2026.02.21
Changes: https://github.com/yt-dlp/yt-dlp/releases/tag/2026.03.03
Signed-off-by: George Sapkin <redacted>
Florian Eckert [Wed, 4 Mar 2026 10:42:34 +0000 (11:42 +0100)]
openvpn: increment PKG_RELEASE by one
Increment PKG_RELEASE by one.
Signed-off-by: Florian Eckert <redacted>
Florian Eckert [Wed, 4 Mar 2026 10:21:16 +0000 (11:21 +0100)]
openvpn: move usr/share/openvpn files into its own dir
By moving the file to a subdirectory, it is easier to track where the file
is located on the target without having to check the Makefile every time.
Signed-off-by: Florian Eckert <redacted>
Florian Eckert [Wed, 4 Mar 2026 10:17:38 +0000 (11:17 +0100)]
openvpn: move lib/upgrade/keep.d file into its own dir
By moving the file to a subdirectory, it is easier to track where the file
is located on the target without having to check the Makefile every time.
Signed-off-by: Florian Eckert <redacted>
Florian Eckert [Wed, 4 Mar 2026 10:14:09 +0000 (11:14 +0100)]
openvpn: improve readability for files install target
Each script to be installed is moved to its own line to improve readability.
Signed-off-by: Florian Eckert <redacted>
Florian Eckert [Wed, 4 Mar 2026 10:11:12 +0000 (11:11 +0100)]
openvpn: remove not needed INSTALL_DIR creations
This 'INSTALL_DIR' creation are not needed anymore after refactoring.
Signed-off-by: Florian Eckert <redacted>
Florian Eckert [Wed, 4 Mar 2026 10:08:46 +0000 (11:08 +0100)]
openvpn: refactoring INSTALL_DIR command call during install
Move the 'INSTALL_DIR' creation in the make install target to the location
where the files are also installed. This prevents directories that are no
longer needed from being forgotten during refactoring.
Signed-off-by: Florian Eckert <redacted>
Stan Grishin [Tue, 3 Mar 2026 18:43:59 +0000 (18:43 +0000)]
adblock-fast: update to 1.2.2-r8
* bugfix: support TMP and final block-list destination on different
partitions
* update pause-related code/defaults/validation
Signed-off-by: Stan Grishin <redacted>
Daniel F. Dickinson [Wed, 25 Feb 2026 05:17:43 +0000 (00:17 -0500)]
zabbix: bump version to 7.0.23 (LTS)
Update version to 7.0.23 - latest LTS.
Signed-off-by: Daniel F. Dickinson <redacted>
Daniel F. Dickinson [Mon, 16 Feb 2026 17:37:05 +0000 (12:37 -0500)]
zabbix: add full variants and add-on support for other
Rather than having a database selection for SQLITE which prevents
the server or frontend from building, we add a 'basic'
variant for the proxy which uses sqlite3, and have the database
Kconfig affect only the server and frontend.
* There are now only three variants:
1. full, which is the default. It includes the full monitoring feature
set currently available on openwrt, including netsnmp, curl-based
checks, and ldap. In addition these features, plus the choice of
database and ssl provider (or no ssl) are configuration options for
this variant.
2. basic, which provides basic functions with openssl support
3. no-configure, for packages which are not part of the main Zabbix
compile process (including the WebUI which only requires copying
files for use by a web server with PHP CGI support).
* Full is the default variant for agentd and proxy, which are the only
packages with a choice between full and basic. All other packages only
are part of one variant.
* Full variants are the base version of the packages (that is
zabbix-agentd is the 'full' version while zabbix-agentd-basic is the
core version). The proxy version is named zabbix-proxy-basic-sqlite to
announce that it is using the sqlite3 database and not a database
server.
* get and sender only build if at least one of agentd, server, or proxy
are built. Therefore prevent selection get or sender when they would not
build.
* Zabbix's use of NetSNMP requires that Zabbix be build with OpenSSL
* While we are here, enable support for dates after 2038 (64-bit time_t)
* https://github.com/openwrt/packages/pull/28585#issuecomment-
3984978895
* we updated the name to reflect that it is for basic functionality
that can standalone, rather then being a core the other packages
build on.
* basic has been used rather than tiny or small since the sentence
'Provides only tiny/small functionality with SSL/TLS' in the
description, sounds strange, but using basic this reads properly.
Signed-off-by: Daniel F. Dickinson <redacted>
Daniel F. Dickinson [Mon, 16 Feb 2026 09:18:34 +0000 (04:18 -0500)]
zabbix: update php8 dependencies
Using the php8 dependency allows use to go back to using the
+ZABBIX_POSTGRESQL:php8-mod-pgsql (and like dependency for
mysql/mariadb).
This has the benefit of being an apk dependency so the user does not
install the frontend without a php8 database module.
Signed-off-by: Daniel F. Dickinson <redacted>
Toke Høiland-Jørgensen [Wed, 4 Mar 2026 13:19:46 +0000 (14:19 +0100)]
net/radsecproxy: Remove myself as maintainer
Signed-off-by: Toke Høiland-Jørgensen <redacted>
Chester A. Unal [Tue, 3 Mar 2026 10:28:56 +0000 (12:28 +0200)]
bsbf-resources: update to GIT HEAD of 2026-03-03
Update bsbf-resources to the GIT HEAD of 2026-03-03.
Signed-off-by: Chester A. Unal <redacted>
Chester A. Unal [Tue, 3 Mar 2026 10:19:17 +0000 (12:19 +0200)]
bsbf-autoconf-cellular: add
bsbf-autoconf-cellular creates a network with MBIM or QMI protocol using a
newly created network interface. It uses metric values from 1 to 8.
Signed-off-by: Chester A. Unal <redacted>
Chester A. Unal [Mon, 2 Mar 2026 10:35:25 +0000 (12:35 +0200)]
bsbf-openwrt-resources: add
Designate bsbf-openwrt-resources as the package to contain the BSBF
packages without a remote source to fetch.
Move bsbf-bonding and bsbf-usb-netdev-autodhcp into bsbf-openwrt-resources.
Change bsbf-usb-netdev-autodhcp to bsbf-autoconf-dhcp along with the logic.
Signed-off-by: Chester A. Unal <redacted>
Stan Grishin [Mon, 2 Mar 2026 20:21:48 +0000 (20:21 +0000)]
https-dns-proxy: update to 2025.12.29-4
* add explicit LICENSE file to the repository
* pretty up Makefile
* minor shell script styling improvements
* better parsing if individual dnsmasq instances are used in config
* functional test
Signed-off-by: Stan Grishin <redacted>
Stan Grishin [Mon, 2 Mar 2026 20:29:26 +0000 (20:29 +0000)]
pbr: update to 1.2.2-r8
* bugfix: don't mask RFC1918 in the support output
* bugfix: proper processing of downed interfaces
Thanks to everyone who reported/tested and @egc112 for collecting feedback.
Signed-off-by: Stan Grishin <redacted>
Daniel F. Dickinson [Sun, 15 Feb 2026 03:23:12 +0000 (22:23 -0500)]
nut: fix no permissions to use USB UPS, and more
When a USB UPS is first configured, the permissions on the device under
`/dev/bus/usb` have not yet been set to allow the nut user access. This
resulted in errors such as:
Fri Feb 13 23:39:01 2026 daemon.debug upsd[3504]: [D1] mainloop: UPS
[eco550ups] is not currently connected, trying to reconnect
Fri Feb 13 23:39:01 2026 daemon.debug upsd[3504]: [D1] mainloop: UPS
[eco550ups] is still not connected (FD -1)
Fri Feb 13 23:39:03 2026 daemon.debug upsd[3504]: [D1] mainloop: UPS
[eco550ups] is not currently connected, trying to reconnect
Fri Feb 13 23:39:03 2026 daemon.debug upsd[3504]: [D1] mainloop: UPS
[eco550ups] is still not connected (FD -1)
or
Fri Feb 13 23:38:44 2026 daemon.err usbhid-ups[3083]: No matching HID
UPS found
Fri Feb 13 23:38:49 2026 daemon.warn procd: failed adding instance
cgroup for nut-server: No error information
Fri Feb 13 23:38:49 2026 daemon.err usbhid-ups[3115]: libusb1: Could not
open any HID devices: insufficient permissions on everything
Fri Feb 13 23:38:49 2026 daemon.err usbhid-ups[3115]: No matching HID
UPS found
Fri Feb 13 23:38:54 2026 daemon.warn procd: failed adding instance
cgroup for nut-server: No error information
and upsd would enter a procd crashloop.
We fix that by looking in `sysfs` (under `/sys/devices`) to find the
correct USB device and set its ownership and permissions to allow acces
to the user the driver is running under.
Copilot complained about a few things
* nut-server.init had potential word-splitting issues in various spots.
* it also had some commands missing an argument
* improved documentation was required to clarify a dependency
* an incorrect sed could mangle names as well as remove the intended
name
Additionally, while fixing those issues the author noticed that the case
of multiple UPS devices with the same vendorid:productid were not
correctly handled. A check of the serial number, if provided, was added
along with a fallback to allowing NUT communications with all UPS
devices with a given vendorid:productid, if no serial number was given.
Improve efficiency and decrease McCabe complexity of
ensure_usb_ups_access, while also fixing Copilot complaints.
$@ in case is a problem, and we only handle the first parameter in any
event, so change $@ to "$1"
Copilot caught a missing 2>&1 and we silence some shellcheck
false positives
Signed-off-by: Daniel F. Dickinson <redacted>
Daniel F. Dickinson [Wed, 11 Feb 2026 20:50:16 +0000 (15:50 -0500)]
nut: comment and simplify server script
Attempt to de-mystify the nut-server initscript by adding comments
and factoring out some common code that adds to complexity of the
functions of which it is part.
Signed-off-by: Daniel F. Dickinson <redacted>
Daniel F. Dickinson [Fri, 23 Jan 2026 04:26:23 +0000 (23:26 -0500)]
nut: stop de-configured ups
Ensure that when a ups is removed from the configuration that its
driver instance is stopped.
Signed-off-by: Daniel F. Dickinson <redacted>
Daniel F. Dickinson [Sun, 11 Jan 2026 10:41:48 +0000 (05:41 -0500)]
nut: fix driver, server, and monitor reload/stop
Updated configuration was not being applied after config change. This
was due to the means used to do the daemon reloads.
Closes #28298 "Drivers not restarted on config change"
Enable creating PID files for the server, driver, and monitor daemon
processes. This allows to use NUT's built-in facilities for signalling
the daemon's.
For server, when reloading:
1. Check if upsd is running
1. If not, start it.
2. If it is send reload signal to upsd
2. For each driver:
1. Check if the driver is running
1. If it is, send reload-or-exit signal to driver
2. If driver is not running, start it
3. Attempt to start server (upsd and drivers) if service was stopped.
For server, when stopping:
1. Check if upsd is running
1. If it is send stop signal to upsd
2. Ensure it really is stopped
2. For each driver:
1. Check if the driver is running
1. If it is, send stop signal to driver
2. If driver is still running, stop it.
3. If the server process is active (even with not upsd or drivers),
stop it.
For monitor, send the reload signal on config change, with fallback to
stopping and starting the daemon.
Change the names of variables and functions to make it more clear what
is being acted on, configured, or otherwise touched.
Avoid confusing messages in syslog
* Avoid attempting to remove a procd server instance that does not exist
as doing so results in confusing/scary messages in syslog, such as:
Command failed: ubus call service delete
{ "name": "nut-server", "instance": "upsd" } (Not found)
In NUT some models of UPS use shutdown_delay rather than offdelay, and
yet others use usd for the same purpose. shutdown_delay and usd were
previously not available in the list of available driver options, so
add them.
Signed-off-by: Daniel F. Dickinson <redacted>
Daniel F. Dickinson [Sun, 11 Jan 2026 10:36:43 +0000 (05:36 -0500)]
nut: add linting and fix whitespace and typos
shellcheck is a useful linter if a bit pedantic and overzealous so
add overrides to silence false positives
Also, fix issues found by the linting.
* misspelling meant initscript could skip updating configuration in
certain circumstances
* minor: assignment of the result of execution as the time of creating
local. This has been separated.
Fix whitespace and comment typos
Fix typo in Config.in option text
* This is cosmetic, but user-facing (for users building via SDK or
buildroot).
Signed-off-by: Daniel F. Dickinson <redacted>
Daniel F. Dickinson [Sun, 25 Jan 2026 09:48:15 +0000 (04:48 -0500)]
watchcat: fix interface reset does not work
As reported in #23410 Network interface reset doesn't work as expected
on a Wireguard VPN interface and in #27927 lt2p interface won't reboot,
and mentioned in #27248, the current implementation of the option to
restart an interface when connectivity check fails for some period does
not result in an interface restart for all interface.
Notably 'virtual' interfaces such as Wireguard and L2TP do not restart.
The solution that works is to use `ifup <interface>` instead of only
changing the link status.
This commit is based on the one in #27248 by @rondoval, who unfortunately
has not updated the commit message as requested for half a year.
Signed-off-by: Daniel F. Dickinson <redacted>
Paul Donald [Mon, 2 Mar 2026 15:40:18 +0000 (16:40 +0100)]
openvpn: handle ovpnproto exclusively
Since proto was migrated to ovpnproto to avoid collision
with netifd proto, this shall be handled separately.
Also avoid using uci commands to migrate the config which
requires knowing property types; use awk instead.
follow-up to
2607b761549a4793eff91dcb60a287c05f631846
Signed-off-by: Paul Donald <redacted>
Qingfang Deng [Tue, 3 Mar 2026 02:07:05 +0000 (10:07 +0800)]
mdio-netlink: do not select KCONFIG
mdio-netlink is forcing all targets in buildbot to build PHY and MDIO
support. Convert the dependency into the PHYLIB kmod to avoid that.
Signed-off-by: Qingfang Deng <redacted>
Patrick Hemmen [Tue, 10 Feb 2026 20:38:23 +0000 (21:38 +0100)]
ddns-scripts: change servercow.de to new dns api
The previous way to update dns records at servercow.de was replaced
with a https based dns api. The new dns api is documented at
https://wiki.servercow.de/de/domains/dns_api/api-syntax/#einfuhrung
Signed-off-by: Patrick Hemmen <redacted>
Oliver Sedlbauer [Thu, 19 Feb 2026 10:36:51 +0000 (11:36 +0100)]
acpid: prevent duplicate daemon instances
The hotplug script directly invokes /usr/sbin/acpid. If hotplug fires
before procd starts acpid, it cannot stop the procd-managed instance,
resulting in a second unmanaged acpid process running alongside it.
Fix this issue by letting ONLY procd manage the acpi daemon.
Signed-off-by: Oliver Sedlbauer <redacted>
Oliver Sedlbauer [Wed, 28 Jan 2026 15:57:06 +0000 (16:57 +0100)]
gpsd: add wrapper script for hotplug/respawn handling
Gpsd needs some time to create its Unix socket after the process starts.
The hotplug call in service_started() is triggered too early, before the
socket is ready, causing failures in scripts that depend on it.
Additionally, when gpsd crashes and procd respawns it, service_started() is
not called again, so no hotplug event is emitted on respawn. Therefore scripts
listening for gpsd availability miss the STARTED event.
This commit ensures the hotplug call waits for the socket to appear,
so dependent scripts reliably see the STARTED event, even after respawns.
Signed-off-by: Oliver Sedlbauer <redacted>
Chester A. Unal [Thu, 26 Feb 2026 08:48:04 +0000 (10:48 +0200)]
bsbf-bonding: add
bsbf-bonding configures the system for the BondingShouldBeFree bonding
solution client.
Signed-off-by: Chester A. Unal <redacted>
Chester A. Unal [Thu, 26 Feb 2026 08:34:56 +0000 (10:34 +0200)]
bsbf-usb-netdev-autodhcp: add
bsbf-usb-netdev-autodhcp creates a network with a DHCP client using a newly
created network interface. It uses metric values from 1 to 8.
Signed-off-by: Chester A. Unal <redacted>
Chester A. Unal [Thu, 19 Feb 2026 10:48:25 +0000 (12:48 +0200)]
bsbf-resources: add
bsbf-resources contains the resources for the BondingShouldBeFree bonding
solution client.
Signed-off-by: Chester A. Unal <redacted>
Chester A. Unal [Thu, 19 Feb 2026 10:48:17 +0000 (12:48 +0200)]
tcp-in-udp: add
TCP-in-UDP is a lightweight TCP in UDP tunnel utilising eBPF.
Signed-off-by: Chester A. Unal <redacted>
Til Kaiser [Wed, 25 Feb 2026 18:46:07 +0000 (19:46 +0100)]
mstflint: update to 4.35.0-1
This commit updates the mstflint package
to the latest 4.35.0-1 release.
It also includes a patch to fix a build error
that has been merged into their development branch [1]
but is not inside the current release version.
Additionally, the new Python script mstgenerate_pgcb_commands
introduced in 4.35.0 has been added to the package.
Release notes:
https://github.com/Mellanox/mstflint/releases/tag/v4.35.0-1
[1] https://github.com/Mellanox/mstflint/pull/1568
Signed-off-by: Til Kaiser <redacted>
Dirk Brenken [Sun, 1 Mar 2026 05:44:18 +0000 (06:44 +0100)]
adblock: release 4.5.2‑1
* added a new firewall feature: the DNS‑Bridge.
This temporary DNS bridge ensures that an external fallback DNS server
is automatically used during local DNS restarts, providing Zero‑Downtime DNS resolution.
* The debug mode now captures internal error output in a dedicated log file,
located by default in the adblock base directory as /tmp/adb_error.log.
* LuCI: exposed the previously missing adb_cores option (auto‑detected by default).
* LuCI: added support for the new DNS‑Bridge options (Zero‑Downtime during DNS restarts).
Signed-off-by: Dirk Brenken <redacted>
Jon Henrik Bjørnstad [Tue, 24 Feb 2026 11:47:31 +0000 (12:47 +0100)]
qbee-agent: bump version to 2026.10
Bump version to 2026.10
Signed-off-by: Jon Henrik Bjørnstad <redacted>
John Audia [Fri, 27 Feb 2026 21:00:57 +0000 (16:00 -0500)]
lxc: update to 6.0.6
6.0.5 is a bug fix release, see:
https://discuss.linuxcontainers.org/t/lxc-6-0-6-lts-has-been-released/26294
Full changelog: https://github.com/lxc/lxc/compare/v6.0.5...v6.0.6
Build system: x86/64
Build-tested: x86/64-glibc
Run-tested: x86/64-glibc (Intel N150 based box)
Signed-off-by: John Audia <redacted>
Stan Grishin [Wed, 25 Feb 2026 02:31:00 +0000 (02:31 +0000)]
pbr: update to 1.2.2-r6
Update pbr from 1.2.1-r87 to 1.2.2-r6. This release
adds mwan4 (Multi-WAN) integration, a diagnostic
`support` command, IPv6 lease-to-nftset handling,
improved split-uplink detection, stricter UCI
validation, shell variable quoting fixes across 30+
locations, and a comprehensive 126-case test suite
with a full mock OpenWrt sysroot.
Signed-off-by: Stan Grishin <redacted>
---
- **31 files changed**, +1,745 / -227 lines
(net +1,518)
- **1 commit**: `
61c8923` —
`pbr: update to 1.2.2-r6`
---
- Version bumped from `1.2.1-r87` to `1.2.2-r6`
- URL updated from `github.com/stangri/pbr/` to
`github.com/mossdef-org/pbr/`
- No dependency changes
---
Three options changed from scalar to list type:
| Option | Old Type | New Type |
|---------------------|----------|----------|
| `ignored_interface` | `option` | `list` |
| `lan_device` | `option` | `list` |
| `resolver_instance` | `option` | `list` |
Options reordered: scalars first, then lists,
matching UCI convention. No values changed.
---
The init script (`/etc/init.d/pbr`) received
significant additions and fixes across ~660 lines
(+443/-218).
Bumped from `24` to `25`.
**mwan4 (Multi-WAN) Integration (8 new functions):**
- `mwan4_is_installed()` — Detect mwan4 package
- `mwan4_is_running()` — Check service status
- `mwan4_get_iface_list()` — Get enabled interfaces
- `mwan4_get_strategy_list()` — Get strategies
- `mwan4_get_iface_mark_chain()` — Get nft mark
chain for interface
- `mwan4_get_iface_nft_sets()` — Get nftset names
- `mwan4_get_strategy_chain()` — Get strategy chain
- `mwan4_get_mmx_mask()` — Get Multi-WAN mark mask
Enables PBR to coordinate with mwan4 for combined
policy routing and multi-WAN failover.
**Diagnostic `support` Command:**
- New `support()` function generates masked
diagnostic output for troubleshooting
- `print_config_masked()` redacts sensitive data
(passwords, keys, tokens, PSKs, endpoints)
while preserving IP addresses and structure
**IPv6 Lease Handling:**
- New `ipv6_leases_to_nftset()` parses DHCPv6
leases from `/tmp/hosts/odhcpd`
- Complements existing `ipv4_leases_to_nftset()`
**Split Uplink Detection (3 new functions):**
- `is_uplink4()` — Check IPv4 uplink interface
- `is_uplink6()` — Check IPv6 uplink interface
- `is_uplink()` — Unified check (v4 or v6)
- New `ipv6_default_lookup` variable for split
IPv4/IPv6 uplink routing table assignment
**ubus Integration:**
- New `ubus_get_interface()` queries PBR gateway
data via ubus
**Shell Variable Quoting (30+ locations):**
Systematic conversion of bare variable references
to brace-quoted syntax throughout the script:
- `$2` to `${2}` in string replacements
- `$_ret` to `${_ret}` in conditional expansions
- `$_mark` to `${_mark}` in nft rule generation
- `$nftset6` to `${nftset6}` in dnsmasq rules
- `$nft_set_timeout` to `${nft_set_timeout}`
- `$xrayIfacePrefix` to `${xrayIfacePrefix}`
- And many more across rule generation, output
strings, and conditional expressions
**Specific Fixes:**
- `pbr_get_gateway6()`: Changed `is_wan` to
`is_uplink4` for correct IPv4 uplink detection
- `is_netifd_interface()`: Now checks both
`ip4table` and `ip6table` (was IPv4 only)
- `load_environment()`: Fixed inverted flag check
(`-z` changed to `-n` for `loadEnvironmentFlag`)
- Dnsmasq instance detection: Fixed UCI section
lookup with proper variable handling
- Help text URL: `#WarningMessagesDetails` changed
to `#warning-messages-details` (kebab-case)
- `uplink_ip_rules_priority`: Changed from
`uinteger` to `range(99,32765)` to enforce
valid Linux routing policy DB bounds
Three options now use `config_get_list` instead of
`config_get` to support multiple values:
- `ignored_interface`
- `lan_device`
- `resolver_instance`
**Rule Cleanup Refactored:**
- Replaced complex awk-based rule parsing with
priority-range approach
- Calculates `prio_min = priority - max_ifaces`
and `prio_max = priority`, iterates and deletes
rules within range
- Skips netifd-managed fwmark rules
- Added legacy rule cleanup for
`suppress_prefixlength` entries
**Firewall Sync:**
- Added `fw4 -q reload` after successful nft file
installation to ensure fw4 state synchronizes
with PBR's nftables changes
**Resolver Instance Handling:**
- Added robustness checks in
`_dnsmasq_instance_config()`: file existence
check and instance validity check
- Better section name resolution with UCI query
- Added missing `setup` parameter in resolver
instance setup calls
- `uci_get_device()` — Replaced with inline call
- `uci_get_protocol()` — Replaced with inline call
---
In `70-pbr`, fixed shell variable quoting:
```sh
${DEVICE:+ ($DEVICE)}
${DEVICE:+ (${DEVICE})}
```
---
In `pbr.user.netflix`, fixed two instances of
bare variable expansion in parameter substitution:
```sh
params="${params:+$params, }${p}"
params="${params:+${params}, }${p}"
```
---
A full test suite is added in `net/pbr/tests/`
(21 new files, ~1,300 lines) using the shunit2
framework with a complete mock OpenWrt sysroot.
**Runner (`run_tests.sh`):**
- Discovers test files via glob pattern
- Supports pattern-based filtering via CLI arg
- Executes each test in isolated bash subprocess
- Captures output, reports pass/fail with color
- Accumulates stats and lists failures at end
- Requires `shunit2` package
**Setup (`lib/setup.sh`):**
- Creates temporary mock sysroot (`$MOCK_ROOT`)
- Sets `IPKG_INSTROOT` for OpenWrt path resolution
- Installs mock libraries, configs, and binaries
- Stubs `rc.common`, procd, logger, resolveip,
jsonfilter, pidof, sync
- Sources pbr init script with `readonly` keyword
stripped (allows test overrides)
- Redirects all file paths to temp directories
**UCI Config API (`lib/mocks/functions.sh`):**
- Full `config_load` parser for UCI syntax
- `config_get`, `config_get_bool`,
`config_get_list`, `config_foreach`,
`config_list_foreach`
- `uci_set`, `uci_get`, `uci_add_list`,
`uci_remove`, `uci_remove_list`, `uci_commit`
- Stores state in associative arrays
**Network API (`lib/mocks/network.sh`):**
- `network_get_device`, `network_get_physdev`,
`network_get_gateway`, `network_get_gateway6`,
`network_get_protocol`, `network_get_ipaddr`,
`network_get_ip6addr`, `network_get_dnsserver`,
`network_flush_cache`
- Backed by `MOCK_NET_*` variables that tests
override to simulate different network states
- Pre-configured: wan (eth0/dhcp/192.168.1.1),
wan6 (eth0/dhcpv6/fd00::1), wg0 (wireguard),
lan (br-lan/static), loopback (lo/static)
**JSON Shell (`lib/mocks/jshn.sh`):**
- Minimal JSON-in-shell implementation
- `json_init`, `json_add_string/boolean/int`,
`json_add_object/array`, `json_close_*`,
`json_select`, `json_get_var`, `json_get_keys`,
`json_dump`, `json_load`
- Associative array backend with path tracking
**Mock Binaries:**
- `nft` — Returns fw4 table structure with
standard chains (input, forward, output,
dstnat, mangle_*); passes syntax checks
- `dnsmasq` — Reports version with nftset support
- `readlink` — Returns `/usr/libexec/ip-full`
for `*/sbin/ip` (simulates ip-full installed)
**Mock UCI Configs:**
- `pbr` — Full config: enabled, policies
(vpn_all, vpn_gaming, disabled_policy),
dns_policy, nft settings, interface lists
- `network` — Interfaces: loopback, lan, wan,
wan6, wg0 (wireguard)
- `firewall` — Zones: lan (accept all),
wan (reject input/forward)
- `dhcp` — DHCP server stub
- `system` — Hostname and timezone
**01_validation — Input Validation (67 cases):**
`01_ipv4_validation` (13 cases):
- Valid IPs: 192.168.1.1, 10.0.0.1, 172.16.0.1
- Valid CIDR: /8, /24, /32, /0
- Invalid: octets >255, wrong octet count,
CIDR >32, IPv6 addresses, domain names
`02_ipv6_validation` (21 cases):
- Valid: ::1, fe80::1, 2001:db8::1, fd00::1,
full addresses, ::/0
- Invalid: IPv4 addrs, plain strings, MACs
- Scope detection: global (2001:db8::/32),
link-local (fe80::/10), ULA (fd00::/8)
`03_domain_validation` (8 cases):
- Host: single labels (router, host123)
- Hostname: multi-label (example.com,
sub.example.com, deep.sub.example.com)
- Domain: FQDN or single-label
- Invalid: IPs, empty strings, MAC notation
`04_misc_validators` (25 cases):
- MAC addresses (colon notation, case variants)
- Integer validation (positive, not negative)
- Negation marker (! prefix detection)
- URL schemes (http, https, ftp, file://)
- Version comparison (is_greater,
is_greater_or_equal)
- Family mismatch (IPv4/IPv6 mixing detection)
**02_string_utils — String Functions (8 cases):**
`01_str_functions`:
- `str_contains` — Substring search
- `str_contains_word` — Word-boundary search
- `str_to_lower` / `str_to_upper` — Case convert
- `str_first_word` — Token extraction
- `str_replace` — String substitution
- `str_extras_to_underscore` — Normalize delims
- `str_extras_to_space` — Expand delimiters
**03_wan_detection — Interface Detection
(13 cases):**
`01_wan_types`:
- `is_wan4` — Detects wan/wanX, not wan6/lan/wg0
- `is_wan6` — Detects wan6/mwan6 (IPv6-aware)
- `is_wan6_disabled` — Disabled when ipv6 off
- `is_wan` — Unified v4+v6 detection
- `is_uplink4` / `is_uplink6` — Uplink detection
- `is_tor` — Case-insensitive tor detection
- `is_ignore_target` — Ignore target detection
- `is_list` — Comma/space list vs single value
**04_config — Configuration Loading (13 cases):**
`01_load_config` (7 cases):
- Default values from UCI config
- Hex value parsing (fw_mask, uplink_mark)
- XOR calculation (fw_maskXor = ~fw_mask)
- List parsing (ignored_interface, resolver)
- nft parameters (auto-merge, flags)
- Config-loaded flag tracking
`02_disabled_service` (2 cases):
- Disabled: enabled option becomes unset
- Enabled: enabled option is set
`03_config_ipv6` (4 cases):
- IPv6 enabled: config and uplink interface set
- IPv6 disabled: both unset
- Reload behavior verification
**05_nft — nftables Integration (14 cases):**
`01_nft_file_operations` (8 cases):
- File creation with nft shebang
- Chain creation (dstnat, forward, output,
prerouting)
- Jump rules and guard rules
- File append, content search, file deletion
`02_nft_check_element` (6 cases):
- fw4 table existence
- Chain existence (input, forward, output,
dstnat, mangle_*)
- Non-existent chain detection
**06_network — Network Functions (11 cases):**
`01_gateway_discovery` (4 cases):
- IPv4 gateway from mock (192.168.1.1)
- IPv4 gateway fallback (ip addr parsing)
- IPv6 gateway from mock (fd00::1)
- Interface finding for uplinks
`02_supported_interfaces` (7 cases):
- Ignored: loopback in ignored list
- LAN detection vs non-LAN
- Uplink support (wan is supported)
- LAN/loopback not supported
- Wireguard supported (wg0)
- Explicit custom interface support
---
```sh
cd net/pbr/tests && sh run_tests.sh
```
Requires: `bash`, `shunit2`.
Optional filter: `sh run_tests.sh 01_validation`
Signed-off-by: Stan Grishin <redacted>
Stan Grishin [Tue, 24 Feb 2026 20:56:38 +0000 (20:56 +0000)]
adblock-fast: update to 1.2.2-r6
Update adblock-fast from 1.2.1-r7 to 1.2.2-r6. This is a major
architectural rewrite that ports the core business logic from a ~2,700-line
monolithic shell script (`/etc/init.d/adblock-fast`) to a ~2,850-line ucode
module (`/lib/adblock-fast/adblock-fast.uc`), reducing the init script to a
thin ~130-line procd wrapper. The rewrite also introduces a comprehensive
test suite and adds the AGPL-3.0-or-later LICENSE file.
---
- **36 files changed**, +5,787 / -2,836 lines (net +2,951)
- **1 commit**: `
0263b2b` — `adblock-fast: update to 1.2.2-r6`
---
The previous implementation embedded all business logic (download pipeline,
domain processing, resolver configuration, status reporting, caching)
inside the init.d script as a ~2,700-line POSIX shell script. This made the
code difficult to test, maintain, and extend. Shell limitations (no native
data structures, reliance on subshell `eval`, global namespace pollution)
also introduced fragility and performance overhead from repeated subprocess
spawning for UCI/ubus operations.
```
/etc/init.d/adblock-fast (131 lines) — Thin procd wrapper
/lib/adblock-fast/adblock-fast.uc (2849 lines) — Core logic (ucode)
/lib/adblock-fast/cli.uc (95 lines) — CLI action dispatcher
```
The init script now delegates all operations to the ucode module via:
```sh
readonly _ucode="ucode -S -L /lib/${packageName} /lib/${packageName}/cli.uc --"
```
The CLI dispatcher (`cli.uc`) maps init script actions (start, stop,
status, allow, check, pause, etc.) to the module's exported functions.
The init script retains only procd lifecycle glue (`start_service`,
`stop_service`, `service_triggers`, `service_data`) and UCI validation
schemas.
1. **Native UCI/ubus bindings** — Direct `cursor()` and `connect()` calls
replace subprocess-heavy `uci get/set` and `jsonfilter` pipelines
2. **Proper data structures** — Objects and arrays for config, status
tracking, DNS mode definitions; no more string-concatenation state
management
3. **Streaming I/O** — 64KB chunked file reads for blocklist processing
instead of loading entire files into memory via pipes
4. **Memoized environment detection** — Platform capabilities (installed
resolvers, ipset/nftset support, downloader detection) cached on first
call
5. **Centralized trigger logic** — Config diff comparison
(`adb_config_cache()`) determines download/restart/skip in one place
6. **Testable** — Module exports enable direct unit testing without mocking
an entire init system
---
- `+ucode` — ucode interpreter runtime
- `+ucode-mod-fs` — Filesystem operations (readfile, writefile, popen,
stat, etc.)
- `+ucode-mod-uci` — Native UCI cursor API
- `+ucode-mod-ubus` — Native ubus RPC API
- `+jshn` — No longer needed (was used for JSON parsing in shell)
- URL updated from `github.com/stangri/adblock-fast/` to
`github.com/mossdef-org/adblock-fast/`
- Install target now installs `/lib/adblock-fast/adblock-fast.uc` and
`/lib/adblock-fast/cli.uc` alongside the init script
- Version stamp now patches the ucode module
(`version:` field) instead of init script (`PKG_VERSION` variable)
- `postinst` script removed (service enable handled elsewhere)
- `prerm` script simplified: only purges cache, no longer
stops service or removes rc.d symlinks (handled by procd)
---
The module supports all existing DNS resolver integrations through a
unified `dns_modes{}` configuration map. Each mode defines output file
paths, gzip cache names, sed format/parse filters, and grep patterns:
| Mode | Output Format |
|----------------------|--------------------------------------------------|
| `dnsmasq.addnhosts` | `127.0.0.1 domain` (+ `:: domain` with IPv6) |
| `dnsmasq.conf` | `local=/domain/` |
| `dnsmasq.ipset` | `ipset=/domain/adb` |
| `dnsmasq.nftset` | `nftset=/domain/4#inet#fw4#adb4[,6#...]` |
| `dnsmasq.servers` | `server=/domain/` (block) / `server=/domain/#` (allow) |
| `smartdns.domainset` | Raw domain (with smartdns conf wrapper) |
| `smartdns.ipset` | Raw domain (with smartdns ipset conf) |
| `smartdns.nftset` | Raw domain (with smartdns nftset conf) |
| `unbound.adb_list` | `local-zone: "domain." always_nxdomain` |
The download pipeline auto-detects blocklist format from content:
| Format | Detection | Example |
|--------------|-------------------------------------|----------------------------|
| AdBlock Plus | `[Adblock Plus]` header / `^||` | `\|\|example.com^` |
| dnsmasq | `^server=` | `server=/example.com/` |
| dnsmasq2 | `^local=` | `local=/example.com/` |
| dnsmasq3 | `^address=` | `address=/example.com/0.0.0.0` |
| hosts | `^0.0.0.0\s` or `^127.0.0.1\s` | `0.0.0.0 example.com` |
| domains | (fallback — plain domain list) | `example.com` |
```
For each file_url UCI section:
→ Download URL (curl with retries, timeout, optional max-file-size)
→ Auto-detect format → Apply format-specific sed filter → Extract domains
→ Append to accumulator (blocked or allowed)
Merge phase:
→ sort -u (deduplicate)
→ Subdomain optimization (awk label-reverse → sort → dedup → reverse)
→ Remove allowed domains (sed -f generated_script)
→ Inject canary domains (iCloud Private Relay, Mozilla DoH)
→ Inject manually blocked_domain entries from config
→ Format for target DNS resolver
→ Optional validity check (remove malformed entries)
→ Atomic rename to output file
Resolver phase:
→ Update resolver config (UCI: addnhosts, conf-dir, server files)
→ Sanity check (dnsmasq --test)
→ Restart resolver service
→ Heartbeat probe (resolve canary domain to verify blocking)
→ Revert on failure
```
| Function | Purpose |
|-----------------------|------------------------------------------------------|
| `start(args)` | Main lifecycle: download, restore from cache, or restart |
| `stop()` | Disable blocking, flush kernel state, cleanup |
| `status_service()` | Report status to syslog/ubus |
| `allow(domain)` | Whitelist domain in live blocklist + UCI config |
| `check(pattern)` | Search current blocklist for domain |
| `check_tld()` | Detect TLD entries (sanity check) |
| `check_leading_dot()` | Detect leading-dot errors |
| `check_lists(domain)` | Search upstream list URLs for domain |
| `dl()` | Force re-download all lists |
| `killcache()` | Purge all cached files |
| `pause(seconds)` | Temporarily disable blocking |
| `show_blocklist()` | Output parsed blocklist to stdout |
| `sizes()` | Fetch/display configured blocklist file sizes |
| `get_init_status()` | Full service state for UI/RPC clients |
| `get_init_list()` | Enabled/disabled status |
| `get_platform_support()` | Detect installed resolvers and features |
| `get_file_url_filesizes()` | Return cached/live URL metadata |
- 40+ localized message codes (e.g., `errorDownloadingList`,
`errorConfigValidationFail`, `warningSanityCheckTLD`)
- Errors/warnings accumulated in `status_data{}` arrays
- Synced atomically to ubus service data for UI consumption
- Status states: `statusSuccess`, `statusFail`, `statusDownloading`,
`statusProcessing`, `statusRestarting`, `statusPaused`
---
The init script (`/etc/init.d/adblock-fast`) is reduced from ~2,700 to ~130
lines. It now serves exclusively as a procd service wrapper:
- **procd lifecycle**: `start_service()` calls ucode `start`, captures
shell output for `service_data()`; `stop_service()` calls ucode `stop`
- **Service triggers**: WAN interface triggers, config change triggers, UCI
validation (unchanged from previous version)
- **Extra commands**: `allow`, `check`, `check_tld`, `check_leading_dot`,
`check_lists`, `dl`, `killcache`, `pause`, `show_blocklist`, `sizes`,
`version` — all delegate directly to ucode CLI dispatcher
- **procd data bridge**: `emit_procd_shell()` in ucode generates shell
statements that the init script `eval`s for `service_data()` and
`service_stopped()`/`service_started()` hooks (firewall restart flag)
---
The `90-adblock-fast` uci-defaults script is simplified from 181 to 65
lines:
- **Removed**: Entire `simple-adblock` migration path (config, cache files,
URL lists). This migration was for the initial transition from
simple-adblock to adblock-fast and is no longer needed.
- **Retained**: List name migration (adds `name` option to `file_url`
sections that lack one, using pristine default config as reference),
config key renames (`debug` → `debug_init_script`, `proc_debug` →
`debug_performance`, `sanity_check` → `dnsmasq_sanity_check`)
- **Simplified**: Uses direct `uci` commands instead of sourcing the init
script for `uci_get`/`uci_set` helpers. Pristine config lookup now
supports both apk (`.apk-new`) and opkg (`-opkg`) package manager
conventions.
---
A full test suite is added in `net/adblock-fast/tests/` (16 new files,
~1,800 lines) mock-and-expect pattern.
- **Module patching**: Converts ES6 imports to CommonJS requires, redirects
hardcoded system paths to temp directories for isolation
- **Resolver stubs**: Mock binaries for dnsmasq (v2.89), smartdns, unbound,
ipset, nft, resolveip
- **Test case format**: Markup-based (`-- Testcase --`,
`-- Environment --`, `-- Expect stdout --`, `-- File path --`) with
support for inline test data and per-test environment overrides
- **Assertion model**: Compares stdout, stderr, and exit code against
expected values using `diff -u`
- **Shell validation**: Syntax-checks init.d and uci-defaults scripts via
`sh -n`
- **Automatic cleanup**: Trap-based temp directory removal
**UCI Mock** (`tests/lib/mocklib/uci.uc`):
- Full `cursor()` interface: `load`, `get`, `get_all`, `foreach`, `set`,
`delete`, `list_add`, `list_remove`, `commit`, `changes`
- Loads JSON fixtures from `tests/mocks/uci/` (adblock-fast, dhcp, network,
smartdns, unbound configs)
- Supports `@type[index]` extended section addressing
**ubus Mock** (`tests/lib/mocklib/ubus.uc`):
- `connect()` → `call(object, method, args)` with signature-based fixture
lookup
- Fixtures in `tests/mocks/ubus/` (system info, network interface
dump/status, dnsmasq service list)
**System Call Interception** (`tests/lib/mocklib.uc`):
- Blocks service operations: `/etc/init.d/*`, `logger`, `sleep`,
`dnsmasq --test`
- Passes through data processing: `sed`, `sort`, `grep`, `awk`
- Fixed timestamp (`
1615382640`) for reproducible output
- Null `getenv()` for environment isolation
**01_pipeline** — Data processing pipeline (9 tests):
1. `01_all_dns_modes` — Verifies all 9 DNS output modes produce valid,
deduplicated output (~162-165 domains from 2 input lists)
2. `02_input_format_detection` — Validates auto-detection of domains,
hosts, AdBlock Plus, and dnsmasq input formats
3. `03_subdomain_dedup` — Confirms parent domains retained, child
subdomains removed (e.g., blocks `example.com`, skips `sub.example.com`)
4. `04_allowed_domains` — Verifies `allowed_domain` config removes domains
from output while preserving others
5. `05_canary_domains` — Confirms iCloud Private Relay and Mozilla DoH
canary domain injection when enabled
6. `06_servers_mode_allow` — Validates dnsmasq.servers mode prepends
explicit allow entries (`server=/domain/#` format)
7. `07_ipv6_addnhosts` — Verifies dual-stack output (both `127.0.0.1` and
`::` entries) in addnhosts mode with IPv6 enabled
8. `08_ipv6_nftset` — Confirms nftset mode includes IPv6 set references
(`4#inet#fw4#adb4,6#inet#fw4#adb6`) when IPv6 enabled
9. `09_unbound_header` — Validates `server:` header line prepended in
unbound output mode
**02_config** — Configuration handling (1 test):
1. `01_blocked_domain_injection` — Verifies `blocked_domain` config entries
appear in output
**03_functional** — CLI command tests (2 tests):
1. `01_check_domain` — Tests `check()` correctly identifies blocked vs.
unblocked domains with appropriate output messages
2. `02_show_blocklist` — Tests `show_blocklist()` outputs parsed domain
list (162 domains, correct format)
5 curated test data files with ~160+ unique test domains across multiple
formats (plain domains, hosts, AdBlock Plus, dnsmasq), including:
- Valid tracking/ad domains for positive matching
- Overlapping domains across files for deduplication testing
- Parent/child domain pairs for subdomain optimization testing
- Invalid entries (IPs, malformed, special chars) for filter robustness
- Mock UCI/ubus fixtures simulating a standard OpenWrt environment
(512MB RAM, WAN interface up, dnsmasq running)
---
Adds the full AGPL-3.0-or-later license text (661 lines), matching the
`PKG_LICENSE` field already declared in the Makefile.
---
- Package compat bumped from `11` to `13` (in the ucode module's
`pkg.compat` constant), reflecting the architectural change
- All existing UCI configuration options preserved (same validation schema)
- All existing extra_commands preserved (same CLI interface)
- All existing DNS resolver modes preserved (same output formats)
- procd service triggers and config triggers unchanged
- `simple-adblock` migration path removed from uci-defaults (obsolete)
---
```sh
cd net/adblock-fast/tests && sh run_tests.sh
```
Requires: `ucode`, `ucode-mod-fs`, `ucode-mod-uci`, `ucode-mod-ubus`,
`sed`, `sort`, `grep`, `awk` (standard OpenWrt buildroot tools).
Signed-off-by: Stan Grishin <redacted>
Daniel F. Dickinson [Thu, 26 Feb 2026 02:52:40 +0000 (21:52 -0500)]
radicale3: bump to 3.6.1
Update to radicale3 to latest release
Signed-off-by: Daniel F. Dickinson <redacted>
Toke Høiland-Jørgensen [Wed, 25 Feb 2026 12:42:10 +0000 (13:42 +0100)]
net/sqm-scripts: bump to v1.7.2
This versions changes the default value of use_mq to off, as a
cautionary measure.
Signed-off-by: Toke Høiland-Jørgensen <redacted>
xiao bo [Sat, 21 Feb 2026 14:53:14 +0000 (22:53 +0800)]
sing-box: update to 1.12.22
changelog: https://github.com/SagerNet/sing-box/releases/tag/v1.12.22
Signed-off-by: xiao bo <redacted>
Niklas Thorild [Tue, 24 Feb 2026 11:26:37 +0000 (12:26 +0100)]
telegraf: update to 1.37.3
- Update Telegraf to v1.37.3
Signed-off-by: Niklas Thorild <redacted>
Philip Prindeville [Mon, 23 Feb 2026 21:10:23 +0000 (14:10 -0700)]
clixon: update to 7.7.0
Dropped a size_t patch that was upstreamed.
Signed-off-by: Philip Prindeville <redacted>
Philip Prindeville [Mon, 23 Feb 2026 21:09:49 +0000 (14:09 -0700)]
cligen: update to 7.7.0
No significant changes.
Signed-off-by: Philip Prindeville <redacted>
Dirk Brenken [Mon, 23 Feb 2026 16:05:26 +0000 (17:05 +0100)]
adblock: update 4.5.1-4
* fix/stabilize the f_list "merge" function
Signed-off-by: Dirk Brenken <redacted>
Toke Høiland-Jørgensen [Mon, 23 Feb 2026 14:40:58 +0000 (15:40 +0100)]
net/sqm-scripts: bump to v1.7.1
Contains a bugfix for cake_mq. Also add 'ip' as a dependency to be able
to create multi-queue ifb devices.
Signed-off-by: Toke Høiland-Jørgensen <redacted>
Rosen Penev [Fri, 6 Feb 2026 03:45:28 +0000 (19:45 -0800)]
python-gmpy2: update to 2.2.2
Fixes compilation.
Signed-off-by: Rosen Penev <redacted>
Olivier Poitrey [Sun, 22 Feb 2026 06:14:28 +0000 (06:14 +0000)]
nextdns: update to version 1.47.1
Update nextdns package to upstream version 1.47.1
Signed-off-by: Olivier Poitrey <redacted>
Paul Donald [Wed, 11 Feb 2026 16:51:21 +0000 (17:51 +0100)]
openvpn: drop unused eurephia
This plugin has not seen updates to keep it synchronised
with recent openvpn, nor any updates in the last several
years. It relies on the SHA1 algo which is deprecated,
and iptables. ovpn has its own management interface.
Signed-off-by: Paul Donald <redacted>
https://github.com/openwrt/packages/pull/28533
Paul Donald [Sun, 8 Feb 2026 21:47:32 +0000 (22:47 +0100)]
openvpn: enable management interface
This eases management of live servers via its socket
interface.
Signed-off-by: Paul Donald <redacted>
https://github.com/openwrt/packages/pull/28533
Paul Donald [Sun, 8 Feb 2026 21:46:39 +0000 (22:46 +0100)]
openvpn: disable compression in builds
If you need the security risks of using compression,
make a custom build.
Signed-off-by: Paul Donald <redacted>
https://github.com/openwrt/packages/pull/28533
Paul Donald [Mon, 16 Feb 2026 20:23:38 +0000 (21:23 +0100)]
openvpn: introduce ucode proto handler
In preparation for netifd support for ucode
proto handlers.
Signed-off-by: Paul Donald <redacted>
https://github.com/openwrt/packages/pull/28533
Paul Donald [Mon, 16 Feb 2026 19:01:50 +0000 (20:01 +0100)]
openvpn: introduce proto handler
openvpn needs a proto handler. Here it is.
Removed all of the up/down scripts from the init handler
and made those entirely optional (with some ucode examples).
The config options have been updated to reflect v 2.6/2.7,
with a 'd' flag to denote deprecated. Deprecated flags are
gated behind an 'allow_deprecated' config flag, which must
be on to use them. Some flags will cease to work in the next
version.
Users should not be using compression. Openvpn has enough
security holes and pitfalls already without using
compression.
Updated the example configs (left in place as legacy
documentation) and removed older cryptos which do not exist
in ovpn any longer.
A migration script is included -x. /etc/config/openvpn
entries become interface entries in /etc/config/network
with proto='openvpn'. The source config is retained.
Signed-off-by: Paul Donald <redacted>
https://github.com/openwrt/packages/pull/28533
Hauke Mehrtens [Sat, 21 Feb 2026 18:46:11 +0000 (19:46 +0100)]
libutp: deactivate -Werror
With fortify sources libutp fails to compile because the fortify sources
for musl use the GNU extension include_next. Do not fail when the
compiler issues a warning.
Fixes the following compile error:
```
In file included from libutp-2023.02.14~
c95738b1/utp_utils.cpp:23:
/include/fortify/stdlib.h:22:2: error: #include_next is a GCC extension [-Werror]
22 | #include_next <stdlib.h>
| ^~~~~~~~~~~~
```
Signed-off-by: Hauke Mehrtens <redacted>
Goetz Goerisch [Wed, 28 Jan 2026 07:40:39 +0000 (08:40 +0100)]
tayga: update to Git HEAD (2026-01-27)
The big endian patch was replace upstream.
This drops the last downstream patch and should serve as a test version
Signed-off-by: Goetz Goerisch <redacted>
John Audia [Fri, 6 Feb 2026 21:41:44 +0000 (16:41 -0500)]
lxc-auto: add optional dnsmasq dep wait on startup
Add opt-in support for waiting for dnsmasq to be fully initialized
before starting LXC containers. This addresses issues where containers
that depend on DNS resolution (e.g., AdGuardHome) start before dnsmasq
has loaded its DHCP lease table, resulting in hostnames not being
resolved to IP addresses.
The feature is controlled by two new optional UCI config options in
/etc/config/lxc-auto whose usage is commented therein.
No new depends are introduced with this change.
Signed-off-by: John Audia <redacted>
XCas13 [Sun, 8 Feb 2026 07:26:05 +0000 (11:26 +0400)]
btop: patch to move the log file to tmpfs
The log file path is hardcoded as $HOME/.local/state/btop.log, i.e. to the router’s flash storage rather than to tmpfs. This patch sets the log file path to /tmp/log/btop.log
Signed-off-by: XCas13 <redacted>
Gregory Gullin [Mon, 9 Feb 2026 11:25:25 +0000 (14:25 +0300)]
micro: update to 2.0.15
Release note: https://github.com/micro-editor/micro/releases/tag/v2.0.15
Signed-off-by: Gregory Gullin <redacted>
Maxim Storchak [Fri, 13 Feb 2026 12:58:43 +0000 (14:58 +0200)]
socat: update to 1.8.1.1
- update the package
- make SOCAT_SSL select OPENSSL_WITH_DEPRECATED
Signed-off-by: Maxim Storchak <redacted>