diff --git a/board/aarch64/alder-alder/Config.in b/board/aarch64/alder-alder/Config.in
index 12a19e1d9..5ad5cd86e 100644
--- a/board/aarch64/alder-alder/Config.in
+++ b/board/aarch64/alder-alder/Config.in
@@ -1,5 +1,6 @@
config BR2_PACKAGE_ALDER_ALDER
bool "Alder"
depends on BR2_aarch64
+ select BR2_PACKAGE_LINUX_FIRMWARE_INSIDE_SECURE_MINIFW
help
Alder
diff --git a/board/aarch64/marvell-cn9130-crb/Config.in b/board/aarch64/marvell-cn9130-crb/Config.in
index 3ede2b83c..38f36041a 100644
--- a/board/aarch64/marvell-cn9130-crb/Config.in
+++ b/board/aarch64/marvell-cn9130-crb/Config.in
@@ -1,5 +1,6 @@
config BR2_PACKAGE_MARVELL_CN9130_CRB
bool "Marvell CN9130-CRB"
depends on BR2_aarch64
+ select BR2_PACKAGE_LINUX_FIRMWARE_INSIDE_SECURE_MINIFW
help
Customer Reference Board for CN9130
diff --git a/board/aarch64/marvell-espressobin/Config.in b/board/aarch64/marvell-espressobin/Config.in
index a8bed5f6e..0537da7c8 100644
--- a/board/aarch64/marvell-espressobin/Config.in
+++ b/board/aarch64/marvell-espressobin/Config.in
@@ -1,5 +1,6 @@
config BR2_PACKAGE_MARVELL_ESPRESSOBIN
bool "Marvell ESPRESSObin"
depends on BR2_aarch64
+ select BR2_PACKAGE_LINUX_FIRMWARE_INSIDE_SECURE_MINIFW
help
Marvell ESPRESSObin
diff --git a/board/aarch64/styx-dcp-sc-28p/Config.in b/board/aarch64/styx-dcp-sc-28p/Config.in
index 2fa8832b8..09a9fd1b0 100644
--- a/board/aarch64/styx-dcp-sc-28p/Config.in
+++ b/board/aarch64/styx-dcp-sc-28p/Config.in
@@ -1,5 +1,6 @@
config BR2_PACKAGE_STYX_DCP_SC_28P
bool "Styx DCP-SC-28P"
depends on BR2_aarch64
+ select BR2_PACKAGE_LINUX_FIRMWARE_INSIDE_SECURE_MINIFW
help
Styx DCP-SC-28P
diff --git a/configs/aarch64_defconfig b/configs/aarch64_defconfig
index 5fcaf15f0..cc22f544d 100644
--- a/configs/aarch64_defconfig
+++ b/configs/aarch64_defconfig
@@ -27,7 +27,7 @@ BR2_ROOTFS_OVERLAY="${BR2_EXTERNAL_INFIX_PATH}/board/common/rootfs ${BR2_EXTERNA
BR2_ROOTFS_POST_BUILD_SCRIPT="${BR2_EXTERNAL_INFIX_PATH}/board/common/post-build.sh"
BR2_LINUX_KERNEL=y
BR2_LINUX_KERNEL_CUSTOM_VERSION=y
-BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="6.18.15"
+BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="6.18.16"
BR2_LINUX_KERNEL_USE_CUSTOM_CONFIG=y
BR2_LINUX_KERNEL_CUSTOM_CONFIG_FILE="${BR2_EXTERNAL_INFIX_PATH}/board/aarch64/linux_defconfig"
BR2_LINUX_KERNEL_INSTALL_TARGET=y
@@ -41,9 +41,6 @@ BR2_PACKAGE_DBUS_CXX=y
BR2_PACKAGE_DBUS_GLIB=y
BR2_PACKAGE_EUDEV_RULES_GEN=y
# BR2_PACKAGE_EUDEV_ENABLE_HWDB is not set
-BR2_PACKAGE_GPSD_DEVICES="/dev/gps0"
-BR2_PACKAGE_GPSD_MAX_CLIENT_VALUE=2
-BR2_PACKAGE_GPSD_MAX_DEV_VALUE=1
BR2_PACKAGE_GPTFDISK=y
BR2_PACKAGE_GPTFDISK_SGDISK=y
BR2_PACKAGE_MDIO_TOOLS=y
diff --git a/configs/aarch64_minimal_defconfig b/configs/aarch64_minimal_defconfig
index e535b5350..73ac12baa 100644
--- a/configs/aarch64_minimal_defconfig
+++ b/configs/aarch64_minimal_defconfig
@@ -27,7 +27,7 @@ BR2_ROOTFS_OVERLAY="${BR2_EXTERNAL_INFIX_PATH}/board/common/rootfs ${BR2_EXTERNA
BR2_ROOTFS_POST_BUILD_SCRIPT="${BR2_EXTERNAL_INFIX_PATH}/board/common/post-build.sh"
BR2_LINUX_KERNEL=y
BR2_LINUX_KERNEL_CUSTOM_VERSION=y
-BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="6.18.15"
+BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="6.18.16"
BR2_LINUX_KERNEL_USE_CUSTOM_CONFIG=y
BR2_LINUX_KERNEL_CUSTOM_CONFIG_FILE="${BR2_EXTERNAL_INFIX_PATH}/board/aarch64/linux_defconfig"
BR2_LINUX_KERNEL_INSTALL_TARGET=y
@@ -41,9 +41,6 @@ BR2_PACKAGE_DBUS_CXX=y
BR2_PACKAGE_DBUS_GLIB=y
BR2_PACKAGE_EUDEV_RULES_GEN=y
# BR2_PACKAGE_EUDEV_ENABLE_HWDB is not set
-BR2_PACKAGE_GPSD_DEVICES="/dev/gps0"
-BR2_PACKAGE_GPSD_MAX_CLIENT_VALUE=2
-BR2_PACKAGE_GPSD_MAX_DEV_VALUE=1
BR2_PACKAGE_GPTFDISK=y
BR2_PACKAGE_GPTFDISK_SGDISK=y
BR2_PACKAGE_MDIO_TOOLS=y
@@ -126,7 +123,6 @@ INFIX_DESC="Infix is an immutable, friendly, and secure operating system that tu
INFIX_HOME="https://github.com/kernelkit/infix/"
INFIX_DOC="https://www.kernelkit.org/infix/"
INFIX_SUPPORT="mailto:kernelkit@googlegroups.com"
-BR2_PACKAGE_FEATURE_GPS=y
BR2_PACKAGE_CONFD=y
BR2_PACKAGE_NETD=y
BR2_PACKAGE_CONFD_TEST_MODE=y
diff --git a/configs/arm_defconfig b/configs/arm_defconfig
index 081b46988..7606596f9 100644
--- a/configs/arm_defconfig
+++ b/configs/arm_defconfig
@@ -28,7 +28,7 @@ BR2_ROOTFS_OVERLAY="${BR2_EXTERNAL_INFIX_PATH}/board/common/rootfs ${BR2_EXTERNA
BR2_ROOTFS_POST_BUILD_SCRIPT="${BR2_EXTERNAL_INFIX_PATH}/board/common/post-build.sh"
BR2_LINUX_KERNEL=y
BR2_LINUX_KERNEL_CUSTOM_VERSION=y
-BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="6.18.15"
+BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="6.18.16"
BR2_LINUX_KERNEL_USE_CUSTOM_CONFIG=y
BR2_LINUX_KERNEL_CUSTOM_CONFIG_FILE="${BR2_EXTERNAL_INFIX_PATH}/board/arm/linux_defconfig"
BR2_LINUX_KERNEL_INSTALL_TARGET=y
@@ -43,9 +43,6 @@ BR2_PACKAGE_DBUS_CXX=y
BR2_PACKAGE_DBUS_GLIB=y
BR2_PACKAGE_EUDEV_RULES_GEN=y
# BR2_PACKAGE_EUDEV_ENABLE_HWDB is not set
-BR2_PACKAGE_GPSD_DEVICES="/dev/gps0"
-BR2_PACKAGE_GPSD_MAX_CLIENT_VALUE=2
-BR2_PACKAGE_GPSD_MAX_DEV_VALUE=1
BR2_PACKAGE_GPTFDISK=y
BR2_PACKAGE_GPTFDISK_SGDISK=y
BR2_PACKAGE_MDIO_TOOLS=y
diff --git a/configs/arm_minimal_defconfig b/configs/arm_minimal_defconfig
index f57a0263c..aea8e1a1e 100644
--- a/configs/arm_minimal_defconfig
+++ b/configs/arm_minimal_defconfig
@@ -28,7 +28,7 @@ BR2_ROOTFS_OVERLAY="${BR2_EXTERNAL_INFIX_PATH}/board/common/rootfs ${BR2_EXTERNA
BR2_ROOTFS_POST_BUILD_SCRIPT="${BR2_EXTERNAL_INFIX_PATH}/board/common/post-build.sh"
BR2_LINUX_KERNEL=y
BR2_LINUX_KERNEL_CUSTOM_VERSION=y
-BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="6.18.15"
+BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="6.18.16"
BR2_LINUX_KERNEL_USE_CUSTOM_CONFIG=y
BR2_LINUX_KERNEL_CUSTOM_CONFIG_FILE="${BR2_EXTERNAL_INFIX_PATH}/board/arm/linux_defconfig"
BR2_LINUX_KERNEL_INSTALL_TARGET=y
@@ -43,9 +43,6 @@ BR2_PACKAGE_DBUS_CXX=y
BR2_PACKAGE_DBUS_GLIB=y
BR2_PACKAGE_EUDEV_RULES_GEN=y
# BR2_PACKAGE_EUDEV_ENABLE_HWDB is not set
-BR2_PACKAGE_GPSD_DEVICES="/dev/gps0"
-BR2_PACKAGE_GPSD_MAX_CLIENT_VALUE=2
-BR2_PACKAGE_GPSD_MAX_DEV_VALUE=1
BR2_PACKAGE_GPTFDISK=y
BR2_PACKAGE_GPTFDISK_SGDISK=y
BR2_PACKAGE_MDIO_TOOLS=y
@@ -126,7 +123,6 @@ INFIX_DESC="Infix is an immutable, friendly, and secure operating system that tu
INFIX_HOME="https://github.com/kernelkit/infix/"
INFIX_DOC="https://www.kernelkit.org/infix/"
INFIX_SUPPORT="mailto:kernelkit@googlegroups.com"
-BR2_PACKAGE_FEATURE_GPS=y
BR2_PACKAGE_CONFD=y
BR2_PACKAGE_NETD=y
BR2_PACKAGE_CONFD_TEST_MODE=y
diff --git a/configs/riscv64_defconfig b/configs/riscv64_defconfig
index a7421e15f..bacf46a99 100644
--- a/configs/riscv64_defconfig
+++ b/configs/riscv64_defconfig
@@ -52,9 +52,6 @@ BR2_PACKAGE_DBUS_CXX=y
BR2_PACKAGE_DBUS_GLIB=y
BR2_PACKAGE_EUDEV_RULES_GEN=y
# BR2_PACKAGE_EUDEV_ENABLE_HWDB is not set
-BR2_PACKAGE_GPSD_DEVICES="/dev/gps0"
-BR2_PACKAGE_GPSD_MAX_CLIENT_VALUE=2
-BR2_PACKAGE_GPSD_MAX_DEV_VALUE=1
BR2_PACKAGE_GPTFDISK=y
BR2_PACKAGE_GPTFDISK_SGDISK=y
BR2_PACKAGE_MDIO_TOOLS=y
diff --git a/configs/x86_64_defconfig b/configs/x86_64_defconfig
index 8dbb20f72..8752a57dc 100644
--- a/configs/x86_64_defconfig
+++ b/configs/x86_64_defconfig
@@ -26,7 +26,7 @@ BR2_ROOTFS_OVERLAY="${BR2_EXTERNAL_INFIX_PATH}/board/common/rootfs ${BR2_EXTERNA
BR2_ROOTFS_POST_BUILD_SCRIPT="board/qemu/x86_64/post-build.sh ${BR2_EXTERNAL_INFIX_PATH}/board/common/post-build.sh"
BR2_LINUX_KERNEL=y
BR2_LINUX_KERNEL_CUSTOM_VERSION=y
-BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="6.18.15"
+BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="6.18.16"
BR2_LINUX_KERNEL_USE_CUSTOM_CONFIG=y
BR2_LINUX_KERNEL_CUSTOM_CONFIG_FILE="${BR2_EXTERNAL_INFIX_PATH}/board/x86_64/linux_defconfig"
BR2_LINUX_KERNEL_INSTALL_TARGET=y
@@ -41,9 +41,6 @@ BR2_PACKAGE_DBUS_CXX=y
BR2_PACKAGE_DBUS_GLIB=y
BR2_PACKAGE_EUDEV_RULES_GEN=y
# BR2_PACKAGE_EUDEV_ENABLE_HWDB is not set
-BR2_PACKAGE_GPSD_DEVICES="/dev/gps0"
-BR2_PACKAGE_GPSD_MAX_CLIENT_VALUE=2
-BR2_PACKAGE_GPSD_MAX_DEV_VALUE=1
BR2_PACKAGE_GPTFDISK=y
BR2_PACKAGE_GPTFDISK_SGDISK=y
BR2_PACKAGE_RNG_TOOLS=y
diff --git a/configs/x86_64_minimal_defconfig b/configs/x86_64_minimal_defconfig
index 7d1d55f47..61260c880 100644
--- a/configs/x86_64_minimal_defconfig
+++ b/configs/x86_64_minimal_defconfig
@@ -26,7 +26,7 @@ BR2_ROOTFS_OVERLAY="${BR2_EXTERNAL_INFIX_PATH}/board/common/rootfs ${BR2_EXTERNA
BR2_ROOTFS_POST_BUILD_SCRIPT="board/qemu/x86_64/post-build.sh ${BR2_EXTERNAL_INFIX_PATH}/board/common/post-build.sh"
BR2_LINUX_KERNEL=y
BR2_LINUX_KERNEL_CUSTOM_VERSION=y
-BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="6.18.15"
+BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="6.18.16"
BR2_LINUX_KERNEL_USE_CUSTOM_CONFIG=y
BR2_LINUX_KERNEL_CUSTOM_CONFIG_FILE="${BR2_EXTERNAL_INFIX_PATH}/board/x86_64/linux_defconfig"
BR2_LINUX_KERNEL_INSTALL_TARGET=y
@@ -41,9 +41,6 @@ BR2_PACKAGE_DBUS_CXX=y
BR2_PACKAGE_DBUS_GLIB=y
BR2_PACKAGE_EUDEV_RULES_GEN=y
# BR2_PACKAGE_EUDEV_ENABLE_HWDB is not set
-BR2_PACKAGE_GPSD_DEVICES="/dev/gps0"
-BR2_PACKAGE_GPSD_MAX_CLIENT_VALUE=2
-BR2_PACKAGE_GPSD_MAX_DEV_VALUE=1
BR2_PACKAGE_GPTFDISK=y
BR2_PACKAGE_GPTFDISK_SGDISK=y
BR2_PACKAGE_RNG_TOOLS=y
@@ -125,7 +122,6 @@ INFIX_DESC="Infix is an immutable, friendly, and secure operating system that tu
INFIX_HOME="https://github.com/kernelkit/infix/"
INFIX_DOC="https://www.kernelkit.org/infix/"
INFIX_SUPPORT="mailto:kernelkit@googlegroups.com"
-BR2_PACKAGE_FEATURE_GPS=y
BR2_PACKAGE_CONFD=y
BR2_PACKAGE_NETD=y
BR2_PACKAGE_CONFD_TEST_MODE=y
diff --git a/doc/ChangeLog.md b/doc/ChangeLog.md
index 1550faa19..8fd5df4e8 100644
--- a/doc/ChangeLog.md
+++ b/doc/ChangeLog.md
@@ -3,6 +3,24 @@ Change Log
All notable changes to the project are documented in this file.
+[v26.02.1][] - 2026-03-11
+-------------------------
+
+### Changes
+
+- Upgrade Linux kernel to 6.18.16 (LTS)
+- Add support for disabling WiFi and GPS features in builds
+- Add OSPF point-to-multipoint (P2MP) and hybrid interface type support. This
+ also includes support for setting static neighbors, issue #1426
+
+### Fixes
+
+- Fix #1389: legacy name limit in firewalld triggered problems with policy names
+- Fix #1416: `show firewall` command show an error when the firewall is disabled
+- Fix instabilities in Zebra route manager after Frr upgrade in v26.02.0
+- Fix regression in MVEBU SafeXcel Crypto Engine for Marvell Armada SOCs (37xx,
+ 7k, 8k, and CN913x series). Firmware package lost in v26.01.0
+
[v26.02.0][] - 2026-03-01
-------------------------
@@ -1932,6 +1950,7 @@ Supported YANG models in addition to those used by sysrepo and netopeer:
[buildroot]: https://buildroot.org/
[UNRELEASED]: https://github.com/kernelkit/infix/compare/v26.02.0...HEAD
+[v26.02.1]: https://github.com/kernelkit/infix/compare/v26.02.0...v26.02.1
[v26.02.0]: https://github.com/kernelkit/infix/compare/v26.01.0...v26.02.0
[v26.01.0]: https://github.com/kernelkit/infix/compare/v25.11.0...v26.01.0
[v25.11.0]: https://github.com/kernelkit/infix/compare/v25.10.0...v25.11.0
diff --git a/doc/routing.md b/doc/routing.md
index 13573b454..e473ba854 100644
--- a/doc/routing.md
+++ b/doc/routing.md
@@ -131,6 +131,66 @@ an Ethernet interface can be done as follows.
admin@example:/config/routing/…/ospf/area/0.0.0.0/interface/e0/>
+
+### Point-to-Multipoint
+
+Point-to-Multipoint (P2MP) is used when multiple OSPF routers share a
+common network segment but should form individual adjacencies rather
+than electing a Designated Router (DR). This is common in NBMA-like
+environments, DMVPN, or hub-and-spoke topologies.
+
+Infix supports two P2MP variants via the `interface-type` setting:
+
+| **Interface Type** | **Behavior** |
+|:----------------------|:-----------------------------------------------|
+| `hybrid` | P2MP with multicast Hellos (broadcast-capable) |
+| `point-to-multipoint` | P2MP with unicast Hellos (non-broadcast) |
+
+#### Hybrid (broadcast-capable P2MP)
+
+Use `hybrid` when all neighbors on the segment can receive multicast.
+Hello packets are sent to the standard OSPF multicast address (224.0.0.5)
+and neighbors are discovered automatically — no manual neighbor
+configuration is needed.
+
+
admin@example:/config/> edit routing control-plane-protocol ospfv2 name default ospf
+admin@example:/config/routing/…/ospf/> set area 0.0.0.0 interface e0 interface-type hybrid
+admin@example:/config/routing/…/ospf/> leave
+admin@example:/>
+
+
+#### Non-broadcast P2MP
+
+Use `point-to-multipoint` when the network does not support multicast.
+Hello packets are sent as unicast directly to each configured neighbor.
+Since neighbors cannot be discovered automatically, they must be
+configured explicitly using static neighbors (see below).
+
+
admin@example:/config/> edit routing control-plane-protocol ospfv2 name default ospf
+admin@example:/config/routing/…/ospf/> set area 0.0.0.0 interface e0 interface-type point-to-multipoint
+admin@example:/config/routing/…/ospf/> leave
+admin@example:/>
+
+
+
+### Static Neighbors
+
+When using non-broadcast interface types (such as `point-to-multipoint`),
+OSPF cannot discover neighbors via multicast. Static neighbors must be
+configured so the router knows where to send unicast Hello packets.
+
+
admin@example:/config/> edit routing control-plane-protocol ospfv2 name default ospf
+admin@example:/config/routing/…/ospf/> set area 0.0.0.0 interface e0 static-neighbors neighbor 10.0.123.2
+admin@example:/config/routing/…/ospf/> set area 0.0.0.0 interface e0 static-neighbors neighbor 10.0.123.3
+admin@example:/config/routing/…/ospf/> leave
+admin@example:/>
+
+
+> [!NOTE]
+> Static neighbors are only needed for non-broadcast interface types.
+> With `hybrid` (or `broadcast`), neighbors are discovered automatically
+> via multicast.
+
### OSPF global settings
In addition to *area* and *interface* specific settings, OSPF provides
diff --git a/package/confd/confd.mk b/package/confd/confd.mk
index 7cfb2347f..e01756ca6 100644
--- a/package/confd/confd.mk
+++ b/package/confd/confd.mk
@@ -30,6 +30,11 @@ CONFD_CONF_OPTS += --enable-wifi
else
CONFD_CONF_OPTS += --disable-wifi
endif
+ifeq ($(BR2_PACKAGE_FEATURE_GPS),y)
+CONFD_CONF_OPTS += --enable-gps
+else
+CONFD_CONF_OPTS += --disable-gps
+endif
define CONFD_INSTALL_EXTRA
for fn in confd.conf resolvconf.conf; do \
cp $(CONFD_PKGDIR)/$$fn $(FINIT_D)/available/; \
@@ -80,6 +85,12 @@ define CONFD_INSTALL_YANG_MODULES_WIFI
$(BR2_EXTERNAL_INFIX_PATH)/utils/srload $(@D)/yang/wifi.inc
endef
endif
+ifeq ($(BR2_PACKAGE_FEATURE_GPS),y)
+define CONFD_INSTALL_YANG_MODULES_GPS
+ $(COMMON_SYSREPO_ENV) \
+ $(BR2_EXTERNAL_INFIX_PATH)/utils/srload $(@D)/yang/gps.inc
+endef
+endif
# PER_PACKAGE_DIR
# Since the last package in the dependency chain that runs sysrepoctl is confd, we need to
@@ -109,6 +120,7 @@ CONFD_POST_INSTALL_TARGET_HOOKS += CONFD_INSTALL_EXTRA
CONFD_POST_INSTALL_TARGET_HOOKS += CONFD_INSTALL_YANG_MODULES
CONFD_POST_INSTALL_TARGET_HOOKS += CONFD_INSTALL_YANG_MODULES_CONTAINERS
CONFD_POST_INSTALL_TARGET_HOOKS += CONFD_INSTALL_YANG_MODULES_WIFI
+CONFD_POST_INSTALL_TARGET_HOOKS += CONFD_INSTALL_YANG_MODULES_GPS
CONFD_POST_INSTALL_TARGET_HOOKS += CONFD_INSTALL_IN_ROMFS
CONFD_TARGET_FINALIZE_HOOKS += CONFD_CLEANUP
diff --git a/package/skeleton-init-finit/skeleton/etc/default/zebra b/package/skeleton-init-finit/skeleton/etc/default/zebra
index 4467b9af2..13d5e53a2 100644
--- a/package/skeleton-init-finit/skeleton/etc/default/zebra
+++ b/package/skeleton-init-finit/skeleton/etc/default/zebra
@@ -1,2 +1,2 @@
# --log-level debug
-ZEBRA_ARGS="-A 127.0.0.1 -u frr -g frr --log syslog --log-level err"
+ZEBRA_ARGS="-A 127.0.0.1 -a -s 90000000 -u frr -g frr --log syslog --log-level err"
diff --git a/package/skeleton-init-finit/skeleton/etc/finit.d/available/frr/mgmtd.conf b/package/skeleton-init-finit/skeleton/etc/finit.d/available/frr/mgmtd.conf
index 825aff9cc..fbf2c0861 100644
--- a/package/skeleton-init-finit/skeleton/etc/finit.d/available/frr/mgmtd.conf
+++ b/package/skeleton-init-finit/skeleton/etc/finit.d/available/frr/mgmtd.conf
@@ -1,2 +1,3 @@
service pid:!/run/frr/mgmtd.pid env:-/etc/default/mgmtd \
- [2345] mgmtd $MGMTD_ARGS -- FRR MGMT daemon
+ [2345] mgmtd $MGMTD_ARGS \
+ -- FRR MGMT daemon
diff --git a/package/skeleton-init-finit/skeleton/etc/finit.d/available/frr/ospfd.conf b/package/skeleton-init-finit/skeleton/etc/finit.d/available/frr/ospfd.conf
index e4652ff1f..20b523396 100644
--- a/package/skeleton-init-finit/skeleton/etc/finit.d/available/frr/ospfd.conf
+++ b/package/skeleton-init-finit/skeleton/etc/finit.d/available/frr/ospfd.conf
@@ -1,2 +1,3 @@
-service env:-/etc/default/ospfd \
- [2345] ospfd $OSPFD_ARGS -- OSPF daemon
+service pid:!/run/frr/ospfd.pid env:-/etc/default/ospfd \
+ [2345] ospfd $OSPFD_ARGS \
+ -- OSPF daemon
diff --git a/package/skeleton-init-finit/skeleton/etc/finit.d/available/frr/ripd.conf b/package/skeleton-init-finit/skeleton/etc/finit.d/available/frr/ripd.conf
index bb311b582..8a8f93308 100644
--- a/package/skeleton-init-finit/skeleton/etc/finit.d/available/frr/ripd.conf
+++ b/package/skeleton-init-finit/skeleton/etc/finit.d/available/frr/ripd.conf
@@ -1,3 +1,3 @@
-service env:-/etc/default/ripd \
- [2345] ripd $RIPD_ARGS
+service pid:!/run/frr/ripd.pid env:-/etc/default/ripd \
+ [2345] ripd $RIPD_ARGS \
-- RIP daemon
diff --git a/package/skeleton-init-finit/skeleton/etc/finit.d/available/frr/zebra.conf b/package/skeleton-init-finit/skeleton/etc/finit.d/available/frr/zebra.conf
index dce1abcac..30b4a1668 100644
--- a/package/skeleton-init-finit/skeleton/etc/finit.d/available/frr/zebra.conf
+++ b/package/skeleton-init-finit/skeleton/etc/finit.d/available/frr/zebra.conf
@@ -1,3 +1,3 @@
-service pid:!/run/frr/zebra.pid env:-/etc/default/zebra \
- [2345] zebra $ZEBRA_ARGS
+service pid:!/run/frr/zebra.pid env:-/etc/default/zebra \
+ [2345] zebra $ZEBRA_ARGS \
-- Zebra routing daemon
diff --git a/board/common/rootfs/etc/frr/daemons b/package/skeleton-init-finit/skeleton/etc/frr/daemons
similarity index 72%
rename from board/common/rootfs/etc/frr/daemons
rename to package/skeleton-init-finit/skeleton/etc/frr/daemons
index 2094cd758..b8eb48357 100644
--- a/board/common/rootfs/etc/frr/daemons
+++ b/package/skeleton-init-finit/skeleton/etc/frr/daemons
@@ -1,5 +1,4 @@
-# Default FRR daemons file for Infix - confd overwrites on routing changes.
-# watchfrr, zebra, mgmtd, and staticd are always started by frrinit.sh.
+# Default FRR daemons file used with watchfrr, started by frrinit.sh.
ospfd=no
ripd=no
bfdd=no
@@ -25,4 +24,3 @@ staticd_options="-A 127.0.0.1"
bfdd_options=" -A 127.0.0.1"
frr_profile="traditional"
-
diff --git a/board/common/rootfs/etc/frr/frr.conf b/package/skeleton-init-finit/skeleton/etc/frr/frr.conf
similarity index 100%
rename from board/common/rootfs/etc/frr/frr.conf
rename to package/skeleton-init-finit/skeleton/etc/frr/frr.conf
diff --git a/package/skeleton-init-finit/skeleton/etc/frr/mgmtd.conf b/package/skeleton-init-finit/skeleton/etc/frr/mgmtd.conf
new file mode 100644
index 000000000..12ab41186
--- /dev/null
+++ b/package/skeleton-init-finit/skeleton/etc/frr/mgmtd.conf
@@ -0,0 +1 @@
+! Empty stub — mgmtd reads its own config at startup; file must exist to avoid log noise.
diff --git a/package/skeleton-init-finit/skeleton/etc/frr/ripd.conf b/package/skeleton-init-finit/skeleton/etc/frr/ripd.conf
new file mode 100644
index 000000000..0adacf4f9
--- /dev/null
+++ b/package/skeleton-init-finit/skeleton/etc/frr/ripd.conf
@@ -0,0 +1 @@
+! Empty stub — mgmtd reads per-daemon configs at startup; file must exist to avoid log noise.
diff --git a/package/skeleton-init-finit/skeleton/etc/frr/ripngd.conf b/package/skeleton-init-finit/skeleton/etc/frr/ripngd.conf
new file mode 100644
index 000000000..0adacf4f9
--- /dev/null
+++ b/package/skeleton-init-finit/skeleton/etc/frr/ripngd.conf
@@ -0,0 +1 @@
+! Empty stub — mgmtd reads per-daemon configs at startup; file must exist to avoid log noise.
diff --git a/package/skeleton-init-finit/skeleton/etc/frr/staticd.conf b/package/skeleton-init-finit/skeleton/etc/frr/staticd.conf
new file mode 100644
index 000000000..0adacf4f9
--- /dev/null
+++ b/package/skeleton-init-finit/skeleton/etc/frr/staticd.conf
@@ -0,0 +1 @@
+! Empty stub — mgmtd reads per-daemon configs at startup; file must exist to avoid log noise.
diff --git a/package/skeleton-init-finit/skeleton/etc/frr/zebra.conf b/package/skeleton-init-finit/skeleton/etc/frr/zebra.conf
new file mode 100644
index 000000000..0adacf4f9
--- /dev/null
+++ b/package/skeleton-init-finit/skeleton/etc/frr/zebra.conf
@@ -0,0 +1 @@
+! Empty stub — mgmtd reads per-daemon configs at startup; file must exist to avoid log noise.
diff --git a/patches/firewalld/2.3.1/0001-Silence-warnings-about-old-backends.patch b/patches/firewalld/2.3.1/0001-Silence-warnings-about-old-backends.patch
index 6bc17856f..eed16ba64 100644
--- a/patches/firewalld/2.3.1/0001-Silence-warnings-about-old-backends.patch
+++ b/patches/firewalld/2.3.1/0001-Silence-warnings-about-old-backends.patch
@@ -1,7 +1,7 @@
From 03f273fc540082d1eaa23bd9b5847e695afd8283 Mon Sep 17 00:00:00 2001
From: Joachim Wiberg
Date: Thu, 25 Sep 2025 15:00:54 +0200
-Subject: [PATCH] Silence warnings about old backends
+Subject: [PATCH 1/2] Silence warnings about old backends
Organization: Wires
Signed-off-by: Joachim Wiberg
diff --git a/patches/firewalld/2.3.1/0002-fix-functions-lift-iptables-name-length-limit-when-u.patch b/patches/firewalld/2.3.1/0002-fix-functions-lift-iptables-name-length-limit-when-u.patch
new file mode 100644
index 000000000..da603bd25
--- /dev/null
+++ b/patches/firewalld/2.3.1/0002-fix-functions-lift-iptables-name-length-limit-when-u.patch
@@ -0,0 +1,95 @@
+From 6ab218fe7f2c7027cc5347e3b082285870c502e6 Mon Sep 17 00:00:00 2001
+From: Joachim Wiberg
+Date: Fri, 6 Mar 2026 07:44:38 +0100
+Subject: [PATCH 2/2] fix(functions): lift iptables name length limit when
+ using nftables
+Organization: Wires
+
+The max_zone_name_len() and max_policy_name_len() functions return 17
+and 18 respectively, derived from iptables' 28-char netfilter chain name
+limit. These limits are applied unconditionally in Zone.check_name()
+and Policy.check_name() regardless of the active backend.
+
+When FirewallBackend=nftables nftables imposes no such restriction, so
+user-defined zone and policy names (e.g. "appletv-to-lan-guest", 20
+chars) that exceed the iptables-derived limit are incorrectly rejected.
+
+Add _nftables_backend() which reads firewalld.conf directly so the check
+can be skipped without threading backend context through to check_name()
+call sites, which have no access to all_io_objects. When nftables is
+active, both functions return sys.maxsize, effectively disabling the
+length check.
+
+Signed-off-by: Joachim Wiberg
+---
+ src/firewall/functions.py | 31 ++++++++++++++++++++++++++++++-
+ 1 file changed, 30 insertions(+), 1 deletion(-)
+
+diff --git a/src/firewall/functions.py b/src/firewall/functions.py
+index 27c862fd..1b8a32ce 100644
+--- a/src/firewall/functions.py
++++ b/src/firewall/functions.py
+@@ -10,9 +10,10 @@ import os
+ import os.path
+ import shlex
+ import string
++import sys
+ import tempfile
+ from firewall.core.logger import log
+-from firewall.config import FIREWALLD_TEMPDIR, FIREWALLD_PIDFILE
++from firewall.config import FIREWALLD_CONF, FIREWALLD_TEMPDIR, FIREWALLD_PIDFILE
+
+ NOPRINT_TRANS_TABLE = {
+ # Limit to C0 and C1 code points. Building entries for all unicode code
+@@ -576,12 +577,35 @@ def ppid_of_pid(pid):
+ return pid
+
+
++def _nftables_backend():
++ """Return True if FirewallBackend=nftables is configured in firewalld.conf.
++
++ When using nftables the iptables-derived 28-char chain name limit does not
++ apply. Reading the config file directly avoids threading backend context
++ through check_name() call sites, which have no access to all_io_objects.
++ """
++ try:
++ with open(FIREWALLD_CONF) as f:
++ for line in f:
++ line = line.strip()
++ if line.startswith("FirewallBackend="):
++ return line.split("=", 1)[1].strip() == "nftables"
++ except OSError:
++ pass
++ return False
++
++
+ def max_policy_name_len():
+ """
+ iptables limits length of chain to (currently) 28 chars.
+ The longest chain we create is POST__allow,
+ which leaves 28 - 11 = 17 chars for .
++
++ When using the nftables backend, nftables imposes no practical name length
++ restriction, so we return sys.maxsize to lift the check entirely.
+ """
++ if _nftables_backend():
++ return sys.maxsize
+ from firewall.core.ipXtables import POLICY_CHAIN_PREFIX
+ from firewall.core.base import SHORTCUTS
+
+@@ -594,7 +618,12 @@ def max_zone_name_len():
+ Netfilter limits length of chain to (currently) 28 chars.
+ The longest chain we create is POST__allow,
+ which leaves 28 - 11 = 17 chars for .
++
++ When using the nftables backend, nftables imposes no practical name length
++ restriction, so we return sys.maxsize to lift the check entirely.
+ """
++ if _nftables_backend():
++ return sys.maxsize
+ from firewall.core.base import SHORTCUTS
+
+ longest_shortcut = max(map(len, SHORTCUTS.values()))
+--
+2.43.0
+
diff --git a/patches/linux/6.18.15/0001-net-phy-marvell10g-Support-firmware-loading-on-88X33.patch b/patches/linux/6.18.16/0001-net-phy-marvell10g-Support-firmware-loading-on-88X33.patch
similarity index 98%
rename from patches/linux/6.18.15/0001-net-phy-marvell10g-Support-firmware-loading-on-88X33.patch
rename to patches/linux/6.18.16/0001-net-phy-marvell10g-Support-firmware-loading-on-88X33.patch
index 8dfe21c66..7b836239e 100644
--- a/patches/linux/6.18.15/0001-net-phy-marvell10g-Support-firmware-loading-on-88X33.patch
+++ b/patches/linux/6.18.16/0001-net-phy-marvell10g-Support-firmware-loading-on-88X33.patch
@@ -1,4 +1,4 @@
-From 443245154df3a713a61feffa5043da4c200b30fa Mon Sep 17 00:00:00 2001
+From 2ca55761d22dbc39d26862cf94577cf44f4b85a0 Mon Sep 17 00:00:00 2001
From: Tobias Waldekranz
Date: Tue, 19 Sep 2023 18:38:10 +0200
Subject: [PATCH 01/33] net: phy: marvell10g: Support firmware loading on
diff --git a/patches/linux/6.18.15/0002-net-phy-marvell10g-Fix-power-up-when-strapped-to-sta.patch b/patches/linux/6.18.16/0002-net-phy-marvell10g-Fix-power-up-when-strapped-to-sta.patch
similarity index 96%
rename from patches/linux/6.18.15/0002-net-phy-marvell10g-Fix-power-up-when-strapped-to-sta.patch
rename to patches/linux/6.18.16/0002-net-phy-marvell10g-Fix-power-up-when-strapped-to-sta.patch
index f2f91cafd..0f9915a35 100644
--- a/patches/linux/6.18.15/0002-net-phy-marvell10g-Fix-power-up-when-strapped-to-sta.patch
+++ b/patches/linux/6.18.16/0002-net-phy-marvell10g-Fix-power-up-when-strapped-to-sta.patch
@@ -1,4 +1,4 @@
-From a81a31111af41ce03bfd0a6bf493a440195c0aa8 Mon Sep 17 00:00:00 2001
+From 554729f2a8c83f617663c097cc389b5c791db8aa Mon Sep 17 00:00:00 2001
From: Tobias Waldekranz
Date: Tue, 21 Nov 2023 20:15:24 +0100
Subject: [PATCH 02/33] net: phy: marvell10g: Fix power-up when strapped to
diff --git a/patches/linux/6.18.15/0003-net-phy-marvell10g-Add-LED-support-for-88X3310.patch b/patches/linux/6.18.16/0003-net-phy-marvell10g-Add-LED-support-for-88X3310.patch
similarity index 99%
rename from patches/linux/6.18.15/0003-net-phy-marvell10g-Add-LED-support-for-88X3310.patch
rename to patches/linux/6.18.16/0003-net-phy-marvell10g-Add-LED-support-for-88X3310.patch
index 7493aa742..a4643e034 100644
--- a/patches/linux/6.18.15/0003-net-phy-marvell10g-Add-LED-support-for-88X3310.patch
+++ b/patches/linux/6.18.16/0003-net-phy-marvell10g-Add-LED-support-for-88X3310.patch
@@ -1,4 +1,4 @@
-From 05bbe3556f357ba52eb12aef54831c2a7270f4fe Mon Sep 17 00:00:00 2001
+From 7090bf6cbf332d9a38e04a58b026d2d00701ca67 Mon Sep 17 00:00:00 2001
From: Tobias Waldekranz
Date: Wed, 15 Nov 2023 20:58:42 +0100
Subject: [PATCH 03/33] net: phy: marvell10g: Add LED support for 88X3310
diff --git a/patches/linux/6.18.15/0004-net-phy-marvell10g-Support-LEDs-tied-to-a-single-med.patch b/patches/linux/6.18.16/0004-net-phy-marvell10g-Support-LEDs-tied-to-a-single-med.patch
similarity index 97%
rename from patches/linux/6.18.15/0004-net-phy-marvell10g-Support-LEDs-tied-to-a-single-med.patch
rename to patches/linux/6.18.16/0004-net-phy-marvell10g-Support-LEDs-tied-to-a-single-med.patch
index 8c8ef4031..3ce7a50bc 100644
--- a/patches/linux/6.18.15/0004-net-phy-marvell10g-Support-LEDs-tied-to-a-single-med.patch
+++ b/patches/linux/6.18.16/0004-net-phy-marvell10g-Support-LEDs-tied-to-a-single-med.patch
@@ -1,4 +1,4 @@
-From e4d030d502f358a4ed21eb75e2c3cffbe5c2b8da Mon Sep 17 00:00:00 2001
+From 7776e8acf62062136892b9623c24898c09778e48 Mon Sep 17 00:00:00 2001
From: Tobias Waldekranz
Date: Tue, 12 Dec 2023 09:51:05 +0100
Subject: [PATCH 04/33] net: phy: marvell10g: Support LEDs tied to a single
diff --git a/patches/linux/6.18.15/0005-net-phy-Do-not-resume-PHY-when-attaching.patch b/patches/linux/6.18.16/0005-net-phy-Do-not-resume-PHY-when-attaching.patch
similarity index 94%
rename from patches/linux/6.18.15/0005-net-phy-Do-not-resume-PHY-when-attaching.patch
rename to patches/linux/6.18.16/0005-net-phy-Do-not-resume-PHY-when-attaching.patch
index 12ca23ef9..95823f841 100644
--- a/patches/linux/6.18.15/0005-net-phy-Do-not-resume-PHY-when-attaching.patch
+++ b/patches/linux/6.18.16/0005-net-phy-Do-not-resume-PHY-when-attaching.patch
@@ -1,4 +1,4 @@
-From 44c1b964008099707a86150597f07fb9afa2d4ab Mon Sep 17 00:00:00 2001
+From 96ce164208881c981e9e8b1231e2b45957a89b5e Mon Sep 17 00:00:00 2001
From: Tobias Waldekranz
Date: Wed, 27 Mar 2024 10:10:19 +0100
Subject: [PATCH 05/33] net: phy: Do not resume PHY when attaching
diff --git a/patches/linux/6.18.15/0006-net-bridge-avoid-classifying-unknown-multicast-as-mr.patch b/patches/linux/6.18.16/0006-net-bridge-avoid-classifying-unknown-multicast-as-mr.patch
similarity index 99%
rename from patches/linux/6.18.15/0006-net-bridge-avoid-classifying-unknown-multicast-as-mr.patch
rename to patches/linux/6.18.16/0006-net-bridge-avoid-classifying-unknown-multicast-as-mr.patch
index c5c170558..035094869 100644
--- a/patches/linux/6.18.15/0006-net-bridge-avoid-classifying-unknown-multicast-as-mr.patch
+++ b/patches/linux/6.18.16/0006-net-bridge-avoid-classifying-unknown-multicast-as-mr.patch
@@ -1,4 +1,4 @@
-From a0ed79ec338c0a1ec647ecffe5de532bc93ae34e Mon Sep 17 00:00:00 2001
+From 74ce9cb9a4845537644a67769ee9f441bf9d3a78 Mon Sep 17 00:00:00 2001
From: Joachim Wiberg
Date: Mon, 4 Mar 2024 16:47:28 +0100
Subject: [PATCH 06/33] net: bridge: avoid classifying unknown multicast as
diff --git a/patches/linux/6.18.15/0007-net-bridge-Ignore-router-ports-when-forwarding-L2-mu.patch b/patches/linux/6.18.16/0007-net-bridge-Ignore-router-ports-when-forwarding-L2-mu.patch
similarity index 95%
rename from patches/linux/6.18.15/0007-net-bridge-Ignore-router-ports-when-forwarding-L2-mu.patch
rename to patches/linux/6.18.16/0007-net-bridge-Ignore-router-ports-when-forwarding-L2-mu.patch
index 841c111ed..4f7805326 100644
--- a/patches/linux/6.18.15/0007-net-bridge-Ignore-router-ports-when-forwarding-L2-mu.patch
+++ b/patches/linux/6.18.16/0007-net-bridge-Ignore-router-ports-when-forwarding-L2-mu.patch
@@ -1,4 +1,4 @@
-From 1d7a80c8f0a1f1fdb9feededbe6a81ef95ea235f Mon Sep 17 00:00:00 2001
+From e7b3717762434f780616a0b641169f5cfa1a2398 Mon Sep 17 00:00:00 2001
From: Joachim Wiberg
Date: Tue, 5 Mar 2024 06:44:41 +0100
Subject: [PATCH 07/33] net: bridge: Ignore router ports when forwarding L2
diff --git a/patches/linux/6.18.15/0008-net-bridge-drop-delay-for-applying-strict-multicast-.patch b/patches/linux/6.18.16/0008-net-bridge-drop-delay-for-applying-strict-multicast-.patch
similarity index 99%
rename from patches/linux/6.18.15/0008-net-bridge-drop-delay-for-applying-strict-multicast-.patch
rename to patches/linux/6.18.16/0008-net-bridge-drop-delay-for-applying-strict-multicast-.patch
index 3f45051a8..d9fdbf97b 100644
--- a/patches/linux/6.18.15/0008-net-bridge-drop-delay-for-applying-strict-multicast-.patch
+++ b/patches/linux/6.18.16/0008-net-bridge-drop-delay-for-applying-strict-multicast-.patch
@@ -1,4 +1,4 @@
-From 7d5b408393f724aa3fb9109d0373270bff5912a4 Mon Sep 17 00:00:00 2001
+From fabc6f846e244fd2b67d26155d644238505b949b Mon Sep 17 00:00:00 2001
From: Joachim Wiberg
Date: Thu, 4 Apr 2024 16:36:30 +0200
Subject: [PATCH 08/33] net: bridge: drop delay for applying strict multicast
diff --git a/patches/linux/6.18.15/0009-net-bridge-Differentiate-MDB-additions-from-modifica.patch b/patches/linux/6.18.16/0009-net-bridge-Differentiate-MDB-additions-from-modifica.patch
similarity index 98%
rename from patches/linux/6.18.15/0009-net-bridge-Differentiate-MDB-additions-from-modifica.patch
rename to patches/linux/6.18.16/0009-net-bridge-Differentiate-MDB-additions-from-modifica.patch
index c0bfa74b9..f59fd202b 100644
--- a/patches/linux/6.18.15/0009-net-bridge-Differentiate-MDB-additions-from-modifica.patch
+++ b/patches/linux/6.18.16/0009-net-bridge-Differentiate-MDB-additions-from-modifica.patch
@@ -1,4 +1,4 @@
-From fcb5ec6195e9201d547148f23115305d012258e1 Mon Sep 17 00:00:00 2001
+From 4ee3858a7d7f02746187d8bbc6011038747cab35 Mon Sep 17 00:00:00 2001
From: Tobias Waldekranz
Date: Thu, 16 May 2024 14:51:54 +0200
Subject: [PATCH 09/33] net: bridge: Differentiate MDB additions from
diff --git a/patches/linux/6.18.15/0010-nvmem-layouts-onie-tlv-Let-device-probe-even-when-TL.patch b/patches/linux/6.18.16/0010-nvmem-layouts-onie-tlv-Let-device-probe-even-when-TL.patch
similarity index 96%
rename from patches/linux/6.18.15/0010-nvmem-layouts-onie-tlv-Let-device-probe-even-when-TL.patch
rename to patches/linux/6.18.16/0010-nvmem-layouts-onie-tlv-Let-device-probe-even-when-TL.patch
index 152dba20c..4db443b9e 100644
--- a/patches/linux/6.18.15/0010-nvmem-layouts-onie-tlv-Let-device-probe-even-when-TL.patch
+++ b/patches/linux/6.18.16/0010-nvmem-layouts-onie-tlv-Let-device-probe-even-when-TL.patch
@@ -1,4 +1,4 @@
-From ea7944d9e73280180e6e80e7de5e1a20e308ecab Mon Sep 17 00:00:00 2001
+From 319ed7a2257bd18b5b0d23c9f24af9fd127b7667 Mon Sep 17 00:00:00 2001
From: Tobias Waldekranz
Date: Fri, 24 Nov 2023 23:29:55 +0100
Subject: [PATCH 10/33] nvmem: layouts: onie-tlv: Let device probe even when
diff --git a/patches/linux/6.18.15/0011-net-usb-r8152-add-r8153b-support-for-link-activity-L.patch b/patches/linux/6.18.16/0011-net-usb-r8152-add-r8153b-support-for-link-activity-L.patch
similarity index 88%
rename from patches/linux/6.18.15/0011-net-usb-r8152-add-r8153b-support-for-link-activity-L.patch
rename to patches/linux/6.18.16/0011-net-usb-r8152-add-r8153b-support-for-link-activity-L.patch
index e65f4973a..351750e26 100644
--- a/patches/linux/6.18.15/0011-net-usb-r8152-add-r8153b-support-for-link-activity-L.patch
+++ b/patches/linux/6.18.16/0011-net-usb-r8152-add-r8153b-support-for-link-activity-L.patch
@@ -1,4 +1,4 @@
-From 6d8bdf087b6b5f4a1a714858fcf9c548afee0041 Mon Sep 17 00:00:00 2001
+From 0ee33120c15d36ea49121936acb0b9cb860e0f5f Mon Sep 17 00:00:00 2001
From: Joachim Wiberg
Date: Sun, 11 Aug 2024 11:27:35 +0200
Subject: [PATCH 11/33] net: usb: r8152: add r8153b support for link/activity
@@ -18,7 +18,7 @@ Signed-off-by: Joachim Wiberg
1 file changed, 8 insertions(+)
diff --git a/drivers/net/usb/r8152.c b/drivers/net/usb/r8152.c
-index 6a43054d5171..ef8bcb4a7339 100644
+index da8de7b1a489..36d79a77316c 100644
--- a/drivers/net/usb/r8152.c
+++ b/drivers/net/usb/r8152.c
@@ -41,6 +41,11 @@
@@ -33,7 +33,7 @@ index 6a43054d5171..ef8bcb4a7339 100644
#define R8152_PHY_ID 32
#define PLA_IDR 0xc000
-@@ -7277,6 +7282,9 @@ static void r8153b_init(struct r8152 *tp)
+@@ -7279,6 +7284,9 @@ static void r8153b_init(struct r8152 *tp)
ocp_data &= ~(RX_AGG_DISABLE | RX_ZERO_EN);
ocp_write_word(tp, MCU_TYPE_USB, USB_USB_CTRL, ocp_data);
diff --git a/patches/linux/6.18.15/0012-arm64-dts-mediatek-mt7986a-rename-BPi-R3-ports-to-ma.patch b/patches/linux/6.18.16/0012-arm64-dts-mediatek-mt7986a-rename-BPi-R3-ports-to-ma.patch
similarity index 96%
rename from patches/linux/6.18.15/0012-arm64-dts-mediatek-mt7986a-rename-BPi-R3-ports-to-ma.patch
rename to patches/linux/6.18.16/0012-arm64-dts-mediatek-mt7986a-rename-BPi-R3-ports-to-ma.patch
index 564dbccc3..85b7d4cbe 100644
--- a/patches/linux/6.18.15/0012-arm64-dts-mediatek-mt7986a-rename-BPi-R3-ports-to-ma.patch
+++ b/patches/linux/6.18.16/0012-arm64-dts-mediatek-mt7986a-rename-BPi-R3-ports-to-ma.patch
@@ -1,4 +1,4 @@
-From e6250ce25bc96c91c74ad8bdea6132087bc3c8d3 Mon Sep 17 00:00:00 2001
+From cf134950928be5c5955cc70c69e273a316bac69f Mon Sep 17 00:00:00 2001
From: Joachim Wiberg
Date: Sun, 10 Aug 2025 18:52:54 +0200
Subject: [PATCH 12/33] arm64: dts: mediatek: mt7986a: rename BPi R3 ports to
diff --git a/patches/linux/6.18.15/0013-drm-panel-simple-Add-a-timing-for-the-Raspberry-Pi-7.patch b/patches/linux/6.18.16/0013-drm-panel-simple-Add-a-timing-for-the-Raspberry-Pi-7.patch
similarity index 98%
rename from patches/linux/6.18.15/0013-drm-panel-simple-Add-a-timing-for-the-Raspberry-Pi-7.patch
rename to patches/linux/6.18.16/0013-drm-panel-simple-Add-a-timing-for-the-Raspberry-Pi-7.patch
index 7cc394aea..59bf674d8 100644
--- a/patches/linux/6.18.15/0013-drm-panel-simple-Add-a-timing-for-the-Raspberry-Pi-7.patch
+++ b/patches/linux/6.18.16/0013-drm-panel-simple-Add-a-timing-for-the-Raspberry-Pi-7.patch
@@ -1,4 +1,4 @@
-From dcafe00d03f102ce48cb9068c884009e753b53bf Mon Sep 17 00:00:00 2001
+From 799998c00feee44d4c74556022904ba7a0bdfac8 Mon Sep 17 00:00:00 2001
From: Mattias Walström
Date: Wed, 20 Aug 2025 21:38:24 +0200
Subject: [PATCH 13/33] drm/panel-simple: Add a timing for the Raspberry Pi 7"
diff --git a/patches/linux/6.18.15/0014-input-touchscreen-edt-ft5x06-Add-polled-mode.patch b/patches/linux/6.18.16/0014-input-touchscreen-edt-ft5x06-Add-polled-mode.patch
similarity index 98%
rename from patches/linux/6.18.15/0014-input-touchscreen-edt-ft5x06-Add-polled-mode.patch
rename to patches/linux/6.18.16/0014-input-touchscreen-edt-ft5x06-Add-polled-mode.patch
index 046eb8e4f..d09bfba81 100644
--- a/patches/linux/6.18.15/0014-input-touchscreen-edt-ft5x06-Add-polled-mode.patch
+++ b/patches/linux/6.18.16/0014-input-touchscreen-edt-ft5x06-Add-polled-mode.patch
@@ -1,4 +1,4 @@
-From 38d942ffce63ee1fa9beecf6bac3d7b30e87c87a Mon Sep 17 00:00:00 2001
+From f01bf9ba38f75e3ef290cdd2a22df025768dd8b8 Mon Sep 17 00:00:00 2001
From: Mattias Walström
Date: Thu, 21 Aug 2025 11:20:23 +0200
Subject: [PATCH 14/33] input:touchscreen:edt-ft5x06: Add polled mode
diff --git a/patches/linux/6.18.15/0015-FIX-net-dsa-mv88e6xxx-Fix-timeout-on-waiting-for-PPU.patch b/patches/linux/6.18.16/0015-FIX-net-dsa-mv88e6xxx-Fix-timeout-on-waiting-for-PPU.patch
similarity index 94%
rename from patches/linux/6.18.15/0015-FIX-net-dsa-mv88e6xxx-Fix-timeout-on-waiting-for-PPU.patch
rename to patches/linux/6.18.16/0015-FIX-net-dsa-mv88e6xxx-Fix-timeout-on-waiting-for-PPU.patch
index 0270acbd9..4ec8f603c 100644
--- a/patches/linux/6.18.15/0015-FIX-net-dsa-mv88e6xxx-Fix-timeout-on-waiting-for-PPU.patch
+++ b/patches/linux/6.18.16/0015-FIX-net-dsa-mv88e6xxx-Fix-timeout-on-waiting-for-PPU.patch
@@ -1,4 +1,4 @@
-From 60cd0f84c208ab9bc53ad070e81bb0173e356889 Mon Sep 17 00:00:00 2001
+From dd7bb94f604192615f1f73a362fb0e2471ff8e1b Mon Sep 17 00:00:00 2001
From: Tobias Waldekranz
Date: Tue, 12 Mar 2024 10:27:24 +0100
Subject: [PATCH 15/33] [FIX] net: dsa: mv88e6xxx: Fix timeout on waiting for
diff --git a/patches/linux/6.18.15/0016-net-dsa-mv88e6xxx-Improve-indirect-register-access-p.patch b/patches/linux/6.18.16/0016-net-dsa-mv88e6xxx-Improve-indirect-register-access-p.patch
similarity index 99%
rename from patches/linux/6.18.15/0016-net-dsa-mv88e6xxx-Improve-indirect-register-access-p.patch
rename to patches/linux/6.18.16/0016-net-dsa-mv88e6xxx-Improve-indirect-register-access-p.patch
index 35192e522..0d11d73e5 100644
--- a/patches/linux/6.18.15/0016-net-dsa-mv88e6xxx-Improve-indirect-register-access-p.patch
+++ b/patches/linux/6.18.16/0016-net-dsa-mv88e6xxx-Improve-indirect-register-access-p.patch
@@ -1,4 +1,4 @@
-From de9af4997489a4f2a4110412b418bb7a317664fe Mon Sep 17 00:00:00 2001
+From 5dbb37d98861fab5cdf35947406133b494850d07 Mon Sep 17 00:00:00 2001
From: Tobias Waldekranz
Date: Wed, 27 Mar 2024 15:52:43 +0100
Subject: [PATCH 16/33] net: dsa: mv88e6xxx: Improve indirect register access
diff --git a/patches/linux/6.18.15/0017-net-dsa-mv88e6xxx-Honor-ports-being-managed-via-in-b.patch b/patches/linux/6.18.16/0017-net-dsa-mv88e6xxx-Honor-ports-being-managed-via-in-b.patch
similarity index 95%
rename from patches/linux/6.18.15/0017-net-dsa-mv88e6xxx-Honor-ports-being-managed-via-in-b.patch
rename to patches/linux/6.18.16/0017-net-dsa-mv88e6xxx-Honor-ports-being-managed-via-in-b.patch
index 3e2331f69..28744f928 100644
--- a/patches/linux/6.18.15/0017-net-dsa-mv88e6xxx-Honor-ports-being-managed-via-in-b.patch
+++ b/patches/linux/6.18.16/0017-net-dsa-mv88e6xxx-Honor-ports-being-managed-via-in-b.patch
@@ -1,4 +1,4 @@
-From 94db20c708ac578007ef56ebd6a4321f45ca2ba7 Mon Sep 17 00:00:00 2001
+From ef510ee5006cb4d34bbf53edc2c5d82cee557a56 Mon Sep 17 00:00:00 2001
From: Tobias Waldekranz
Date: Mon, 22 Apr 2024 23:18:01 +0200
Subject: [PATCH 17/33] net: dsa: mv88e6xxx: Honor ports being managed via
diff --git a/patches/linux/6.18.15/0018-net-dsa-mv88e6xxx-Limit-rsvd2cpu-policy-to-user-port.patch b/patches/linux/6.18.16/0018-net-dsa-mv88e6xxx-Limit-rsvd2cpu-policy-to-user-port.patch
similarity index 98%
rename from patches/linux/6.18.15/0018-net-dsa-mv88e6xxx-Limit-rsvd2cpu-policy-to-user-port.patch
rename to patches/linux/6.18.16/0018-net-dsa-mv88e6xxx-Limit-rsvd2cpu-policy-to-user-port.patch
index a0c7646aa..1bc1a45cb 100644
--- a/patches/linux/6.18.15/0018-net-dsa-mv88e6xxx-Limit-rsvd2cpu-policy-to-user-port.patch
+++ b/patches/linux/6.18.16/0018-net-dsa-mv88e6xxx-Limit-rsvd2cpu-policy-to-user-port.patch
@@ -1,4 +1,4 @@
-From a52c2c0be135f32dac53410a6f67226ecb59da58 Mon Sep 17 00:00:00 2001
+From cb18e0e47ef6696d7e2949af53c6f224ff112160 Mon Sep 17 00:00:00 2001
From: Tobias Waldekranz
Date: Wed, 24 Apr 2024 22:41:04 +0200
Subject: [PATCH 18/33] net: dsa: mv88e6xxx: Limit rsvd2cpu policy to user
diff --git a/patches/linux/6.18.15/0019-net-dsa-tag_dsa-Use-tag-priority-as-initial-skb-prio.patch b/patches/linux/6.18.16/0019-net-dsa-tag_dsa-Use-tag-priority-as-initial-skb-prio.patch
similarity index 95%
rename from patches/linux/6.18.15/0019-net-dsa-tag_dsa-Use-tag-priority-as-initial-skb-prio.patch
rename to patches/linux/6.18.16/0019-net-dsa-tag_dsa-Use-tag-priority-as-initial-skb-prio.patch
index 132e71642..f21286056 100644
--- a/patches/linux/6.18.15/0019-net-dsa-tag_dsa-Use-tag-priority-as-initial-skb-prio.patch
+++ b/patches/linux/6.18.16/0019-net-dsa-tag_dsa-Use-tag-priority-as-initial-skb-prio.patch
@@ -1,4 +1,4 @@
-From 668ba9f49cd17cb27145fbe579931b9ddf74ea88 Mon Sep 17 00:00:00 2001
+From 68e1ad6de79b30163ee9c610174e704db44f9c29 Mon Sep 17 00:00:00 2001
From: Tobias Waldekranz
Date: Tue, 28 May 2024 10:38:42 +0200
Subject: [PATCH 19/33] net: dsa: tag_dsa: Use tag priority as initial
diff --git a/patches/linux/6.18.15/0020-net-dsa-Support-MDB-memberships-whose-L2-addresses-o.patch b/patches/linux/6.18.16/0020-net-dsa-Support-MDB-memberships-whose-L2-addresses-o.patch
similarity index 97%
rename from patches/linux/6.18.15/0020-net-dsa-Support-MDB-memberships-whose-L2-addresses-o.patch
rename to patches/linux/6.18.16/0020-net-dsa-Support-MDB-memberships-whose-L2-addresses-o.patch
index 86cf43994..00cdc23ea 100644
--- a/patches/linux/6.18.15/0020-net-dsa-Support-MDB-memberships-whose-L2-addresses-o.patch
+++ b/patches/linux/6.18.16/0020-net-dsa-Support-MDB-memberships-whose-L2-addresses-o.patch
@@ -1,4 +1,4 @@
-From 79450dc7dd78cb3d1e3798180151e4927f3d862f Mon Sep 17 00:00:00 2001
+From 973d7b6c0928d41ed86702c4b7e9d140c7acb443 Mon Sep 17 00:00:00 2001
From: Tobias Waldekranz
Date: Tue, 16 Jan 2024 16:00:55 +0100
Subject: [PATCH 20/33] net: dsa: Support MDB memberships whose L2 addresses
diff --git a/patches/linux/6.18.15/0021-net-dsa-Support-EtherType-based-priority-overrides.patch b/patches/linux/6.18.16/0021-net-dsa-Support-EtherType-based-priority-overrides.patch
similarity index 98%
rename from patches/linux/6.18.15/0021-net-dsa-Support-EtherType-based-priority-overrides.patch
rename to patches/linux/6.18.16/0021-net-dsa-Support-EtherType-based-priority-overrides.patch
index 044eab5ed..db431a7c6 100644
--- a/patches/linux/6.18.15/0021-net-dsa-Support-EtherType-based-priority-overrides.patch
+++ b/patches/linux/6.18.16/0021-net-dsa-Support-EtherType-based-priority-overrides.patch
@@ -1,4 +1,4 @@
-From 7d282dfc8044ad74aa190203efdc350bf9ab8c97 Mon Sep 17 00:00:00 2001
+From f23311c2898a40e0f330c3d21907d2d14ab66b85 Mon Sep 17 00:00:00 2001
From: Tobias Waldekranz
Date: Thu, 21 Mar 2024 19:12:15 +0100
Subject: [PATCH 21/33] net: dsa: Support EtherType based priority overrides
diff --git a/patches/linux/6.18.15/0022-net-dsa-mv88e6xxx-Support-EtherType-based-priority-o.patch b/patches/linux/6.18.16/0022-net-dsa-mv88e6xxx-Support-EtherType-based-priority-o.patch
similarity index 99%
rename from patches/linux/6.18.15/0022-net-dsa-mv88e6xxx-Support-EtherType-based-priority-o.patch
rename to patches/linux/6.18.16/0022-net-dsa-mv88e6xxx-Support-EtherType-based-priority-o.patch
index ce5f87016..bba20e064 100644
--- a/patches/linux/6.18.15/0022-net-dsa-mv88e6xxx-Support-EtherType-based-priority-o.patch
+++ b/patches/linux/6.18.16/0022-net-dsa-mv88e6xxx-Support-EtherType-based-priority-o.patch
@@ -1,4 +1,4 @@
-From 2b0679aa4727f71f3858291002c3abb5eade7ca7 Mon Sep 17 00:00:00 2001
+From 02a6215df9d126dbe0079eab7b4b95a49be072fe Mon Sep 17 00:00:00 2001
From: Tobias Waldekranz
Date: Fri, 22 Mar 2024 16:15:43 +0100
Subject: [PATCH 22/33] net: dsa: mv88e6xxx: Support EtherType based priority
diff --git a/patches/linux/6.18.15/0023-net-dsa-mv88e6xxx-Add-mqprio-qdisc-support.patch b/patches/linux/6.18.16/0023-net-dsa-mv88e6xxx-Add-mqprio-qdisc-support.patch
similarity index 98%
rename from patches/linux/6.18.15/0023-net-dsa-mv88e6xxx-Add-mqprio-qdisc-support.patch
rename to patches/linux/6.18.16/0023-net-dsa-mv88e6xxx-Add-mqprio-qdisc-support.patch
index 33f9ec608..28202fda4 100644
--- a/patches/linux/6.18.15/0023-net-dsa-mv88e6xxx-Add-mqprio-qdisc-support.patch
+++ b/patches/linux/6.18.16/0023-net-dsa-mv88e6xxx-Add-mqprio-qdisc-support.patch
@@ -1,4 +1,4 @@
-From 7f6fd96a6b80c541b0fba0e5cc9de10aa0801eb0 Mon Sep 17 00:00:00 2001
+From 8de2cab0aef8e63e6f95d49ccf50aac05e3834d1 Mon Sep 17 00:00:00 2001
From: Tobias Waldekranz
Date: Tue, 28 May 2024 11:04:22 +0200
Subject: [PATCH 23/33] net: dsa: mv88e6xxx: Add mqprio qdisc support
diff --git a/patches/linux/6.18.15/0024-net-dsa-mv88e6xxx-Use-VLAN-prio-over-IP-when-both-ar.patch b/patches/linux/6.18.16/0024-net-dsa-mv88e6xxx-Use-VLAN-prio-over-IP-when-both-ar.patch
similarity index 97%
rename from patches/linux/6.18.15/0024-net-dsa-mv88e6xxx-Use-VLAN-prio-over-IP-when-both-ar.patch
rename to patches/linux/6.18.16/0024-net-dsa-mv88e6xxx-Use-VLAN-prio-over-IP-when-both-ar.patch
index 60e9a8fbe..0c52a1edf 100644
--- a/patches/linux/6.18.15/0024-net-dsa-mv88e6xxx-Use-VLAN-prio-over-IP-when-both-ar.patch
+++ b/patches/linux/6.18.16/0024-net-dsa-mv88e6xxx-Use-VLAN-prio-over-IP-when-both-ar.patch
@@ -1,4 +1,4 @@
-From 54a42d398869bf484d31a499af28ba95ce75c412 Mon Sep 17 00:00:00 2001
+From 0de73e629b8fabb852a239a67e91954d15326c1b Mon Sep 17 00:00:00 2001
From: Tobias Waldekranz
Date: Wed, 29 May 2024 13:20:41 +0200
Subject: [PATCH 24/33] net: dsa: mv88e6xxx: Use VLAN prio over IP when both
diff --git a/patches/linux/6.18.15/0025-FIX-net-dsa-mv88e6xxx-Trap-locally-terminated-VLANs.patch b/patches/linux/6.18.16/0025-FIX-net-dsa-mv88e6xxx-Trap-locally-terminated-VLANs.patch
similarity index 98%
rename from patches/linux/6.18.15/0025-FIX-net-dsa-mv88e6xxx-Trap-locally-terminated-VLANs.patch
rename to patches/linux/6.18.16/0025-FIX-net-dsa-mv88e6xxx-Trap-locally-terminated-VLANs.patch
index 4e71ba23d..c294ea7bc 100644
--- a/patches/linux/6.18.15/0025-FIX-net-dsa-mv88e6xxx-Trap-locally-terminated-VLANs.patch
+++ b/patches/linux/6.18.16/0025-FIX-net-dsa-mv88e6xxx-Trap-locally-terminated-VLANs.patch
@@ -1,4 +1,4 @@
-From dbc7e27badea74027b2742fe768db95e48edc4d7 Mon Sep 17 00:00:00 2001
+From 3caaed0cca0c4ca5719b0434a30aa8dec77ef717 Mon Sep 17 00:00:00 2001
From: Tobias Waldekranz
Date: Tue, 26 Nov 2024 19:45:59 +0100
Subject: [PATCH 25/33] [FIX] net: dsa: mv88e6xxx: Trap locally terminated
diff --git a/patches/linux/6.18.15/0026-net-dsa-mv88e6xxx-collapse-disabled-state-into-block.patch b/patches/linux/6.18.16/0026-net-dsa-mv88e6xxx-collapse-disabled-state-into-block.patch
similarity index 95%
rename from patches/linux/6.18.15/0026-net-dsa-mv88e6xxx-collapse-disabled-state-into-block.patch
rename to patches/linux/6.18.16/0026-net-dsa-mv88e6xxx-collapse-disabled-state-into-block.patch
index 462bb5acd..f078c5cfe 100644
--- a/patches/linux/6.18.15/0026-net-dsa-mv88e6xxx-collapse-disabled-state-into-block.patch
+++ b/patches/linux/6.18.16/0026-net-dsa-mv88e6xxx-collapse-disabled-state-into-block.patch
@@ -1,4 +1,4 @@
-From 6ffe3f8912a00fd32f5607c9aa25b7ed8b408a47 Mon Sep 17 00:00:00 2001
+From bd10307b97efc72d331b5fdf56721954e834df48 Mon Sep 17 00:00:00 2001
From: Joachim Wiberg
Date: Thu, 16 Jan 2025 12:35:12 +0100
Subject: [PATCH 26/33] net: dsa: mv88e6xxx: collapse disabled state into
diff --git a/patches/linux/6.18.15/0027-net-dsa-mv88e6xxx-Only-activate-LAG-offloading-when-.patch b/patches/linux/6.18.16/0027-net-dsa-mv88e6xxx-Only-activate-LAG-offloading-when-.patch
similarity index 98%
rename from patches/linux/6.18.15/0027-net-dsa-mv88e6xxx-Only-activate-LAG-offloading-when-.patch
rename to patches/linux/6.18.16/0027-net-dsa-mv88e6xxx-Only-activate-LAG-offloading-when-.patch
index fe6e66f0b..4b929c55b 100644
--- a/patches/linux/6.18.15/0027-net-dsa-mv88e6xxx-Only-activate-LAG-offloading-when-.patch
+++ b/patches/linux/6.18.16/0027-net-dsa-mv88e6xxx-Only-activate-LAG-offloading-when-.patch
@@ -1,4 +1,4 @@
-From 6a87d9cd29e08b0b322233d35621d90470a974e6 Mon Sep 17 00:00:00 2001
+From 85b575912a77253cc45a8a50d75999b34ab8aa43 Mon Sep 17 00:00:00 2001
From: Tobias Waldekranz
Date: Wed, 12 Feb 2025 22:03:14 +0100
Subject: [PATCH 27/33] net: dsa: mv88e6xxx: Only activate LAG offloading when
diff --git a/patches/linux/6.18.15/0028-net-dsa-mv88e6xxx-Add-LED-support-for-6393X.patch b/patches/linux/6.18.16/0028-net-dsa-mv88e6xxx-Add-LED-support-for-6393X.patch
similarity index 99%
rename from patches/linux/6.18.15/0028-net-dsa-mv88e6xxx-Add-LED-support-for-6393X.patch
rename to patches/linux/6.18.16/0028-net-dsa-mv88e6xxx-Add-LED-support-for-6393X.patch
index c1707d4f9..4542ab3ed 100644
--- a/patches/linux/6.18.15/0028-net-dsa-mv88e6xxx-Add-LED-support-for-6393X.patch
+++ b/patches/linux/6.18.16/0028-net-dsa-mv88e6xxx-Add-LED-support-for-6393X.patch
@@ -1,4 +1,4 @@
-From d98d5f87b9f5202c55864da0f8a6e9b63a123d2e Mon Sep 17 00:00:00 2001
+From 971b21f938d66b6c6f1f5d54b20c4d732e5cf3d6 Mon Sep 17 00:00:00 2001
From: Mattias Walström
Date: Wed, 14 Jan 2026 18:22:41 +0100
Subject: [PATCH 28/33] net: dsa: mv88e6xxx: Add LED support for 6393X
diff --git a/patches/linux/6.18.15/0029-wifi-brcmfmac-support-deletion-and-recreation-of-pri.patch b/patches/linux/6.18.16/0029-wifi-brcmfmac-support-deletion-and-recreation-of-pri.patch
similarity index 99%
rename from patches/linux/6.18.15/0029-wifi-brcmfmac-support-deletion-and-recreation-of-pri.patch
rename to patches/linux/6.18.16/0029-wifi-brcmfmac-support-deletion-and-recreation-of-pri.patch
index 4fba220e1..f6b4b603a 100644
--- a/patches/linux/6.18.15/0029-wifi-brcmfmac-support-deletion-and-recreation-of-pri.patch
+++ b/patches/linux/6.18.16/0029-wifi-brcmfmac-support-deletion-and-recreation-of-pri.patch
@@ -1,4 +1,4 @@
-From f844b2470f23814f3d98c22fc1958958155f2370 Mon Sep 17 00:00:00 2001
+From 86a58b0b4b1d60d40a80f058e4f09c87da4093b4 Mon Sep 17 00:00:00 2001
From: Mattias Walström
Date: Thu, 15 Jan 2026 22:47:37 +0100
Subject: [PATCH 29/33] wifi: brcmfmac: support deletion and recreation of
diff --git a/patches/linux/6.18.15/0030-wifi-brcmfmac-check-connection-state-before-querying.patch b/patches/linux/6.18.16/0030-wifi-brcmfmac-check-connection-state-before-querying.patch
similarity index 96%
rename from patches/linux/6.18.15/0030-wifi-brcmfmac-check-connection-state-before-querying.patch
rename to patches/linux/6.18.16/0030-wifi-brcmfmac-check-connection-state-before-querying.patch
index 084ff7ccc..b0b06789f 100644
--- a/patches/linux/6.18.15/0030-wifi-brcmfmac-check-connection-state-before-querying.patch
+++ b/patches/linux/6.18.16/0030-wifi-brcmfmac-check-connection-state-before-querying.patch
@@ -1,4 +1,4 @@
-From 58dcf72c338bd0248dad8105a4169be926d19be2 Mon Sep 17 00:00:00 2001
+From 924750050148d937cf62e94f4a706a0be6f5ed02 Mon Sep 17 00:00:00 2001
From: Mattias Walström
Date: Mon, 19 Jan 2026 13:06:53 +0100
Subject: [PATCH 30/33] wifi: brcmfmac: check connection state before querying
diff --git a/patches/linux/6.18.15/0031-wifi-brcmfmac-suppress-log-spam-for-regulatory-restr.patch b/patches/linux/6.18.16/0031-wifi-brcmfmac-suppress-log-spam-for-regulatory-restr.patch
similarity index 96%
rename from patches/linux/6.18.15/0031-wifi-brcmfmac-suppress-log-spam-for-regulatory-restr.patch
rename to patches/linux/6.18.16/0031-wifi-brcmfmac-suppress-log-spam-for-regulatory-restr.patch
index 3814072e7..d745922cc 100644
--- a/patches/linux/6.18.15/0031-wifi-brcmfmac-suppress-log-spam-for-regulatory-restr.patch
+++ b/patches/linux/6.18.16/0031-wifi-brcmfmac-suppress-log-spam-for-regulatory-restr.patch
@@ -1,4 +1,4 @@
-From b408ba43a37bb71f8ea2b83c7f4a4ba0b806f2c7 Mon Sep 17 00:00:00 2001
+From 17a580919c5be64b94ccc9e11d0c52b990053485 Mon Sep 17 00:00:00 2001
From: Mattias Walström
Date: Tue, 20 Jan 2026 20:12:10 +0100
Subject: [PATCH 31/33] wifi: brcmfmac: suppress log spam for
diff --git a/patches/linux/6.18.15/0032-wifi-brcmfmac-reduce-log-noise-during-AP-to-station-.patch b/patches/linux/6.18.16/0032-wifi-brcmfmac-reduce-log-noise-during-AP-to-station-.patch
similarity index 97%
rename from patches/linux/6.18.15/0032-wifi-brcmfmac-reduce-log-noise-during-AP-to-station-.patch
rename to patches/linux/6.18.16/0032-wifi-brcmfmac-reduce-log-noise-during-AP-to-station-.patch
index 8639096a0..f42718c42 100644
--- a/patches/linux/6.18.15/0032-wifi-brcmfmac-reduce-log-noise-during-AP-to-station-.patch
+++ b/patches/linux/6.18.16/0032-wifi-brcmfmac-reduce-log-noise-during-AP-to-station-.patch
@@ -1,4 +1,4 @@
-From 2558ffc3abdbbc38a367d6a83c9133e39238339f Mon Sep 17 00:00:00 2001
+From 544345cb92b080c77a62eadccb92d07190bac7d1 Mon Sep 17 00:00:00 2001
From: Mattias Walström
Date: Tue, 20 Jan 2026 20:18:45 +0100
Subject: [PATCH 32/33] wifi: brcmfmac: reduce log noise during AP to station
diff --git a/patches/linux/6.18.15/0033-net-phy-air_en8811h-add-OF-device-table-for-auto-loa.patch b/patches/linux/6.18.16/0033-net-phy-air_en8811h-add-OF-device-table-for-auto-loa.patch
similarity index 95%
rename from patches/linux/6.18.15/0033-net-phy-air_en8811h-add-OF-device-table-for-auto-loa.patch
rename to patches/linux/6.18.16/0033-net-phy-air_en8811h-add-OF-device-table-for-auto-loa.patch
index c5be0160f..f065dd662 100644
--- a/patches/linux/6.18.15/0033-net-phy-air_en8811h-add-OF-device-table-for-auto-loa.patch
+++ b/patches/linux/6.18.16/0033-net-phy-air_en8811h-add-OF-device-table-for-auto-loa.patch
@@ -1,4 +1,4 @@
-From fdfab37c4e5c375c204c797f77f91ee6edcbe983 Mon Sep 17 00:00:00 2001
+From 5a1dbf99922519d4c36b93c16128c4419da35f30 Mon Sep 17 00:00:00 2001
From: Mattias Walström
Date: Tue, 17 Feb 2026 21:59:59 +0100
Subject: [PATCH 33/33] net: phy: air_en8811h: add OF device table for
diff --git a/patches/linux/linux.hash b/patches/linux/linux.hash
index 921ca5fb5..a6bde010a 100644
--- a/patches/linux/linux.hash
+++ b/patches/linux/linux.hash
@@ -1,2 +1,2 @@
# Calculated with utils/kernel-refresh.sh
-sha256 7c716216c3c4134ed0de69195701e677577bbcdd3979f331c182acd06bf2f170 linux-6.18.15.tar.xz
+sha256 4f21c01f4d04c1d1b3ed794153f8900802c92497be620b07c4869530f2d28ee3 linux-6.18.16.tar.xz
diff --git a/src/confd/configure.ac b/src/confd/configure.ac
index 6266615be..f8071c2c3 100644
--- a/src/confd/configure.ac
+++ b/src/confd/configure.ac
@@ -46,6 +46,10 @@ AC_ARG_ENABLE(wifi,
AS_HELP_STRING([--enable-wifi], [Enable support for Wi-Fi]),,[
enable_wifi=no])
+AC_ARG_ENABLE(gps,
+ AS_HELP_STRING([--enable-gps], [Enable support for GPS receivers]),,[
+ enable_gps=no])
+
AC_ARG_WITH(login-shell,
AS_HELP_STRING([--with-login-shell=shell], [Login shell for new users, default: /bin/false]),
[login_shell=$withval], [login_shell=yes])
@@ -60,6 +64,9 @@ AS_IF([test "x$enable_containers" = "xyes"], [
AS_IF([test "x$enable_wifi" = "xyes"], [
AC_DEFINE(HAVE_WIFI, 1, [Built with Wi-Fi support])])
+AS_IF([test "x$enable_gps" = "xyes"], [
+ AC_DEFINE(HAVE_GPS, 1, [Built with GPS receiver support])])
+
AS_IF([test "x$with_login_shell" != "xno"], [
AS_IF([test "x$login_shell" = "xyes"], [login_shell=/bin/false])
AC_DEFINE_UNQUOTED(LOGIN_SHELL, "$login_shell", [Default: /bin/false])],[
@@ -131,6 +138,7 @@ cat <
+
+
+
+
diff --git a/test/case/routing/ospf_point_to_multipoint_hybrid/Readme.adoc b/test/case/routing/ospf_point_to_multipoint_hybrid/Readme.adoc
new file mode 120000
index 000000000..ae32c8412
--- /dev/null
+++ b/test/case/routing/ospf_point_to_multipoint_hybrid/Readme.adoc
@@ -0,0 +1 @@
+test.adoc
\ No newline at end of file
diff --git a/test/case/routing/ospf_point_to_multipoint_hybrid/test.adoc b/test/case/routing/ospf_point_to_multipoint_hybrid/test.adoc
new file mode 100644
index 000000000..7bd202af0
--- /dev/null
+++ b/test/case/routing/ospf_point_to_multipoint_hybrid/test.adoc
@@ -0,0 +1,46 @@
+=== OSPF Point-to-Multipoint Hybrid
+
+ifdef::topdoc[:imagesdir: {topdoc}../../test/case/routing/ospf_point_to_multipoint_hybrid]
+
+==== Description
+
+Verify OSPF point-to-multipoint hybrid (broadcast) interface type by
+configuring three routers on a shared multi-access network with the
+ietf-ospf 'hybrid' interface type. This maps to FRR's 'point-to-multipoint'
+network type, which uses multicast for neighbor discovery.
+
+R2 acts as the hub, bridging two physical links (link1, link2) into a
+single broadcast domain (br0). R1 and R3 each connect to one of R2's
+ports. The test verifies that all routers form OSPF adjacencies, exchange
+routes, and that the interface type is correctly reported as hybrid.
+
+....
+ +------------------+ +------------------+
+ | R1 | | R3 |
+ | 10.0.1.1/32 | | 10.0.3.1/32 |
+ | (lo) | | (lo) |
+ +--------+---------+ +--------+---------+
+ | .1 | .3
+ | +------------------+ |
+ +----link1------+ R2 +------link2--------+
+ | 10.0.2.1/32 |
+ | (lo) |
+ | br0: 10.0.123.2 |
+ +------------------+
+ 10.0.123.0/24
+ (P2MP hybrid / shared segment)
+....
+
+==== Topology
+
+image::topology.svg[OSPF Point-to-Multipoint Hybrid topology, align=center, scaledwidth=75%]
+
+==== Sequence
+
+. Set up topology and attach to target DUTs
+. Configure targets
+. Wait for OSPF routes
+. Verify interface type is hybrid
+. Verify connectivity between all DUTs
+
+
diff --git a/test/case/routing/ospf_point_to_multipoint_hybrid/test.py b/test/case/routing/ospf_point_to_multipoint_hybrid/test.py
new file mode 100755
index 000000000..f067ad832
--- /dev/null
+++ b/test/case/routing/ospf_point_to_multipoint_hybrid/test.py
@@ -0,0 +1,334 @@
+#!/usr/bin/env python3
+"""OSPF Point-to-Multipoint Hybrid
+
+Verify OSPF point-to-multipoint hybrid (broadcast) interface type by
+configuring three routers on a shared multi-access network with the
+ietf-ospf 'hybrid' interface type. This maps to FRR's 'point-to-multipoint'
+network type, which uses multicast for neighbor discovery.
+
+R2 acts as the hub, bridging two physical links (link1, link2) into a
+single broadcast domain (br0). R1 and R3 each connect to one of R2's
+ports. The test verifies that all routers form OSPF adjacencies, exchange
+routes, and that the interface type is correctly reported as hybrid.
+
+....
+ +------------------+ +------------------+
+ | R1 | | R3 |
+ | 10.0.1.1/32 | | 10.0.3.1/32 |
+ | (lo) | | (lo) |
+ +--------+---------+ +--------+---------+
+ | .1 | .3
+ | +------------------+ |
+ +----link1------+ R2 +------link2--------+
+ | 10.0.2.1/32 |
+ | (lo) |
+ | br0: 10.0.123.2 |
+ +------------------+
+ 10.0.123.0/24
+ (P2MP hybrid / shared segment)
+....
+"""
+
+import infamy
+import infamy.route as route
+from infamy.util import until, parallel
+
+
+def config_target1(target, link, data):
+ target.put_config_dicts({
+ "ietf-interfaces": {
+ "interfaces": {
+ "interface": [
+ {
+ "name": link,
+ "enabled": True,
+ "ipv4": {
+ "forwarding": True,
+ "address": [{
+ "ip": "10.0.123.1",
+ "prefix-length": 24
+ }]
+ }
+ },
+ {
+ "name": data,
+ "enabled": True,
+ "ipv4": {
+ "forwarding": True,
+ "address": [{
+ "ip": "10.0.10.1",
+ "prefix-length": 24
+ }]
+ }
+ },
+ {
+ "name": "lo",
+ "enabled": True,
+ "ipv4": {
+ "address": [{
+ "ip": "10.0.1.1",
+ "prefix-length": 32
+ }]
+ }
+ }
+ ]
+ }
+ },
+ "ietf-system": {
+ "system": {
+ "hostname": "R1"
+ }
+ },
+ "ietf-routing": {
+ "routing": {
+ "control-plane-protocols": {
+ "control-plane-protocol": [{
+ "type": "infix-routing:ospfv2",
+ "name": "default",
+ "ospf": {
+ "redistribute": {
+ "redistribute": [{
+ "protocol": "connected"
+ }]
+ },
+ "areas": {
+ "area": [{
+ "area-id": "0.0.0.0",
+ "interfaces": {
+ "interface": [{
+ "name": link,
+ "enabled": True,
+ "interface-type": "hybrid",
+ "hello-interval": 1,
+ "dead-interval": 3
+ }, {
+ "name": "lo",
+ "enabled": True
+ }]
+ }
+ }]
+ }
+ }
+ }]
+ }
+ }
+ }
+ })
+
+
+def config_target2(target, link1, link2):
+ target.put_config_dicts({
+ "ietf-interfaces": {
+ "interfaces": {
+ "interface": [
+ {
+ "name": "br0",
+ "type": "infix-if-type:bridge",
+ "enabled": True,
+ "ipv4": {
+ "forwarding": True,
+ "address": [{
+ "ip": "10.0.123.2",
+ "prefix-length": 24
+ }]
+ }
+ },
+ {
+ "name": link1,
+ "enabled": True,
+ "infix-interfaces:bridge-port": {
+ "bridge": "br0"
+ }
+ },
+ {
+ "name": link2,
+ "enabled": True,
+ "infix-interfaces:bridge-port": {
+ "bridge": "br0"
+ }
+ },
+ {
+ "name": "lo",
+ "enabled": True,
+ "ipv4": {
+ "address": [{
+ "ip": "10.0.2.1",
+ "prefix-length": 32
+ }]
+ }
+ }
+ ]
+ }
+ },
+ "ietf-system": {
+ "system": {
+ "hostname": "R2"
+ }
+ },
+ "ietf-routing": {
+ "routing": {
+ "control-plane-protocols": {
+ "control-plane-protocol": [{
+ "type": "infix-routing:ospfv2",
+ "name": "default",
+ "ospf": {
+ "redistribute": {
+ "redistribute": [{
+ "protocol": "connected"
+ }]
+ },
+ "areas": {
+ "area": [{
+ "area-id": "0.0.0.0",
+ "interfaces": {
+ "interface": [{
+ "name": "br0",
+ "enabled": True,
+ "interface-type": "hybrid",
+ "hello-interval": 1,
+ "dead-interval": 3
+ }, {
+ "name": "lo",
+ "enabled": True
+ }]
+ }
+ }]
+ }
+ }
+ }]
+ }
+ }
+ }
+ })
+
+
+def config_target3(target, link, data):
+ target.put_config_dicts({
+ "ietf-interfaces": {
+ "interfaces": {
+ "interface": [
+ {
+ "name": link,
+ "enabled": True,
+ "ipv4": {
+ "forwarding": True,
+ "address": [{
+ "ip": "10.0.123.3",
+ "prefix-length": 24
+ }]
+ }
+ },
+ {
+ "name": data,
+ "enabled": True,
+ "ipv4": {
+ "forwarding": True,
+ "address": [{
+ "ip": "10.0.30.1",
+ "prefix-length": 24
+ }]
+ }
+ },
+ {
+ "name": "lo",
+ "enabled": True,
+ "ipv4": {
+ "address": [{
+ "ip": "10.0.3.1",
+ "prefix-length": 32
+ }]
+ }
+ }
+ ]
+ }
+ },
+ "ietf-system": {
+ "system": {
+ "hostname": "R3"
+ }
+ },
+ "ietf-routing": {
+ "routing": {
+ "control-plane-protocols": {
+ "control-plane-protocol": [{
+ "type": "infix-routing:ospfv2",
+ "name": "default",
+ "ospf": {
+ "redistribute": {
+ "redistribute": [{
+ "protocol": "connected"
+ }]
+ },
+ "areas": {
+ "area": [{
+ "area-id": "0.0.0.0",
+ "interfaces": {
+ "interface": [{
+ "name": link,
+ "enabled": True,
+ "interface-type": "hybrid",
+ "hello-interval": 1,
+ "dead-interval": 3
+ }, {
+ "name": "lo",
+ "enabled": True
+ }]
+ }
+ }]
+ }
+ }
+ }]
+ }
+ }
+ }
+ })
+
+
+with infamy.Test() as test:
+ with test.step("Set up topology and attach to target DUTs"):
+ env = infamy.Env()
+ R1 = env.attach("R1", "mgmt")
+ R2 = env.attach("R2", "mgmt")
+ R3 = env.attach("R3", "mgmt")
+
+ with test.step("Configure targets"):
+ _, R1link = env.ltop.xlate("R1", "link")
+ _, R1data = env.ltop.xlate("R1", "data")
+ _, R2link1 = env.ltop.xlate("R2", "link1")
+ _, R2link2 = env.ltop.xlate("R2", "link2")
+ _, R3link = env.ltop.xlate("R3", "link")
+ _, R3data = env.ltop.xlate("R3", "data")
+
+ parallel(config_target1(R1, R1link, R1data),
+ config_target2(R2, R2link1, R2link2),
+ config_target3(R3, R3link, R3data))
+
+ with test.step("Wait for OSPF routes"):
+ print("Waiting for OSPF routes to converge")
+ until(lambda: route.ipv4_route_exist(R1, "10.0.2.1/32", proto="ietf-ospf:ospfv2"), attempts=200)
+ until(lambda: route.ipv4_route_exist(R1, "10.0.3.1/32", proto="ietf-ospf:ospfv2"), attempts=200)
+ until(lambda: route.ipv4_route_exist(R2, "10.0.1.1/32", proto="ietf-ospf:ospfv2"), attempts=200)
+ until(lambda: route.ipv4_route_exist(R2, "10.0.3.1/32", proto="ietf-ospf:ospfv2"), attempts=200)
+ until(lambda: route.ipv4_route_exist(R3, "10.0.1.1/32", proto="ietf-ospf:ospfv2"), attempts=200)
+ until(lambda: route.ipv4_route_exist(R3, "10.0.2.1/32", proto="ietf-ospf:ospfv2"), attempts=200)
+
+ with test.step("Verify interface type is hybrid"):
+ print("Checking OSPF interface type on all routers")
+ assert route.ospf_get_interface_type(R1, "0.0.0.0", R1link) == "hybrid"
+ assert route.ospf_get_interface_type(R2, "0.0.0.0", "br0") == "hybrid"
+ assert route.ospf_get_interface_type(R3, "0.0.0.0", R3link) == "hybrid"
+
+ with test.step("Verify connectivity between all DUTs"):
+ _, hport1 = env.ltop.xlate("PC", "data1")
+ _, hport2 = env.ltop.xlate("PC", "data2")
+ with infamy.IsolatedMacVlan(hport1) as ns1, \
+ infamy.IsolatedMacVlan(hport2) as ns2:
+ ns1.addip("10.0.10.2")
+ ns2.addip("10.0.30.2")
+ ns1.addroute("10.0.3.1/32", "10.0.10.1")
+ ns2.addroute("10.0.1.1/32", "10.0.30.1")
+ parallel(
+ lambda: ns1.must_reach("10.0.3.1"),
+ lambda: ns2.must_reach("10.0.1.1"),
+ )
+ test.succeed()
diff --git a/test/case/routing/ospf_point_to_multipoint_hybrid/topology.dot b/test/case/routing/ospf_point_to_multipoint_hybrid/topology.dot
new file mode 100644
index 000000000..6a345571c
--- /dev/null
+++ b/test/case/routing/ospf_point_to_multipoint_hybrid/topology.dot
@@ -0,0 +1,39 @@
+graph "3r-p2mp" {
+ layout="neato";
+ overlap="false";
+ esep="+20";
+ size=10
+
+ node [shape=record, fontname="DejaVu Sans Mono, Book"];
+ edge [color="cornflowerblue", penwidth="2", fontname="DejaVu Serif, Book"];
+
+ PC [
+ label="PC | { mgmt1 | data1 | \n\n\n\n | mgmt2 | mgmt3 | data2 }",
+ pos="20,30!",
+ requires="controller",
+ ];
+
+ R1 [
+ label="{ mgmt | data | link } | R1 \n 10.0.1.1/32 \n(lo)",
+ pos="160,60!",
+ requires="infix",
+ ];
+ R2 [
+ label="{ link1 | mgmt | link2 } | R2 \n 10.0.2.1/32 \n(lo) \n(br0: 10.0.123.2/24)",
+ pos="160,30!",
+ requires="infix",
+ ];
+ R3 [
+ label="{ link | mgmt | data } | R3 \n 10.0.3.1/32 \n(lo)",
+ pos="160,0!",
+ requires="infix",
+ ];
+
+ PC:mgmt1 -- R1:mgmt [requires="mgmt", color="lightgray"]
+ PC:mgmt2 -- R2:mgmt [requires="mgmt", color="lightgray"]
+ PC:mgmt3 -- R3:mgmt [requires="mgmt", color="lightgray"]
+ PC:data1 -- R1:data [taillabel="10.0.10.2/24", headlabel="10.0.10.1/24"]
+ R3:data -- PC:data2 [taillabel="10.0.30.1/24", headlabel="10.0.30.2/24"]
+ R1:link -- R2:link1 [taillabel="10.0.123.1/24"]
+ R3:link -- R2:link2 [taillabel="10.0.123.3/24"]
+}
diff --git a/test/case/routing/ospf_point_to_multipoint_hybrid/topology.svg b/test/case/routing/ospf_point_to_multipoint_hybrid/topology.svg
new file mode 100644
index 000000000..94d30fe36
--- /dev/null
+++ b/test/case/routing/ospf_point_to_multipoint_hybrid/topology.svg
@@ -0,0 +1,113 @@
+
+
+
+
+