From 83eb2bf9bc771bd4ace967f2f5742f343f9005af Mon Sep 17 00:00:00 2001 From: Michael Date: Mon, 12 Mar 2018 22:08:46 +0100 Subject: [PATCH] net/frr: add IPv6 to BGP (#596) --- net/frr/Makefile | 2 +- .../Quagga/forms/dialogEditBGPPrefixLists.xml | 6 + .../mvc/app/models/OPNsense/Quagga/BGP.xml | 13 ++- .../app/models/OPNsense/Quagga/General.xml | 1 + .../mvc/app/models/OPNsense/Quagga/OSPF.xml | 1 + .../mvc/app/models/OPNsense/Quagga/OSPF6.xml | 1 + .../mvc/app/models/OPNsense/Quagga/RIP.xml | 1 + .../templates/OPNsense/Quagga/bgpd.conf | 107 +++++++++++++++--- 8 files changed, 111 insertions(+), 21 deletions(-) diff --git a/net/frr/Makefile b/net/frr/Makefile index 0e09074e9..c6f969860 100644 --- a/net/frr/Makefile +++ b/net/frr/Makefile @@ -1,5 +1,5 @@ PLUGIN_NAME= frr -PLUGIN_VERSION= 1.2 +PLUGIN_VERSION= 1.3 PLUGIN_COMMENT= The FRRouting Protocol Suite PLUGIN_DEPENDS= frr ruby PLUGIN_CONFLICTS= quagga diff --git a/net/frr/src/opnsense/mvc/app/controllers/OPNsense/Quagga/forms/dialogEditBGPPrefixLists.xml b/net/frr/src/opnsense/mvc/app/controllers/OPNsense/Quagga/forms/dialogEditBGPPrefixLists.xml index 8472d0976..a919f082f 100644 --- a/net/frr/src/opnsense/mvc/app/controllers/OPNsense/Quagga/forms/dialogEditBGPPrefixLists.xml +++ b/net/frr/src/opnsense/mvc/app/controllers/OPNsense/Quagga/forms/dialogEditBGPPrefixLists.xml @@ -11,6 +11,12 @@ text The name of your Prefix-List, please choose one near to the result you want to achieve. + + prefixlist.version + + select_multiple + Set the IP version to use. + prefixlist.seqnumber 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 349e223c5..c4eaa096c 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 @@ -1,6 +1,7 @@ //OPNsense/quagga/bgp BGP Routing configuration + 1.0.0 0 @@ -15,7 +16,6 @@ N - /^(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\/\d{1,2},)*(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\/\d{1,2})$/ N @@ -37,10 +37,9 @@ 1 Y -
+
Y - /^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$/
@@ -154,6 +153,14 @@ Y + + IPv4 + Y + + IPv4 + IPv6 + + Y diff --git a/net/frr/src/opnsense/mvc/app/models/OPNsense/Quagga/General.xml b/net/frr/src/opnsense/mvc/app/models/OPNsense/Quagga/General.xml index 5bb1c1ddc..22e61f3c3 100644 --- a/net/frr/src/opnsense/mvc/app/models/OPNsense/Quagga/General.xml +++ b/net/frr/src/opnsense/mvc/app/models/OPNsense/Quagga/General.xml @@ -1,6 +1,7 @@ //OPNsense/quagga/general Quagga Routing configuration + 1.0.0 0 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 06c636764..8886b16a6 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 @@ -1,6 +1,7 @@ //OPNsense/quagga/ospf OSPF Routing configuration + 1.0.0 0 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 b584b891b..b61d5d2f7 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 @@ -1,6 +1,7 @@ //OPNsense/quagga/ospf6 OSPFv3 Routing configuration + 1.0.0 0 diff --git a/net/frr/src/opnsense/mvc/app/models/OPNsense/Quagga/RIP.xml b/net/frr/src/opnsense/mvc/app/models/OPNsense/Quagga/RIP.xml index 5a1b7bf10..2f228b63a 100644 --- a/net/frr/src/opnsense/mvc/app/models/OPNsense/Quagga/RIP.xml +++ b/net/frr/src/opnsense/mvc/app/models/OPNsense/Quagga/RIP.xml @@ -1,6 +1,7 @@ //OPNsense/quagga/rip RIP Routing configuration + 1.0.0 0 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 07dc90a91..a419097b1 100644 --- a/net/frr/src/opnsense/service/templates/OPNsense/Quagga/bgpd.conf +++ b/net/frr/src/opnsense/service/templates/OPNsense/Quagga/bgpd.conf @@ -17,16 +17,6 @@ log syslog {{ OPNsense.quagga.general.sysloglevel }} ! {% if helpers.exists('OPNsense.quagga.bgp.asnumber') and OPNsense.quagga.bgp.asnumber != '' %} router bgp {{ OPNsense.quagga.bgp.asnumber }} -{% if helpers.exists('OPNsense.quagga.bgp.networks') %} -{% for network in OPNsense.quagga.bgp.networks.split(',') %} - network {{ network }} -{% endfor %} -{% endif %} -{% if helpers.exists('OPNsense.quagga.bgp.redistribute') and OPNsense.quagga.bgp.redistribute != '' %} -{% for bgp_redistribute in OPNsense.quagga.bgp.redistribute.split(',') %} - redistribute {{ bgp_redistribute }} -{% endfor %} -{% endif %} {% if helpers.exists('OPNsense.quagga.bgp.neighbors.neighbor') %} {% for neighbor in helpers.toList('OPNsense.quagga.bgp.neighbors.neighbor') %} {% if neighbor.enabled == '1' %} @@ -34,17 +24,36 @@ router bgp {{ OPNsense.quagga.bgp.asnumber }} {% if 'updatesource' in neighbor and neighbor.updatesource != '' %} neighbor {{ neighbor.address }} update-source {{ physical_interface(neighbor.updatesource) }} {% endif %} +{% endif %} +{% endfor %} +{% endif %} + address-family ipv4 unicast +{% if helpers.exists('OPNsense.quagga.bgp.networks') %} +{% for network in OPNsense.quagga.bgp.networks.split(',') %} +{% if ':' not in network %} + network {{ network }} +{% endif %} +{% endfor %} +{% endif %} +{% if helpers.exists('OPNsense.quagga.bgp.redistribute') and OPNsense.quagga.bgp.redistribute != '' %} +{% for bgp_redistribute in OPNsense.quagga.bgp.redistribute.split(',') %} + redistribute {{ bgp_redistribute }} +{% endfor %} +{% endif %} +{% if helpers.exists('OPNsense.quagga.bgp.neighbors.neighbor') and ':' not in OPNsense.quagga.bgp.neighbors.neighbor.address %} +{% for neighbor in helpers.toList('OPNsense.quagga.bgp.neighbors.neighbor') %} +{% if neighbor.enabled == '1' and ':' not in neighbor.address %} {% if 'nexthopself' in neighbor and neighbor.nexthopself == '1' %} - neighbor {{ neighbor.address }} next-hop-self + neighbor {{ neighbor.address }} next-hop-self {% endif %} {% if 'defaultoriginate' in neighbor and neighbor.defaultoriginate == '1' %} - neighbor {{ neighbor.address }} default-originate + neighbor {{ neighbor.address }} default-originate {% endif %} {% if neighbor.linkedPrefixlistIn|default("") != "" %} {% for prefixlist in neighbor.linkedPrefixlistIn.split(",") %} {% set prefixlist2_data = helpers.getUUID(prefixlist) %} {% if prefixlist2_data != {} and prefixlist2_data.enabled == '1' %} - neighbor {{ neighbor.address }} prefix-list {{ prefixlist2_data.name }} in + neighbor {{ neighbor.address }} prefix-list {{ prefixlist2_data.name }} in {% endif %} {% endfor %} {% endif %} @@ -52,7 +61,7 @@ router bgp {{ OPNsense.quagga.bgp.asnumber }} {% for prefixlist in neighbor.linkedPrefixlistOut.split(",") %} {% set prefixlist_data = helpers.getUUID(prefixlist) %} {% if prefixlist_data != {} and prefixlist_data.enabled == '1' %} - neighbor {{ neighbor.address }} prefix-list {{ prefixlist_data.name }} out + neighbor {{ neighbor.address }} prefix-list {{ prefixlist_data.name }} out {% endif %} {% endfor %} {% endif %} @@ -60,7 +69,7 @@ router bgp {{ OPNsense.quagga.bgp.asnumber }} {% for aspath in neighbor.linkedRoutemapIn.split(",") %} {% set routemap2_data = helpers.getUUID(aspath) %} {% if routemap2_data != {} and routemap2_data.enabled == '1' %} - neighbor {{ neighbor.address }} route-map {{ routemap2_data.name }} in + neighbor {{ neighbor.address }} route-map {{ routemap2_data.name }} in {% endif %} {% endfor %} {% endif %} @@ -68,19 +77,83 @@ router bgp {{ OPNsense.quagga.bgp.asnumber }} {% for aspath in neighbor.linkedRoutemapOut.split(",") %} {% set routemap_data = helpers.getUUID(aspath) %} {% if routemap_data != {} and routemap_data.enabled == '1' %} - neighbor {{ neighbor.address }} route-map {{ routemap_data.name }} out + neighbor {{ neighbor.address }} route-map {{ routemap_data.name }} out {% endif %} {% endfor %} {% endif %} {% endif %} {% endfor %} {% endif %} + exit-address-family +! + address-family ipv6 unicast +{% if helpers.exists('OPNsense.quagga.bgp.networks') and ':' in OPNsense.quagga.bgp.networks %} +{% for network in OPNsense.quagga.bgp.networks.split(',') %} +{% if ':' in network %} + network {{ network }} +{% endif %} +{% endfor %} +{% endif %} +{% if helpers.exists('OPNsense.quagga.bgp.redistribute') and OPNsense.quagga.bgp.redistribute != '' %} +{% for bgp_redistribute in OPNsense.quagga.bgp.redistribute.split(',') %} + redistribute {{ bgp_redistribute }} +{% endfor %} +{% endif %} +{% if helpers.exists('OPNsense.quagga.bgp.neighbors.neighbor') %} +{% for neighbor in helpers.toList('OPNsense.quagga.bgp.neighbors.neighbor') %} +{% if neighbor.enabled == '1' and ':' in neighbor.address %} +{% if 'nexthopself' in neighbor and neighbor.nexthopself == '1' %} + neighbor {{ neighbor.address }} next-hop-self +{% endif %} +{% if 'defaultoriginate' in neighbor and neighbor.defaultoriginate == '1' %} + neighbor {{ neighbor.address }} default-originate +{% endif %} +{% if neighbor.linkedPrefixlistIn|default("") != "" %} +{% for prefixlist in neighbor.linkedPrefixlistIn.split(",") %} +{% set prefixlist2_data = helpers.getUUID(prefixlist) %} +{% if prefixlist2_data != {} and prefixlist2_data.enabled == '1' %} + neighbor {{ neighbor.address }} prefix-list {{ prefixlist2_data.name }} in +{% endif %} +{% endfor %} +{% endif %} +{% if neighbor.linkedPrefixlistOut|default("") != "" %} +{% for prefixlist in neighbor.linkedPrefixlistOut.split(",") %} +{% set prefixlist_data = helpers.getUUID(prefixlist) %} +{% if prefixlist_data != {} and prefixlist_data.enabled == '1' %} + neighbor {{ neighbor.address }} prefix-list {{ prefixlist_data.name }} out +{% endif %} +{% endfor %} +{% endif %} +{% if neighbor.linkedRoutemapIn|default("") != "" %} +{% for aspath in neighbor.linkedRoutemapIn.split(",") %} +{% set routemap2_data = helpers.getUUID(aspath) %} +{% if routemap2_data != {} and routemap2_data.enabled == '1' %} + neighbor {{ neighbor.address }} route-map {{ routemap2_data.name }} in +{% endif %} +{% endfor %} +{% endif %} +{% if neighbor.linkedRoutemapOut|default("") != "" %} +{% for aspath in neighbor.linkedRoutemapOut.split(",") %} +{% set routemap_data = helpers.getUUID(aspath) %} +{% if routemap_data != {} and routemap_data.enabled == '1' %} + neighbor {{ neighbor.address }} route-map {{ routemap_data.name }} out +{% endif %} +{% endfor %} +{% endif %} +{% endif %} +{% endfor %} +{% endif %} + exit-address-family ! {% if helpers.exists('OPNsense.quagga.bgp.prefixlists.prefixlist') %} {% for prefixlist in helpers.sortDictList(OPNsense.quagga.bgp.prefixlists.prefixlist, 'name', 'seqnumber' ) %} -{% if prefixlist.enabled == '1' %} +{% if prefixlist.enabled == '1' and ':' not in prefixlist.network %} ip prefix-list {{ prefixlist.name }} seq {{ prefixlist.seqnumber }} {{ prefixlist.action }} {{ prefixlist.network }} {% endif %} +! +{% if prefixlist.enabled == '1' and ':' in prefixlist.network %} +ipv6 prefix-list {{ prefixlist.name }} seq {{ prefixlist.seqnumber }} {{ prefixlist.action }} {{ prefixlist.network }} +{% endif %} {% endfor %} {% endif %} !