dhcrelay: start on newwanip as well #7805

Requires new plumbing but since all other event listeners are not
seeing the new inet/inet6 argument by default this should be fine.
This commit is contained in:
Franco Fichtner 2024-08-22 16:18:51 +02:00
parent 7ce814346b
commit fda0c429ef
3 changed files with 31 additions and 8 deletions

View File

@ -30,8 +30,9 @@ function dhcrelay_configure()
{
return [
'bootup' => ['dhcrelay_configure_do'],
'dhcrelay' => ['dhcrelay_configure_do:3'],
'dhcrelay' => ['dhcrelay_configure_do:2'],
'local' => ['dhcrelay_configure_do'],
'newwanip' => ['dhcrelay_ensure_running:3'],
];
}
@ -109,7 +110,7 @@ function dhcrelay_configure_do($verbose = false, $id = null)
return;
}
service_log('Starting DHCP relays...', $verbose);
service_log(sprintf('Starting DHCP relay%s...', empty($id) ? 's' : " {$id}"), $verbose);
$iflist = get_configured_interface_with_descr();
$ifconfig_details = legacy_interfaces_details();
@ -172,10 +173,10 @@ function dhcrelay_configure_do($verbose = false, $id = null)
service_log("done.\n", $verbose);
}
function dhcrelay_interfaces($family = null)
function dhcrelay_instances($family = null)
{
$mdl = new \OPNsense\DHCRelay\DHCRelay();
$interfaces = [];
$instances = [];
foreach ($mdl->relays->iterateItems() as $relay) {
if ((string)$relay->enabled != '1') {
@ -192,8 +193,30 @@ function dhcrelay_interfaces($family = null)
continue;
}
$interfaces[(string)$relay->interface] = 1;
if (!isset($instances[(string)$relay->interface])) {
$instances[(string)$relay->interface] = [];
}
$instances[(string)$relay->interface][] = $relay->getAttribute('uuid');
}
return array_keys($interfaces);
return $instances;
}
function dhcrelay_interfaces($family = null)
{
return array_keys(dhcrelay_instances($family));
}
function dhcrelay_ensure_running($verbose = false, $interface = null, $family = null)
{
$instances = dhcrelay_instances($family);
if (empty($instances[$interface])) {
return;
}
foreach ($instances[$interface] as $id) {
dhcrelay_configure_do($verbose, $id);
}
}

View File

@ -116,5 +116,5 @@ if (is_ipaddr($cacheip) && $ip != $cacheip) {
@file_put_contents($cacheip_file, $ip . PHP_EOL);
plugins_configure('vpn', false, [$interface]);
plugins_configure('newwanip', false, [$interface]);
plugins_configure('newwanip', false, [$interface, 'inet']);
rrd_configure();

View File

@ -130,7 +130,7 @@ filter_configure_sync();
foreach ($interfaces as $interface) {
plugins_configure('vpn', false, [$interface]);
plugins_configure('newwanip', false, [$interface]);
plugins_configure('newwanip', false, [$interface, 'inet6']);
}
rrd_configure();