From 25728c5daa594ded80946babac33ee600eba89a2 Mon Sep 17 00:00:00 2001 From: Ad Schellevis Date: Tue, 23 Jul 2019 11:48:17 +0200 Subject: [PATCH] interfaces.lib.inc, fix and extend carp output in legacy_interfaces_details(), so we can use the proper values in status_interfaces.php --- src/etc/inc/interfaces.lib.inc | 22 ++++++++++++++----- .../scripts/OPNsense/Monit/carp_status | 4 +++- 2 files changed, 20 insertions(+), 6 deletions(-) diff --git a/src/etc/inc/interfaces.lib.inc b/src/etc/inc/interfaces.lib.inc index aa11f711b..60f34c1fb 100644 --- a/src/etc/inc/interfaces.lib.inc +++ b/src/etc/inc/interfaces.lib.inc @@ -258,9 +258,12 @@ function legacy_interfaces_details($intf = null) } elseif (strpos($line, "\tinet ") !== false) { // IPv4 information unset($mask); + unset($vhid); for ($i = 0; $i < count($line_parts) - 1; ++$i) { if ($line_parts[$i] == 'netmask') { $mask = substr_count(base_convert(hexdec($line_parts[$i + 1]), 10, 2), '1'); + } elseif ($line_parts[$i] == 'vhid') { + $vhid = $line_parts[$i+1]; } } if (isset($mask)) { @@ -268,6 +271,9 @@ function legacy_interfaces_details($intf = null) if ($line_parts[2] == '-->') { $tmp['endpoint'] = $line_parts[3]; } + if (isset($vhid)) { + $tmp['vhid'] = $vhid; + } $result[$current_interface]["ipv4"][] = $tmp; } } elseif (strpos($line, "\tinet6 ") !== false) { @@ -277,6 +283,8 @@ function legacy_interfaces_details($intf = null) for ($i = 0; $i < count($line_parts) - 1; ++$i) { if ($line_parts[$i] == 'prefixlen') { $tmp['subnetbits'] = intval($line_parts[$i + 1]); + } elseif ($line_parts[$i] == 'vhid') { + $tmp['vhid'] = $line_parts[$i+1]; } if ($line_parts[$i] == '-->') { $tmp['tunnel'] = true; @@ -320,11 +328,15 @@ function legacy_interfaces_details($intf = null) array_shift($line_parts); $result[$current_interface]['groups'] = $line_parts; } elseif (strpos($line, "\tcarp: ") !== false) { - $result[$current_interface]["carp"] = array(); - $result[$current_interface]["carp"]['status'] = $line_parts[1]; - $result[$current_interface]["carp"]['vhid'] = $line_parts[3]; - $result[$current_interface]["carp"]['advbase'] = $line_parts[5]; - $result[$current_interface]["carp"]['advskew'] = $line_parts[7]; + if (empty($result[$current_interface]["carp"])) { + $result[$current_interface]["carp"] = array(); + } + $result[$current_interface]["carp"][] = array( + "status" => $line_parts[1], + "vhid" => $line_parts[3], + "advbase" => $line_parts[5], + "advskew" => $line_parts[7] + ); } } diff --git a/src/opnsense/scripts/OPNsense/Monit/carp_status b/src/opnsense/scripts/OPNsense/Monit/carp_status index f134fd77b..0c2e1bc22 100755 --- a/src/opnsense/scripts/OPNsense/Monit/carp_status +++ b/src/opnsense/scripts/OPNsense/Monit/carp_status @@ -32,7 +32,9 @@ require_once("interfaces.lib.inc"); $statuses = array(); foreach (legacy_interfaces_details() as $intf) { if (!empty($intf['carp'])) { - $statuses[$intf['carp']['status']] = true; + foreach ($intf['carp'] as $carpitem) { + $statuses[$carpitem['status']] = true; + } } }