. * * @link https://www.librenms.org * * @copyright 2020 KanREN Inc * @author Heath Barnhart */ namespace LibreNMS\Snmptrap\Handlers; use App\Models\Device; use LibreNMS\Interfaces\SnmptrapHandler; use LibreNMS\Snmptrap\Trap; use Log; class OspfIfStateChange 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) { $ospfIfIpAddress = $trap->getOidData($trap->findOid('OSPF-MIB::ospfIfIpAddress')); $ospfPort = $device->ospfPorts()->where('ospfIfIpAddress', $ospfIfIpAddress)->first(); $port = $device->ports()->where('port_id', $ospfPort->port_id)->first(); if (! $port) { Log::warning("Snmptrap ospfIfStateChange: Could not find port at port_id $ospfPort->port_id for device: " . $device->hostname); return; } $ospfPort->ospfIfState = $trap->getOidData($trap->findOid('OSPF-MIB::ospfIfState')); switch ($ospfPort->ospfIfState) { case 'down': $severity = 5; break; case 'designatedRouter': $severity = 1; break; case 'backupDesignatedRouter': $severity = 1; break; case 'otherDesignatedRouter': $severity = 1; break; case 'pointToPoint': $severity = 1; break; case 'waiting': $severity = 4; break; case 'loopback': $severity = 4; break; default: $severity = 0; break; } Log::event("OSPF interface $port->ifName is $ospfPort->ospfIfState", $device->device_id, 'trap', $severity); $ospfPort->save(); } }