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 {