diff --git a/net/frr/src/opnsense/mvc/app/controllers/OPNsense/Quagga/forms/dialogEditOSPFInterface.xml b/net/frr/src/opnsense/mvc/app/controllers/OPNsense/Quagga/forms/dialogEditOSPFInterface.xml
index bc08a4c8c..62b423943 100644
--- a/net/frr/src/opnsense/mvc/app/controllers/OPNsense/Quagga/forms/dialogEditOSPFInterface.xml
+++ b/net/frr/src/opnsense/mvc/app/controllers/OPNsense/Quagga/forms/dialogEditOSPFInterface.xml
@@ -135,4 +135,14 @@
dropdown
Defines the OSPF network type, impacting adjacency and LSA flooding methods. "Broadcast Multi-Access": Assumes networks supporting multiple routers with broadcast capability (e.g., Ethernet). "Non-Broadcast Multi-Access (NBMA)"": For networks without broadcast support (e.g., Frame Relay); requires manual neighbor setup. "Point-to-Multipoint": Connects multiple routers over a single interface, treating each as a point-to-point link. "Point-to-Point": Directly connects two routers, simplifying adjacency and LSA transmission.
+
+ interface.p2mpoptions
+
+ dropdown
+
+ Only for point-to-multipoint network type! non-broadcast: Disables multicast/broadcast, OSPF neighbors must be manually configured. delay-reflood: Delays LSA flooding until retransmission timer expires if no ACK received.
+
+ false
+
+
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 dab6380a3..1f28cebb4 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
@@ -236,6 +236,12 @@
Point-to-point network
+
+
+ Delay reflood
+ Non-broadcast
+
+
diff --git a/net/frr/src/opnsense/mvc/app/views/OPNsense/Quagga/ospf.volt b/net/frr/src/opnsense/mvc/app/views/OPNsense/Quagga/ospf.volt
index 488a90831..87260985a 100644
--- a/net/frr/src/opnsense/mvc/app/views/OPNsense/Quagga/ospf.volt
+++ b/net/frr/src/opnsense/mvc/app/views/OPNsense/Quagga/ospf.volt
@@ -110,6 +110,29 @@ POSSIBILITY OF SUCH DAMAGE.
);
}
+ $("#interface\\.networktype").on("keyup change", function () {
+
+ const networktype = String($("#interface\\.networktype").val() || "")
+
+ const styleVisibility = [
+ {
+ class: "style_networktype",
+ visible: networktype === "point-to-multipoint"
+ },
+ ];
+
+ styleVisibility.forEach(style => {
+ // hide/show rows with the class
+ const elements = $("." + style.class).closest("tr");
+ style.visible ? elements.show() : elements.hide();
+
+ // hide/show thead only if its parent container has the same class
+ $(".table-responsive." + style.class).find("thead").each(function () {
+ style.visible ? $(this).show() : $(this).hide();
+ });
+ });
+ });
+
});
diff --git a/net/frr/src/opnsense/service/templates/OPNsense/Quagga/ospfd.conf b/net/frr/src/opnsense/service/templates/OPNsense/Quagga/ospfd.conf
index 41ec0c5d6..381ffa8b4 100644
--- a/net/frr/src/opnsense/service/templates/OPNsense/Quagga/ospfd.conf
+++ b/net/frr/src/opnsense/service/templates/OPNsense/Quagga/ospfd.conf
@@ -25,7 +25,15 @@ interface {{ iface }}
ip ospf bfd
{% endif %}
{% if interface.networktype %}
+{% if interface.networktype == 'point-to-multipoint' %}
+{% if interface.p2mpoptions %}
+ {{ cline("network", "point-to-multipoint " ~ interface.p2mpoptions) }}
+{% else %}
+ {{ cline("network", "point-to-multipoint") }}
+{% endif %}
+{% else %}
{{ cline("network", interface.networktype) }}
+{% endif %}
{% endif %}
{% if interface.authtype and interface.authtype == 'message-digest' %}
{{ cline("authentication", interface.authtype) }}