mirror of
https://github.com/librenms/librenms.git
synced 2024-10-07 16:52:45 +00:00
173 lines
5.5 KiB
PHP
173 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;
|
|
}
|
|
}
|