summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPhil Davis <phil.davis@inf.org>2016-12-07 21:22:17 +0545
committerRenato Botelho <renato@netgate.com>2016-12-07 16:07:24 -0200
commitbb0a0bb2648b08ce5453208753e25fb052b16f12 (patch)
tree610464bad9b890b75411364ccf83a39060914f62
parentc7cecab8518d62f4cc619ffc7bbbba7ba2a0ceb8 (diff)
downloadpfsense-bb0a0bb2648b08ce5453208753e25fb052b16f12.zip
pfsense-bb0a0bb2648b08ce5453208753e25fb052b16f12.tar.gz
Feature #3151 Disable gateway monitoring actions
without disabling gateway monitoring. This allows the user to continue to monitor the gateway with dpinger, so they can see how it is performing, but for the system not to take any real action if the latency/loss exceeds the given limits. A typical use case for this would be on a single-WAN system. There is no failover option, so there is no point taking any real action when the latency/loss is high. Having stuff try to failover (and stop/start stuff...) is just disruptive. In ths case the use could have disabled monitoring completely, but then they get no feedback abut gateway performance. (cherry picked from commit f396d2b715b27312c9bc056b3423db8198f7d52a)
-rw-r--r--src/etc/inc/gwlb.inc37
-rw-r--r--src/usr/local/www/status_gateways.php6
-rw-r--r--src/usr/local/www/system_gateways_edit.php11
-rw-r--r--src/usr/local/www/widgets/widgets/gateways.widget.php6
4 files changed, 51 insertions, 9 deletions
diff --git a/src/etc/inc/gwlb.inc b/src/etc/inc/gwlb.inc
index 07620bf..4967366 100644
--- a/src/etc/inc/gwlb.inc
+++ b/src/etc/inc/gwlb.inc
@@ -147,7 +147,9 @@ function start_dpinger($gateway) {
$params .= "-B {$gateway['gwifip']} "; /* Bind src address */
$params .= "-p {$pidfile} "; /* PID filename */
$params .= "-u {$socket} "; /* Status Socket */
- $params .= "-C \"{$alarm_cmd}\" "; /* Command to run on alarm */
+ if (!$gateway['action_disable']) {
+ $params .= "-C \"{$alarm_cmd}\" "; /* Command to run on alarm */
+ }
$params .= "-d " .
(isset($gateway['data_payload']) && is_numeric($gateway['data_payload'])
@@ -332,7 +334,7 @@ function setup_gateways_monitor() {
return;
}
-function get_dpinger_status($gwname) {
+function get_dpinger_status($gwname, $detailed = false) {
global $g;
$running_processes = running_dpinger_processes();
@@ -402,9 +404,18 @@ function get_dpinger_status($gwname) {
}
}
- if ($r['latency_avg'] > $settings['latencyhigh'] ||
- $r['loss'] > $settings['losshigh']) {
- $r['status'] = "down";
+ if ($r['latency_avg'] > $settings['latencyhigh']) {
+ if ($detailed) {
+ $r['status'] = "highdelay";
+ } else {
+ $r['status'] = "down";
+ }
+ } else if ($r['loss'] > $settings['losshigh']) {
+ if ($detailed) {
+ $r['status'] = "highloss";
+ } else {
+ $r['status'] = "down";
+ }
} else if ($r['latency_avg'] > $settings['latencylow']) {
$r['status'] = "delay";
} else if ($r['loss'] > $settings['losslow']) {
@@ -425,7 +436,11 @@ function return_gateways_status($byname = false) {
$gateways_arr = return_gateways_array();
foreach ($dpinger_gws as $gwname => $gwdata) {
- $dpinger_status = get_dpinger_status($gwname);
+ // If action is disabled for this gateway, then we want a detailed status.
+ // That reports "highdelay" or "highloss" rather than just "down".
+ // Because reporting the gateway down would be misleading (gateway action is disabled)
+ $detailed = $gateways_arr[$gwname]['action_disable'];
+ $dpinger_status = get_dpinger_status($gwname, $detailed);
if ($dpinger_status === false) {
continue;
}
@@ -561,6 +576,10 @@ function return_gateways_array($disabled = false, $localhost = false, $inactive
$gateway['monitor'] = $gateway['gateway'];
}
+ if (isset($gateway['action_disable'])) {
+ $gateway['action_disable'] = true;
+ }
+
$gateway['friendlyiface'] = $gateway['interface'];
/* special treatment for tunnel interfaces */
@@ -842,13 +861,13 @@ function fixup_default_gateway($ipprotocol, $gateways_status, $gateways_arr) {
if (($gwsttng['ipprotocol'] == $ipprotocol) && isset($gwsttng['defaultgw'])) {
$dfltgwfound = true;
$dfltgwname = $gwname;
- if (!isset($gwsttng['monitor_disable']) && $gateways_status[$gwname]['status'] != "none") {
+ if (!isset($gwsttng['monitor_disable']) && !isset($gwsttng['action_disable']) && $gateways_status[$gwname]['status'] != "none") {
$dfltgwdown = true;
}
}
/* Keep a record of the last up gateway */
/* XXX: Blacklist lan for now since it might cause issues to those who have a gateway set for it */
- if (empty($upgw) && ($gwsttng['ipprotocol'] == $ipprotocol) && (isset($gwsttng['monitor_disable']) || $gateways_status[$gwname]['status'] == "none") && $gwsttng[$gwname]['friendlyiface'] != "lan") {
+ if (empty($upgw) && ($gwsttng['ipprotocol'] == $ipprotocol) && (isset($gwsttng['monitor_disable']) || isset($gwsttng['action_disable']) || $gateways_status[$gwname]['status'] == "none") && $gwsttng[$gwname]['friendlyiface'] != "lan") {
$upgw = $gwname;
}
if ($dfltgwdown == true && !empty($upgw)) {
@@ -977,7 +996,7 @@ function return_gateway_groups_array() {
notify_via_smtp($msg);
}
}
- } else if (isset($gateways_arr[$gwname]['monitor_disable'])) {
+ } else if (isset($gateways_arr[$gwname]['monitor_disable']) || isset($gateways_arr[$gwname]['action_disable'])) {
$tiers[$tier][] = $gwname;
}
}
diff --git a/src/usr/local/www/status_gateways.php b/src/usr/local/www/status_gateways.php
index cfe358d..f4f3680 100644
--- a/src/usr/local/www/status_gateways.php
+++ b/src/usr/local/www/status_gateways.php
@@ -159,9 +159,15 @@ display_top_tabs($tab_array);
} elseif (stristr($status['status'], "down")) {
$online = gettext("Offline");
$bgcolor = "bg-danger";
+ } elseif (stristr($status['status'], "highloss")) {
+ $online = gettext("Danger, Packetloss") . ': ' . $status['loss'];
+ $bgcolor = "bg-danger";
} elseif (stristr($status['status'], "loss")) {
$online = gettext("Warning, Packetloss") . ': ' . $status['loss'];
$bgcolor = "bg-warning";
+ } elseif (stristr($status['status'], "highdelay")) {
+ $online = gettext("Danger, Latency") . ': ' . $status['delay'];
+ $bgcolor = "bg-danger";
} elseif (stristr($status['status'], "delay")) {
$online = gettext("Warning, Latency") . ': ' . $status['delay'];
$bgcolor = "bg-warning";
diff --git a/src/usr/local/www/system_gateways_edit.php b/src/usr/local/www/system_gateways_edit.php
index 784e9a8..55ec423 100644
--- a/src/usr/local/www/system_gateways_edit.php
+++ b/src/usr/local/www/system_gateways_edit.php
@@ -115,6 +115,7 @@ if (isset($id) && $a_gateways[$id]) {
$pconfig['losshigh'] = $a_gateways[$id]['losshigh'];
$pconfig['monitor'] = $a_gateways[$id]['monitor'];
$pconfig['monitor_disable'] = isset($a_gateways[$id]['monitor_disable']);
+ $pconfig['action_disable'] = isset($a_gateways[$id]['action_disable']);
$pconfig['data_payload'] = $a_gateways[$id]['data_payload'];
$pconfig['nonlocalgateway'] = isset($a_gateways[$id]['nonlocalgateway']);
$pconfig['descr'] = $a_gateways[$id]['descr'];
@@ -460,6 +461,9 @@ if ($_POST) {
if ($_POST['monitor_disable'] == "yes") {
$gateway['monitor_disable'] = true;
}
+ if ($_POST['action_disable'] == "yes") {
+ $gateway['action_disable'] = true;
+ }
if ($_POST['nonlocalgateway'] == "yes") {
$gateway['nonlocalgateway'] = true;
}
@@ -676,6 +680,13 @@ $section->addInput(new Form_Checkbox(
$pconfig['monitor_disable']
))->toggles('.toggle-monitor-ip')->setHelp('This will consider this gateway as always being up.');
+$section->addInput(new Form_Checkbox(
+ 'action_disable',
+ 'Gateway Action',
+ 'Disable Gateway Monitoring Action',
+ $pconfig['action_disable']
+))->setHelp('No action will be taken on gateway events. The gateway is always considered up.');
+
$group = new Form_Group('Monitor IP');
$group->addClass('toggle-monitor-ip', 'collapse');
diff --git a/src/usr/local/www/widgets/widgets/gateways.widget.php b/src/usr/local/www/widgets/widgets/gateways.widget.php
index 7833ba1..f015efd 100644
--- a/src/usr/local/www/widgets/widgets/gateways.widget.php
+++ b/src/usr/local/www/widgets/widgets/gateways.widget.php
@@ -252,9 +252,15 @@ function compose_table_body_contents() {
} elseif (stristr($gateways_status[$gname]['status'], "down")) {
$online = gettext("Offline");
$bgcolor = "danger"; // lightcoral
+ } elseif (stristr($gateways_status[$gname]['status'], "highloss")) {
+ $online = gettext("Packetloss");
+ $bgcolor = "danger"; // lightcoral
} elseif (stristr($gateways_status[$gname]['status'], "loss")) {
$online = gettext("Packetloss");
$bgcolor = "warning"; // khaki
+ } elseif (stristr($gateways_status[$gname]['status'], "highdelay")) {
+ $online = gettext("Latency");
+ $bgcolor = "danger"; // lightcoral
} elseif (stristr($gateways_status[$gname]['status'], "delay")) {
$online = gettext("Latency");
$bgcolor = "warning"; // khaki
OpenPOWER on IntegriCloud