From 5255da80ff43903ac5053018629ffd4fafcc77e1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tuomas=20Riihim=C3=A4ki?= Date: Wed, 12 Oct 2022 17:17:33 +0300 Subject: [PATCH] Improve LinkUp and LinkDown trap handling incomplete traps (#14385) * fix LinkUp and LinkDown trap parsing These traps do not always include 'ifAdminStatus' and 'ifOperStatus' from IF-MIB, which causes the fields to become NULL when traps are received. Add checks that values exist, and add default value for ifOperStatus. * Fix styleci complaint * Update LinkDown.php * Update LinkUp.php * Update LinkUp.php Co-authored-by: Tony Murray --- LibreNMS/Snmptrap/Handlers/LinkDown.php | 7 +++++-- LibreNMS/Snmptrap/Handlers/LinkUp.php | 4 ++-- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/LibreNMS/Snmptrap/Handlers/LinkDown.php b/LibreNMS/Snmptrap/Handlers/LinkDown.php index 24c059f9e035..5f1ba110f5a6 100644 --- a/LibreNMS/Snmptrap/Handlers/LinkDown.php +++ b/LibreNMS/Snmptrap/Handlers/LinkDown.php @@ -52,9 +52,12 @@ public function handle(Device $device, Trap $trap) return; } - $port->ifOperStatus = $trap->getOidData("IF-MIB::ifOperStatus.$ifIndex"); - $port->ifAdminStatus = $trap->getOidData("IF-MIB::ifAdminStatus.$ifIndex"); + $port->ifOperStatus = $trap->getOidData("IF-MIB::ifOperStatus.$ifIndex") ?: 'down'; + $trapAdminStatus = $trap->getOidData("IF-MIB::ifAdminStatus.$ifIndex"); + if ($trapAdminStatus) { + $port->ifAdminStatus = $trapAdminStatus; + } Log::event("SNMP Trap: linkDown $port->ifAdminStatus/$port->ifOperStatus " . $port->ifDescr, $device->device_id, 'interface', 5, $port->port_id); if ($port->isDirty('ifAdminStatus')) { diff --git a/LibreNMS/Snmptrap/Handlers/LinkUp.php b/LibreNMS/Snmptrap/Handlers/LinkUp.php index dc5d1eab2645..9cf85c2b98ce 100644 --- a/LibreNMS/Snmptrap/Handlers/LinkUp.php +++ b/LibreNMS/Snmptrap/Handlers/LinkUp.php @@ -52,8 +52,8 @@ public function handle(Device $device, Trap $trap) return; } - $port->ifOperStatus = $trap->getOidData("IF-MIB::ifAdminStatus.$ifIndex"); - $port->ifAdminStatus = $trap->getOidData("IF-MIB::ifOperStatus.$ifIndex"); + $port->ifOperStatus = $trap->getOidData("IF-MIB::ifOperStatus.$ifIndex") ?: 'up'; + $port->ifAdminStatus = $trap->getOidData("IF-MIB::ifAdminStatus.$ifIndex") ?: 'up'; // If we receive LinkUp trap, we can safely assume that the ifAdminStatus is also up. Log::event("SNMP Trap: linkUp $port->ifAdminStatus/$port->ifOperStatus " . $port->ifDescr, $device->device_id, 'interface', 1, $port->port_id);