From af2730dd36db0cb71767a64ab7d83f51ba079907 Mon Sep 17 00:00:00 2001 From: Ad Schellevis Date: Wed, 1 Jan 2025 20:12:08 +0100 Subject: [PATCH] System: Settings: Tunables - refactor to MVC for https://github.com/opnsense/core/issues/7249 (work in progress) --- plist | 8 ++ .../OPNsense/Core/Api/TunablesController.php | 64 +++++++++++ .../OPNsense/Core/TunablesController.php | 39 +++++++ .../OPNsense/Core/forms/tunable.xml | 17 +++ .../OPNsense/Core/FieldTypes/TunableField.php | 92 ++++++++++++++++ .../mvc/app/models/OPNsense/Core/Tunables.php | 39 +++++++ .../mvc/app/models/OPNsense/Core/Tunables.xml | 15 +++ .../mvc/app/views/OPNsense/Core/tunables.volt | 100 ++++++++++++++++++ .../scripts/system/sysctl_defaults.php | 33 ++++++ .../conf/actions.d/actions_system.conf | 6 ++ 10 files changed, 413 insertions(+) create mode 100644 src/opnsense/mvc/app/controllers/OPNsense/Core/Api/TunablesController.php create mode 100644 src/opnsense/mvc/app/controllers/OPNsense/Core/TunablesController.php create mode 100644 src/opnsense/mvc/app/controllers/OPNsense/Core/forms/tunable.xml create mode 100644 src/opnsense/mvc/app/models/OPNsense/Core/FieldTypes/TunableField.php create mode 100644 src/opnsense/mvc/app/models/OPNsense/Core/Tunables.php create mode 100644 src/opnsense/mvc/app/models/OPNsense/Core/Tunables.xml create mode 100644 src/opnsense/mvc/app/views/OPNsense/Core/tunables.volt create mode 100755 src/opnsense/scripts/system/sysctl_defaults.php diff --git a/plist b/plist index 0a4673587..5f6dccd95 100644 --- a/plist +++ b/plist @@ -249,6 +249,7 @@ /usr/local/opnsense/mvc/app/controllers/OPNsense/Core/Api/ServiceController.php /usr/local/opnsense/mvc/app/controllers/OPNsense/Core/Api/SnapshotsController.php /usr/local/opnsense/mvc/app/controllers/OPNsense/Core/Api/SystemController.php +/usr/local/opnsense/mvc/app/controllers/OPNsense/Core/Api/TunablesController.php /usr/local/opnsense/mvc/app/controllers/OPNsense/Core/BackupController.php /usr/local/opnsense/mvc/app/controllers/OPNsense/Core/DashboardController.php /usr/local/opnsense/mvc/app/controllers/OPNsense/Core/FirmwareController.php @@ -260,8 +261,10 @@ /usr/local/opnsense/mvc/app/controllers/OPNsense/Core/RebootController.php /usr/local/opnsense/mvc/app/controllers/OPNsense/Core/ServiceController.php /usr/local/opnsense/mvc/app/controllers/OPNsense/Core/SnapshotsController.php +/usr/local/opnsense/mvc/app/controllers/OPNsense/Core/TunablesController.php /usr/local/opnsense/mvc/app/controllers/OPNsense/Core/forms/hasyncSettings.xml /usr/local/opnsense/mvc/app/controllers/OPNsense/Core/forms/snapshot.xml +/usr/local/opnsense/mvc/app/controllers/OPNsense/Core/forms/tunable.xml /usr/local/opnsense/mvc/app/controllers/OPNsense/Cron/Api/ServiceController.php /usr/local/opnsense/mvc/app/controllers/OPNsense/Cron/Api/SettingsController.php /usr/local/opnsense/mvc/app/controllers/OPNsense/Cron/IndexController.php @@ -657,6 +660,7 @@ /usr/local/opnsense/mvc/app/models/OPNsense/Core/ACL.php /usr/local/opnsense/mvc/app/models/OPNsense/Core/ACL/ACL.php /usr/local/opnsense/mvc/app/models/OPNsense/Core/ACL/ACL.xml +/usr/local/opnsense/mvc/app/models/OPNsense/Core/FieldTypes/TunableField.php /usr/local/opnsense/mvc/app/models/OPNsense/Core/Firmware.php /usr/local/opnsense/mvc/app/models/OPNsense/Core/Firmware.xml /usr/local/opnsense/mvc/app/models/OPNsense/Core/Hasync.php @@ -666,6 +670,8 @@ /usr/local/opnsense/mvc/app/models/OPNsense/Core/Migrations/M1_0_1.php /usr/local/opnsense/mvc/app/models/OPNsense/Core/Migrations/MHA1_0_0.php /usr/local/opnsense/mvc/app/models/OPNsense/Core/Migrations/MHA1_0_1.php +/usr/local/opnsense/mvc/app/models/OPNsense/Core/Tunables.php +/usr/local/opnsense/mvc/app/models/OPNsense/Core/Tunables.xml /usr/local/opnsense/mvc/app/models/OPNsense/Core/repositories/opnsense.xml /usr/local/opnsense/mvc/app/models/OPNsense/Cron/ACL/ACL.xml /usr/local/opnsense/mvc/app/models/OPNsense/Cron/Cron.php @@ -872,6 +878,7 @@ /usr/local/opnsense/mvc/app/views/OPNsense/Core/reboot.volt /usr/local/opnsense/mvc/app/views/OPNsense/Core/service.volt /usr/local/opnsense/mvc/app/views/OPNsense/Core/snapshot.volt +/usr/local/opnsense/mvc/app/views/OPNsense/Core/tunables.volt /usr/local/opnsense/mvc/app/views/OPNsense/Cron/index.volt /usr/local/opnsense/mvc/app/views/OPNsense/DHCPv4/leases.volt /usr/local/opnsense/mvc/app/views/OPNsense/DHCPv6/leases.volt @@ -1275,6 +1282,7 @@ /usr/local/opnsense/scripts/system/status.php /usr/local/opnsense/scripts/system/swapinfo.py /usr/local/opnsense/scripts/system/sysctl.py +/usr/local/opnsense/scripts/system/sysctl_defaults.php /usr/local/opnsense/scripts/system/tls_groups.py /usr/local/opnsense/scripts/system/trigger_config_changed_events.py /usr/local/opnsense/scripts/system/update-crl-fetch.py diff --git a/src/opnsense/mvc/app/controllers/OPNsense/Core/Api/TunablesController.php b/src/opnsense/mvc/app/controllers/OPNsense/Core/Api/TunablesController.php new file mode 100644 index 000000000..c4ec95a45 --- /dev/null +++ b/src/opnsense/mvc/app/controllers/OPNsense/Core/Api/TunablesController.php @@ -0,0 +1,64 @@ +searchBase("item", null, "sysctl"); + } + + public function setSubnetAction($uuid) + { + return $this->setBase("sysctl", "item", $uuid); + } + + public function addSubnetAction() + { + return $this->addBase("sysctl", "item"); + } + + public function getSubnetAction($uuid = null) + { + return $this->getBase("sysctl", "item", $uuid); + } + + public function delSubnetAction($uuid) + { + return $this->delBase("item", $uuid); + } + +} diff --git a/src/opnsense/mvc/app/controllers/OPNsense/Core/TunablesController.php b/src/opnsense/mvc/app/controllers/OPNsense/Core/TunablesController.php new file mode 100644 index 000000000..98ce2d950 --- /dev/null +++ b/src/opnsense/mvc/app/controllers/OPNsense/Core/TunablesController.php @@ -0,0 +1,39 @@ +view->pick('OPNsense/Core/tunables'); + $this->view->formDialogTunable = $this->getForm('tunable'); + + } +} diff --git a/src/opnsense/mvc/app/controllers/OPNsense/Core/forms/tunable.xml b/src/opnsense/mvc/app/controllers/OPNsense/Core/forms/tunable.xml new file mode 100644 index 000000000..55cba1f4c --- /dev/null +++ b/src/opnsense/mvc/app/controllers/OPNsense/Core/forms/tunable.xml @@ -0,0 +1,17 @@ +
+ + item.tunable + + text + + + item.value + + text + + + item.descr + + text + +
diff --git a/src/opnsense/mvc/app/models/OPNsense/Core/FieldTypes/TunableField.php b/src/opnsense/mvc/app/models/OPNsense/Core/FieldTypes/TunableField.php new file mode 100644 index 000000000..797f77df4 --- /dev/null +++ b/src/opnsense/mvc/app/models/OPNsense/Core/FieldTypes/TunableField.php @@ -0,0 +1,92 @@ + $item){ + $result[] = [ + 'tunable' => $key, + 'value' => $item['value'] ?? '', + 'default_value' => $item['default'], + 'descr' => $item['description'], + 'type' => $item['type'] ?? '', + ]; + } + + return $result; + } + + protected function actionPostLoadingEvent() + { + if (self::$default_values === null) { + self::$default_values = json_decode((new Backend())->configdRun('system sysctl gather'), true) ?? []; + self::$static_entries = json_decode((new Backend())->configdRun('system sysctl defaults'), true) ?? []; + foreach (self::$static_entries as $key => $item) { + if (!empty(self::$default_values[$key])) { + self::$static_entries[$key]['type'] = self::$default_values[$key]['type']; + self::$static_entries[$key]['value'] = self::$default_values[$key]['value']; + self::$static_entries[$key]['descr'] = self::$default_values[$key]['description']; + } + } + } + foreach ($this->iterateItems() as $node) { + if (isset(self::$static_entries[(string)$node->tunable])) { + unset(self::$static_entries[(string)$node->tunable]); + } + if (isset(self::$default_values[(string)$node->tunable])) { + $node->default_value->setValue(self::$default_values[(string)$node->tunable]['value']); + $node->type->setValue(self::$default_values[(string)$node->tunable]['type']); + if (empty((string)$node->descr)) { + $node->descr->setValue(self::$default_values[(string)$node->tunable]['description']); + } + } + } + parent::actionPostLoadingEvent(); + } +} diff --git a/src/opnsense/mvc/app/models/OPNsense/Core/Tunables.php b/src/opnsense/mvc/app/models/OPNsense/Core/Tunables.php new file mode 100644 index 000000000..7b8790798 --- /dev/null +++ b/src/opnsense/mvc/app/models/OPNsense/Core/Tunables.php @@ -0,0 +1,39 @@ + + //sysctl + TUN + 1.0.0 + System Tunables + + + + + + + + + + diff --git a/src/opnsense/mvc/app/views/OPNsense/Core/tunables.volt b/src/opnsense/mvc/app/views/OPNsense/Core/tunables.volt new file mode 100644 index 000000000..d208cd902 --- /dev/null +++ b/src/opnsense/mvc/app/views/OPNsense/Core/tunables.volt @@ -0,0 +1,100 @@ +{# + # Copyright (c) 2025 Deciso B.V. + # All rights reserved. + # + # Redistribution and use in source and binary forms, with or without modification, + # are permitted provided that the following conditions are met: + # + # 1. Redistributions of source code must retain the above copyright notice, + # this list of conditions and the following disclaimer. + # + # 2. Redistributions in binary form must reproduce the above copyright notice, + # this list of conditions and the following disclaimer in the documentation + # and/or other materials provided with the distribution. + # + # THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, + # INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + # AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + # AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, + # OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + # SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + # INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + # 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. + #} + + +
+ + + + + + + + + + + + + + + + + + + + +
{{ lang._('ID') }}{{ lang._('Tunable') }}{{ lang._('Type') }}{{ lang._('Value') }}{{ lang._('Default') }}{{ lang._('Description') }}{{ lang._('Commands') }}
+ + +
+
+ +
+ +

+
+
+ + +{{ partial("layout_partials/base_dialog",['fields':formDialogTunable,'id':'DialogTunable','label':lang._('Edit Tunable')])}} diff --git a/src/opnsense/scripts/system/sysctl_defaults.php b/src/opnsense/scripts/system/sysctl_defaults.php new file mode 100755 index 000000000..a52f13aaa --- /dev/null +++ b/src/opnsense/scripts/system/sysctl_defaults.php @@ -0,0 +1,33 @@ +#!/usr/local/bin/php +