diff --git a/net/frr/src/opnsense/mvc/app/controllers/OPNsense/Quagga/forms/bgp.xml b/net/frr/src/opnsense/mvc/app/controllers/OPNsense/Quagga/forms/bgp.xml index 5be7fb2e2e..d50fc136d6 100644 --- a/net/frr/src/opnsense/mvc/app/controllers/OPNsense/Quagga/forms/bgp.xml +++ b/net/frr/src/opnsense/mvc/app/controllers/OPNsense/Quagga/forms/bgp.xml @@ -11,6 +11,22 @@ text Your AS Number here. + + bgp.confed_asn + + text + true + Specify the autonomous system number of the local confederation group. (Required if Confederation Peers are set) + + + bgp.confed_peers + + select_multiple + + true + true + Specify the Peers of the confederation group. (Required if Confederation ASN is set) + bgp.distance diff --git a/net/frr/src/opnsense/mvc/app/models/OPNsense/Quagga/BGP.php b/net/frr/src/opnsense/mvc/app/models/OPNsense/Quagga/BGP.php index 6af510a0c2..3655560259 100644 --- a/net/frr/src/opnsense/mvc/app/models/OPNsense/Quagga/BGP.php +++ b/net/frr/src/opnsense/mvc/app/models/OPNsense/Quagga/BGP.php @@ -3,6 +3,41 @@ namespace OPNsense\Quagga; use OPNsense\Base\BaseModel; +use Phalcon\Messages\Message; + +class BGP extends BaseModel +{ + public function performValidation($validateFullModel = false) + { + // Run standard XML field validations first + $messages = parent::performValidation($validateFullModel); + + // Fetch values + $asn = trim((string)$this->confed_asn); + $peers = trim((string)$this->confed_peers); + + $has_asn = !empty($asn); + $has_peers = !empty($peers); + + // 1. ASN is set, but Peers are empty + if ($has_asn && !$has_peers) { + $messages->appendMessage(new Message( + "BGP Confederation Peers are required when a Confederation ASN is defined.", + "confed_peers" + )); + } + + // 2. Peers are set, but ASN is empty + if (!$has_asn && $has_peers) { + $messages->appendMessage(new Message( + "BGP Confederation ASN is required when Confederation Peers are defined.", + "confed_asn" + )); + } + + return $messages; + } +} /* Copyright (C) 2017 Fabian Franz @@ -25,7 +60,4 @@ CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -*/ -class BGP extends BaseModel -{ -} +*/ \ No newline at end of file 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 4397fd4a1e..527693a7b2 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 @@ -13,6 +13,17 @@ 1 4294967295 + + N + BGP Confederation ASN must be an integer between 1 and 4294967295. + 1 + 4294967295 + + + N + Each Peer ASN must be an integer between 1 and 4294967295. + /^(([1-9]|[1-9][0-9]{1,8}|[1-3][0-9]{9}|4[0-1][0-9]{8}|42[0-8][0-9]{7}|429[0-3][0-9]{6}|4294[0-8][0-9]{5}|42949[0-5][0-9]{4}|429496[0-6][0-9]{3}|4294967[0-1][0-9]{2}|42949672[0-8][0-9]|429496729[0-5])(,|$))+$/ + 1 255 diff --git a/net/frr/src/opnsense/service/templates/OPNsense/Quagga/Config/bgpd.conf b/net/frr/src/opnsense/service/templates/OPNsense/Quagga/Config/bgpd.conf index d1e5b4073f..68e83776c5 100644 --- a/net/frr/src/opnsense/service/templates/OPNsense/Quagga/Config/bgpd.conf +++ b/net/frr/src/opnsense/service/templates/OPNsense/Quagga/Config/bgpd.conf @@ -29,6 +29,12 @@ {% endif %} {% if helpers.exists('OPNsense.quagga.bgp.asnumber') and OPNsense.quagga.bgp.asnumber != '' %} router bgp {{ OPNsense.quagga.bgp.asnumber }} +{% if OPNsense.quagga.bgp.confed_asn|default('') != '' %} + bgp confederation identifier {{ OPNsense.quagga.bgp.confed_asn }} +{% endif %} +{% if OPNsense.quagga.bgp.confed_peers|default('') != '' %} + bgp confederation peers {{ OPNsense.quagga.bgp.confed_peers|replace(',', ' ') }} +{% endif %} {% if not helpers.empty('OPNsense.quagga.bgp.logneighborchanges') %} bgp log-neighbor-changes {% endif %}