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.
This commit is contained in:
Andrey Pazychev
2020-05-22 14:53:04 +03:00
parent daee793df6
commit 62c7719186

View File

@@ -32,7 +32,6 @@ use strict;
use warnings; use warnings;
use Exporter; use Exporter;
use SNMP::Info::Layer3; use SNMP::Info::Layer3;
use Data::Dumper;
@SNMP::Info::Layer3::DLink::ISA = qw/SNMP::Info::Layer3 Exporter/; @SNMP::Info::Layer3::DLink::ISA = qw/SNMP::Info::Layer3 Exporter/;
@SNMP::Info::Layer3::DLink::EXPORT_OK = qw//; @SNMP::Info::Layer3::DLink::EXPORT_OK = qw//;
@@ -75,10 +74,22 @@ $VERSION = '3.70-135';
%MUNGE = ( %SNMP::Info::Layer3::MUNGE, ); %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 { sub model {
my $dlink=shift; my $dlink=shift;
my $hw = $dlink->hwver() || undef; my $hw = norm($dlink->hwver()) || undef;
return $dlink->description() . ' HW:' . $hw if defined($hw); return $dlink->description() . ' HW:' . $hw if norm($hw);
return $dlink->description(); return $dlink->description();
} }
@@ -108,45 +119,45 @@ sub os_ver {
my $id = $obj->id(); my $id = $obj->id();
#Due to the zoo of MIB from DLink by 1210 series #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) { while (not defined $os_ver) {
$os_ver = $obj->dlink_fw(); $os_ver = norm($obj->dlink_fw());
last if defined $os_ver; 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; last;
} }
my $brom = $obj->brom(); 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 { sub serial {
my $dlink = shift; my $obj = shift;
my $model = $dlink->model(); my $model = $obj->model();
my $id = $dlink->id(); my $id = $obj->id();
my $serial; my $serial;
if ($model =~ /1210/) { if ($model =~ /1210/) {
#Due to the zoo of MIB from DLink by 1210 series #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 { } 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 $serial if norm($serial);
return $dlink->SUPER::serial(); return $obj->SUPER::serial();
} }
sub brom { sub brom {
my $obj = shift; my $obj = shift;
my $brom = undef; 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 { sub hwver {
@@ -156,25 +167,21 @@ sub hwver {
my $hw = undef; my $hw = undef;
#Due to the zoo of MIB from DLink by 1210 series #Due to the zoo of MIB from DLink by 1210 series
$hw = $obj->session()->get($id.'.1.2.0') if $model =~ /1210/; $hw = norm($obj->session()->get($id.'.1.2.0')) if $model =~ /1210/;
$hw = undef if defined $hw and $hw eq 'NOSUCHOBJECT'; $hw = undef if norm($hw);
while(not defined $hw){ while(! defined $hw){
$hw = $obj->dlink_hw() || undef; $hw = norm($obj->dlink_hw());
$hw = undef if defined $hw and $hw eq 'NOSUCHOBJECT'; last if norm($hw);
last if defined $hw;
$hw = $obj->session()->get('rmon.19.3.0') || undef; $hw = norm($obj->session()->get('rmon.19.3.0'));
$hw = undef if defined $hw and $hw eq 'NOSUCHOBJECT'; last if norm($hw);
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('enterprises.171.10.94.89.89.2.10.0'));
last; last;
} }
return $hw if defined $hw; return $hw if norm($hw);
} }
sub stp_i_root_port { sub stp_i_root_port {