mirror of
https://github.com/librenms/librenms.git
synced 2024-10-07 16:52:45 +00:00
Added additional generic SNMP trap handlers (#10177)
* Add more generic SNMP trap handlers * Sort snmptraps config alphabetically
This commit is contained in:
45
LibreNMS/Snmptrap/Handlers/BridgeNewRoot.php
Normal file
45
LibreNMS/Snmptrap/Handlers/BridgeNewRoot.php
Normal file
@@ -0,0 +1,45 @@
|
||||
<?php
|
||||
/**
|
||||
* BridgeNewRoot.php
|
||||
*
|
||||
* -Description-
|
||||
*
|
||||
* 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
|
||||
*/
|
||||
|
||||
namespace LibreNMS\Snmptrap\Handlers;
|
||||
|
||||
use App\Models\Device;
|
||||
use LibreNMS\Interfaces\SnmptrapHandler;
|
||||
use LibreNMS\Snmptrap\Trap;
|
||||
use Log;
|
||||
|
||||
class BridgeNewRoot implements SnmptrapHandler
|
||||
{
|
||||
/**
|
||||
* Handle snmptrap.
|
||||
* Data is pre-parsed and delivered as a Trap.
|
||||
*
|
||||
* @param Device $device
|
||||
* @param Trap $trap
|
||||
* @return void
|
||||
*/
|
||||
public function handle(Device $device, Trap $trap)
|
||||
{
|
||||
Log::event('SNMP Trap: Device ' . $device->displayName() . ' was elected as new root on one of its Spanning Tree Instances', $device->device_id, 'trap', 3);
|
||||
}
|
||||
}
|
||||
45
LibreNMS/Snmptrap/Handlers/BridgeTopologyChanged.php
Normal file
45
LibreNMS/Snmptrap/Handlers/BridgeTopologyChanged.php
Normal file
@@ -0,0 +1,45 @@
|
||||
<?php
|
||||
/**
|
||||
* BridgeTopologyChanged.php
|
||||
*
|
||||
* -Description-
|
||||
*
|
||||
* 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
|
||||
*/
|
||||
|
||||
namespace LibreNMS\Snmptrap\Handlers;
|
||||
|
||||
use App\Models\Device;
|
||||
use LibreNMS\Interfaces\SnmptrapHandler;
|
||||
use LibreNMS\Snmptrap\Trap;
|
||||
use Log;
|
||||
|
||||
class BridgeTopologyChanged implements SnmptrapHandler
|
||||
{
|
||||
/**
|
||||
* Handle snmptrap.
|
||||
* Data is pre-parsed and delivered as a Trap.
|
||||
*
|
||||
* @param Device $device
|
||||
* @param Trap $trap
|
||||
* @return void
|
||||
*/
|
||||
public function handle(Device $device, Trap $trap)
|
||||
{
|
||||
Log::event('SNMP Trap: Topology of Spanning Tree instance on device ' . $device->displayName() . ' was changed', $device->device_id, 'trap', 3);
|
||||
}
|
||||
}
|
||||
45
LibreNMS/Snmptrap/Handlers/ColdBoot.php
Normal file
45
LibreNMS/Snmptrap/Handlers/ColdBoot.php
Normal file
@@ -0,0 +1,45 @@
|
||||
<?php
|
||||
/**
|
||||
* ColdBoot.php
|
||||
*
|
||||
* -Description-
|
||||
*
|
||||
* 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
|
||||
*/
|
||||
|
||||
namespace LibreNMS\Snmptrap\Handlers;
|
||||
|
||||
use App\Models\Device;
|
||||
use LibreNMS\Interfaces\SnmptrapHandler;
|
||||
use LibreNMS\Snmptrap\Trap;
|
||||
use Log;
|
||||
|
||||
class ColdBoot implements SnmptrapHandler
|
||||
{
|
||||
/**
|
||||
* Handle snmptrap.
|
||||
* Data is pre-parsed and delivered as a Trap.
|
||||
*
|
||||
* @param Device $device
|
||||
* @param Trap $trap
|
||||
* @return void
|
||||
*/
|
||||
public function handle(Device $device, Trap $trap)
|
||||
{
|
||||
Log::event('SNMP Trap: Device ' . $device->displayName() . ' cold booted', $device->device_id, 'reboot', 4);
|
||||
}
|
||||
}
|
||||
45
LibreNMS/Snmptrap/Handlers/EntityDatabaseConfigChanged.php
Normal file
45
LibreNMS/Snmptrap/Handlers/EntityDatabaseConfigChanged.php
Normal file
@@ -0,0 +1,45 @@
|
||||
<?php
|
||||
/**
|
||||
* EntityDatabaseConfigChanged.php
|
||||
*
|
||||
* -Description-
|
||||
*
|
||||
* 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
|
||||
*/
|
||||
|
||||
namespace LibreNMS\Snmptrap\Handlers;
|
||||
|
||||
use App\Models\Device;
|
||||
use LibreNMS\Interfaces\SnmptrapHandler;
|
||||
use LibreNMS\Snmptrap\Trap;
|
||||
use Log;
|
||||
|
||||
class EntityDatabaseConfigChanged implements SnmptrapHandler
|
||||
{
|
||||
/**
|
||||
* Handle snmptrap.
|
||||
* Data is pre-parsed and delivered as a Trap.
|
||||
*
|
||||
* @param Device $device
|
||||
* @param Trap $trap
|
||||
* @return void
|
||||
*/
|
||||
public function handle(Device $device, Trap $trap)
|
||||
{
|
||||
Log::event('SNMP Trap: Configuration of Entity Database on device ' . $device->displayName() . ' was changed', $device->device_id, 'system', 3);
|
||||
}
|
||||
}
|
||||
@@ -14,6 +14,8 @@ return [
|
||||
'BGP4-MIB::bgpEstablished' => \LibreNMS\Snmptrap\Handlers\BgpEstablished::class,
|
||||
'BGP4-V2-MIB-JUNIPER::jnxBgpM2BackwardTransition' => \LibreNMS\Snmptrap\Handlers\JnxBgpM2BackwardTransition::class,
|
||||
'BGP4-V2-MIB-JUNIPER::jnxBgpM2Established' => \LibreNMS\Snmptrap\Handlers\JnxBgpM2Established::class,
|
||||
'BRIDGE-MIB::newRoot' => \LibreNMS\Snmptrap\Handlers\BridgeNewRoot::class,
|
||||
'BRIDGE-MIB::topologyChange' => \LibreNMS\Snmptrap\Handlers\BridgeTopologyChanged::class,
|
||||
'CM-ALARM-MIB::cmNetworkElementAlmTrap' => \LibreNMS\Snmptrap\Handlers\AdvaNetworkElementAlmTrap::class,
|
||||
'CM-ALARM-MIB::cmSysAlmTrap' => \LibreNMS\Snmptrap\Handlers\AdvaSysAlmTrap::class,
|
||||
'CM-PERFORMANCE-MIB::cmEthernetAccPortThresholdCrossingAlert' => \LibreNMS\Snmptrap\Handlers\AdvaAccThresholdCrossingAlert::class,
|
||||
@@ -23,7 +25,7 @@ return [
|
||||
'CM-SYSTEM-MIB::cmObjectDeletionTrap' => \LibreNMS\Snmptrap\Handlers\AdvaObjectDeletion::class,
|
||||
'CM-SYSTEM-MIB::cmSnmpDyingGaspTrap' => \LibreNMS\Snmptrap\Handlers\AdvaSnmpDyingGaspTrap::class,
|
||||
'CM-SYSTEM-MIB::cmStateChangeTrap' => \LibreNMS\Snmptrap\Handlers\AdvaStateChangeTrap::class,
|
||||
'ENTITY-MIB::entConfigChange' => \LibreNMS\Snmptrap\Handlers\AdvaConfigChange::class,
|
||||
'ENTITY-MIB::entConfigChange' => \LibreNMS\Snmptrap\Handlers\EntityDatabaseConfigChanged::class,
|
||||
'EQUIPMENT-MIB::equipStatusTrap' => \LibreNMS\Snmptrap\Handlers\EquipStatusTrap::class,
|
||||
'FORTINET-CORE-MIB::fnTrapMemThreshold' => \LibreNMS\Snmptrap\Handlers\FnTrapMemThreshold::class,
|
||||
'FORTINET-FORTIGATE-MIB::fgTrapAvOversize' => \LibreNMS\Snmptrap\Handlers\FgTrapAvOversize::class,
|
||||
@@ -58,5 +60,6 @@ return [
|
||||
'PowerNet-MIB::outletOn' => \LibreNMS\Snmptrap\Handlers\ApcPduOutletOn::class,
|
||||
'PowerNet-MIB::outletReboot' => \LibreNMS\Snmptrap\Handlers\ApcPduOutletReboot::class,
|
||||
'SNMPv2-MIB::authenticationFailure' => \LibreNMS\Snmptrap\Handlers\AuthenticationFailure::class,
|
||||
'SNMPv2-MIB::coldStart' => \LibreNMS\Snmptrap\Handlers\ColdBoot::class,
|
||||
]
|
||||
];
|
||||
|
||||
@@ -111,4 +111,77 @@ SNMPv2-MIB::snmpTrapOID.0 SNMPv2-MIB::authenticationFailure\n";
|
||||
// check that the device was found
|
||||
$this->assertEquals($device->hostname, $trap->getDevice()->hostname);
|
||||
}
|
||||
|
||||
public function testBridgeNewRoot()
|
||||
{
|
||||
$device = factory(Device::class)->create();
|
||||
|
||||
$trapText = "$device->hostname
|
||||
UDP: [$device->ip]:44298->[192.168.5.5]:162
|
||||
DISMAN-EVENT-MIB::sysUpTimeInstance 3:4:17:32.35
|
||||
SNMPv2-MIB::snmpTrapOID.0 BRIDGE-MIB::newRoot";
|
||||
|
||||
Log::shouldReceive('event')->once()->with('SNMP Trap: Device ' . $device->displayName() . ' was elected as new root on one of its Spanning Tree Instances', $device->device_id, 'trap', 3);
|
||||
|
||||
$trap = new Trap($trapText);
|
||||
$this->assertTrue(Dispatcher::handle($trap));
|
||||
|
||||
// check that the device was found
|
||||
$this->assertEquals($device->hostname, $trap->getDevice()->hostname);
|
||||
}
|
||||
|
||||
public function testBridgeTopologyChanged()
|
||||
{
|
||||
$device = factory(Device::class)->create();
|
||||
|
||||
$trapText = "$device->hostname
|
||||
UDP: [$device->ip]:44298->[192.168.5.5]:162
|
||||
DISMAN-EVENT-MIB::sysUpTimeInstance 3:4:17:32.35
|
||||
SNMPv2-MIB::snmpTrapOID.0 BRIDGE-MIB::topologyChange";
|
||||
|
||||
Log::shouldReceive('event')->once()->with('SNMP Trap: Topology of Spanning Tree instance on device ' . $device->displayName() . ' was changed', $device->device_id, 'trap', 3);
|
||||
|
||||
$trap = new Trap($trapText);
|
||||
$this->assertTrue(Dispatcher::handle($trap));
|
||||
|
||||
// check that the device was found
|
||||
$this->assertEquals($device->hostname, $trap->getDevice()->hostname);
|
||||
}
|
||||
|
||||
public function testColdStart()
|
||||
{
|
||||
$device = factory(Device::class)->create();
|
||||
|
||||
$trapText = "$device->hostname
|
||||
UDP: [$device->ip]:44298->[192.168.5.5]:162
|
||||
DISMAN-EVENT-MIB::sysUpTimeInstance 0:0:1:12.7
|
||||
SNMPv2-MIB::snmpTrapOID.0 SNMPv2-MIB::coldStart";
|
||||
|
||||
Log::shouldReceive('event')->once()->with('SNMP Trap: Device ' . $device->displayName() . ' cold booted', $device->device_id, 'reboot', 4);
|
||||
|
||||
$trap = new Trap($trapText);
|
||||
$this->assertTrue(Dispatcher::handle($trap));
|
||||
|
||||
// check that the device was found
|
||||
$this->assertEquals($device->hostname, $trap->getDevice()->hostname);
|
||||
}
|
||||
|
||||
|
||||
public function testEntityDatabaseChanged()
|
||||
{
|
||||
$device = factory(Device::class)->create();
|
||||
|
||||
$trapText = "$device->hostname
|
||||
UDP: [$device->ip]:44298->[192.168.5.5]:162
|
||||
DISMAN-EVENT-MIB::sysUpTimeInstance 3:4:17:32.35
|
||||
SNMPv2-MIB::snmpTrapOID.0 ENTITY-MIB::entConfigChange";
|
||||
|
||||
Log::shouldReceive('event')->once()->with('SNMP Trap: Configuration of Entity Database on device ' . $device->displayName() . ' was changed', $device->device_id, 'system', 3);
|
||||
|
||||
$trap = new Trap($trapText);
|
||||
$this->assertTrue(Dispatcher::handle($trap));
|
||||
|
||||
// check that the device was found
|
||||
$this->assertEquals($device->hostname, $trap->getDevice()->hostname);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user