Files
librenms-librenms/LibreNMS/OS/SmOs.php
T
Tony MurrayandGitHub 941037e44e Convert OS discovery to new style (#12099)
* terra

* airos

* port cisco os polling
old wwan polling was broken and deprecated anyway

* enterasys

* Brother, a few changes

* AW Plus

* Fabos

* set expected test data

* 3com

* Adva FSP150

* advantech

* airos-af

* aix

* akcp

* allied

* allworx and missed mibs

* anyos

* fixup some zyxel shared stuffs
zywall graph polling

* aos

* apc

* apex

* apsoluteos

* fix copyrights

* arris

* arris

* aruba-instant

* ArubaOS

* Ascom

* asuswrt-merlin, ats

* audiocodes

* avocent

* avtech

* barracuda

* binox

* boss

* canonprinter

* cdata

* ceraos

* ciena-waveserver

* fix 3com

* fix airos

* fix brother yaml?

* fix aos more

* fix and improve apc

* fix arista test data

* yaml discovery (basic)

* cimc

* mib not used

* remove old discovery file

* ciscosat

* ciscosb fixes + improvements

* comware

* ctm

* cumulus

* cxr-ts

* cyberoam-utm

* cyberpower

* dahua-nvr

* dasan-nos

* datadomain

* dcn-software and fallback oids

* dd-wrt

* dell-laser

* d*

* e* and location

* forti, post processing, oid coalescing

* Freebsd array of sysDescr regex

* finish f*

* g*

* h*

* i* WIP

* i*

* Junos

* j*

* k*

* unix refactor previous to yaml more
inject $device

* fixes

* fixes

* l*

* m*

* n* ability to set other fields in regex
tnmsne polling to eloquent

* o*

* p*

* q* + bonus calix

* r*

* s* WIP

* s*

* t*

* u*

* v*
rework vrp to yaml (hybrid)

* w*

* x*

* z*

* a* easy no-data

* fixes

* style fixes

* missed ApexPlus

* fix signature

* Add missing location data

* rename getDevice functions

* add new cisco ftd data

* update docs

* revert sill snmp format

* fix snmp options

* update for new smartax test data

* rebase dsm

* fix voss
2020-09-18 15:12:07 +02:00

170 lines
5.5 KiB
PHP

<?php
namespace LibreNMS\OS;
use LibreNMS\Device\WirelessSensor;
use LibreNMS\Interfaces\Discovery\Sensors\WirelessFrequencyDiscovery;
use LibreNMS\Interfaces\Discovery\Sensors\WirelessMseDiscovery;
use LibreNMS\Interfaces\Discovery\Sensors\WirelessRateDiscovery;
use LibreNMS\Interfaces\Discovery\Sensors\WirelessRssiDiscovery;
use LibreNMS\OS;
class SmOs extends OS implements
WirelessRateDiscovery,
WirelessRssiDiscovery,
WirelessFrequencyDiscovery,
WirelessMseDiscovery
{
private $radioLabels;
private $linkLabels;
public function discoverWirelessRate()
{
$oids = snmpwalk_group($this->getDeviceArray(), 'linkTxETHCapacity', 'SIAE-RADIO-SYSTEM-MIB', 2);
$oids = snmpwalk_group($this->getDeviceArray(), 'linkRxETHCapacity', 'SIAE-RADIO-SYSTEM-MIB', 2, $oids);
$sensors = [];
foreach ($oids as $link => $radioEntry) {
$totalOids = ['rx' => [], 'tx' => []];
foreach ($radioEntry as $radio => $entry) {
$index = "$link.$radio";
if (isset($entry['linkTxETHCapacity'])) {
$txOid = '.1.3.6.1.4.1.3373.1103.80.17.1.10.' . $index;
$totalOids['tx'][] = $txOid;
$sensors[] = new WirelessSensor(
'rate',
$this->getDeviceId(),
$txOid,
'tx',
$index,
$this->getLinkLabel($link) . ' Tx ' . $this->getRadioLabel($radio),
$entry['linkTxETHCapacity'],
1000
);
}
if (isset($entry['linkRxETHCapacity'])) {
$rxOid = '.1.3.6.1.4.1.3373.1103.80.17.1.11.' . $index;
$totalOids['rx'][] = $rxOid;
$sensors[] = new WirelessSensor(
'rate',
$this->getDeviceId(),
$rxOid,
'rx',
$index,
$this->getLinkLabel($link) . ' Rx ' . $this->getRadioLabel($radio),
$entry['linkRxETHCapacity'],
1000
);
}
}
if (!empty($totalOids['rx'])) {
$sensors[] = new WirelessSensor(
'rate',
$this->getDeviceId(),
$totalOids['rx'],
'total-rx',
$index,
$this->getLinkLabel($link) . ' Total Rx',
array_sum(array_column($radioEntry, 'linkRxETHCapacity')),
1000
);
}
if (!empty($totalOids['tx'])) {
$sensors[] = new WirelessSensor(
'rate',
$this->getDeviceId(),
$totalOids['tx'],
'total-tx',
$index,
$this->getLinkLabel($link) . ' Total Tx',
array_sum(array_column($radioEntry, 'linkTxETHCapacity')),
1000
);
}
}
return $sensors;
}
public function discoverWirelessRssi()
{
$oids = snmpwalk_cache_oid($this->getDeviceArray(), 'radioPrx', [], 'SIAE-RADIO-SYSTEM-MIB');
$sensors = [];
foreach ($oids as $index => $entry) {
$sensors[] = new WirelessSensor(
'rssi',
$this->getDeviceId(),
'.1.3.6.1.4.1.3373.1103.80.12.1.3.' . $index,
'sm-os',
$index,
$this->getRadioLabel($index),
$entry['radioPrx']
);
}
return $sensors;
}
public function discoverWirelessFrequency()
{
$oids = snmpwalk_cache_oid($this->getDeviceArray(), 'radioTxFrequency', [], 'SIAE-RADIO-SYSTEM-MIB');
$sensors = [];
foreach ($oids as $index => $entry) {
$sensors[] = new WirelessSensor(
'frequency',
$this->getDeviceId(),
'.1.3.6.1.4.1.3373.1103.80.9.1.4.' . $index,
'sm-os',
$index,
'Tx ' . $this->getRadioLabel($index),
$entry['radioTxFrequency'],
1,
1000
);
}
return $sensors;
}
public function discoverWirelessMse()
{
$oids = snmpwalk_cache_oid($this->getDeviceArray(), 'radioNormalizedMse', [], 'SIAE-RADIO-SYSTEM-MIB');
$sensors = [];
foreach ($oids as $index => $entry) {
$sensors[] = new WirelessSensor(
'mse',
$this->getDeviceId(),
'.1.3.6.1.4.1.3373.1103.80.12.1.5.' . $index,
'sm-os',
$index,
$this->getRadioLabel($index),
$entry['radioNormalizedMse']
);
}
return $sensors;
}
public function getRadioLabel($index)
{
if (is_null($this->radioLabels)) {
$this->radioLabels = snmpwalk_group($this->getDeviceArray(), 'radioLabel', 'SIAE-RADIO-SYSTEM-MIB');
}
return $this->radioLabels[$index]['radioLabel'] ?? $index;
}
public function getLinkLabel($index)
{
if (is_null($this->linkLabels)) {
$this->linkLabels = snmpwalk_group($this->getDeviceArray(), 'linkLabel', 'SIAE-RADIO-SYSTEM-MIB');
}
return $this->linkLabels[$index]['linkLabel'] ?? $index;
}
}