From d3c3e7962857a77b198459115f1c0bd6e663f2f8 Mon Sep 17 00:00:00 2001 From: Monviech <79600909+Monviech@users.noreply.github.com> Date: Thu, 21 May 2026 14:53:07 +0200 Subject: [PATCH] net/frr: OSPF/OSPF6 More visibility and safety for ModelRelationField references (#5459) * Allow multiple prefix list selections in a route map in OSPF6 as well * Improve visibility for route-maps and prefix-lists in OSPF/OSPF6 and enable internalModelUseSafeDelete --- .../Quagga/Api/Ospf6settingsController.php | 1 + .../Quagga/Api/OspfsettingsController.php | 1 + .../Quagga/forms/dialogEditOSPF6Network.xml | 4 +-- .../Quagga/forms/dialogEditOSPF6RouteMaps.xml | 3 +- .../Quagga/forms/dialogEditOSPFNetwork.xml | 4 +-- .../Quagga/forms/dialogEditOSPFRouteMaps.xml | 2 +- .../Quagga/forms/dialogEditRedistribution.xml | 2 +- .../mvc/app/models/OPNsense/Quagga/OSPF.xml | 24 +++++++------- .../mvc/app/models/OPNsense/Quagga/OSPF6.xml | 32 ++++++++++--------- .../templates/OPNsense/Quagga/ospf6d.conf | 10 ++++-- 10 files changed, 45 insertions(+), 38 deletions(-) diff --git a/net/frr/src/opnsense/mvc/app/controllers/OPNsense/Quagga/Api/Ospf6settingsController.php b/net/frr/src/opnsense/mvc/app/controllers/OPNsense/Quagga/Api/Ospf6settingsController.php index 1574d398c..05f79633b 100644 --- a/net/frr/src/opnsense/mvc/app/controllers/OPNsense/Quagga/Api/Ospf6settingsController.php +++ b/net/frr/src/opnsense/mvc/app/controllers/OPNsense/Quagga/Api/Ospf6settingsController.php @@ -37,6 +37,7 @@ class Ospf6settingsController extends ApiMutableModelControllerBase { protected static $internalModelName = 'ospf6'; protected static $internalModelClass = '\OPNsense\Quagga\OSPF6'; + protected static $internalModelUseSafeDelete = true; public function searchNetworkAction() { diff --git a/net/frr/src/opnsense/mvc/app/controllers/OPNsense/Quagga/Api/OspfsettingsController.php b/net/frr/src/opnsense/mvc/app/controllers/OPNsense/Quagga/Api/OspfsettingsController.php index c0093c937..8a6141a44 100644 --- a/net/frr/src/opnsense/mvc/app/controllers/OPNsense/Quagga/Api/OspfsettingsController.php +++ b/net/frr/src/opnsense/mvc/app/controllers/OPNsense/Quagga/Api/OspfsettingsController.php @@ -36,6 +36,7 @@ class OspfsettingsController extends ApiMutableModelControllerBase { protected static $internalModelName = 'ospf'; protected static $internalModelClass = '\OPNsense\Quagga\OSPF'; + protected static $internalModelUseSafeDelete = true; public function searchNeighborAction() { diff --git a/net/frr/src/opnsense/mvc/app/controllers/OPNsense/Quagga/forms/dialogEditOSPF6Network.xml b/net/frr/src/opnsense/mvc/app/controllers/OPNsense/Quagga/forms/dialogEditOSPF6Network.xml index 2b73476c0..8c69e996a 100644 --- a/net/frr/src/opnsense/mvc/app/controllers/OPNsense/Quagga/forms/dialogEditOSPF6Network.xml +++ b/net/frr/src/opnsense/mvc/app/controllers/OPNsense/Quagga/forms/dialogEditOSPF6Network.xml @@ -40,7 +40,7 @@ network.linkedPrefixlistIn dropdown - Filters inbound route advertisements using a prefix list. + Filters inbound route advertisements using a prefix list. If multiple items with the same name exist, choosing one of them will apply all items with the same name. false @@ -49,7 +49,7 @@ network.linkedPrefixlistOut dropdown - Filters outbound route advertisements using a prefix list. + Filters outbound route advertisements using a prefix list. If multiple items with the same name exist, choosing one of them will apply all items with the same name. false diff --git a/net/frr/src/opnsense/mvc/app/controllers/OPNsense/Quagga/forms/dialogEditOSPF6RouteMaps.xml b/net/frr/src/opnsense/mvc/app/controllers/OPNsense/Quagga/forms/dialogEditOSPF6RouteMaps.xml index 427662d7f..63678d617 100644 --- a/net/frr/src/opnsense/mvc/app/controllers/OPNsense/Quagga/forms/dialogEditOSPF6RouteMaps.xml +++ b/net/frr/src/opnsense/mvc/app/controllers/OPNsense/Quagga/forms/dialogEditOSPF6RouteMaps.xml @@ -31,9 +31,8 @@ routemap.match2 select_multiple - true - Allows for matching based on prefix lists, multiple selections enabled. + Allows for matching based on prefix lists, multiple selections enabled. If multiple items with the same name exist, choosing one of them will apply all items with the same name. routemap.set diff --git a/net/frr/src/opnsense/mvc/app/controllers/OPNsense/Quagga/forms/dialogEditOSPFNetwork.xml b/net/frr/src/opnsense/mvc/app/controllers/OPNsense/Quagga/forms/dialogEditOSPFNetwork.xml index 66c72e677..226a77a1b 100644 --- a/net/frr/src/opnsense/mvc/app/controllers/OPNsense/Quagga/forms/dialogEditOSPFNetwork.xml +++ b/net/frr/src/opnsense/mvc/app/controllers/OPNsense/Quagga/forms/dialogEditOSPFNetwork.xml @@ -40,7 +40,7 @@ network.linkedPrefixlistIn dropdown - Filters inbound route advertisements using a prefix list. + Filters inbound route advertisements using a prefix list. If multiple items with the same name exist, choosing one of them will apply all items with the same name. false @@ -49,7 +49,7 @@ network.linkedPrefixlistOut dropdown - Filters outbound route advertisements using a prefix list. + Filters outbound route advertisements using a prefix list. If multiple items with the same name exist, choosing one of them will apply all items with the same name. false diff --git a/net/frr/src/opnsense/mvc/app/controllers/OPNsense/Quagga/forms/dialogEditOSPFRouteMaps.xml b/net/frr/src/opnsense/mvc/app/controllers/OPNsense/Quagga/forms/dialogEditOSPFRouteMaps.xml index 84d3a07f6..63678d617 100644 --- a/net/frr/src/opnsense/mvc/app/controllers/OPNsense/Quagga/forms/dialogEditOSPFRouteMaps.xml +++ b/net/frr/src/opnsense/mvc/app/controllers/OPNsense/Quagga/forms/dialogEditOSPFRouteMaps.xml @@ -32,7 +32,7 @@ select_multiple true - Allows for matching based on prefix lists, multiple selections enabled. + Allows for matching based on prefix lists, multiple selections enabled. If multiple items with the same name exist, choosing one of them will apply all items with the same name. routemap.set diff --git a/net/frr/src/opnsense/mvc/app/controllers/OPNsense/Quagga/forms/dialogEditRedistribution.xml b/net/frr/src/opnsense/mvc/app/controllers/OPNsense/Quagga/forms/dialogEditRedistribution.xml index cd3eb2a08..2e4ae16f0 100644 --- a/net/frr/src/opnsense/mvc/app/controllers/OPNsense/Quagga/forms/dialogEditRedistribution.xml +++ b/net/frr/src/opnsense/mvc/app/controllers/OPNsense/Quagga/forms/dialogEditRedistribution.xml @@ -19,7 +19,7 @@ redistribution.linkedRoutemap dropdown - Optional Route-map to apply to this redistribution. + Optional Route-map to apply to this redistribution. If multiple items with the same name exist, choosing one of them will apply all items with the same name. redistribution.description diff --git a/net/frr/src/opnsense/mvc/app/models/OPNsense/Quagga/OSPF.xml b/net/frr/src/opnsense/mvc/app/models/OPNsense/Quagga/OSPF.xml index 501cc8cc6..3998b8bd6 100644 --- a/net/frr/src/opnsense/mvc/app/models/OPNsense/Quagga/OSPF.xml +++ b/net/frr/src/opnsense/mvc/app/models/OPNsense/Quagga/OSPF.xml @@ -97,23 +97,23 @@ - + name,seqnumber + %s:%s + Related Prefix-List item not found. - + name,seqnumber + %s:%s + Related Prefix-List item not found. @@ -308,12 +308,12 @@ - + name,id + %s:%s + Related Route-Map item not found. diff --git a/net/frr/src/opnsense/mvc/app/models/OPNsense/Quagga/OSPF6.xml b/net/frr/src/opnsense/mvc/app/models/OPNsense/Quagga/OSPF6.xml index 41387c7c2..1ec617842 100644 --- a/net/frr/src/opnsense/mvc/app/models/OPNsense/Quagga/OSPF6.xml +++ b/net/frr/src/opnsense/mvc/app/models/OPNsense/Quagga/OSPF6.xml @@ -54,23 +54,23 @@ - + name,seqnumber + %s:%s + Related Prefix-List item not found. - + name,seqnumber + %s:%s + Related Prefix-List item not found. @@ -194,12 +194,14 @@ - + name,seqnumber + %s:%s + + Y Related item not found. @@ -225,12 +227,12 @@ - + name,id + %s:%s + Related Route-Map item not found. diff --git a/net/frr/src/opnsense/service/templates/OPNsense/Quagga/ospf6d.conf b/net/frr/src/opnsense/service/templates/OPNsense/Quagga/ospf6d.conf index 66896f7a7..feb5bf446 100644 --- a/net/frr/src/opnsense/service/templates/OPNsense/Quagga/ospf6d.conf +++ b/net/frr/src/opnsense/service/templates/OPNsense/Quagga/ospf6d.conf @@ -80,12 +80,16 @@ ipv6 prefix-list {{ prefixlist.name }} seq {{ prefixlist.seqnumber }} {{ prefixl {% for routemap in helpers.sortDictList(OPNsense.quagga.ospf6.routemaps.routemap, 'name', 'id' ) %} {% if routemap.enabled == '1' %} route-map {{ routemap.name }} {{ routemap.action }} {{ routemap.id }} +{# XXX: Multiple prefix lists that have the same name can be selected (intentionally), but each is stored as unique item. #} +{# The relationship is a bit loose, unique solves part of this issue. #} {% if routemap.match2|default("") != "" %} +{% set prefixlist_names = [] %} {% for prefixlist in routemap.match2.split(",") %} {% set prefixlist_data = helpers.getUUID(prefixlist) %} -{% if 'match2' in routemap and routemap.match2 != '' %} - match ipv6 address prefix-list {{ prefixlist_data.name }} -{% endif %} +{% do prefixlist_names.append(prefixlist_data.name) %} +{% endfor %} +{% for prefixlist_name in prefixlist_names | unique %} + match ip address prefix-list {{ prefixlist_name }} {% endfor %} {% endif %} {% if routemap.set|default("") != "" %}