From e838f6dfd8ee0c1b0e75b58c484d15b106a6be93 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mattias=20Walstr=C3=B6m?= Date: Wed, 25 Feb 2026 22:17:51 +0100 Subject: [PATCH 01/11] yang: add feature flags for wifi and gps in infix-hardware --- package/confd/confd.mk | 12 ++++++++++++ src/confd/configure.ac | 8 ++++++++ src/confd/yang/confd/infix-hardware.yang | 11 +++++++++++ src/confd/yang/gps.inc | 3 +++ src/confd/yang/wifi.inc | 1 + 5 files changed, 35 insertions(+) create mode 100644 src/confd/yang/gps.inc diff --git a/package/confd/confd.mk b/package/confd/confd.mk index 7cfb2347..e01756ca 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/src/confd/configure.ac b/src/confd/configure.ac index 6266615b..f8071c2c 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 < Date: Fri, 27 Feb 2026 14:58:46 +0100 Subject: [PATCH 02/11] GPS: Disable GPS in _minimal config --- configs/aarch64_defconfig | 3 --- configs/aarch64_minimal_defconfig | 4 ---- configs/arm_defconfig | 3 --- configs/arm_minimal_defconfig | 4 ---- configs/riscv64_defconfig | 3 --- configs/x86_64_defconfig | 3 --- configs/x86_64_minimal_defconfig | 4 ---- 7 files changed, 24 deletions(-) diff --git a/configs/aarch64_defconfig b/configs/aarch64_defconfig index 5fcaf15f..e95fc940 100644 --- a/configs/aarch64_defconfig +++ b/configs/aarch64_defconfig @@ -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 e535b535..15f8017f 100644 --- a/configs/aarch64_minimal_defconfig +++ b/configs/aarch64_minimal_defconfig @@ -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 081b4698..cc8cd0af 100644 --- a/configs/arm_defconfig +++ b/configs/arm_defconfig @@ -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 f57a0263..64b9a529 100644 --- a/configs/arm_minimal_defconfig +++ b/configs/arm_minimal_defconfig @@ -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 a7421e15..bacf46a9 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 8dbb20f7..9f10fa53 100644 --- a/configs/x86_64_defconfig +++ b/configs/x86_64_defconfig @@ -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 7d1d55f4..c083a195 100644 --- a/configs/x86_64_minimal_defconfig +++ b/configs/x86_64_minimal_defconfig @@ -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 From cf1e81c8d17d18aa67e7d66618abe8cbcf90a566 Mon Sep 17 00:00:00 2001 From: Joachim Wiberg Date: Mon, 2 Mar 2026 10:02:22 +0100 Subject: [PATCH 03/11] package/skeleton-init-fint: increase zebra netlink buffer Increase Zebra NETLINK buffer to fix reported issues with zebra being out of sync with kernel routes and interface changes. Also, try '-a' option to allow other processes to delete zebra routes. Other changes in this commit: - Minor fixes to Finit service files for consistency - Empty daemon.conf stub files to silence bogus mgmtd errors at startup - Relocate all skeleton files from board/common to separate from files that are actual Infix additions and what's package system integration Signed-off-by: Joachim Wiberg --- package/skeleton-init-finit/skeleton/etc/default/zebra | 2 +- .../skeleton/etc/finit.d/available/frr/mgmtd.conf | 3 ++- .../skeleton/etc/finit.d/available/frr/ospfd.conf | 5 +++-- .../skeleton/etc/finit.d/available/frr/ripd.conf | 4 ++-- .../skeleton/etc/finit.d/available/frr/zebra.conf | 4 ++-- .../skeleton-init-finit/skeleton}/etc/frr/daemons | 4 +--- .../skeleton-init-finit/skeleton}/etc/frr/frr.conf | 0 package/skeleton-init-finit/skeleton/etc/frr/mgmtd.conf | 1 + package/skeleton-init-finit/skeleton/etc/frr/ripd.conf | 1 + package/skeleton-init-finit/skeleton/etc/frr/ripngd.conf | 1 + package/skeleton-init-finit/skeleton/etc/frr/staticd.conf | 1 + package/skeleton-init-finit/skeleton/etc/frr/zebra.conf | 1 + 12 files changed, 16 insertions(+), 11 deletions(-) rename {board/common/rootfs => package/skeleton-init-finit/skeleton}/etc/frr/daemons (72%) rename {board/common/rootfs => package/skeleton-init-finit/skeleton}/etc/frr/frr.conf (100%) create mode 100644 package/skeleton-init-finit/skeleton/etc/frr/mgmtd.conf create mode 100644 package/skeleton-init-finit/skeleton/etc/frr/ripd.conf create mode 100644 package/skeleton-init-finit/skeleton/etc/frr/ripngd.conf create mode 100644 package/skeleton-init-finit/skeleton/etc/frr/staticd.conf create mode 100644 package/skeleton-init-finit/skeleton/etc/frr/zebra.conf diff --git a/package/skeleton-init-finit/skeleton/etc/default/zebra b/package/skeleton-init-finit/skeleton/etc/default/zebra index 4467b9af..13d5e53a 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 825aff9c..fbf2c086 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 e4652ff1..20b52339 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 bb311b58..8a8f9330 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 dce1abca..30b4a166 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 2094cd75..b8eb4835 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 00000000..12ab4118 --- /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 00000000..0adacf4f --- /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 00000000..0adacf4f --- /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 00000000..0adacf4f --- /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 00000000..0adacf4f --- /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. From c79beea4ec3e371934c1fea7653cbd41bf7a6598 Mon Sep 17 00:00:00 2001 From: Joachim Wiberg Date: Wed, 4 Mar 2026 13:24:47 +0100 Subject: [PATCH 04/11] statd: silence 'show firewall' when firewall is disabled Fixes #1416 Signed-off-by: Joachim Wiberg --- src/statd/python/cli_pretty/cli_pretty.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/statd/python/cli_pretty/cli_pretty.py b/src/statd/python/cli_pretty/cli_pretty.py index 54bc5e05..8d4c87a0 100755 --- a/src/statd/python/cli_pretty/cli_pretty.py +++ b/src/statd/python/cli_pretty/cli_pretty.py @@ -5527,7 +5527,8 @@ def main(): global UNIT_TEST try: - json_data = json.load(sys.stdin) + raw = sys.stdin.read() + json_data = json.loads(raw) if raw.strip() else {} except json.JSONDecodeError: print("Error, invalid JSON input") sys.exit(1) From c69a617ecbad1655cc753f0d928c8aa5649c3439 Mon Sep 17 00:00:00 2001 From: Joachim Wiberg Date: Fri, 6 Mar 2026 08:04:56 +0100 Subject: [PATCH 05/11] patches: lift iptables name length limit in firewalld A legacy name length limit in firewalld triggered problems with longer policy names. This patch to firewalld lifts that limit by checking the backend in use, no limit for nftables. Fixes #1389 Signed-off-by: Joachim Wiberg --- ...-Silence-warnings-about-old-backends.patch | 2 +- ...ft-iptables-name-length-limit-when-u.patch | 95 +++++++++++++++++++ test/case/firewall/basic/test.adoc | 2 +- test/case/firewall/basic/test.py | 22 +++-- 4 files changed, 109 insertions(+), 12 deletions(-) create mode 100644 patches/firewalld/2.3.1/0002-fix-functions-lift-iptables-name-length-limit-when-u.patch 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 6bc17856..eed16ba6 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 00000000..da603bd2 --- /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/test/case/firewall/basic/test.adoc b/test/case/firewall/basic/test.adoc index 78ec4c4a..e04830c7 100644 --- a/test/case/firewall/basic/test.adoc +++ b/test/case/firewall/basic/test.adoc @@ -8,7 +8,7 @@ Firewall configuration suitable for end devices on untrusted networks. image::basic.svg[align=center, scaledwidth=50%] -- Single zone configuration, "public", with action=drop +- Single zone configuration, "public-untrusted-net", with `action=drop` - Allowed services: SSH (port 22), DHCPv6-client, mySSH (custom, port 222) - All other ports (HTTP, HTTPS, Telnet, etc.) blocked - Check that unused interfaces are automatically assigned to default zone diff --git a/test/case/firewall/basic/test.py b/test/case/firewall/basic/test.py index c93cc341..fa21fd18 100755 --- a/test/case/firewall/basic/test.py +++ b/test/case/firewall/basic/test.py @@ -5,7 +5,7 @@ Firewall configuration suitable for end devices on untrusted networks. image::basic.svg[align=center, scaledwidth=50%] -- Single zone configuration, "public", with action=drop +- Single zone configuration, "public-untrusted-net", with `action=drop` - Allowed services: SSH (port 22), DHCPv6-client, mySSH (custom, port 222) - All other ports (HTTP, HTTPS, Telnet, etc.) blocked - Check that unused interfaces are automatically assigned to default zone @@ -47,7 +47,7 @@ with infamy.Test() as test: target.put_config_dict("infix-firewall", { "firewall": { - "default": "public", + "default": "public-untrusted-net", "logging": "all", "service": [{ "name": "mySSH", @@ -69,7 +69,9 @@ with infamy.Test() as test: "interface": [mgmt_if], "service": ["ssh", "netconf", "restconf"] }, { - "name": "public", + # 20-char name, exceeds old iptables-derived 17-char limit + # Verifies we allow long names with nftables, issue #1389 + "name": "public-untrusted-net", "description": "Public untrusted network", "action": "drop", "interface": [data_if], @@ -80,7 +82,7 @@ with infamy.Test() as test: # Wait for configuration to be activated infamy.Firewall.wait_for_operational(target, { - "public": {"action": "drop"}, + "public-untrusted-net": {"action": "drop"}, "mgmt": {"action": "accept"} }) @@ -88,7 +90,7 @@ with infamy.Test() as test: data = target.get_data("/infix-firewall:firewall") fw = data["firewall"] - assert fw["default"] == "public" + assert fw["default"] == "public-untrusted-net" services = {svc["name"]: svc for svc in fw.get("service", [])} assert "mySSH" in services, "Custom service mySSH not found" @@ -106,8 +108,8 @@ with infamy.Test() as test: assert int(port_entry["lower"]) == 8080 zones = {zone["name"]: zone for zone in fw["zone"]} - assert "public" in zones, "Public zone not found in configuration" - public_zone = zones["public"] + assert "public-untrusted-net" in zones, "public-untrusted-net zone not found in configuration" + public_zone = zones["public-untrusted-net"] assert public_zone["action"] == "drop" assert data_if in public_zone["interface"] assert "ssh" in public_zone["service"] @@ -119,13 +121,13 @@ with infamy.Test() as test: data = target.get_data("/infix-firewall:firewall") fw = data["firewall"] - assert fw["default"] == "public", "Default zone should be 'public'" + assert fw["default"] == "public-untrusted-net", "Default zone should be 'public-untrusted-net'" zones = {zone["name"]: zone for zone in fw["zone"]} - public_zone = zones["public"] + public_zone = zones["public-untrusted-net"] assert unused_if in public_zone["interface"], \ - f"Unused interface {unused_if} should be in default zone 'public', got interfaces: {public_zone['interface']}" + f"Unused interface {unused_if} should be in default zone 'public-untrusted-net', got interfaces: {public_zone['interface']}" with infamy.IsolatedMacVlan(host_data) as ns: ns.addip(HOST_IP) From 931ae71019a5eef65dc6c3ce27bec4821ace3bdf Mon Sep 17 00:00:00 2001 From: Joachim Wiberg Date: Thu, 5 Mar 2026 10:33:42 +0100 Subject: [PATCH 06/11] board: relocate SafeXcel firmware selection to Marvell BSPs MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The MVEBU SafeXcel Crypto Engine firmware (linux-firmware minifw) was originally added in 70c12c3 to the generic aarch64 defconfigs to silence kernel probe failures on Marvell Armada SoCs (37xx, 7k, 8k, CN913x): crypto-safexcel f2800000.crypto: Firmware load failed. crypto-safexcel f2800000.crypto: HW init failed (-2) It was then accidentally dropped in 0e2d12e (kernel upgrade to 6.18), which rebased on a tree that predated the firmware addition. Rather than restoring it to the generic defconfigs, move it to the two Marvell board Config.in files where it actually belongs — consistent with how RTL8169 firmware was handled for the Raspberry Pi CM4 IoT Router Board Mini in 68313773. Signed-off-by: Joachim Wiberg --- board/aarch64/alder-alder/Config.in | 1 + board/aarch64/marvell-cn9130-crb/Config.in | 1 + board/aarch64/marvell-espressobin/Config.in | 1 + board/aarch64/styx-dcp-sc-28p/Config.in | 1 + 4 files changed, 4 insertions(+) diff --git a/board/aarch64/alder-alder/Config.in b/board/aarch64/alder-alder/Config.in index 12a19e1d..5ad5cd86 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 3ede2b83..38f36041 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 a8bed5f6..0537da7c 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 2fa8832b..09a9fd1b 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 From 982a7544726e5dca2241d2f0b3ba004d156f93cd Mon Sep 17 00:00:00 2001 From: ael-bot Date: Tue, 10 Mar 2026 04:53:43 +0000 Subject: [PATCH 07/11] Upgrade Linux kernel to 6.18.16 --- configs/aarch64_defconfig | 2 +- configs/aarch64_minimal_defconfig | 2 +- configs/arm_defconfig | 2 +- configs/arm_minimal_defconfig | 2 +- configs/x86_64_defconfig | 2 +- configs/x86_64_minimal_defconfig | 2 +- doc/ChangeLog.md | 12 ++++++++++++ ...arvell10g-Support-firmware-loading-on-88X33.patch | 2 +- ...arvell10g-Fix-power-up-when-strapped-to-sta.patch | 2 +- ...-phy-marvell10g-Add-LED-support-for-88X3310.patch | 2 +- ...arvell10g-Support-LEDs-tied-to-a-single-med.patch | 2 +- ...05-net-phy-Do-not-resume-PHY-when-attaching.patch | 2 +- ...e-avoid-classifying-unknown-multicast-as-mr.patch | 2 +- ...e-Ignore-router-ports-when-forwarding-L2-mu.patch | 2 +- ...e-drop-delay-for-applying-strict-multicast-.patch | 2 +- ...e-Differentiate-MDB-additions-from-modifica.patch | 2 +- ...outs-onie-tlv-Let-device-probe-even-when-TL.patch | 2 +- ...8152-add-r8153b-support-for-link-activity-L.patch | 6 +++--- ...-mediatek-mt7986a-rename-BPi-R3-ports-to-ma.patch | 2 +- ...-simple-Add-a-timing-for-the-Raspberry-Pi-7.patch | 2 +- ...nput-touchscreen-edt-ft5x06-Add-polled-mode.patch | 2 +- ...sa-mv88e6xxx-Fix-timeout-on-waiting-for-PPU.patch | 2 +- ...v88e6xxx-Improve-indirect-register-access-p.patch | 2 +- ...v88e6xxx-Honor-ports-being-managed-via-in-b.patch | 2 +- ...v88e6xxx-Limit-rsvd2cpu-policy-to-user-port.patch | 2 +- ...ag_dsa-Use-tag-priority-as-initial-skb-prio.patch | 2 +- ...upport-MDB-memberships-whose-L2-addresses-o.patch | 2 +- ...-Support-EtherType-based-priority-overrides.patch | 2 +- ...v88e6xxx-Support-EtherType-based-priority-o.patch | 2 +- ...-net-dsa-mv88e6xxx-Add-mqprio-qdisc-support.patch | 2 +- ...v88e6xxx-Use-VLAN-prio-over-IP-when-both-ar.patch | 2 +- ...dsa-mv88e6xxx-Trap-locally-terminated-VLANs.patch | 2 +- ...v88e6xxx-collapse-disabled-state-into-block.patch | 2 +- ...v88e6xxx-Only-activate-LAG-offloading-when-.patch | 2 +- ...net-dsa-mv88e6xxx-Add-LED-support-for-6393X.patch | 2 +- ...fmac-support-deletion-and-recreation-of-pri.patch | 2 +- ...fmac-check-connection-state-before-querying.patch | 2 +- ...fmac-suppress-log-spam-for-regulatory-restr.patch | 2 +- ...fmac-reduce-log-noise-during-AP-to-station-.patch | 2 +- ...ir_en8811h-add-OF-device-table-for-auto-loa.patch | 2 +- patches/linux/linux.hash | 2 +- 41 files changed, 54 insertions(+), 42 deletions(-) rename patches/linux/{6.18.15 => 6.18.16}/0001-net-phy-marvell10g-Support-firmware-loading-on-88X33.patch (98%) rename patches/linux/{6.18.15 => 6.18.16}/0002-net-phy-marvell10g-Fix-power-up-when-strapped-to-sta.patch (96%) rename patches/linux/{6.18.15 => 6.18.16}/0003-net-phy-marvell10g-Add-LED-support-for-88X3310.patch (99%) rename patches/linux/{6.18.15 => 6.18.16}/0004-net-phy-marvell10g-Support-LEDs-tied-to-a-single-med.patch (97%) rename patches/linux/{6.18.15 => 6.18.16}/0005-net-phy-Do-not-resume-PHY-when-attaching.patch (94%) rename patches/linux/{6.18.15 => 6.18.16}/0006-net-bridge-avoid-classifying-unknown-multicast-as-mr.patch (99%) rename patches/linux/{6.18.15 => 6.18.16}/0007-net-bridge-Ignore-router-ports-when-forwarding-L2-mu.patch (95%) rename patches/linux/{6.18.15 => 6.18.16}/0008-net-bridge-drop-delay-for-applying-strict-multicast-.patch (99%) rename patches/linux/{6.18.15 => 6.18.16}/0009-net-bridge-Differentiate-MDB-additions-from-modifica.patch (98%) rename patches/linux/{6.18.15 => 6.18.16}/0010-nvmem-layouts-onie-tlv-Let-device-probe-even-when-TL.patch (96%) rename patches/linux/{6.18.15 => 6.18.16}/0011-net-usb-r8152-add-r8153b-support-for-link-activity-L.patch (88%) rename patches/linux/{6.18.15 => 6.18.16}/0012-arm64-dts-mediatek-mt7986a-rename-BPi-R3-ports-to-ma.patch (96%) rename patches/linux/{6.18.15 => 6.18.16}/0013-drm-panel-simple-Add-a-timing-for-the-Raspberry-Pi-7.patch (98%) rename patches/linux/{6.18.15 => 6.18.16}/0014-input-touchscreen-edt-ft5x06-Add-polled-mode.patch (98%) rename patches/linux/{6.18.15 => 6.18.16}/0015-FIX-net-dsa-mv88e6xxx-Fix-timeout-on-waiting-for-PPU.patch (94%) rename patches/linux/{6.18.15 => 6.18.16}/0016-net-dsa-mv88e6xxx-Improve-indirect-register-access-p.patch (99%) rename patches/linux/{6.18.15 => 6.18.16}/0017-net-dsa-mv88e6xxx-Honor-ports-being-managed-via-in-b.patch (95%) rename patches/linux/{6.18.15 => 6.18.16}/0018-net-dsa-mv88e6xxx-Limit-rsvd2cpu-policy-to-user-port.patch (98%) rename patches/linux/{6.18.15 => 6.18.16}/0019-net-dsa-tag_dsa-Use-tag-priority-as-initial-skb-prio.patch (95%) rename patches/linux/{6.18.15 => 6.18.16}/0020-net-dsa-Support-MDB-memberships-whose-L2-addresses-o.patch (97%) rename patches/linux/{6.18.15 => 6.18.16}/0021-net-dsa-Support-EtherType-based-priority-overrides.patch (98%) rename patches/linux/{6.18.15 => 6.18.16}/0022-net-dsa-mv88e6xxx-Support-EtherType-based-priority-o.patch (99%) rename patches/linux/{6.18.15 => 6.18.16}/0023-net-dsa-mv88e6xxx-Add-mqprio-qdisc-support.patch (98%) rename patches/linux/{6.18.15 => 6.18.16}/0024-net-dsa-mv88e6xxx-Use-VLAN-prio-over-IP-when-both-ar.patch (97%) rename patches/linux/{6.18.15 => 6.18.16}/0025-FIX-net-dsa-mv88e6xxx-Trap-locally-terminated-VLANs.patch (98%) rename patches/linux/{6.18.15 => 6.18.16}/0026-net-dsa-mv88e6xxx-collapse-disabled-state-into-block.patch (95%) rename patches/linux/{6.18.15 => 6.18.16}/0027-net-dsa-mv88e6xxx-Only-activate-LAG-offloading-when-.patch (98%) rename patches/linux/{6.18.15 => 6.18.16}/0028-net-dsa-mv88e6xxx-Add-LED-support-for-6393X.patch (99%) rename patches/linux/{6.18.15 => 6.18.16}/0029-wifi-brcmfmac-support-deletion-and-recreation-of-pri.patch (99%) rename patches/linux/{6.18.15 => 6.18.16}/0030-wifi-brcmfmac-check-connection-state-before-querying.patch (96%) rename patches/linux/{6.18.15 => 6.18.16}/0031-wifi-brcmfmac-suppress-log-spam-for-regulatory-restr.patch (96%) rename patches/linux/{6.18.15 => 6.18.16}/0032-wifi-brcmfmac-reduce-log-noise-during-AP-to-station-.patch (97%) rename patches/linux/{6.18.15 => 6.18.16}/0033-net-phy-air_en8811h-add-OF-device-table-for-auto-loa.patch (95%) diff --git a/configs/aarch64_defconfig b/configs/aarch64_defconfig index e95fc940..cc22f544 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 diff --git a/configs/aarch64_minimal_defconfig b/configs/aarch64_minimal_defconfig index 15f8017f..73ac12ba 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 diff --git a/configs/arm_defconfig b/configs/arm_defconfig index cc8cd0af..7606596f 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 diff --git a/configs/arm_minimal_defconfig b/configs/arm_minimal_defconfig index 64b9a529..aea8e1a1 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 diff --git a/configs/x86_64_defconfig b/configs/x86_64_defconfig index 9f10fa53..8752a57d 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 diff --git a/configs/x86_64_minimal_defconfig b/configs/x86_64_minimal_defconfig index c083a195..61260c88 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 diff --git a/doc/ChangeLog.md b/doc/ChangeLog.md index 1550faa1..1a73ff2e 100644 --- a/doc/ChangeLog.md +++ b/doc/ChangeLog.md @@ -3,6 +3,17 @@ Change Log All notable changes to the project are documented in this file. +[v26.02.1][] - 2026-03-xx +------------------------- + +### Changes + +- Upgrade Linux kernel to 6.18.16 (LTS) + +### Fixes + +- N/A + [v26.02.0][] - 2026-03-01 ------------------------- @@ -1932,6 +1943,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/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 8dfe21c6..7b836239 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 f2f91caf..0f9915a3 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 7493aa74..a4643e03 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 8c8ef403..3ce7a50b 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 12ca23ef..95823f84 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 c5c17055..03509486 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 841c111e..4f780532 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 3f45051a..d9fdbf97 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 c0bfa74b..f59fd202 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 152dba20..4db443b9 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 e65f4973..351750e2 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 564dbccc..85b7d4cb 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 7cc394ae..59bf674d 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 046eb8e4..d09bfba8 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 0270acbd..4ec8f603 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 35192e52..0d11d73e 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 3e2331f6..28744f92 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 a0c7646a..1bc1a45c 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 132e7164..f2128605 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 86cf4399..00cdc23e 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 044eab5e..db431a7c 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 ce5f8701..bba20e06 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 33f9ec60..28202fda 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 60e9a8fb..0c52a1ed 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 4e71ba23..c294ea7b 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 462bb5ac..f078c5cf 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 fe6e66f0..4b929c55 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 c1707d4f..4542ab3e 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 4fba220e..f6b4b603 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 084ff7cc..b0b06789 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 3814072e..d745922c 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 8639096a..f42718c4 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 c5be0160..f065dd66 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 921ca5fb..a6bde010 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 From f37d29aa212b8517f7d0b6cc1d353d0c27b1bedb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mattias=20Walstr=C3=B6m?= Date: Sat, 7 Mar 2026 18:00:45 +0100 Subject: [PATCH 08/11] ospf: add point-to-multipoint and hybrid interface type support MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Mattias Walström --- doc/routing.md | 60 +++ src/confd/src/routing.c | 36 +- src/confd/yang/confd.inc | 4 +- src/confd/yang/confd/infix-routing.yang | 27 +- ...-02.yang => infix-routing@2026-03-04.yang} | 0 src/statd/python/cli_pretty/cli_pretty.py | 52 ++- src/statd/python/yanger/ietf_ospf.py | 9 +- test/case/routing/Readme.adoc | 10 + test/case/routing/all.yaml | 6 + .../ospf_point_to_multipoint/Readme.adoc | 1 + .../__pycache__/test.cpython-312.pyc | Bin 0 -> 9295 bytes .../ospf_point_to_multipoint/test.adoc | 49 +++ .../routing/ospf_point_to_multipoint/test.py | 341 ++++++++++++++++++ .../ospf_point_to_multipoint/topology.dot | 39 ++ .../ospf_point_to_multipoint/topology.svg | 113 ++++++ .../Readme.adoc | 1 + .../__pycache__/test.cpython-312.pyc | Bin 0 -> 9083 bytes .../ospf_point_to_multipoint_hybrid/test.adoc | 46 +++ .../ospf_point_to_multipoint_hybrid/test.py | 334 +++++++++++++++++ .../topology.dot | 39 ++ .../topology.svg | 113 ++++++ 21 files changed, 1240 insertions(+), 40 deletions(-) rename src/confd/yang/confd/{infix-routing@2025-12-02.yang => infix-routing@2026-03-04.yang} (100%) create mode 120000 test/case/routing/ospf_point_to_multipoint/Readme.adoc create mode 100644 test/case/routing/ospf_point_to_multipoint/__pycache__/test.cpython-312.pyc create mode 100644 test/case/routing/ospf_point_to_multipoint/test.adoc create mode 100755 test/case/routing/ospf_point_to_multipoint/test.py create mode 100644 test/case/routing/ospf_point_to_multipoint/topology.dot create mode 100644 test/case/routing/ospf_point_to_multipoint/topology.svg create mode 120000 test/case/routing/ospf_point_to_multipoint_hybrid/Readme.adoc create mode 100644 test/case/routing/ospf_point_to_multipoint_hybrid/__pycache__/test.cpython-312.pyc create mode 100644 test/case/routing/ospf_point_to_multipoint_hybrid/test.adoc create mode 100755 test/case/routing/ospf_point_to_multipoint_hybrid/test.py create mode 100644 test/case/routing/ospf_point_to_multipoint_hybrid/topology.dot create mode 100644 test/case/routing/ospf_point_to_multipoint_hybrid/topology.svg diff --git a/doc/routing.md b/doc/routing.md index 13573b45..e473ba85 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/src/confd/src/routing.c b/src/confd/src/routing.c index 5fa199fc..5bb8b45a 100644 --- a/src/confd/src/routing.c +++ b/src/confd/src/routing.c @@ -154,6 +154,17 @@ int parse_rip(sr_session_ctx_t *session, struct lyd_node *rip, FILE *fp) return num_interfaces; } +static const char *ospf_network_type(const char *yang_type) +{ + if (!strcmp(yang_type, "hybrid")) + return "point-to-multipoint"; + if (!strcmp(yang_type, "point-to-multipoint")) + return "point-to-multipoint non-broadcast"; + + /* broadcast, non-broadcast, point-to-point pass through unchanged */ + return yang_type; +} + int parse_ospf_interfaces(sr_session_ctx_t *session, struct lyd_node *areas, FILE *fp) { struct lyd_node *interface, *interfaces, *area; @@ -203,7 +214,7 @@ int parse_ospf_interfaces(sr_session_ctx_t *session, struct lyd_node *areas, FIL if (passive) fputs(" ip ospf passive\n", fp); if (interface_type) - fprintf(fp, " ip ospf network %s\n", interface_type); + fprintf(fp, " ip ospf network %s\n", ospf_network_type(interface_type)); if (cost) fprintf(fp, " ip ospf cost %s\n", cost); } @@ -226,6 +237,28 @@ int parse_ospf_redistribute(sr_session_ctx_t *session, struct lyd_node *redistri return 0; } +static void parse_ospf_static_neighbors(struct lyd_node *areas, FILE *fp) +{ + struct lyd_node *area, *interface, *interfaces, *neighbors, *neighbor; + + LY_LIST_FOR(lyd_child(areas), area) { + interfaces = lydx_get_child(area, "interfaces"); + + LY_LIST_FOR(lyd_child(interfaces), interface) { + neighbors = lydx_get_child(interface, "static-neighbors"); + if (!neighbors) + continue; + + LY_LIST_FOR(lyd_child(neighbors), neighbor) { + const char *id = lydx_get_cattr(neighbor, "identifier"); + + if (id) + fprintf(fp, " neighbor %s\n", id); + } + } + } +} + int parse_ospf_areas(sr_session_ctx_t *session, struct lyd_node *areas, FILE *fp) { int areas_configured = 0; @@ -315,6 +348,7 @@ int parse_ospf(sr_session_ctx_t *session, struct lyd_node *ospf) fputs("router ospf\n", fp); num_areas = parse_ospf_areas(session, areas, fp); parse_ospf_redistribute(session, lydx_get_child(ospf, "redistribute"), fp); + parse_ospf_static_neighbors(areas, fp); default_route = lydx_get_child(ospf, "default-route-advertise"); if (default_route) { /* enable is obsolete in favor for enabled. */ diff --git a/src/confd/yang/confd.inc b/src/confd/yang/confd.inc index 8efe9e3e..e751a6dc 100644 --- a/src/confd/yang/confd.inc +++ b/src/confd/yang/confd.inc @@ -14,7 +14,7 @@ MODULES=( "ietf-routing@2018-03-13.yang" "ietf-ipv6-unicast-routing@2018-03-13.yang" "ietf-ipv4-unicast-routing@2018-03-13.yang" - "ietf-ospf@2022-10-19.yang -e bfd -e explicit-router-id" + "ietf-ospf@2022-10-19.yang -e bfd -e explicit-router-id -e hybrid-interface" "ietf-rip@2020-02-20.yang" "iana-bfd-types@2021-10-21.yang" "ietf-bfd-types@2022-09-22.yang" @@ -31,7 +31,7 @@ MODULES=( "ieee802-dot1q-types@2022-10-29.yang" "infix-ip@2025-11-02.yang" "infix-if-type@2026-01-07.yang" - "infix-routing@2025-12-02.yang" + "infix-routing@2026-03-04.yang " "ieee802-dot1ab-lldp@2022-03-15.yang" "infix-lldp@2025-05-05.yang" "infix-dhcp-common@2025-12-21.yang" diff --git a/src/confd/yang/confd/infix-routing.yang b/src/confd/yang/confd/infix-routing.yang index 9daa8b50..e11fe080 100644 --- a/src/confd/yang/confd/infix-routing.yang +++ b/src/confd/yang/confd/infix-routing.yang @@ -26,6 +26,12 @@ module infix-routing { contact "kernelkit@googlegroups.com"; description "Deviations and augments for ietf-routing, ietf-ospf, and ietf-rip."; + revision 2026-03-04 { + description "Remove interface-type deviation to expose standard ietf-ospf + interface types including point-to-multipoint and hybrid. + Un-deviate static-neighbors for non-broadcast P2MP support."; + } + revision 2025-12-02 { description "Add configurable OSPF debug logging container. Add RIP (Routing Information Protocol) support."; @@ -247,18 +253,6 @@ module infix-routing { } /* OSPF */ - typedef infix-ospf-interface-type { - type enumeration { - enum broadcast { - description - "Specifies an OSPF broadcast multi-access network."; - } - enum point-to-point { - description - "Specifies an OSPF point-to-point network."; - } - } - } deviation "/rt:routing/rt:control-plane-protocols/rt:control-plane-protocol" { @@ -367,11 +361,6 @@ module infix-routing { } } - deviation "/rt:routing/rt:control-plane-protocols/rt:control-plane-protocol/ospf:ospf/ospf:areas/ospf:area/ospf:interfaces/ospf:interface/ospf:interface-type" { - deviate replace { - type infix-ospf-interface-type; - } - } deviation "/rt:routing/rt:control-plane-protocols/rt:control-plane-protocol/ospf:ospf/ospf:auto-cost" { deviate not-supported; @@ -463,10 +452,6 @@ module infix-routing { } /* OSPF Area Interface */ - deviation "/rt:routing/rt:control-plane-protocols/rt:control-plane-protocol/ospf:ospf/ospf:areas/ospf:area/ospf:interfaces/ospf:interface/ospf:static-neighbors" - { - deviate not-supported; - } deviation "/rt:routing/rt:control-plane-protocols/rt:control-plane-protocol/ospf:ospf/ospf:areas/ospf:area/ospf:interfaces/ospf:interface/ospf:multi-areas" { deviate not-supported; } diff --git a/src/confd/yang/confd/infix-routing@2025-12-02.yang b/src/confd/yang/confd/infix-routing@2026-03-04.yang similarity index 100% rename from src/confd/yang/confd/infix-routing@2025-12-02.yang rename to src/confd/yang/confd/infix-routing@2026-03-04.yang diff --git a/src/statd/python/cli_pretty/cli_pretty.py b/src/statd/python/cli_pretty/cli_pretty.py index 8d4c87a0..aefe9b80 100755 --- a/src/statd/python/cli_pretty/cli_pretty.py +++ b/src/statd/python/cli_pretty/cli_pretty.py @@ -4832,7 +4832,7 @@ def show_ospf_interfaces(json_data): state = target_iface.get('state', 'down') cost = target_iface.get('cost', 0) priority = target_iface.get('priority', 1) - iface_type = target_iface.get('interface-type', 'unknown') + iface_type = target_iface.get('interface-type', '') hello_interval = target_iface.get('hello-interval', 10) dead_interval = target_iface.get('dead-interval', 40) retransmit_interval = target_iface.get('retransmit-interval', 5) @@ -4908,9 +4908,11 @@ def show_ospf_interfaces(json_data): network_type_map = { 'point-to-point': 'POINTOPOINT', 'broadcast': 'BROADCAST', - 'non-broadcast': 'NBMA' + 'non-broadcast': 'NBMA', + 'point-to-multipoint': 'POINTOMULTIPOINT', + 'hybrid': 'POINTOMULTIPOINT' } - network_type = network_type_map.get(iface_type, iface_type.upper()) + network_type = network_type_map.get(iface_type, iface_type.upper() if iface_type else 'LOOPBACK') print(f"{name} is up") if ip_address: @@ -4950,30 +4952,50 @@ def show_ospf_interfaces(json_data): return # Display table view (no specific interface) - hdr = f"{'INTERFACE':<12} {'AREA':<12} {'STATE':<10} {'COST':<6} {'PRI':<4} {'DR':<15} {'BDR':<15} {'NBRS':<5}" - print(Decore.invert(hdr)) + type_display_map = { + 'point-to-point': 'P2P', + 'broadcast': 'Broadcast', + 'non-broadcast': 'NBMA', + 'point-to-multipoint': 'P2MP', + 'hybrid': 'Hybrid' + } + + def fmt_state(state): + if state in ('dr', 'bdr'): + return state.upper() + if state == 'dr-other': + return 'DROther' + return state.capitalize() + + table = SimpleTable([ + Column('INTERFACE'), + Column('AREA'), + Column('TYPE'), + Column('STATE'), + Column('COST', 'right'), + Column('PRI', 'right'), + Column('DR'), + Column('BDR'), + Column('NBRS', 'right') + ]) for iface in all_interfaces: name = iface.get('name', 'unknown') area_id = iface.get('_area_id', '0.0.0.0') state = iface.get('state', 'down') + iface_type = iface.get('interface-type', '') cost = iface.get('cost', 0) priority = iface.get('priority', 1) dr_id = iface.get('dr-router-id', '-') bdr_id = iface.get('bdr-router-id', '-') neighbors = iface.get('neighbors', {}).get('neighbor', []) - nbr_count = len(neighbors) - # Capitalize state nicely - state_display = state.upper() if state in ['dr', 'bdr'] else state.capitalize() - if state == 'dr-other': - state_display = 'DROther' + table.row(name, area_id, + type_display_map.get(iface_type, iface_type.capitalize() if iface_type else '-'), + fmt_state(state), + cost, priority, dr_id, bdr_id, len(neighbors)) - # Shorten router IDs for display - dr_display = dr_id if dr_id != '-' else '-' - bdr_display = bdr_id if bdr_id != '-' else '-' - - print(f"{name:<12} {area_id:<12} {state_display:<10} {cost:<6} {priority:<4} {dr_display:<15} {bdr_display:<15} {nbr_count:<5}") + table.print() def show_ospf_neighbor(json_data): diff --git a/src/statd/python/yanger/ietf_ospf.py b/src/statd/python/yanger/ietf_ospf.py index d7e09015..bd6335d3 100644 --- a/src/statd/python/yanger/ietf_ospf.py +++ b/src/statd/python/yanger/ietf_ospf.py @@ -124,8 +124,15 @@ def add_areas(control_protocols): interface["enabled"] = iface["ospfEnabled"] if iface["networkType"] == "POINTOPOINT": interface["interface-type"] = "point-to-point" - if iface["networkType"] == "BROADCAST": + elif iface["networkType"] == "BROADCAST": interface["interface-type"] = "broadcast" + elif iface["networkType"] == "POINTOMULTIPOINT": + if iface.get("p2mpNonBroadcast", False): + interface["interface-type"] = "point-to-multipoint" + else: + interface["interface-type"] = "hybrid" + elif iface["networkType"] == "NBMA": + interface["interface-type"] = "non-broadcast" if iface.get("state"): # Wev've never seen "DependUpon", and has no entry in diff --git a/test/case/routing/Readme.adoc b/test/case/routing/Readme.adoc index 68bfc2d7..6152bc0a 100644 --- a/test/case/routing/Readme.adoc +++ b/test/case/routing/Readme.adoc @@ -10,6 +10,8 @@ Tests verifying standard routing protocols and configuration: - OSPF with BFD (Bidirectional Forwarding Detection) - OSPF default route advertisement and propagation - OSPF debug logging configuration and verification + - OSPF point-to-multipoint hybrid (broadcast) interface type + - OSPF point-to-multipoint (non-broadcast) interface type with static neighbors - RIP basic neighbor discovery and route exchange - RIP passive interface configuration - RIP route redistribution (connected, static, and OSPF) @@ -46,6 +48,14 @@ include::ospf_debug/Readme.adoc[] <<< +include::ospf_point_to_multipoint_hybrid/Readme.adoc[] + +<<< + +include::ospf_point_to_multipoint/Readme.adoc[] + +<<< + include::rip_basic/Readme.adoc[] <<< diff --git a/test/case/routing/all.yaml b/test/case/routing/all.yaml index 8086180c..83d7637e 100644 --- a/test/case/routing/all.yaml +++ b/test/case/routing/all.yaml @@ -29,6 +29,12 @@ - name: OSPF Debug Logging case: ospf_debug/test.py +- name: OSPF Point-to-Multipoint Hybrid + case: ospf_point_to_multipoint_hybrid/test.py + +- name: OSPF Point-to-Multipoint + case: ospf_point_to_multipoint/test.py + - name: RIP Basic case: rip_basic/test.py diff --git a/test/case/routing/ospf_point_to_multipoint/Readme.adoc b/test/case/routing/ospf_point_to_multipoint/Readme.adoc new file mode 120000 index 00000000..ae32c841 --- /dev/null +++ b/test/case/routing/ospf_point_to_multipoint/Readme.adoc @@ -0,0 +1 @@ +test.adoc \ No newline at end of file diff --git a/test/case/routing/ospf_point_to_multipoint/__pycache__/test.cpython-312.pyc b/test/case/routing/ospf_point_to_multipoint/__pycache__/test.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..42f7f33319ce9476b68360572c6f4226ddbe7135 GIT binary patch literal 9295 zcmdrxTW}jka=QQ)FA@MjQG7p^r1$_ykOU}N56hBe*|dETA%;|Bo05;U#4L!VKrFJm zlte@yy2QDYF0RMES^4=$Yy1?&;~7?wKC_#^>`g@Xh@AzBF`%Vg3^v)>mUzwwGNDbB7_!JVRJw zOR@7TEp03Ic{__Zd&;rG&2uZxc_*|TpD^<-!U1#>CqR#l5!vMiOKhopU{)uY`5Lii zxuw)&)rji>Yt$zhmZ5T5t-exe$(i?y{^hO`-l`Ed@jS2@t@*k=XuM@K!98ed%4q6| z4gV~;EVIW9YRhK;a{DcRJUrNv(J)!33Q)7IN!K0Zhr-L(>}PpBv8TKyf5y$ z3htJDaMwIH@78^BSI)Z)c8wE$F0oE*6q_E{4GROtEe6GAv84>-5$nZPvCYC*CG6?% zx7NY(wT2PeNxg-kyO$#eK4D11mj^BTnApau*rux3=Bn71s@T>_?Dw2Uo29ksb?v0x z!cdLv%g3#KS}Mgl(jhilHY1&v2N_1S{eby%7A#SnBS<<(*SsHM!Yo> zoZCKjRyXOfR?YOs&V6zBR&aNLRoLY>OZKyBVrNOi`R+Zby2_|}#O~#HE&ftT4p}rX z)1ImnePtBg%kP(Xts3bk1D57gN;R565-QPv#!fN>J8$?Cri88Bc`s{2H2ot>hf--p z`sY1z&DP6A7?r(hW0{X&Wm)EP+o!+2X8(w}%0Ab_e)`)zdw#lSPpEp&r-?oA%X{F{ z)$waK10Na@rko6OZf<6ZpOK}s7S`nO^lD0zGT8EZFNlhiSmP-HMIpgTk$@je%jxi< zA`2ugs9J~zCQ(TUago>7G9tgY=8enggtWA(Na-bBODdwsEAlE3sl1%#1zt@Gib!}W zGAzX7qN?&~QM)QDm-(xbmINNrD~VbnEUTFWKTt)9fyz;ZG~rcE(4;tsl9rN-vZ9W9 z&nG37UlB4YugUz>?CgMART{r*Mgv7{Ka@hDeHv$ivua*-NL1mMXCjNsY@_L}hK%>z$4ALR?dM0d!1?d~$VhgkMx7vP6w{ zRpv9vHC2kkh$$(3S>*?@h>Xxylp0^=1uqP{lmgpZtHKj`MUc|`;G!}f8s+)f2#*$; zo!~_QCIdRB#khu6k<%hCC-~Xufa=Z2ilzefc~C?XL1WNSN=PtiEh%WckV+L7G9fD~ z#ugFCGOT?%j$~IP!MmCUZB=cA7q7*WLVC$ue079sKn3AMD|QXoDlRJuD3x0CDk5qE zTLg?!W%0pkqwsloemMNxH_X5MtHuV>uA7`-EbFsSR=Zkh(SUKS@46u^GCn#!8X1j@ zO+;yrMQM>$D}jcxO_Z?}bsJ2{p(4}wlm_&>*~;x!vc$gZR>lU>iXUh+TC!ac{jv(O zO;pI)#ZwxtxZKs$MXMJ-%0qp{;ISCM->lCRi$qaN@Nl^di_j{qwTbRt8>{=d(paJA ztp6OHg}4q5Jbv6*|44LV6ja?cCyUN1tJ&p6`U9V_B|-N1SoH87w1YFz>6zUzksq_7 zwkj^Ih-ockxZpE9J7Xc6&aI|3DW$tJf&yVeOvTN6Fg;rj0>t)q4!|AeIopb=copb_)4QgF?om4Il8eqE{HG#4Rbm;}@P^a<_ z-L*Y1=fN^-OsFrWdy7#`)jh@f`GU7-_QA^1-F44jXdL_ zsk`vl1zCkA2>6;Jr^1<(kQT!kMb_lFoKg#o)jJ9e5}e@I!Y2Q5JcqADbr%s60$c?2 zS~$NYRa2xzIM!j&O?kSJwro1!#z+qP$i=4ZtKtn6B5{7ct@#5e2SDuuMuj6gr1Ux)3OX((4Yi2`~icMWr~3nysY>({k&qUYA+b7QilWBU&I5 z9QClEPEAmjL``>K?9m-W&;%8Y0}fh<;>kM(N2oYv3K_$p7O2@4Gb1?ds9Jq32Z!Q>p?Zyjxq9c@o*n{#z-Px(W+-hrn>qfh&zxyZy8XAgDe z8T(+@7U%44-Ew&kHs+g|?mmks@-m|KzFhzKE~31hLrETxG}hf&pSSn6`SbR^c5gn$ zGQP%KT`1QulH*^?@u9qv=^o1+8vUv!Z?{Ez@{BFgo3}f{o%vd(dmuM<^y%P4?(osv zk=Ju4Pvzb?nL9c6bo_X3^7KEQ*f>06m3hwoMifRp&5myQYL5)%TbapYzyp&T8OpZ= zUK`HagA@H*T*D9y(GY?m8v8r9d>yD}_jqF-lxPAqM?lxUX3%w@#k+NmJ;!!9|BE@t za;|MKCsRGD{X6u$D5{we4PqK`L43lv=7Ct^z3YH@$3gspctvVylq+jNOykTLMtOiH z2+_wuV~-irXf%U3X2v#*W*8|sjA^8kbP=9(10PR%%-Gfou?^)y?4q%)&x~#TpwB>A zY#XeIZJ`)-2nAm17~Kx1RMw0TQiA%`ae8GH&nx)+q<9eE!=F+MAmlJSY!ngbvr0Vx z-D$9d>?Qxpwi{um?)*Ye zJ<^AsI)I)U0#Cj0hj}V`-T%3#e!$LAPn`o#Rq*ksx~Kj>zkif`^t`cscRM2W6Z76M z0r!TILzx!`$T2fcZ1Qzm5ipoqUjcl=^B}_g3ou#Sp+cze~bVvN@qcJr{DxkK$){TU#(_F zs$bG<-L9O&k!KL#1L~eyzVXVnR6fA*FTF^KldoQhc^H3}Ro;7%LZ@E6LO;Oq7ha^q zo4b_Aj+oD*#XE}e>Iv^xRq~qb@R_6-zlZSL!W2*Lx!v*NvyHd58_Zq%-}(R6 ze=ob)9KB&UaJ+ml92|dtkXrceV5k*U5>Ve$pE+FPC8WRz66)7o3kyV!FD&RzxRDAg zYkI9wj?О`p^QIKM%6x30{SWR;;dc~t>mF_qXIhyXkOig#FnwZh;@1(Ejb`gNn zIHhO|HsS-i17wA8l;t)@58 z#1RtBh2q9rzzkM*ChYXq{5hRZmh^;H6@-@{u21Wpp5$0V3oX`W!Wu97wg!53;x^0|8GqDe=q~TbI!1= z>vsv;c`VX4Y~>R+#u>bE;U^b=bn!1f&NJiefzL_KBBXjNkIyWN*H#n=qdCzul>i*PbaN@gQ7u4Uq|G{Q((x@Bw-*Yz4x*NZ-t@eMtMaii*6UB)Cvt(2o2%ajMji)7 z?$3VJ@()v+fioNLUiv0*X~TVKBXFs*|DDaiTN_gszX@F2a9`XAT&(Qh#s4^P377C= z79Izz`5xQ!9N%JUIsfjpYT9gwR9nL`ys!7>g>QYmkA1!OrZ#=UdB)@M-&b>$Xgi>D zW6@k~;IsE{z5n^;C$&A5^|QCme$jEi=1J{g>?yUrt8MtME(-sC&)I$c9Un;A!BKWx zpfBWboaZNJe{}Yf*p9%$cBgxO#|B%J?)1WrA6Axb&%#bKTHaXJ!cIM!z_2?sKps`S zKt-EXIsjUwu=8$Fc0v6|@XNoikA>|2%${~n2f3elTA=Z>o--ZOo!q~i!p6^=PuENj zbHC`t#xG8sZkRsG{VIr!Uk#lO#yYrPzkVPVbp6JEx<1BvzUJM~_ + + + + + +3x1 + + + +PC + +PC + +mgmt1 + +data1 + + +mgmt2 + +mgmt3 + +data2 + + + +R1 + +mgmt + +data + +link + +R1 + 10.0.1.1/32 +(lo) + + + +PC:mgmt1--R1:mgmt + + + + +PC:data1--R1:data + +10.0.10.1/24 +10.0.10.2/24 + + + +R2 + +link1 + +mgmt + +link2 + +R2 + 10.0.2.1/32 +(lo) +(br0: 10.0.123.2/24) + + + +PC:mgmt2--R2:mgmt + + + + +R3 + +link + +mgmt + +data + +R3 + 10.0.3.1/32 +(lo) + + + +PC:mgmt3--R3:mgmt + + + + +R1:link--R2:link1 + +10.0.123.1/24 + + + +R3:data--PC:data2 + +10.0.30.2/24 +10.0.30.1/24 + + + +R3:link--R2:link2 + +10.0.123.3/24 + + + 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 00000000..ae32c841 --- /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/__pycache__/test.cpython-312.pyc b/test/case/routing/ospf_point_to_multipoint_hybrid/__pycache__/test.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..0729f22e077b267d01c288c5f2c0b7825da80db7 GIT binary patch literal 9083 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 qdK>GH1tAgeKlZvn&f~CYbNvsyz_YCY literal 0 HcmV?d00001 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 00000000..7bd202af --- /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 00000000..f067ad83 --- /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 00000000..6a345571 --- /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 00000000..94d30fe3 --- /dev/null +++ b/test/case/routing/ospf_point_to_multipoint_hybrid/topology.svg @@ -0,0 +1,113 @@ + + + + + + +3r-p2mp + + + +PC + +PC + +mgmt1 + +data1 + + +mgmt2 + +mgmt3 + +data2 + + + +R1 + +mgmt + +data + +link + +R1 + 10.0.1.1/32 +(lo) + + + +PC:mgmt1--R1:mgmt + + + + +PC:data1--R1:data + +10.0.10.1/24 +10.0.10.2/24 + + + +R2 + +link1 + +mgmt + +link2 + +R2 + 10.0.2.1/32 +(lo) +(br0: 10.0.123.2/24) + + + +PC:mgmt2--R2:mgmt + + + + +R3 + +link + +mgmt + +data + +R3 + 10.0.3.1/32 +(lo) + + + +PC:mgmt3--R3:mgmt + + + + +R1:link--R2:link1 + +10.0.123.1/24 + + + +R3:data--PC:data2 + +10.0.30.2/24 +10.0.30.1/24 + + + +R3:link--R2:link2 + +10.0.123.3/24 + + + From d869f6c478ea7bffeb153f3e19b86900b2be5997 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mattias=20Walstr=C3=B6m?= Date: Wed, 11 Mar 2026 09:10:31 +0100 Subject: [PATCH 09/11] Followup OSPF point-to-multipoint [skip ci] --- src/confd/yang/confd.inc | 2 +- .../__pycache__/test.cpython-312.pyc | Bin 9295 -> 0 bytes .../__pycache__/test.cpython-312.pyc | Bin 9083 -> 0 bytes 3 files changed, 1 insertion(+), 1 deletion(-) delete mode 100644 test/case/routing/ospf_point_to_multipoint/__pycache__/test.cpython-312.pyc delete mode 100644 test/case/routing/ospf_point_to_multipoint_hybrid/__pycache__/test.cpython-312.pyc diff --git a/src/confd/yang/confd.inc b/src/confd/yang/confd.inc index e751a6dc..77e998b7 100644 --- a/src/confd/yang/confd.inc +++ b/src/confd/yang/confd.inc @@ -31,7 +31,7 @@ MODULES=( "ieee802-dot1q-types@2022-10-29.yang" "infix-ip@2025-11-02.yang" "infix-if-type@2026-01-07.yang" - "infix-routing@2026-03-04.yang " + "infix-routing@2026-03-04.yang" "ieee802-dot1ab-lldp@2022-03-15.yang" "infix-lldp@2025-05-05.yang" "infix-dhcp-common@2025-12-21.yang" diff --git a/test/case/routing/ospf_point_to_multipoint/__pycache__/test.cpython-312.pyc b/test/case/routing/ospf_point_to_multipoint/__pycache__/test.cpython-312.pyc deleted file mode 100644 index 42f7f33319ce9476b68360572c6f4226ddbe7135..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9295 zcmdrxTW}jka=QQ)FA@MjQG7p^r1$_ykOU}N56hBe*|dETA%;|Bo05;U#4L!VKrFJm zlte@yy2QDYF0RMES^4=$Yy1?&;~7?wKC_#^>`g@Xh@AzBF`%Vg3^v)>mUzwwGNDbB7_!JVRJw zOR@7TEp03Ic{__Zd&;rG&2uZxc_*|TpD^<-!U1#>CqR#l5!vMiOKhopU{)uY`5Lii zxuw)&)rji>Yt$zhmZ5T5t-exe$(i?y{^hO`-l`Ed@jS2@t@*k=XuM@K!98ed%4q6| z4gV~;EVIW9YRhK;a{DcRJUrNv(J)!33Q)7IN!K0Zhr-L(>}PpBv8TKyf5y$ z3htJDaMwIH@78^BSI)Z)c8wE$F0oE*6q_E{4GROtEe6GAv84>-5$nZPvCYC*CG6?% zx7NY(wT2PeNxg-kyO$#eK4D11mj^BTnApau*rux3=Bn71s@T>_?Dw2Uo29ksb?v0x z!cdLv%g3#KS}Mgl(jhilHY1&v2N_1S{eby%7A#SnBS<<(*SsHM!Yo> zoZCKjRyXOfR?YOs&V6zBR&aNLRoLY>OZKyBVrNOi`R+Zby2_|}#O~#HE&ftT4p}rX z)1ImnePtBg%kP(Xts3bk1D57gN;R565-QPv#!fN>J8$?Cri88Bc`s{2H2ot>hf--p z`sY1z&DP6A7?r(hW0{X&Wm)EP+o!+2X8(w}%0Ab_e)`)zdw#lSPpEp&r-?oA%X{F{ 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О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 qdK>GH1tAgeKlZvn&f~CYbNvsyz_YCY From 6838cc9c25188c55c0a68e119b10a40208eac4c7 Mon Sep 17 00:00:00 2001 From: Joachim Wiberg Date: Wed, 11 Mar 2026 09:59:53 +0100 Subject: [PATCH 10/11] confd: follow-up to OSPF point-to-multipoint Add a must expression to ensure users do not set static neighbors when the interface type is not point-to-multipoint or non-broadcast. Signed-off-by: Joachim Wiberg --- src/confd/yang/confd.inc | 2 +- src/confd/yang/confd/infix-routing.yang | 9 ++++++++- ...ing@2026-03-04.yang => infix-routing@2026-03-11.yang} | 0 3 files changed, 9 insertions(+), 2 deletions(-) rename src/confd/yang/confd/{infix-routing@2026-03-04.yang => infix-routing@2026-03-11.yang} (100%) diff --git a/src/confd/yang/confd.inc b/src/confd/yang/confd.inc index 77e998b7..9aab909d 100644 --- a/src/confd/yang/confd.inc +++ b/src/confd/yang/confd.inc @@ -31,7 +31,7 @@ MODULES=( "ieee802-dot1q-types@2022-10-29.yang" "infix-ip@2025-11-02.yang" "infix-if-type@2026-01-07.yang" - "infix-routing@2026-03-04.yang" + "infix-routing@2026-03-11.yang" "ieee802-dot1ab-lldp@2022-03-15.yang" "infix-lldp@2025-05-05.yang" "infix-dhcp-common@2025-12-21.yang" diff --git a/src/confd/yang/confd/infix-routing.yang b/src/confd/yang/confd/infix-routing.yang index e11fe080..535d0f1e 100644 --- a/src/confd/yang/confd/infix-routing.yang +++ b/src/confd/yang/confd/infix-routing.yang @@ -26,7 +26,7 @@ module infix-routing { contact "kernelkit@googlegroups.com"; description "Deviations and augments for ietf-routing, ietf-ospf, and ietf-rip."; - revision 2026-03-04 { + revision 2026-03-11 { description "Remove interface-type deviation to expose standard ietf-ospf interface types including point-to-multipoint and hybrid. Un-deviate static-neighbors for non-broadcast P2MP support."; @@ -452,6 +452,13 @@ module infix-routing { } /* OSPF Area Interface */ + deviation "/rt:routing/rt:control-plane-protocols/rt:control-plane-protocol/ospf:ospf/ospf:areas/ospf:area/ospf:interfaces/ospf:interface/ospf:static-neighbors/ospf:neighbor" { + deviate add { + must "../../ospf:interface-type = 'point-to-multipoint' or ../../ospf:interface-type = 'non-broadcast'" { + error-message "Static neighbors are only applicable to point-to-multipoint or non-broadcast interface types."; + } + } + } deviation "/rt:routing/rt:control-plane-protocols/rt:control-plane-protocol/ospf:ospf/ospf:areas/ospf:area/ospf:interfaces/ospf:interface/ospf:multi-areas" { deviate not-supported; } diff --git a/src/confd/yang/confd/infix-routing@2026-03-04.yang b/src/confd/yang/confd/infix-routing@2026-03-11.yang similarity index 100% rename from src/confd/yang/confd/infix-routing@2026-03-04.yang rename to src/confd/yang/confd/infix-routing@2026-03-11.yang From e5754b4001518d7c56a46505dcf7a19b43d4d951 Mon Sep 17 00:00:00 2001 From: Joachim Wiberg Date: Tue, 10 Mar 2026 14:34:02 +0100 Subject: [PATCH 11/11] doc: prepare for v26.02.1 release Signed-off-by: Joachim Wiberg --- doc/ChangeLog.md | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/doc/ChangeLog.md b/doc/ChangeLog.md index 1a73ff2e..8fd5df4e 100644 --- a/doc/ChangeLog.md +++ b/doc/ChangeLog.md @@ -3,16 +3,23 @@ Change Log All notable changes to the project are documented in this file. -[v26.02.1][] - 2026-03-xx +[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 -- N/A +- 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 -------------------------