From 26ee607a31f1e1ef4754e76ccc31df100019671d Mon Sep 17 00:00:00 2001 From: Ad Schellevis Date: Sun, 27 May 2018 11:43:46 +0200 Subject: [PATCH] Traffic shaper, add enabled flag to rules, closes https://github.com/opnsense/core/issues/2426 --- .../TrafficShaper/Api/SettingsController.php | 16 +++++++++++++++- .../OPNsense/TrafficShaper/forms/dialogRule.xml | 6 ++++++ .../OPNsense/TrafficShaper/TrafficShaper.xml | 6 +++++- .../app/views/OPNsense/TrafficShaper/index.volt | 4 +++- .../service/templates/OPNsense/IPFW/ipfw.conf | 2 +- 5 files changed, 30 insertions(+), 4 deletions(-) diff --git a/src/opnsense/mvc/app/controllers/OPNsense/TrafficShaper/Api/SettingsController.php b/src/opnsense/mvc/app/controllers/OPNsense/TrafficShaper/Api/SettingsController.php index 2d5e095c1..3700ff45a 100644 --- a/src/opnsense/mvc/app/controllers/OPNsense/TrafficShaper/Api/SettingsController.php +++ b/src/opnsense/mvc/app/controllers/OPNsense/TrafficShaper/Api/SettingsController.php @@ -247,7 +247,8 @@ class SettingsController extends ApiMutableModelControllerBase { return $this->searchBase( "rules.rule", - array("interface", "proto", "source_not","source", "destination_not", "destination", "description", "origin", "sequence", "target"), + array("enabled", "interface", "proto", "source_not","source", "destination_not", + "destination", "description", "origin", "sequence", "target"), "sequence" ); } @@ -304,4 +305,17 @@ class SettingsController extends ApiMutableModelControllerBase { return $this->delBase("rules.rule", $uuid); } + + /** + * Toggle rule defined by uuid (enable/disable) + * @param $uuid user defined rule internal id + * @param $enabled desired state enabled(1)/disabled(1), leave empty for toggle + * @return array save result + * @throws \Phalcon\Validation\Exception when field validations fail + * @throws \ReflectionException when not bound to model + */ + public function toggleRuleAction($uuid, $enabled = null) + { + return $this->toggleBase("rules.rule", $uuid, $enabled); + } } diff --git a/src/opnsense/mvc/app/controllers/OPNsense/TrafficShaper/forms/dialogRule.xml b/src/opnsense/mvc/app/controllers/OPNsense/TrafficShaper/forms/dialogRule.xml index 24e053002..957373448 100644 --- a/src/opnsense/mvc/app/controllers/OPNsense/TrafficShaper/forms/dialogRule.xml +++ b/src/opnsense/mvc/app/controllers/OPNsense/TrafficShaper/forms/dialogRule.xml @@ -1,4 +1,10 @@
+ + rule.enabled + + checkbox + enable this rule + rule.sequence diff --git a/src/opnsense/mvc/app/models/OPNsense/TrafficShaper/TrafficShaper.xml b/src/opnsense/mvc/app/models/OPNsense/TrafficShaper/TrafficShaper.xml index 8090c44c7..d631b79aa 100644 --- a/src/opnsense/mvc/app/models/OPNsense/TrafficShaper/TrafficShaper.xml +++ b/src/opnsense/mvc/app/models/OPNsense/TrafficShaper/TrafficShaper.xml @@ -1,6 +1,6 @@ //OPNsense/TrafficShaper - 1.0.1 + 1.0.2 OPNsense traffic shaper @@ -193,6 +193,10 @@ + + 1 + Y + 1 1000000 diff --git a/src/opnsense/mvc/app/views/OPNsense/TrafficShaper/index.volt b/src/opnsense/mvc/app/views/OPNsense/TrafficShaper/index.volt index 224a89eb5..40ce0ccfc 100644 --- a/src/opnsense/mvc/app/views/OPNsense/TrafficShaper/index.volt +++ b/src/opnsense/mvc/app/views/OPNsense/TrafficShaper/index.volt @@ -65,6 +65,7 @@ POSSIBILITY OF SUCH DAMAGE. set:'/api/trafficshaper/settings/setRule/', add:'/api/trafficshaper/settings/addRule/', del:'/api/trafficshaper/settings/delRule/', + toggle:'/api/trafficshaper/settings/toggleRule/', options: { converters: { notprefixable: { @@ -225,7 +226,8 @@ POSSIBILITY OF SUCH DAMAGE. - + + diff --git a/src/opnsense/service/templates/OPNsense/IPFW/ipfw.conf b/src/opnsense/service/templates/OPNsense/IPFW/ipfw.conf index dbc337a90..a7cbb4a00 100644 --- a/src/opnsense/service/templates/OPNsense/IPFW/ipfw.conf +++ b/src/opnsense/service/templates/OPNsense/IPFW/ipfw.conf @@ -169,7 +169,7 @@ add 60000 return via any {% if helpers.exists('OPNsense.TrafficShaper.rules.rule') %} {% for rule in helpers.toList('OPNsense.TrafficShaper.rules.rule', 'sequence', 'int') %} {% if helpers.getUUIDtag(rule.target) in ['pipe','queue'] %} -{% if physical_interface(rule.interface) %} +{% if physical_interface(rule.interface) and rule.enabled|default('0') == '1' %} {% if helpers.getUUID(rule.target).enabled|default('0') == '1' %} {% if helpers.getUUIDtag(rule.target) == 'pipe' or helpers.getUUID(helpers.getUUID(rule.target).pipe).enabled|default('0') == '1'
{{ lang._('#') }}{{ lang._('Enabled') }}{{ lang._('#') }} {{ lang._('Origin') }} {{ lang._('Interface') }} {{ lang._('Protocol') }}