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 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 {