diff --git a/src/etc/inc/plugins.inc.d/dhcrelay.inc b/src/etc/inc/plugins.inc.d/dhcrelay.inc index a3ded8de0..d3f05f703 100644 --- a/src/etc/inc/plugins.inc.d/dhcrelay.inc +++ b/src/etc/inc/plugins.inc.d/dhcrelay.inc @@ -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); + } } diff --git a/src/etc/rc.newwanip b/src/etc/rc.newwanip index 340bdec94..24132632c 100755 --- a/src/etc/rc.newwanip +++ b/src/etc/rc.newwanip @@ -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(); diff --git a/src/etc/rc.newwanipv6 b/src/etc/rc.newwanipv6 index 4086be2ad..c907b4dbd 100755 --- a/src/etc/rc.newwanipv6 +++ b/src/etc/rc.newwanipv6 @@ -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();