From 4a202ebcd2d72c521121f61353b1e62cf88cff28 Mon Sep 17 00:00:00 2001 From: Monviech <79600909+Monviech@users.noreply.github.com> Date: Fri, 21 Mar 2025 07:54:37 +0100 Subject: [PATCH] net/frr: Add BGP remote-as internal and external to neighbors and peergroups (#4611) --- net/frr/Makefile | 3 +-- net/frr/pkg-descr | 4 ++++ .../Quagga/forms/dialogEditBGPNeighbor.xml | 9 +++++++++ .../Quagga/forms/dialogEditBGPPeergroups.xml | 9 +++++++++ .../mvc/app/models/OPNsense/Quagga/BGP.xml | 15 ++++++++++++++- .../service/templates/OPNsense/Quagga/bgpd.conf | 8 ++++++-- 6 files changed, 43 insertions(+), 5 deletions(-) diff --git a/net/frr/Makefile b/net/frr/Makefile index c7cbc732c..2b6b1acff 100644 --- a/net/frr/Makefile +++ b/net/frr/Makefile @@ -1,6 +1,5 @@ PLUGIN_NAME= frr -PLUGIN_VERSION= 1.43 -PLUGIN_REVISION= 1 +PLUGIN_VERSION= 1.44 PLUGIN_COMMENT= The FRRouting Protocol Suite PLUGIN_DEPENDS= frr8-pythontools PLUGIN_MAINTAINER= ad@opnsense.org diff --git a/net/frr/pkg-descr b/net/frr/pkg-descr index 6a19f7379..3ca685557 100644 --- a/net/frr/pkg-descr +++ b/net/frr/pkg-descr @@ -12,6 +12,10 @@ WWW: https://frrouting.org/ Plugin Changelog ================ +1.44 + +* Add BGP remote-as internal and external (opnsense/plugins/issues/4609) + 1.43 * Use frr-reload instead of restarting the service on configuration changes (opnsense/plugins/issues/4529) diff --git a/net/frr/src/opnsense/mvc/app/controllers/OPNsense/Quagga/forms/dialogEditBGPNeighbor.xml b/net/frr/src/opnsense/mvc/app/controllers/OPNsense/Quagga/forms/dialogEditBGPNeighbor.xml index 9c2d176be..d2a91df99 100644 --- a/net/frr/src/opnsense/mvc/app/controllers/OPNsense/Quagga/forms/dialogEditBGPNeighbor.xml +++ b/net/frr/src/opnsense/mvc/app/controllers/OPNsense/Quagga/forms/dialogEditBGPNeighbor.xml @@ -21,6 +21,15 @@ text Specify the IP address of the BGP neighbor. + + neighbor.remote_as_mode + + dropdown + "Use Remote AS Number" will use the number specified in the "Remote AS" field, while "External" or "Internal" will ignore it in favor of the alternative "remote-as internal" and "remote-as external" settings. + + false + + neighbor.remoteas diff --git a/net/frr/src/opnsense/mvc/app/controllers/OPNsense/Quagga/forms/dialogEditBGPPeergroups.xml b/net/frr/src/opnsense/mvc/app/controllers/OPNsense/Quagga/forms/dialogEditBGPPeergroups.xml index a42ece762..4f29080fc 100644 --- a/net/frr/src/opnsense/mvc/app/controllers/OPNsense/Quagga/forms/dialogEditBGPPeergroups.xml +++ b/net/frr/src/opnsense/mvc/app/controllers/OPNsense/Quagga/forms/dialogEditBGPPeergroups.xml @@ -15,6 +15,15 @@ text Name of the peer group. + + peergroup.remote_as_mode + + dropdown + "Use Remote AS Number" will use the number specified in the "Remote AS" field, while "External" or "Internal" will ignore it in favor of the alternative "remote-as internal" and "remote-as external" settings. + + false + + peergroup.remoteas diff --git a/net/frr/src/opnsense/mvc/app/models/OPNsense/Quagga/BGP.xml b/net/frr/src/opnsense/mvc/app/models/OPNsense/Quagga/BGP.xml index a7239218e..88f5e92bd 100644 --- a/net/frr/src/opnsense/mvc/app/models/OPNsense/Quagga/BGP.xml +++ b/net/frr/src/opnsense/mvc/app/models/OPNsense/Quagga/BGP.xml @@ -63,6 +63,13 @@ Y + + Use Remote AS Number + + Internal + External + + 1 4294967295 @@ -418,8 +425,14 @@ Y + + Use Remote AS Number + + Internal + External + + - Y 1 4294967295 diff --git a/net/frr/src/opnsense/service/templates/OPNsense/Quagga/bgpd.conf b/net/frr/src/opnsense/service/templates/OPNsense/Quagga/bgpd.conf index e560f3c25..55023713a 100644 --- a/net/frr/src/opnsense/service/templates/OPNsense/Quagga/bgpd.conf +++ b/net/frr/src/opnsense/service/templates/OPNsense/Quagga/bgpd.conf @@ -51,8 +51,10 @@ router bgp {{ OPNsense.quagga.bgp.asnumber }} {% for peergroup in helpers.toList('OPNsense.quagga.bgp.peergroups.peergroup') %} {% if peergroup.enabled == '1' %} neighbor {{ peergroup.name }} peer-group -{% if 'remoteas' in peergroup and peergroup.remoteas != '' %} +{% if 'remoteas' in peergroup and peergroup.remoteas and not peergroup.remote_as_mode %} neighbor {{ peergroup.name }} remote-as {{ peergroup.remoteas }} +{% else %} + neighbor {{ peergroup.name }} remote-as {{ peergroup.remote_as_mode }} {% endif %} {% if peergroup.updatesource %} neighbor {{ peergroup.name }} update-source {{ physical_interface(peergroup.updatesource) }} @@ -101,8 +103,10 @@ router bgp {{ OPNsense.quagga.bgp.asnumber }} {% if helpers.exists('OPNsense.quagga.bgp.neighbors.neighbor') %} {% for neighbor in helpers.toList('OPNsense.quagga.bgp.neighbors.neighbor') %} {% if neighbor.enabled == '1' %} -{% if 'remoteas' in neighbor and neighbor.remoteas != '' %} +{% if 'remoteas' in neighbor and neighbor.remoteas and not neighbor.remote_as_mode %} neighbor {{ neighbor.address }} remote-as {{ neighbor.remoteas }} +{% else %} + neighbor {{ neighbor.address }} remote-as {{ neighbor.remote_as_mode }} {% endif %} {% if neighbor.bfd|default('') == '1' %} neighbor {{ neighbor.address }} bfd