From 7d80f955de6a761a652d714cc778df27a2c23dfe Mon Sep 17 00:00:00 2001 From: Franco Fichtner Date: Tue, 21 Nov 2023 15:07:31 +0100 Subject: [PATCH] dhcp: DHCRelay model migration #6983 It would be nice to have both IPv4 and IPv6 in here but it may be less desirable in practice. For now use a shared namespace and only migrate IPv4 switching the binary and breaking everything in the process. --- Makefile | 2 +- plist | 3 + src/etc/inc/plugins.inc.d/core.inc | 2 +- .../app/models/OPNsense/DHCRelay/DHCRelay.php | 35 ++++++++ .../app/models/OPNsense/DHCRelay/DHCRelay.xml | 40 +++++++++ .../OPNsense/DHCRelay/Migrations/M1_0_0.php | 81 +++++++++++++++++++ src/www/services_dhcp_relay.php | 6 -- 7 files changed, 161 insertions(+), 8 deletions(-) create mode 100644 src/opnsense/mvc/app/models/OPNsense/DHCRelay/DHCRelay.php create mode 100644 src/opnsense/mvc/app/models/OPNsense/DHCRelay/DHCRelay.xml create mode 100644 src/opnsense/mvc/app/models/OPNsense/DHCRelay/Migrations/M1_0_0.php diff --git a/Makefile b/Makefile index f4b6f5767..c08f054c3 100644 --- a/Makefile +++ b/Makefile @@ -132,6 +132,7 @@ CORE_DEPENDS?= ca_root_nss \ choparp \ cpustats \ dhcp6c \ + dhcrelay \ dnsmasq \ dpinger \ expiretable \ @@ -141,7 +142,6 @@ CORE_DEPENDS?= ca_root_nss \ hostapd \ ifinfo \ iftop \ - isc-dhcp44-relay \ isc-dhcp44-server \ kea \ lighttpd \ diff --git a/plist b/plist index 87db440ee..de9765f7a 100644 --- a/plist +++ b/plist @@ -593,6 +593,9 @@ /usr/local/opnsense/mvc/app/models/OPNsense/Cron/Migrations/M1_0_2.php /usr/local/opnsense/mvc/app/models/OPNsense/Cron/Migrations/M1_0_3.php /usr/local/opnsense/mvc/app/models/OPNsense/Cron/Migrations/M1_0_4.php +/usr/local/opnsense/mvc/app/models/OPNsense/DHCRelay/DHCRelay.php +/usr/local/opnsense/mvc/app/models/OPNsense/DHCRelay/DHCRelay.xml +/usr/local/opnsense/mvc/app/models/OPNsense/DHCRelay/Migrations/M1_0_0.php /usr/local/opnsense/mvc/app/models/OPNsense/Diagnostics/ACL/ACL.xml /usr/local/opnsense/mvc/app/models/OPNsense/Diagnostics/DnsDiagnostics.php /usr/local/opnsense/mvc/app/models/OPNsense/Diagnostics/DnsDiagnostics.xml diff --git a/src/etc/inc/plugins.inc.d/core.inc b/src/etc/inc/plugins.inc.d/core.inc index 73debc725..9b5b6e02f 100644 --- a/src/etc/inc/plugins.inc.d/core.inc +++ b/src/etc/inc/plugins.inc.d/core.inc @@ -400,7 +400,7 @@ function core_xmlrpc_sync() ); $result[] = array( 'description' => gettext('DHCPv4: Relay'), - 'section' => 'dhcrelay', + 'section' => 'dhcrelay,OPNsense.DHCRelay', 'id' => 'dhcrelay', 'services' => ["dhcrelay"], ); diff --git a/src/opnsense/mvc/app/models/OPNsense/DHCRelay/DHCRelay.php b/src/opnsense/mvc/app/models/OPNsense/DHCRelay/DHCRelay.php new file mode 100644 index 000000000..34fa001d9 --- /dev/null +++ b/src/opnsense/mvc/app/models/OPNsense/DHCRelay/DHCRelay.php @@ -0,0 +1,35 @@ + + //OPNsense/DHCRelay + 1.0.0 + DHCRelay configuration + + + + Y + + + Y + + + + + + Y + + + Y + + + + + Y + N + ipv4 + Y + , + + + Y + + + + diff --git a/src/opnsense/mvc/app/models/OPNsense/DHCRelay/Migrations/M1_0_0.php b/src/opnsense/mvc/app/models/OPNsense/DHCRelay/Migrations/M1_0_0.php new file mode 100644 index 000000000..82144a499 --- /dev/null +++ b/src/opnsense/mvc/app/models/OPNsense/DHCRelay/Migrations/M1_0_0.php @@ -0,0 +1,81 @@ +object(); + + $legacy = $config->dhcrelay; + if (empty($legacy->interface) || empty($legacy->server)) { + /* no value in partial migration so skip all */ + return; + } + + $node = $model->destinations->add(); + $node->setNodes([ + 'server' => (string)$legacy->server, + 'description' => 'Migrated server entry', + ]); + $dest_uuid = $node->getAttribute('uuid'); + + foreach (explode(',', (string)$legacy->interface) as $interface) { + $node = $model->relays->add(); + $node->setNodes([ + 'agent_info' => !empty($legacy->agentoption), + 'enabled' => !empty($legacy->enable), + 'interface' => (string)$interface, + 'destination' => $dest_uuid, + ]); + $node->interface->normalizeValue(); + if (empty((string)$node->interface)) { + $model->relays->del($node->getAttribute('uuid')); + } + } + } + + public function post($model) + { + $config = Config::getInstance()->object(); + // XXX later + //unset($config->dhcrelay); + } +} diff --git a/src/www/services_dhcp_relay.php b/src/www/services_dhcp_relay.php index 2341867f4..88dfcb642 100644 --- a/src/www/services_dhcp_relay.php +++ b/src/www/services_dhcp_relay.php @@ -102,11 +102,6 @@ include("head.inc");
- 0) print_input_errors($input_errors); ?>
@@ -179,7 +174,6 @@ include("head.inc");
-