From 62c7719186677f75a0135b8c2f4f6b53f0ad0b9f Mon Sep 17 00:00:00 2001 From: Andrey Pazychev Date: Fri, 22 May 2020 14:53:04 +0300 Subject: [PATCH] Dlink RC. A hard different SNMP behavoiur for Dlink models. Sometimes return HASH, sometimes SCALAR and after that we got 'NOSUCHOBJET' or undef or normal value. Refactored. need to mass test for all Dlink. --- lib/SNMP/Info/Layer3/DLink.pm | 69 +++++++++++++++++++---------------- 1 file changed, 38 insertions(+), 31 deletions(-) diff --git a/lib/SNMP/Info/Layer3/DLink.pm b/lib/SNMP/Info/Layer3/DLink.pm index d30533e8..7105193f 100644 --- a/lib/SNMP/Info/Layer3/DLink.pm +++ b/lib/SNMP/Info/Layer3/DLink.pm @@ -32,7 +32,6 @@ use strict; use warnings; use Exporter; use SNMP::Info::Layer3; -use Data::Dumper; @SNMP::Info::Layer3::DLink::ISA = qw/SNMP::Info::Layer3 Exporter/; @SNMP::Info::Layer3::DLink::EXPORT_OK = qw//; @@ -75,10 +74,22 @@ $VERSION = '3.70-135'; %MUNGE = ( %SNMP::Info::Layer3::MUNGE, ); +sub norm($) { + my $var = shift; + return norm_hash($var) if ref $var eq 'HASH'; + return $var if defined $var and $var !~ /^\s*$/ and $var !~ 'NOSUCHOBJECT'; +} + +sub norm_hash { + my $hash = shift; + return $hash->{0} if $hash->{0} !~ /^\s*$/ and $hash->{0} !~ 'NOSUCHOBJECT'; + print "norm_hash return undef\n"; +} + sub model { my $dlink=shift; - my $hw = $dlink->hwver() || undef; - return $dlink->description() . ' HW:' . $hw if defined($hw); + my $hw = norm($dlink->hwver()) || undef; + return $dlink->description() . ' HW:' . $hw if norm($hw); return $dlink->description(); } @@ -108,45 +119,45 @@ sub os_ver { my $id = $obj->id(); #Due to the zoo of MIB from DLink by 1210 series - $os_ver = $obj->session()->get($id.'.1.3.0') if $model =~ /1210/; + $os_ver = norm($obj->session()->get($id.'.1.3.0')) if $model =~ /1210/; while (not defined $os_ver) { - $os_ver = $obj->dlink_fw(); - last if defined $os_ver; + $os_ver = norm($obj->dlink_fw()); + last if norm($os_ver); - $os_ver = $obj->session()->get('enterprises.171.10.94.89.89.2.4.0'); + $os_ver = norm($$obj->session()->get('enterprises.171.10.94.89.89.2.4.0')); last; } my $brom = $obj->brom(); - $os_ver .= ' bootrom:' . $brom if defined $brom; + $os_ver .= ' bootrom:' . $brom if norm($brom) and norm($os_ver); - return $os_ver if defined $os_ver; + return $os_ver if norm($os_ver); } sub serial { - my $dlink = shift; - my $model = $dlink->model(); - my $id = $dlink->id(); + my $obj = shift; + my $model = $obj->model(); + my $id = $obj->id(); my $serial; if ($model =~ /1210/) { #Due to the zoo of MIB from DLink by 1210 series - $serial->{0} = $dlink->session()->get($id.'.1.30.0'); + $serial = norm($obj->session()->get($id.'.1.30.0')); } else { - $serial = $dlink->dlink_serial_no(); + $serial = norm($obj->dlink_serial_no()); } - return $serial->{0} if ( defined $serial->{0} and $serial->{0} !~ /^\s*$/ and $serial->{0} !~ 'NOSUCHOBJECT' ); - return $dlink->SUPER::serial(); + return $serial if norm($serial); + return $obj->SUPER::serial(); } sub brom { my $obj = shift; my $brom = undef; - $brom = $obj->session()->get('enterprises.171.10.94.89.89.2.10.0'); + $brom = norm($obj->session()->get('enterprises.171.10.94.89.89.2.10.0')); - return $brom if defined $brom; + return $brom if norm($brom); } sub hwver { @@ -156,25 +167,21 @@ sub hwver { my $hw = undef; #Due to the zoo of MIB from DLink by 1210 series - $hw = $obj->session()->get($id.'.1.2.0') if $model =~ /1210/; - $hw = undef if defined $hw and $hw eq 'NOSUCHOBJECT'; + $hw = norm($obj->session()->get($id.'.1.2.0')) if $model =~ /1210/; + $hw = undef if norm($hw); - while(not defined $hw){ - $hw = $obj->dlink_hw() || undef; - $hw = undef if defined $hw and $hw eq 'NOSUCHOBJECT'; - last if defined $hw; + while(! defined $hw){ + $hw = norm($obj->dlink_hw()); + last if norm($hw); - $hw = $obj->session()->get('rmon.19.3.0') || undef; - $hw = undef if defined $hw and $hw eq 'NOSUCHOBJECT'; - last if defined $hw; - - $hw = $obj->session()->get('enterprises.171.10.94.89.89.2.10.0') || undef; - $hw = undef if defined $hw and $hw eq 'NOSUCHOBJECT'; + $hw = norm($obj->session()->get('rmon.19.3.0')); + last if norm($hw); + $hw = norm($obj->session()->get('enterprises.171.10.94.89.89.2.10.0')); last; } - return $hw if defined $hw; + return $hw if norm($hw); } sub stp_i_root_port {