. * * @link https://www.librenms.org * * @copyright 2018 Tony Murray * @author Tony Murray */ namespace LibreNMS\Snmptrap\Handlers; use App\Models\Device; use LibreNMS\Enum\Severity; use LibreNMS\Interfaces\SnmptrapHandler; use LibreNMS\Snmptrap\Trap; use Log; class BgpBackwardTransition 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) { $state_oid = $trap->findOid('BGP4-MIB::bgpPeerState'); $bgpPeerIp = substr($state_oid, 23); $bgpPeer = $device->bgppeers()->where('bgpPeerIdentifier', $bgpPeerIp)->first(); if (! $bgpPeer) { Log::error('Unknown bgp peer handling bgpBackwardTransition trap: ' . $bgpPeerIp); return; } $bgpPeer->bgpPeerState = $trap->getOidData($state_oid); if ($bgpPeer->isDirty('bgpPeerState')) { $trap->log('SNMP Trap: BGP Down ' . $bgpPeer->bgpPeerIdentifier . ' ' . get_astext($bgpPeer->bgpPeerRemoteAs) . ' is now ' . $bgpPeer->bgpPeerState, severity: Severity::Error, type: 'bgpPeer', reference: $bgpPeerIp); } $bgpPeer->save(); } }