Files
librenms-librenms/includes/polling/ports/os/infinera-groove.inc.php
Tony MurrayandGitHub 67b28ec4cd Fix Air Fiber port stats (#11079)
* Fix Air Fiber port stats
Define OS port polling includes in a standard way.
Move Air Fiber code to os port polling include.

* Update snmp data

* fix accidental change

* Some formatting fixes

* should be null
2020-01-30 05:40:58 -06:00

94 lines
3.6 KiB
PHP

<?php
/**
* infinera-groove.inc.php
*
* LibreNMS ports poller module for Infinera Groove
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
* @package LibreNMS
* @link http://librenms.org
* @copyright 2019 Nick Hilliard
* @author Nick Hilliard <[email protected]>
*/
echo 'Port types:';
foreach (array ('eth100g', 'eth40g', 'eth10g', 'fc16g', 'fc8g') as $infineratype) {
echo ' '.$infineratype;
preg_match('/[a-z]+(\d+)g/i', $infineratype, $matches);
$infspeed = $matches[1];
$cg_stats = snmpwalk_cache_multi_oid($device, $infineratype.'Entry', $cg_stats, 'CORIANT-GROOVE-MIB');
$cg_stats = snmpwalk_cache_multi_oid($device, $infineratype.'Statistics', $cg_stats, 'CORIANT-GROOVE-MIB');
$required = array(
'ifAlias' => $infineratype.'AliasName',
'ifAdminStatus' => $infineratype.'AdminStatus',
'ifOperStatus' => $infineratype.'OperStatus',
'ifType' => 'Ethernet',
'ifHCInBroadcastPkts' => $infineratype.'StatisticsEntryInBroadcastPackets',
'ifHCInMulticastPkts' => $infineratype.'StatisticsEntryInMulticastPackets',
'ifHCInOctets' => $infineratype.'StatisticsEntryInOctets',
'ifHCInUcastPkts' => $infineratype.'StatisticsEntryInPackets',
'ifHCOutBroadcastPkts' => $infineratype.'StatisticsEntryOutBroadcastPackets',
'ifHCOutMulticastPkts' => $infineratype.'StatisticsEntryOutMulticastPackets',
'ifHCOutOctets' => $infineratype.'StatisticsEntryOutOctets',
'ifHCOutUcastPkts' => $infineratype.'StatisticsEntryOutPackets',
'ifHighSpeed' => $infspeed * 1000,
);
foreach ($cg_stats as $index => $tmp_stats) {
$indexids = explode('.', $index);
if (!isset($cg_stats[$index][$infineratype.'AdminStatus'])) {
continue;
}
// The CLI port name is not available in SNMP
$descr = ( strpos($infineratype, 'eth') === false ) ? $infineratype : $infspeed.'gbe';
// 100g and 40g ports use shelfId, slotId, portId
// 10g, fc16g and fc8g ports append the subportId with '.'
$descr .= '-'.$indexids[0].'/'.$indexids[1].'/'.$indexids[3];
if ($infspeed < 40) {
$descr .= '.'.$indexids[4];
}
// librenms expects the index to be bigint(20) => we grab 3 decimal
// spaces per indexid to make a numeric ifindex. This is hacky.
$lindex = '';
for ($i = 0; $i <= 4; $i++) {
$lindex .= sprintf('%03d', $indexids[$i]);
}
// convert to integer
$lindex = $lindex + 0;
$port_stats[$lindex]['ifName'] = $descr;
$port_stats[$lindex]['ifDescr'] = $descr;
foreach ($required as $normaloid => $infineraoid) {
// this is a bit hacky
if (preg_match('/^(eth|fc)\d+/i', $required[$normaloid])) {
$port_stats[$lindex][$normaloid] = $cg_stats[$index][$infineraoid];
} else {
$port_stats[$lindex][$normaloid] = $required[$normaloid];
}
}
}
}