From aa4f6ff989bc3d391344a6f89773c6fecd656db8 Mon Sep 17 00:00:00 2001 From: Josh Baird Date: Sun, 31 May 2020 17:19:07 -0400 Subject: [PATCH] Add OS support for Aviat WTM (#11654) * Add support for Aviat WTM * Remove sleeps * Rename MIBs * Remove old MIBs * Fix mystery tabs * 4 spaces, not 2 * Bybebye, whitespace * Moar whitespace * Update AviatWtm.php * Update aviat-wtm.yaml * Delete aviat-wtm.inc.php * Update aviat-wtm.snmprec * Update aviat-wtm.json * Update AviatWtm.php * Update aviat-wtm.json * Update AviatWtm.php * Update aviat-wtm.json * Update AviatWtm.php Co-authored-by: Tony Murray --- LibreNMS/OS/AviatWtm.php | 215 +++ html/images/os/aviat.png | Bin 0 -> 3601 bytes includes/definitions/aviat-wtm.yaml | 11 + includes/definitions/discovery/aviat-wtm.yaml | 26 + mibs/aviat-wtm/AVIAT-ALARM-REPORTING-MIB | 634 ++++++++ mibs/aviat-wtm/AVIAT-G826-MIB | 838 ++++++++++ mibs/aviat-wtm/AVIAT-MODEM-MIB | 621 ++++++++ mibs/aviat-wtm/AVIAT-RF-MIB | 621 ++++++++ mibs/aviat-wtm/AVIAT-RXPERFORMANCE-EX-MIB | 435 ++++++ mibs/aviat-wtm/AVIAT-RXPERFORMANCE-MIB | 691 +++++++++ mibs/aviat-wtm/AVIAT-SWMANAGEMENT-MIB | 328 ++++ mibs/aviat-wtm/AVIAT-TEXTCONVENTION-MIB | 208 +++ mibs/aviat-wtm/STXN-GLOBALREGISTER-MIB | 315 ++++ tests/data/aviat-wtm.json | 1355 +++++++++++++++++ tests/snmpsim/aviat-wtm.snmprec | 155 ++ 15 files changed, 6453 insertions(+) create mode 100644 LibreNMS/OS/AviatWtm.php create mode 100644 html/images/os/aviat.png create mode 100644 includes/definitions/aviat-wtm.yaml create mode 100644 includes/definitions/discovery/aviat-wtm.yaml create mode 100644 mibs/aviat-wtm/AVIAT-ALARM-REPORTING-MIB create mode 100644 mibs/aviat-wtm/AVIAT-G826-MIB create mode 100644 mibs/aviat-wtm/AVIAT-MODEM-MIB create mode 100644 mibs/aviat-wtm/AVIAT-RF-MIB create mode 100644 mibs/aviat-wtm/AVIAT-RXPERFORMANCE-EX-MIB create mode 100644 mibs/aviat-wtm/AVIAT-RXPERFORMANCE-MIB create mode 100644 mibs/aviat-wtm/AVIAT-SWMANAGEMENT-MIB create mode 100644 mibs/aviat-wtm/AVIAT-TEXTCONVENTION-MIB create mode 100644 mibs/aviat-wtm/STXN-GLOBALREGISTER-MIB create mode 100644 tests/data/aviat-wtm.json create mode 100644 tests/snmpsim/aviat-wtm.snmprec diff --git a/LibreNMS/OS/AviatWtm.php b/LibreNMS/OS/AviatWtm.php new file mode 100644 index 0000000000..203b6b6e4a --- /dev/null +++ b/LibreNMS/OS/AviatWtm.php @@ -0,0 +1,215 @@ +. + * + * @package LibreNMS + * @link http://librenms.org + * @copyright 2020 Josh Baird + * @author Josh Baird + */ + +namespace LibreNMS\OS; + +use LibreNMS\Device\WirelessSensor; +use LibreNMS\Interfaces\Discovery\OSDiscovery; +use LibreNMS\Interfaces\Discovery\Sensors\WirelessFrequencyDiscovery; +use LibreNMS\Interfaces\Discovery\Sensors\WirelessRateDiscovery; +use LibreNMS\Interfaces\Discovery\Sensors\WirelessSnrDiscovery; +use LibreNMS\Interfaces\Discovery\Sensors\WirelessPowerDiscovery; +use LibreNMS\Interfaces\Discovery\Sensors\WirelessRssiDiscovery; +use LibreNMS\OS; + +class AviatWtm extends OS implements + OSDiscovery, + WirelessFrequencyDiscovery, + WirelessRateDiscovery, + WirelessRssiDiscovery, + WirelessSnrDiscovery, + WirelessPowerDiscovery +{ + public function discoverOS(): void + { + $device = $this->getDeviceModel(); + + $oids = ['entPhysicalModelName.2', 'entPhysicalSerialNum.2', 'entPhysicalSoftwareRev.2']; + $data = snmp_get_multi($this->getDevice(), $oids, '-OQUs', 'ENTITY-MIB'); + + $device->hardware = $data[2]['entPhysicalModelName'] ?? null; + $device->serial = $data[2]['entPhysicalSerialNum'] ?? null; + $device->version = $data[2]['entPhysicalSoftwareRev'] ?? null; + } + + /** + * Discover wireless tx or rx power. This is in dBm. Type is power. + * Returns an array of LibreNMS\Device\Sensor objects that have been discovered + * + * @return array + */ + + public function discoverWirelessFrequency() + { + $sensors = []; + $name = $this->getCacheByIndex('entPhysicalName', 'ENTITY-MIB'); + $frequency = snmpwalk_cache_oid($this->getDevice(), 'aviatRfFreqTx', [], 'AVIAT-RF-MIB:'); + foreach ($frequency as $index => $data) { + $sensors[] = new WirelessSensor( + 'frequency', + $this->getDeviceId(), + ".1.3.6.1.4.1.2509.9.5.2.1.1.1.$index", + 'aviat-wtm-carrier-tx-freq', + $index, + "TX Frequency ({$name[$index]})", + $data['aviatRfFreqTx'], + 1, + 1000 + ); + } + + return $sensors; + } + + /** + * Discover wireless tx or rx capacity. This is in bps. Type is rate. + * Returns an array of LibreNMS\Device\Sensor objects that have been discovered + * + * @return array + */ + + public function discoverWirelessRate() + { + $sensors = []; + $name = $this->getCacheByIndex('entPhysicalName', 'ENTITY-MIB'); + + $tx = snmpwalk_cache_oid($this->getDevice(), 'aviatModemCurCapacityTx', [], 'AVIAT-MODEM-MIB'); + foreach ($tx as $index => $data) { + $sensors[] = new WirelessSensor( + 'rate', + $this->getDeviceId(), + ".1.3.6.1.4.1.2509.9.3.2.1.1.11.$index", + 'aviat-wtm-carrier-tx-rate', + $index, + "TX Capacity ({$name[$index]})", + $data['aviatModemCurCapacityTx'], + 1000 + ); + } + + $rx = snmpwalk_cache_oid($this->getDevice(), 'aviatModemCurCapacityRx', [], 'AVIAT-MODEM-MIB'); + foreach ($rx as $index => $data) { + $sensors[] = new WirelessSensor( + 'rate', + $this->getDeviceId(), + ".1.3.6.1.4.1.2509.9.3.2.1.1.12.$index", + 'aviat-wtm-carrier-rx-rate', + $index, + "TX Capacity ({$name[$index]})", + $data['aviatModemCurCapacityRx'], + 1000 + ); + } + + return $sensors; + } + + /** + * Discover wireless tx or rx RSL. This is in dbm. Type is rssi. + * Returns an array of LibreNMS\Device\Sensor objects that have been discovered + * + * @return array + */ + public function discoverWirelessRssi() + { + $sensors = []; + $name = $this->getCacheByIndex('entPhysicalName', 'ENTITY-MIB'); + $rsl = snmpwalk_cache_oid($this->getDevice(), 'aviatRxPerformRslReadingCurrent', [], 'AVIAT-RXPERFORMANCE-MIB'); + + foreach ($rsl as $index => $data) { + $sensors[] = new WirelessSensor( + 'rssi', + $this->getDeviceId(), + ".1.3.6.1.4.1.2509.9.15.2.2.1.4.$index", + 'aviat-wtm-carrier-rsl', + $index, + "RSL ({$name[$index]})", + $data['aviatRxPerformRslReadingCurrent'], + 1, + 10 + ); + } + + return $sensors; + } + + /** + * Discover wireless SNR (CINR). This is in dbm. Type is snr. + * Returns an array of LibreNMS\Device\Sensor objects that have been discovered + * + * @return array + */ + public function discoverWirelessSnr() + { + $sensors = []; + $name = $this->getCacheByIndex('entPhysicalName', 'ENTITY-MIB'); + $snr = snmpwalk_cache_oid($this->getDevice(), 'aviatRxPerformCinrReadingCurrent', [], 'AVIAT-RXPERFORMANCE-EX-MIB'); + + foreach ($snr as $index => $data) { + $sensors[] = new WirelessSensor( + 'snr', + $this->getDeviceId(), + ".1.3.6.1.4.1.2509.9.33.2.2.1.3.$index", + 'aviat-wtm-carrier-snr', + $index, + "SNR ({$name[$index]})", + $data['aviatRxPerformCinrReadingCurrent'], + 1, + 10 + ); + } + + return $sensors; + } + + /** + * Discover wireless TX power. This is in dbm. Type is power. + * Returns an array of LibreNMS\Device\Sensor objects that have been discovered + * + * @return array + */ + public function discoverWirelessPower() + { + $sensors = []; + $name = $this->getCacheByIndex('entPhysicalName', 'ENTITY-MIB'); + $power = snmpwalk_cache_oid($this->getDevice(), 'aviatRxPerformTxpowReadingCurrent', [], 'AVIAT-RXPERFORMANCE-EX-MIB'); + + foreach ($power as $index => $data) { + $sensors[] = new WirelessSensor( + 'power', + $this->getDeviceId(), + ".1.3.6.1.4.1.2509.9.33.2.2.1.7.$index", + 'aviat-wtm-carrier-txpower', + $index, + "TX Power ({$name[$index]})", + $data['aviatRxPerformTxpowReadingCurrent'], + 1, + 10 + ); + } + + return $sensors; + } +} diff --git a/html/images/os/aviat.png b/html/images/os/aviat.png new file mode 100644 index 0000000000000000000000000000000000000000..4475e58e095dd4cea2518c236e2f51c41b4da28a GIT binary patch literal 3601 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