From 76cea19f79cb993695272ea5869e68d38a0dae80 Mon Sep 17 00:00:00 2001 From: Franco Fichtner Date: Sun, 23 Jul 2017 11:03:31 +0200 Subject: [PATCH] net/quagga: merge version 1.3.2 from master --- net/quagga/Makefile | 2 +- .../Quagga/Api/OspfsettingsController.php | 98 ++++++++++++++++++- .../OPNsense/Quagga/OspfController.php | 1 + .../Quagga/forms/dialogEditOSPFNetwork.xml | 12 +++ .../forms/dialogEditOSPFPrefixLists.xml | 32 ++++++ .../mvc/app/models/OPNsense/Quagga/OSPF.xml | 59 ++++++++++- .../mvc/app/views/OPNsense/Quagga/ospf.volt | 40 +++++++- .../templates/OPNsense/Quagga/ospfd.conf | 24 +++++ 8 files changed, 261 insertions(+), 7 deletions(-) create mode 100644 net/quagga/src/opnsense/mvc/app/controllers/OPNsense/Quagga/forms/dialogEditOSPFPrefixLists.xml diff --git a/net/quagga/Makefile b/net/quagga/Makefile index 06f8711d8..66533584c 100644 --- a/net/quagga/Makefile +++ b/net/quagga/Makefile @@ -1,5 +1,5 @@ PLUGIN_NAME= quagga -PLUGIN_VERSION= 1.3.1 +PLUGIN_VERSION= 1.3.2 PLUGIN_COMMENT= Quagga Routing Suite PLUGIN_DEPENDS= quagga ruby PLUGIN_MAINTAINER= franz.fabian.94@gmail.com diff --git a/net/quagga/src/opnsense/mvc/app/controllers/OPNsense/Quagga/Api/OspfsettingsController.php b/net/quagga/src/opnsense/mvc/app/controllers/OPNsense/Quagga/Api/OspfsettingsController.php index ff00763b4..3c2647bc2 100644 --- a/net/quagga/src/opnsense/mvc/app/controllers/OPNsense/Quagga/Api/OspfsettingsController.php +++ b/net/quagga/src/opnsense/mvc/app/controllers/OPNsense/Quagga/Api/OspfsettingsController.php @@ -99,6 +99,16 @@ class OspfsettingsController extends ApiMutableModelControllerBase array("enabled", "interfacename", "networktype", "authtype", "area") ); } + public function searchPrefixlistAction() + { + $this->sessionClose(); + $mdlOSPF = $this->getModel(); + $grid = new UIModelGrid($mdlOSPF->prefixlists->prefixlist); + return $grid->fetchBindRequest( + $this->request, + array("enabled", "name", "seqnumber", "action", "network" ) + ); + } public function getNetworkAction($uuid = null) { $mdlOSPF = $this->getModel(); @@ -129,7 +139,21 @@ class OspfsettingsController extends ApiMutableModelControllerBase } return array(); } - + public function getPrefixlistAction($uuid = null) + { + $mdlOSPF = $this->getModel(); + if ($uuid != null) { + $node = $mdlOSPF->getNodeByReference('prefixlists.prefixlist.' . $uuid); + if ($node != null) { + // return node + return array("prefixlist" => $node->getNodes()); + } + } else { + $node = $mdlOSPF->prefixlists->prefixlist->add(); + return array("prefixlist" => $node->getNodes()); + } + return array(); + } public function addNetworkAction() { $result = array("result" => "failed"); @@ -180,6 +204,29 @@ class OspfsettingsController extends ApiMutableModelControllerBase } return $result; } + public function addPrefixlistAction() + { + $result = array("result" => "failed"); + if ($this->request->isPost() && $this->request->hasPost("prefixlist")) { + $result = array("result" => "failed", "validations" => array()); + $mdlOSPF = $this->getModel(); + $node = $mdlOSPF->prefixlists->prefixlist->Add(); + $node->setNodes($this->request->getPost("prefixlist")); + $valMsgs = $mdlOSPF->performValidation(); + foreach ($valMsgs as $field => $msg) { + $fieldnm = str_replace($node->__reference, "prefixlist", $msg->getField()); + $result["validations"][$fieldnm] = $msg->getMessage(); + } + if (count($result['validations']) == 0) { + // save config if validated correctly + $mdlOSPF->serializeToConfig(); + Config::getInstance()->save(); + unset($result['validations']); + $result["result"] = "saved"; + } + } + return $result; + } public function delNetworkAction($uuid) { @@ -218,6 +265,23 @@ class OspfsettingsController extends ApiMutableModelControllerBase } return $result; } + public function delPrefixlistAction($uuid) + { + $result = array("result" => "failed"); + if ($this->request->isPost()) { + $mdlOSPF = $this->getModel(); + if ($uuid != null) { + if ($mdlOSPF->prefixlists->prefixlist->del($uuid)) { + $mdlOSPF->serializeToConfig(); + Config::getInstance()->save(); + $result['result'] = 'deleted'; + } else { + $result['result'] = 'not found'; + } + } + } + return $result; + } public function setNetworkAction($uuid) { if ($this->request->isPost() && $this->request->hasPost("network")) { @@ -276,6 +340,33 @@ class OspfsettingsController extends ApiMutableModelControllerBase } return array("result" => "failed"); } + public function setPrefixlistAction($uuid) + { + if ($this->request->isPost() && $this->request->hasPost("prefixlist")) { + $mdlNeighbor = $this->getModel(); + if ($uuid != null) { + $node = $mdlNeighbor->getNodeByReference('prefixlists.prefixlist.' . $uuid); + if ($node != null) { + $result = array("result" => "failed", "validations" => array()); + $prefixlistInfo = $this->request->getPost("prefixlist"); + $node->setNodes($prefixlistInfo); + $valMsgs = $mdlNeighbor->performValidation(); + foreach ($valMsgs as $field => $msg) { + $fieldnm = str_replace($node->__reference, "prefixlist", $msg->getField()); + $result["validations"][$fieldnm] = $msg->getMessage(); + } + if (count($result['validations']) == 0) { + // save config if validated correctly + $mdlNeighbor->serializeToConfig(); + Config::getInstance()->save(); + $result = array("result" => "saved"); + } + return $result; + } + } + } + return array("result" => "failed"); + } public function toggle_handler($uuid, $elements, $element) { @@ -310,4 +401,9 @@ class OspfsettingsController extends ApiMutableModelControllerBase { return $this->toggle_handler($uuid, 'interfaces', 'interface'); } + public function togglePrefixlistAction($uuid) + { + return $this->toggle_handler($uuid, 'prefixlists', 'prefixlist'); + } + } diff --git a/net/quagga/src/opnsense/mvc/app/controllers/OPNsense/Quagga/OspfController.php b/net/quagga/src/opnsense/mvc/app/controllers/OPNsense/Quagga/OspfController.php index fcae1c8c9..4d6fa815f 100644 --- a/net/quagga/src/opnsense/mvc/app/controllers/OPNsense/Quagga/OspfController.php +++ b/net/quagga/src/opnsense/mvc/app/controllers/OPNsense/Quagga/OspfController.php @@ -35,6 +35,7 @@ class OspfController extends \OPNsense\Base\IndexController $this->view->generalForm = $this->getForm("ospf"); $this->view->formDialogEditNetwork = $this->getForm("dialogEditOSPFNetwork"); $this->view->formDialogEditInterface = $this->getForm("dialogEditOSPFInterface"); + $this->view->formDialogEditPrefixLists = $this->getForm("dialogEditOSPFPrefixLists"); $this->view->pick('OPNsense/Quagga/ospf'); } } diff --git a/net/quagga/src/opnsense/mvc/app/controllers/OPNsense/Quagga/forms/dialogEditOSPFNetwork.xml b/net/quagga/src/opnsense/mvc/app/controllers/OPNsense/Quagga/forms/dialogEditOSPFNetwork.xml index eb4f548a7..abf0a036d 100644 --- a/net/quagga/src/opnsense/mvc/app/controllers/OPNsense/Quagga/forms/dialogEditOSPFNetwork.xml +++ b/net/quagga/src/opnsense/mvc/app/controllers/OPNsense/Quagga/forms/dialogEditOSPFNetwork.xml @@ -20,4 +20,16 @@ text Area in wildcard mask style like 0.0.0.0 and no decimal 0 + + network.linkedPrefixlistIn + + dropdown + Prefix-List for inbound direction + + + network.linkedPrefixlistOut + + dropdown + Prefix-List for outbound direction + diff --git a/net/quagga/src/opnsense/mvc/app/controllers/OPNsense/Quagga/forms/dialogEditOSPFPrefixLists.xml b/net/quagga/src/opnsense/mvc/app/controllers/OPNsense/Quagga/forms/dialogEditOSPFPrefixLists.xml new file mode 100644 index 000000000..a1f0fce3a --- /dev/null +++ b/net/quagga/src/opnsense/mvc/app/controllers/OPNsense/Quagga/forms/dialogEditOSPFPrefixLists.xml @@ -0,0 +1,32 @@ +
+ + prefixlist.enabled + + checkbox + Enable / Disable + + + prefixlist.name + + text + The name of your Prefix-List, please choose one near to the result you want to achieve. + + + prefixlist.seqnumber + + text + The ACL sequence number (10-99) + + + prefixlist.action + + select_multiple + Set permit for match or deny to negate the rule. + + + prefixlist.network + + text + The network pattern you want to match. It's not validated so please be careful! + +
diff --git a/net/quagga/src/opnsense/mvc/app/models/OPNsense/Quagga/OSPF.xml b/net/quagga/src/opnsense/mvc/app/models/OPNsense/Quagga/OSPF.xml index 9a6829a58..e139712ca 100644 --- a/net/quagga/src/opnsense/mvc/app/models/OPNsense/Quagga/OSPF.xml +++ b/net/quagga/src/opnsense/mvc/app/models/OPNsense/Quagga/OSPF.xml @@ -27,12 +27,9 @@ Y - Babel routing protocol (Babel) Border Gateway Protocol (BGP) Connected routes (directly attached subnet or host) - Intermediate System to Intermediate System (IS-IS) Kernel routes (not installed via the zebra RIB) - Protocol Independent Multicast (PIM) Routing Information Protocol (RIP) Statically configured routes @@ -60,6 +57,32 @@ 32 Network mask must be between 0 and 32. + + + + + Related Prefix-List item not found + N + N + + + + + + Related Prefix-List item not found + N + N + @@ -144,5 +167,35 @@ + + + + 1 + Y + + + + Y + + + + Y + 10 + 99 + + + + Y + + Permit + Deny + + + + + Y + + + diff --git a/net/quagga/src/opnsense/mvc/app/views/OPNsense/Quagga/ospf.volt b/net/quagga/src/opnsense/mvc/app/views/OPNsense/Quagga/ospf.volt index 09aebc4ef..2b46723ae 100644 --- a/net/quagga/src/opnsense/mvc/app/views/OPNsense/Quagga/ospf.volt +++ b/net/quagga/src/opnsense/mvc/app/views/OPNsense/Quagga/ospf.volt @@ -32,6 +32,7 @@ POSSIBILITY OF SUCH DAMAGE.
  • {{ lang._('General') }}
  • {{ lang._('Networks') }}
  • {{ lang._('Interfaces') }}
  • +
  • {{ lang._('Prefix Lists') }}
  • @@ -98,7 +99,32 @@ POSSIBILITY OF SUCH DAMAGE.
    - +
    + + + + + + + + + + + + + + + + + + + + +
    {{ lang._('Enabled') }}{{ lang._('Name') }}{{ lang._('Secquence Number') }}{{ lang._('Action') }}{{ lang._('Network') }}{{ lang._('ID') }}{{ lang._('Commands') }}
    + + +
    +
    {{ partial("layout_partials/base_dialog",['fields':formDialogEditNetwork,'id':'DialogEditNetwork','label':lang._('Edit Network')])}} {{ partial("layout_partials/base_dialog",['fields':formDialogEditInterface,'id':'DialogEditInterface','label':lang._('Edit Interface')])}} +{{ partial("layout_partials/base_dialog",['fields':formDialogEditPrefixLists,'id':'DialogEditPrefixLists','label':lang._('Edit Prefix Lists')])}} diff --git a/net/quagga/src/opnsense/service/templates/OPNsense/Quagga/ospfd.conf b/net/quagga/src/opnsense/service/templates/OPNsense/Quagga/ospfd.conf index e4bfb5c30..c10c5ac11 100644 --- a/net/quagga/src/opnsense/service/templates/OPNsense/Quagga/ospfd.conf +++ b/net/quagga/src/opnsense/service/templates/OPNsense/Quagga/ospfd.conf @@ -42,6 +42,22 @@ router ospf {% if network.enabled == '1' %} network {{ network.ipaddr }}/{{ network.netmask }} area {{ network.area }} {% endif %} +{% if network.linkedPrefixlistIn|default("") != "" %} +{% for prefixlist in network.linkedPrefixlistIn.split(",") %} +{% set prefixlist2_data = helpers.getUUID(prefixlist) %} +{% if prefixlist2_data != {} and prefixlist2_data.enabled == '1' %} + area {{ network.area }} filter-list prefix {{ prefixlist2_data.name }} in +{% endif %} +{% endfor %} +{% endif %} +{% if network.linkedPrefixlistOut|default("") != "" %} +{% for prefixlist in network.linkedPrefixlistOut.split(",") %} +{% set prefixlist_data = helpers.getUUID(prefixlist) %} +{% if prefixlist_data != {} and prefixlist_data.enabled == '1' %} + area {{ network.area }} filter-list prefix {{ prefixlist_data.name }} out +{% endif %} +{% endfor %} +{% endif %} {% endfor %} {% endif %} {% if helpers.exists('OPNsense.quagga.ospf.originate') and OPNsense.quagga.ospf.originate == '1' %} @@ -49,6 +65,14 @@ router ospf {% endif %} ! +{% if helpers.exists('OPNsense.quagga.ospf.prefixlists.prefixlist') %} +{% for prefixlist in helpers.sortDictList(OPNsense.quagga.ospf.prefixlists.prefixlist, 'name', 'seqnumber' ) %} +{% if prefixlist.enabled == '1' %} +ip prefix-list {{ prefixlist.name }} seq {{ prefixlist.seqnumber }} {{ prefixlist.action }} {{ prefixlist.network }} +{% endif %} +{% endfor %} +{% endif %} +! line vty ! {% endif %}