diff --git a/src/etc/inc/plugins.inc.d/kea.inc b/src/etc/inc/plugins.inc.d/kea.inc index a64113d44..c403d0eac 100644 --- a/src/etc/inc/plugins.inc.d/kea.inc +++ b/src/etc/inc/plugins.inc.d/kea.inc @@ -115,7 +115,10 @@ function kea_configure_do($verbose = false) $keaDhcpv4 = new \OPNsense\Kea\KeaDhcpv4(); if ($keaDhcpv4->isEnabled()) { service_log('Sync KEA DHCP config...', $verbose); - $keaDhcpv4->generateConfig(); + if ($keaDhcpv4->general->manual_config->isEmpty()) { + /* skip kea-dhcp4.conf when configured manually */ + $keaDhcpv4->generateConfig(); + } (new \OPNsense\Kea\KeaCtrlAgent())->generateConfig(); service_log("done.\n", $verbose); } diff --git a/src/opnsense/mvc/app/controllers/OPNsense/Kea/forms/generalSettings4.xml b/src/opnsense/mvc/app/controllers/OPNsense/Kea/forms/generalSettings4.xml index 182df08c3..ae929167c 100644 --- a/src/opnsense/mvc/app/controllers/OPNsense/Kea/forms/generalSettings4.xml +++ b/src/opnsense/mvc/app/controllers/OPNsense/Kea/forms/generalSettings4.xml @@ -1,7 +1,7 @@
header - + dhcpv4.general.enabled @@ -9,6 +9,17 @@ checkbox Enable DHCPv4 server. + + dhcpv4.general.manual_config + + checkbox + true + Disable configuration file generation and manage the file (/usr/local/etc/kea/kea-dhcp4.conf) manually. + + + header + + dhcpv4.general.interfaces diff --git a/src/opnsense/mvc/app/models/OPNsense/Kea/KeaDhcpv4.xml b/src/opnsense/mvc/app/models/OPNsense/Kea/KeaDhcpv4.xml index 83c935a78..876e93268 100644 --- a/src/opnsense/mvc/app/models/OPNsense/Kea/KeaDhcpv4.xml +++ b/src/opnsense/mvc/app/models/OPNsense/Kea/KeaDhcpv4.xml @@ -8,6 +8,7 @@ 0 Y + Y diff --git a/src/opnsense/mvc/app/views/OPNsense/Kea/dhcpv4.volt b/src/opnsense/mvc/app/views/OPNsense/Kea/dhcpv4.volt index 09450dcf1..8b06347df 100644 --- a/src/opnsense/mvc/app/views/OPNsense/Kea/dhcpv4.volt +++ b/src/opnsense/mvc/app/views/OPNsense/Kea/dhcpv4.volt @@ -130,14 +130,36 @@ } }); + /* Manual configuration, hide all config elements except the service section*/ + $("#dhcpv4\\.general\\.manual_config").change(function(){ + let manual_config = $(this).is(':checked'); + if (manual_config) { + if (!$("#show_advanced_frm_generalsettings").hasClass('fa-toggle-on')) { + /* enforce advanced mode so the user notices the checkbox */ + $("#show_advanced_frm_generalsettings").click(); + } + $(".is_managed").hide(); + } else { + $(".is_managed").show(); + } + $("#settings").find('table').each(function(){ + if (manual_config && $(this).find('#dhcpv4\\.general\\.manual_config').length == 0) { + $(this).hide(); + } else { + $(this).show(); + } + }); + }); + + });