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