mirror of
https://github.com/lucaspalomodevelop/core.git
synced 2026-03-20 11:26:13 +00:00
system: do not mark defunct gw as disabled as well
gatewaysIndexedByName() -> do not omit when defunct getDefaultGW() -> omit when defunct getInterfaceGateway() -> omit when defunct (debatable) Otherwise strip gatewaysIndexedByName(true) where the behaviour was likely to try and get defunct gateways as well and fix the dpinger code accordingly to get rid of raw config access.
This commit is contained in:
parent
d417603918
commit
3786caf568
@ -1654,7 +1654,7 @@ function dhcpd_dhcrelay4_configure($verbose = false)
|
||||
|
||||
$iflist = get_configured_interface_with_descr();
|
||||
$ifconfig_details = legacy_interfaces_details();
|
||||
$a_gateways = (new \OPNsense\Routing\Gateways())->gatewaysIndexedByName(true);
|
||||
$a_gateways = (new \OPNsense\Routing\Gateways())->gatewaysIndexedByName();
|
||||
$dhcifaces = explode(",", $dhcrelaycfg['interface']);
|
||||
foreach ($dhcifaces as $dhcrelayif) {
|
||||
if (isset($iflist[$dhcrelayif]) && get_interface_ip($dhcrelayif, $ifconfig_details)) {
|
||||
@ -1766,7 +1766,7 @@ function dhcpd_dhcrelay6_configure($verbose = false)
|
||||
|
||||
$iflist = get_configured_interface_with_descr();
|
||||
$ifconfig_details = legacy_interfaces_details();
|
||||
$a_gateways = (new \OPNsense\Routing\Gateways())->gatewaysIndexedByName(true);
|
||||
$a_gateways = (new \OPNsense\Routing\Gateways())->gatewaysIndexedByName();
|
||||
$dhcifaces = explode(",", $dhcrelaycfg['interface']);
|
||||
foreach ($dhcifaces as $dhcrelayif) {
|
||||
if (isset($iflist[$dhcrelayif]) && get_interface_ipv6($dhcrelayif, $ifconfig_details)) {
|
||||
|
||||
@ -33,19 +33,9 @@
|
||||
|
||||
function dpinger_services()
|
||||
{
|
||||
global $config;
|
||||
|
||||
$services = [];
|
||||
|
||||
foreach (config_read_array('gateways', 'gateway_item') as $gateway) {
|
||||
if (!empty($gateway['monitor_disable']) || isset($gateway['disabled'])) {
|
||||
continue;
|
||||
}
|
||||
|
||||
if (empty($config['interfaces'][$gateway['interface']]['enable'])) {
|
||||
continue;
|
||||
}
|
||||
|
||||
foreach (dpinger_instances() as $name => $gateway) {
|
||||
$pconfig = [];
|
||||
$pconfig['description'] = sprintf(gettext('Gateway monitor (%s)'), $gateway['name']);
|
||||
$pconfig['php']['restart'] = ['dpinger_configure_do'];
|
||||
@ -129,17 +119,12 @@ function dpinger_host_routes()
|
||||
return $routes;
|
||||
}
|
||||
|
||||
function dpinger_instances()
|
||||
function dpinger_instances($extended = false)
|
||||
{
|
||||
$instances = [];
|
||||
|
||||
$gateways = new \OPNsense\Routing\Gateways();
|
||||
|
||||
foreach ($gateways->gatewaysIndexedByName(true) as $name => $gateway) {
|
||||
if (empty($gateway['monitor'])) {
|
||||
/* skip monitors not currently attached */
|
||||
continue;
|
||||
} elseif (isset($gateway['disabled']) || isset($gateway['monitor_disable'])) {
|
||||
foreach ((new \OPNsense\Routing\Gateways())->gatewaysIndexedByName() as $name => $gateway) {
|
||||
if (isset($gateway['monitor_disable']) && !$extended) {
|
||||
/* do not monitor if such was requested */
|
||||
continue;
|
||||
}
|
||||
@ -151,12 +136,8 @@ function dpinger_instances()
|
||||
if (is_linklocal($gateway['monitor']) && strpos($gateway['monitor'], '%') === false) {
|
||||
$gateway['monitor'] .= '%' . get_real_interface($gateway['interface'], 'inet6');
|
||||
}
|
||||
if (!empty($gateway['gateway'])) {
|
||||
if (is_linklocal($gateway['gateway']) && strpos($gateway['gateway'], '%') === false) {
|
||||
$gateway['gateway'] .= '%' . get_real_interface($gateway['interface'], 'inet6');
|
||||
}
|
||||
} else {
|
||||
log_msg("Gateway currently empty for {$gateway['monitor']} on {$gateway['interface']}");
|
||||
if (is_linklocal($gateway['gateway']) && strpos($gateway['gateway'], '%') === false) {
|
||||
$gateway['gateway'] .= '%' . get_real_interface($gateway['interface'], 'inet6');
|
||||
}
|
||||
|
||||
$instances[$name] = $gateway;
|
||||
@ -190,6 +171,10 @@ function dpinger_configure_do($verbose = false, $gwname = null, $bootup = false)
|
||||
continue;
|
||||
}
|
||||
|
||||
if (empty($gateway['gateway'])) {
|
||||
log_msg("Gateway currently empty for {$gateway['monitor']} on {$gateway['interface']}");
|
||||
}
|
||||
|
||||
$gwifip = null;
|
||||
|
||||
/*
|
||||
@ -346,21 +331,16 @@ function dpinger_run()
|
||||
|
||||
function dpinger_status()
|
||||
{
|
||||
$instances = dpinger_instances();
|
||||
$status = [];
|
||||
|
||||
foreach (config_read_array('gateways', 'gateway_item') as $gwitem) {
|
||||
if (isset($gwitem['disabled'])) {
|
||||
continue;
|
||||
}
|
||||
|
||||
foreach (dpinger_instances(true) as $gwitem) {
|
||||
/* we seem to be concerned about disabled monitors just because of force_down */
|
||||
$gwstatus = isset($gwitem['monitor_disable']) ? 'none' : 'down';
|
||||
|
||||
$status[$gwitem['name']] = [
|
||||
/* grab the runtime monitor from the instance if available */
|
||||
'monitor' => $instances[$gwitem['name']]['monitor'] ?? ($gwitem['monitor'] ?? '~'),
|
||||
'status' => isset($gwitem['force_down']) ? 'force_down' : $gwstatus,
|
||||
'monitor' => $gwitem['monitor'] ?? '~',
|
||||
'name' => $gwitem['name'],
|
||||
'stddev' => '~',
|
||||
'delay' => '~',
|
||||
@ -398,12 +378,10 @@ function dpinger_status()
|
||||
$settings = dpinger_defaults();
|
||||
|
||||
if ($r['status'] != 'force_down') {
|
||||
$keys = ['latencylow', 'latencyhigh', 'losslow', 'losshigh'];
|
||||
|
||||
/* Replace default values by user-defined */
|
||||
foreach ($keys as $key) {
|
||||
if (isset($instances[$gwname][$key]) && is_numeric($instances[$gwname][$key])) {
|
||||
$settings[$key] = $instances[$gwname][$key];
|
||||
foreach (['latencylow', 'latencyhigh', 'losslow', 'losshigh'] as $key) {
|
||||
if (isset($gwitem[$key]) && is_numeric($gwitem[$key])) {
|
||||
$settings[$key] = $gwitem[$key];
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -660,7 +660,7 @@ function system_routing_configure($verbose = false, $interface = null, $monitor
|
||||
$down_gateways = isset($config['system']['gw_switch_default']) ? return_down_gateways() : [];
|
||||
$routes = json_decode(configd_run('interface routes list -n json'), true) ?? [];
|
||||
|
||||
foreach ($gateways->gatewaysIndexedByName(true) as $gateway) {
|
||||
foreach ($gateways->gatewaysIndexedByName() as $gateway) {
|
||||
/* check if we need to add a required interface route to the gateway (IPv4 only) */
|
||||
if ($gateway['ipprotocol'] !== 'inet' || ($family !== null && $family !== 'inet')) {
|
||||
continue;
|
||||
@ -766,7 +766,7 @@ function system_routing_configure($verbose = false, $interface = null, $monitor
|
||||
if (!empty($interface)) {
|
||||
$reloads = [];
|
||||
|
||||
foreach ($gateways->gatewaysIndexedByName(true) as $name => $gateway) {
|
||||
foreach ($gateways->gatewaysIndexedByName() as $name => $gateway) {
|
||||
if ($family !== null && $family !== $gateway['ipprotocol']) {
|
||||
continue;
|
||||
}
|
||||
|
||||
@ -355,7 +355,6 @@ class Gateways
|
||||
foreach ($dynamic_gw as $intfgws) {
|
||||
foreach ($intfgws as $gw_arr) {
|
||||
if (!empty($gw_arr)) {
|
||||
$gw_arr['disabled'] = true;
|
||||
$gw_arr['defunct'] = true;
|
||||
unset($gw_arr['gateway']);
|
||||
$this->cached_gateways[] = $gw_arr;
|
||||
@ -379,7 +378,7 @@ class Gateways
|
||||
if ($gateway['ipprotocol'] == $ipproto) {
|
||||
if (is_array($skip) && in_array($gateway['name'], $skip)) {
|
||||
continue;
|
||||
} elseif (!empty($gateway['disabled']) || !empty($gateway['is_loopback']) || !empty($gateway['force_down'])) {
|
||||
} elseif (!empty($gateway['disabled']) || !empty($gateway['defunct']) || !empty($gateway['is_loopback']) || !empty($gateway['force_down'])) {
|
||||
continue;
|
||||
} else {
|
||||
return $gateway;
|
||||
@ -472,7 +471,7 @@ class Gateways
|
||||
public function getInterfaceGateway($interface, $ipproto = "inet", $only_configured = false, $property = 'gateway')
|
||||
{
|
||||
foreach ($this->getGateways() as $gateway) {
|
||||
if (!empty($gateway['disabled']) || $gateway['ipprotocol'] != $ipproto) {
|
||||
if (!empty($gateway['disabled']) || !empty($gateway['defunct']) || $gateway['ipprotocol'] != $ipproto) {
|
||||
continue;
|
||||
} elseif (!empty($gateway['is_loopback']) || empty($gateway['gateway'])) {
|
||||
continue;
|
||||
|
||||
@ -34,7 +34,7 @@ require_once 'interfaces.inc';
|
||||
$result = [];
|
||||
$gateways_status = return_gateways_status();
|
||||
|
||||
foreach ((new \OPNsense\Routing\Gateways())->gatewaysIndexedByName(true) as $gname => $gw) {
|
||||
foreach ((new \OPNsense\Routing\Gateways())->gatewaysIndexedByName() as $gname => $gw) {
|
||||
$gatewayItem = ['name' => $gname];
|
||||
$gatewayItem['address'] = !empty($gw['gateway']) ? $gw['gateway'] : '~';
|
||||
if (!empty($gateways_status[$gname])) {
|
||||
@ -65,9 +65,6 @@ foreach ((new \OPNsense\Routing\Gateways())->gatewaysIndexedByName(true) as $gna
|
||||
$gatewayItem['status_translated'] = gettext('Pending');
|
||||
break;
|
||||
}
|
||||
} elseif (isset($gw['disabled'])) {
|
||||
/* avoid disappearing an actively monitored instance when down */
|
||||
continue;
|
||||
} else {
|
||||
$gatewayItem['status'] = 'none';
|
||||
$gatewayItem['status_translated'] = gettext('Online');
|
||||
@ -75,6 +72,8 @@ foreach ((new \OPNsense\Routing\Gateways())->gatewaysIndexedByName(true) as $gna
|
||||
$gatewayItem['stddev'] = '~';
|
||||
$gatewayItem['delay'] = '~';
|
||||
}
|
||||
|
||||
$result[] = $gatewayItem;
|
||||
}
|
||||
|
||||
echo json_encode($result) . PHP_EOL;
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user