diff --git a/net/quagga/Makefile b/net/quagga/Makefile index 93cf75e01..6c47bea7d 100644 --- a/net/quagga/Makefile +++ b/net/quagga/Makefile @@ -1,7 +1,7 @@ PLUGIN_NAME= quagga -PLUGIN_VERSION= 1.0.0 +PLUGIN_VERSION= 1.1.0 PLUGIN_COMMENT= Quagga Routing Suite -PLUGIN_DEPENDS= quagga +PLUGIN_DEPENDS= quagga ruby PLUGIN_MAINTAINER= franz.fabian.94@gmail.com .include "../../Mk/plugins.mk" diff --git a/net/quagga/src/etc/inc/plugins.inc.d/quagga.inc b/net/quagga/src/etc/inc/plugins.inc.d/quagga.inc index e5fbfbaa2..32786c1a0 100644 --- a/net/quagga/src/etc/inc/plugins.inc.d/quagga.inc +++ b/net/quagga/src/etc/inc/plugins.inc.d/quagga.inc @@ -41,6 +41,7 @@ function quagga_services() 'stop' => array('quagga stop'), ), 'name' => 'quagga', + 'pidfile' => '/var/run/quagga/zebra.pid' ); } diff --git a/net/quagga/src/opnsense/mvc/app/controllers/OPNsense/Quagga/Api/BgpController.php b/net/quagga/src/opnsense/mvc/app/controllers/OPNsense/Quagga/Api/BgpController.php new file mode 100644 index 000000000..43517cdb6 --- /dev/null +++ b/net/quagga/src/opnsense/mvc/app/controllers/OPNsense/Quagga/Api/BgpController.php @@ -0,0 +1,202 @@ +request->isGet()) { + $mdlBGP = new BGP(); + $result['bgp'] = $mdlBGP->getNodes(); + } + return $result; + } + public function setAction() + { + $result = array("result"=>"failed"); + if ($this->request->isPost()) { + // load model and update with provided data + $mdlBGP = new BGP(); + $mdlBGP->setNodes($this->request->getPost("bgp")); + // perform validation + $valMsgs = $mdlBGP->performValidation(); + foreach ($valMsgs as $field => $msg) { + if (!array_key_exists("validations", $result)) { + $result["validations"] = array(); + } + $result["validations"]["bgp.".$msg->getField()] = $msg->getMessage(); + } + // serialize model to config and save + if ($valMsgs->count() == 0) { + $mdlBGP->serializeToConfig(); + Config::getInstance()->save(); + $result["result"] = "saved"; + } + } + return $result; + } + + public function searchNeighborAction() + { + $this->sessionClose(); + $mdlBGP = $this->getModel(); + $grid = new UIModelGrid($mdlBGP->neighbors->neighbor); + return $grid->fetchBindRequest( + $this->request, + array("enabled", "address", "remoteas", "updatesource", "nexthopself", "defaultoriginate" ) + ); + } + + public function getNeighborAction($uuid = null) + { + $mdlBGP = $this->getModel(); + if ($uuid != null) { + $node = $mdlBGP->getNodeByReference('neighbors.neighbor.' . $uuid); + if ($node != null) { + // return node + return array("neighbor" => $node->getNodes()); + } + } else { + $node = $mdlBGP->neighbors->neighbor->add(); + return array("neighbor" => $node->getNodes()); + } + return array(); + } + + public function addNeighborAction() + { + $result = array("result" => "failed"); + if ($this->request->isPost() && $this->request->hasPost("neighbor")) { + $result = array("result" => "failed", "validations" => array()); + $mdlBGP = $this->getModel(); + $node = $mdlBGP->neighbors->neighbor->Add(); + $node->setNodes($this->request->getPost("neighbor")); + $valMsgs = $mdlBGP->performValidation(); + foreach ($valMsgs as $field => $msg) { + $fieldnm = str_replace($node->__reference, "neighbor", $msg->getField()); + $result["validations"][$fieldnm] = $msg->getMessage(); + } + if (count($result['validations']) == 0) { + // save config if validated correctly + $mdlBGP->serializeToConfig(); + Config::getInstance()->save(); + $result["result"] = "saved"; + } + } + return $result; + } + + public function delNeighborAction($uuid) + { + $result = array("result" => "failed"); + if ($this->request->isPost()) { + $mdlBGP = $this->getModel(); + if ($uuid != null) { + if ($mdlBGP->neighbors->neighbor->del($uuid)) { + $mdlBGP->serializeToConfig(); + Config::getInstance()->save(); + $result['result'] = 'deleted'; + } else { + $result['result'] = 'not found'; + } + } + } + return $result; + } + + public function setNeighborAction($uuid) + { + if ($this->request->isPost() && $this->request->hasPost("neighbor")) { + $mdlNeighbor = $this->getModel(); + if ($uuid != null) { + $node = $mdlNeighbor->getNodeByReference('neighbors.neighbor.' . $uuid); + if ($node != null) { + $result = array("result" => "failed", "validations" => array()); + $neighborInfo = $this->request->getPost("neighbor"); + $node->setNodes($neighborInfo); + $valMsgs = $mdlNeighbor->performValidation(); + foreach ($valMsgs as $field => $msg) { + $fieldnm = str_replace($node->__reference, "neighbor", $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) + { + $result = array("result" => "failed"); + if ($this->request->isPost()) { + $mdlNeighbor = $this->getModel(); + if ($uuid != null) { + $node = $mdlNeighbor->getNodeByReference($elements . '.'. $element .'.' . $uuid); + if ($node != null) { + if ($node->enabled->__toString() == "1") { + $result['result'] = "Disabled"; + $node->enabled = "0"; + } else { + $result['result'] = "Enabled"; + $node->enabled = "1"; + } + // if item has toggled, serialize to config and save + $mdlNeighbor->serializeToConfig(); + Config::getInstance()->save(); + } + } + } + return $result; + } + + public function toggleNeighborAction($uuid) + { + return $this->toggle_handler($uuid, 'neighbors', 'neighbor'); + } +} 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 c684081d5..0a7de07f3 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 @@ -150,6 +150,7 @@ class OspfsettingsController extends ApiMutableModelControllerBase // save config if validated correctly $mdlOSPF->serializeToConfig(); Config::getInstance()->save(); + unset($result['validations']); $result["result"] = "saved"; } } @@ -174,6 +175,7 @@ class OspfsettingsController extends ApiMutableModelControllerBase // save config if validated correctly $mdlOSPF->serializeToConfig(); Config::getInstance()->save(); + unset($result['validations']); $result["result"] = "saved"; } } diff --git a/net/quagga/src/opnsense/mvc/app/controllers/OPNsense/Quagga/BgpController.php b/net/quagga/src/opnsense/mvc/app/controllers/OPNsense/Quagga/BgpController.php index 4c9ed1657..52ece6c3e 100644 --- a/net/quagga/src/opnsense/mvc/app/controllers/OPNsense/Quagga/BgpController.php +++ b/net/quagga/src/opnsense/mvc/app/controllers/OPNsense/Quagga/BgpController.php @@ -1,12 +1,35 @@ view->title = gettext("BGP-Settings"); - $this->view->generalForm = $this->getForm("bgp"); + $this->view->title = gettext("BGP Settings"); + $this->view->bgpForm = $this->getForm("bgp"); + $this->view->formDialogEditBGPNeighbor = $this->getForm("dialogEditBGPNeighbor"); $this->view->pick('OPNsense/Quagga/bgp'); } } diff --git a/net/quagga/src/opnsense/mvc/app/controllers/OPNsense/Quagga/forms/bgp.xml b/net/quagga/src/opnsense/mvc/app/controllers/OPNsense/Quagga/forms/bgp.xml index 194badc6d..a6ee35c6d 100644 --- a/net/quagga/src/opnsense/mvc/app/controllers/OPNsense/Quagga/forms/bgp.xml +++ b/net/quagga/src/opnsense/mvc/app/controllers/OPNsense/Quagga/forms/bgp.xml @@ -1,8 +1,30 @@
diff --git a/net/quagga/src/opnsense/mvc/app/controllers/OPNsense/Quagga/forms/dialogEditBGPNeighbor.xml b/net/quagga/src/opnsense/mvc/app/controllers/OPNsense/Quagga/forms/dialogEditBGPNeighbor.xml new file mode 100644 index 000000000..019d3a5b8 --- /dev/null +++ b/net/quagga/src/opnsense/mvc/app/controllers/OPNsense/Quagga/forms/dialogEditBGPNeighbor.xml @@ -0,0 +1,35 @@ + diff --git a/net/quagga/src/opnsense/mvc/app/models/OPNsense/Quagga/BGP.php b/net/quagga/src/opnsense/mvc/app/models/OPNsense/Quagga/BGP.php new file mode 100644 index 000000000..5522770ad --- /dev/null +++ b/net/quagga/src/opnsense/mvc/app/models/OPNsense/Quagga/BGP.php @@ -0,0 +1,30 @@ + +| {{ lang._('Enabled') }} | +{{ lang._('Neighbor Address') }} | +{{ lang._('Remote AS') }} | +{{ lang._('Update Source Address') }} | +{{ lang._('Next Hop Self') }} | +{{ lang._('Default Originate') }} | +{{ lang._('ID') }} | +{{ lang._('Commands') }} | +
|---|---|---|---|---|---|---|---|
| + | + + + | +||||||