Compare commits
10 Commits
159ab659cb
...
db3a764d49
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
db3a764d49 | ||
|
|
62c7719186 | ||
|
|
daee793df6 | ||
|
|
36e8f9be61 | ||
|
|
91ce23ce4a | ||
|
|
535379b3a1 | ||
|
|
b9313c2ec0 | ||
|
|
a46f27792b | ||
|
|
43ca61299e | ||
|
|
a3f0109f06 |
@@ -25,7 +25,7 @@ our
|
|||||||
($VERSION, %FUNCS, %GLOBALS, %MIBS, %MUNGE, $AUTOLOAD, $INIT, $DEBUG, %SPEED_MAP,
|
($VERSION, %FUNCS, %GLOBALS, %MIBS, %MUNGE, $AUTOLOAD, $INIT, $DEBUG, %SPEED_MAP,
|
||||||
$NOSUCH, $BIGINT, $REPEATERS);
|
$NOSUCH, $BIGINT, $REPEATERS);
|
||||||
|
|
||||||
$VERSION = '3.70-135-20.5.6';
|
$VERSION = '3.70-135-20.5.7';
|
||||||
|
|
||||||
=head1 NAME
|
=head1 NAME
|
||||||
|
|
||||||
@@ -1681,6 +1681,7 @@ sub device_type {
|
|||||||
890 => 'SNMP::Info::Layer2::Zyxel',
|
890 => 'SNMP::Info::Layer2::Zyxel',
|
||||||
1286 => 'SNMP::Info::Layer2::ECI',
|
1286 => 'SNMP::Info::Layer2::ECI',
|
||||||
1588 => 'SNMP::Info::Layer3::Foundry',
|
1588 => 'SNMP::Info::Layer3::Foundry',
|
||||||
|
1795 => 'SNMP::Info::Layer2::Paradyne',
|
||||||
1872 => 'SNMP::Info::Layer3::AlteonAD',
|
1872 => 'SNMP::Info::Layer3::AlteonAD',
|
||||||
1890 => 'SNMP::Info::Layer3::Redlion',
|
1890 => 'SNMP::Info::Layer3::Redlion',
|
||||||
1916 => 'SNMP::Info::Layer3::Extreme',
|
1916 => 'SNMP::Info::Layer3::Extreme',
|
||||||
@@ -1729,7 +1730,7 @@ sub device_type {
|
|||||||
27514 => 'SNMP::Info::Layer3::Qtech',
|
27514 => 'SNMP::Info::Layer3::Qtech',
|
||||||
30065 => 'SNMP::Info::Layer3::Arista',
|
30065 => 'SNMP::Info::Layer3::Arista',
|
||||||
30803 => 'SNMP::Info::Layer3::VyOS',
|
30803 => 'SNMP::Info::Layer3::VyOS',
|
||||||
32761 => 'SNMP::Info::Layer3::Rotek',
|
32761 => 'SNMP::Info::Layer3::Deliberant',
|
||||||
34300 => 'SNMP::Info::Layer3::Eltex',
|
34300 => 'SNMP::Info::Layer3::Eltex',
|
||||||
35098 => 'SNMP::Info::Layer3::Pica8',
|
35098 => 'SNMP::Info::Layer3::Pica8',
|
||||||
35265 => 'SNMP::Info::Layer3::Eltex',
|
35265 => 'SNMP::Info::Layer3::Eltex',
|
||||||
@@ -1737,7 +1738,8 @@ sub device_type {
|
|||||||
40418 => 'SNMP::Info::Layer3::Nag',
|
40418 => 'SNMP::Info::Layer3::Nag',
|
||||||
41112 => 'SNMP::Info::Layer2::Ubiquiti',
|
41112 => 'SNMP::Info::Layer2::Ubiquiti',
|
||||||
44641 => 'SNMP::Info::Layer3::VyOS',
|
44641 => 'SNMP::Info::Layer3::VyOS',
|
||||||
41752 => 'SNMP::Info::Layer3::Raisecom',
|
41752 => 'SNMP::Info::Layer3::Rotek',
|
||||||
|
42926 => 'SNMP::Info::Layer2::NSC',
|
||||||
);
|
);
|
||||||
|
|
||||||
my %l2sysoidmap = (
|
my %l2sysoidmap = (
|
||||||
@@ -1756,6 +1758,7 @@ sub device_type {
|
|||||||
776 => 'SNMP::Info::Layer2::Telindus',
|
776 => 'SNMP::Info::Layer2::Telindus',
|
||||||
890 => 'SNMP::Info::Layer2::Zyxel',
|
890 => 'SNMP::Info::Layer2::Zyxel',
|
||||||
1286 => 'SNMP::Info::Layer2::ECI',
|
1286 => 'SNMP::Info::Layer2::ECI',
|
||||||
|
1795 => 'SNMP::Info::Layer2::Paradyne',
|
||||||
1872 => 'SNMP::Info::Layer3::AlteonAD',
|
1872 => 'SNMP::Info::Layer3::AlteonAD',
|
||||||
1890 => 'SNMP::Info::Layer3::Redlion',
|
1890 => 'SNMP::Info::Layer3::Redlion',
|
||||||
1916 => 'SNMP::Info::Layer3::Extreme',
|
1916 => 'SNMP::Info::Layer3::Extreme',
|
||||||
@@ -1785,11 +1788,12 @@ sub device_type {
|
|||||||
26543 => 'SNMP::Info::Layer3::IBMGbTor',
|
26543 => 'SNMP::Info::Layer3::IBMGbTor',
|
||||||
26928 => 'SNMP::Info::Layer2::Aerohive',
|
26928 => 'SNMP::Info::Layer2::Aerohive',
|
||||||
27514 => 'SNMP::Info::Layer3::Qtech',
|
27514 => 'SNMP::Info::Layer3::Qtech',
|
||||||
32761 => 'SNMP::Info::Layer3::Rotek',
|
32761 => 'SNMP::Info::Layer3::Deliberant',
|
||||||
34300 => 'SNMP::Info::Layer3::Eltex',
|
34300 => 'SNMP::Info::Layer3::Eltex',
|
||||||
35265 => 'SNMP::Info::Layer3::Eltex',
|
35265 => 'SNMP::Info::Layer3::Eltex',
|
||||||
40418 => 'SNMP::Info::Layer3::Nag',
|
40418 => 'SNMP::Info::Layer3::Nag',
|
||||||
41752 => 'SNMP::Info::Layer3::Raisecom',
|
41752 => 'SNMP::Info::Layer3::Rotek',
|
||||||
|
42926 => 'SNMP::Info::Layer2::NSC',
|
||||||
);
|
);
|
||||||
|
|
||||||
my %l1sysoidmap = (
|
my %l1sysoidmap = (
|
||||||
@@ -1805,6 +1809,7 @@ sub device_type {
|
|||||||
12532 => 'SNMP::Info::Layer7::Neoteris',
|
12532 => 'SNMP::Info::Layer7::Neoteris',
|
||||||
14525 => 'SNMP::Info::Layer2::Trapeze',
|
14525 => 'SNMP::Info::Layer2::Trapeze',
|
||||||
26866 => 'SNMP::Info::Layer7::Gigamon',
|
26866 => 'SNMP::Info::Layer7::Gigamon',
|
||||||
|
41752 => 'SNMP::Info::Layer3::Rotek', #Rotek and Raisecom fucking crap -(
|
||||||
);
|
);
|
||||||
|
|
||||||
# Get just the enterprise number for generic mapping
|
# Get just the enterprise number for generic mapping
|
||||||
|
|||||||
144
lib/SNMP/Info/Layer2/NSC.pm
Executable file
144
lib/SNMP/Info/Layer2/NSC.pm
Executable file
@@ -0,0 +1,144 @@
|
|||||||
|
# SNMP::Info::Layer2::NSC - SNMP Interface to NSC Devices
|
||||||
|
#
|
||||||
|
# Copyright (c) 2020 by 135.
|
||||||
|
|
||||||
|
package SNMP::Info::Layer2::NSC;
|
||||||
|
|
||||||
|
use strict;
|
||||||
|
use warnings;
|
||||||
|
use Exporter;
|
||||||
|
use SNMP::Info::Layer2;
|
||||||
|
|
||||||
|
@SNMP::Info::Layer2::NSC::ISA = qw/SNMP::Info::Layer2 Exporter/;
|
||||||
|
@SNMP::Info::Layer2::NSC::EXPORT_OK = qw//;
|
||||||
|
|
||||||
|
our ($VERSION, %GLOBALS, %MIBS, %FUNCS, %MUNGE);
|
||||||
|
|
||||||
|
$VERSION = '3.70-135';
|
||||||
|
|
||||||
|
%MIBS = ( %SNMP::Info::Layer2::MIBS, );
|
||||||
|
|
||||||
|
%GLOBALS = (
|
||||||
|
%SNMP::Info::Layer2::GLOBALS,
|
||||||
|
'model_oid' => 'enterprises.42926.2.3.1.3.0',
|
||||||
|
'serial_oid' => 'enterprises.42926.2.3.1.8.0',
|
||||||
|
'hw_oid' => 'enterprises.42926.2.3.1.1.0',
|
||||||
|
'os_ver_oid' => 'enterprises.42926.2.3.1.2.0',
|
||||||
|
);
|
||||||
|
|
||||||
|
%FUNCS = ( %SNMP::Info::Layer2::FUNCS, );
|
||||||
|
|
||||||
|
%MUNGE = ( %SNMP::Info::Layer2::MUNGE, );
|
||||||
|
|
||||||
|
sub vendor {
|
||||||
|
return 'nsc';
|
||||||
|
}
|
||||||
|
|
||||||
|
sub os {
|
||||||
|
return 'nsc-os';
|
||||||
|
}
|
||||||
|
|
||||||
|
sub os_ver {
|
||||||
|
my $obj = shift;
|
||||||
|
my $os_ver = $obj->os_ver_oid || undef;
|
||||||
|
|
||||||
|
return $os_ver
|
||||||
|
if defined $os_ver;
|
||||||
|
return 'unknown';
|
||||||
|
}
|
||||||
|
sub model {
|
||||||
|
my $obj = shift;
|
||||||
|
my $model = $obj->model_oid || undef;
|
||||||
|
my $hwver = $obj->hwver || undef;
|
||||||
|
|
||||||
|
return $model . ' HW:' . $hwver
|
||||||
|
if defined $model and defined $hwver;
|
||||||
|
return $model
|
||||||
|
if defined $model;
|
||||||
|
return $obj->SUPER::model();
|
||||||
|
}
|
||||||
|
|
||||||
|
sub hwver {
|
||||||
|
my $obj = shift;
|
||||||
|
my $hwver = $obj->hw_oid || undef;
|
||||||
|
|
||||||
|
return $hwver
|
||||||
|
if defined $hwver;
|
||||||
|
}
|
||||||
|
|
||||||
|
sub serial {
|
||||||
|
my $obj = shift;
|
||||||
|
my $serial = $obj->serial_oid || undef;
|
||||||
|
|
||||||
|
return $serial
|
||||||
|
if defined $serial;
|
||||||
|
return $obj->SUPER::serial();
|
||||||
|
}
|
||||||
|
|
||||||
|
1;
|
||||||
|
__END__
|
||||||
|
|
||||||
|
=head1 NAME
|
||||||
|
|
||||||
|
SNMP::Info::Layer2::NSC - SNMP Interface to NSC Devices
|
||||||
|
|
||||||
|
=head1 SYNOPSIS
|
||||||
|
|
||||||
|
# Let SNMP::Info determine the correct subclass for you.
|
||||||
|
my $obj = new SNMP::Info(
|
||||||
|
AutoSpecify => 1,
|
||||||
|
Debug => 1,
|
||||||
|
DestHost => 'myrouter',
|
||||||
|
Community => 'public',
|
||||||
|
Version => 2
|
||||||
|
)
|
||||||
|
or die "Can't connect to DestHost.\n";
|
||||||
|
|
||||||
|
my $class = $obj->class();
|
||||||
|
print "SNMP::Info determined this device to fall under subclass : $class\n";
|
||||||
|
|
||||||
|
=head1 DESCRIPTION
|
||||||
|
|
||||||
|
Subclass for NSC Devices
|
||||||
|
|
||||||
|
=head2 Inherited Classes
|
||||||
|
|
||||||
|
=over
|
||||||
|
|
||||||
|
=item SNMP::Info::Layer2
|
||||||
|
|
||||||
|
=back
|
||||||
|
|
||||||
|
=head2 Inherited Classes' MIBs
|
||||||
|
|
||||||
|
See L<SNMP::Info::Layer2/"Required MIBs"> for its own MIB requirements.
|
||||||
|
|
||||||
|
=head1 GLOBALS
|
||||||
|
|
||||||
|
These are methods that return scalar value from SNMP
|
||||||
|
|
||||||
|
=over
|
||||||
|
|
||||||
|
=item $obj->vendor()
|
||||||
|
|
||||||
|
Returns 'nsc-oem'
|
||||||
|
|
||||||
|
=item $obj->os()
|
||||||
|
|
||||||
|
Returns 'nsc-oem'
|
||||||
|
|
||||||
|
=item $obj->os_ver()
|
||||||
|
|
||||||
|
Returns the software version.
|
||||||
|
|
||||||
|
=item $obj->model()
|
||||||
|
|
||||||
|
Returns the model extracted.
|
||||||
|
|
||||||
|
=item $obj->serial()
|
||||||
|
|
||||||
|
Returns serial number.
|
||||||
|
|
||||||
|
=cut
|
||||||
|
|
||||||
|
=back
|
||||||
116
lib/SNMP/Info/Layer2/Paradyne.pm
Executable file
116
lib/SNMP/Info/Layer2/Paradyne.pm
Executable file
@@ -0,0 +1,116 @@
|
|||||||
|
# SNMP::Info::Layer2::Paradyne - SNMP Interface to Paradyne Devices
|
||||||
|
#
|
||||||
|
# Copyright (c) 2020 by 135.
|
||||||
|
|
||||||
|
package SNMP::Info::Layer2::Paradyne;
|
||||||
|
|
||||||
|
use strict;
|
||||||
|
use warnings;
|
||||||
|
use Exporter;
|
||||||
|
use SNMP::Info::Layer2;
|
||||||
|
|
||||||
|
@SNMP::Info::Layer2::Paradyne::ISA = qw/SNMP::Info::Layer2 Exporter/;
|
||||||
|
@SNMP::Info::Layer2::Paradyne::EXPORT_OK = qw//;
|
||||||
|
|
||||||
|
our ($VERSION, %GLOBALS, %MIBS, %FUNCS, %MUNGE);
|
||||||
|
|
||||||
|
$VERSION = '3.70-135';
|
||||||
|
|
||||||
|
%MIBS = ( %SNMP::Info::Layer2::MIBS, );
|
||||||
|
|
||||||
|
%GLOBALS = (
|
||||||
|
%SNMP::Info::Layer2::GLOBALS,
|
||||||
|
);
|
||||||
|
|
||||||
|
%FUNCS = ( %SNMP::Info::Layer2::FUNCS, );
|
||||||
|
|
||||||
|
%MUNGE = ( %SNMP::Info::Layer2::MUNGE, );
|
||||||
|
|
||||||
|
sub vendor {
|
||||||
|
return 'paradyne';
|
||||||
|
}
|
||||||
|
|
||||||
|
sub os {
|
||||||
|
return 'prdn-os';
|
||||||
|
}
|
||||||
|
|
||||||
|
sub os_ver {
|
||||||
|
my $obj = shift;
|
||||||
|
$obj->description =~ /S\/W\sRelease\:\s+(.*)\;/;
|
||||||
|
return $1 if defined($1);
|
||||||
|
return 'unknown';
|
||||||
|
}
|
||||||
|
|
||||||
|
sub model {
|
||||||
|
my $obj = shift;
|
||||||
|
$obj->description =~ /PARADYNE\s+(.*)\;.*\;/;
|
||||||
|
return $1 if defined($1);
|
||||||
|
}
|
||||||
|
|
||||||
|
1;
|
||||||
|
__END__
|
||||||
|
|
||||||
|
=head1 NAME
|
||||||
|
|
||||||
|
SNMP::Info::Layer2::Paradyne - SNMP Interface to Paradyne Devices
|
||||||
|
|
||||||
|
=head1 SYNOPSIS
|
||||||
|
|
||||||
|
# Let SNMP::Info determine the correct subclass for you.
|
||||||
|
my $obj = new SNMP::Info(
|
||||||
|
AutoSpecify => 1,
|
||||||
|
Debug => 1,
|
||||||
|
DestHost => 'myrouter',
|
||||||
|
Community => 'public',
|
||||||
|
Version => 2
|
||||||
|
)
|
||||||
|
or die "Can't connect to DestHost.\n";
|
||||||
|
|
||||||
|
my $class = $obj->class();
|
||||||
|
print "SNMP::Info determined this device to fall under subclass : $class\n";
|
||||||
|
|
||||||
|
=head1 DESCRIPTION
|
||||||
|
|
||||||
|
Subclass for Paradyne Devices running IOS-like software
|
||||||
|
|
||||||
|
=head2 Inherited Classes
|
||||||
|
|
||||||
|
=over
|
||||||
|
|
||||||
|
=item SNMP::Info::Layer2
|
||||||
|
|
||||||
|
=back
|
||||||
|
|
||||||
|
=head1 GLOBALS
|
||||||
|
|
||||||
|
These are methods that return scalar value from SNMP
|
||||||
|
|
||||||
|
=over
|
||||||
|
|
||||||
|
=item $obj->vendor()
|
||||||
|
|
||||||
|
Returns 'rapadyne'
|
||||||
|
|
||||||
|
=item $obj->os()
|
||||||
|
|
||||||
|
Returns 'prdn-os'
|
||||||
|
|
||||||
|
=item $obj->layers()
|
||||||
|
|
||||||
|
Ensures that layer two is reported, at least.
|
||||||
|
|
||||||
|
=item $obj->os_ver()
|
||||||
|
|
||||||
|
Returns the software version.
|
||||||
|
|
||||||
|
=item $obj->model
|
||||||
|
|
||||||
|
Returns the model extracted.
|
||||||
|
|
||||||
|
=item $obj->serial()
|
||||||
|
|
||||||
|
Returns serial number.
|
||||||
|
|
||||||
|
=cut
|
||||||
|
|
||||||
|
=back
|
||||||
@@ -110,7 +110,7 @@ sub os {
|
|||||||
}
|
}
|
||||||
|
|
||||||
sub vendor {
|
sub vendor {
|
||||||
return 'alcatel-lucent';
|
return 'alcatel';
|
||||||
}
|
}
|
||||||
|
|
||||||
sub os_ver {
|
sub os_ver {
|
||||||
|
|||||||
@@ -74,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();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -102,54 +114,74 @@ sub os {
|
|||||||
|
|
||||||
sub os_ver {
|
sub os_ver {
|
||||||
my $obj = shift;
|
my $obj = shift;
|
||||||
return $obj->fwver();
|
my $os_ver = undef;
|
||||||
|
my $model = $obj->model();
|
||||||
|
my $id = $obj->id();
|
||||||
|
|
||||||
|
#Due to the zoo of MIB from DLink by 1210 series
|
||||||
|
$os_ver = norm($obj->session()->get($id.'.1.3.0')) if $model =~ /1210/;
|
||||||
|
|
||||||
|
while (not defined $os_ver) {
|
||||||
|
$os_ver = norm($obj->dlink_fw());
|
||||||
|
last if norm($os_ver);
|
||||||
|
|
||||||
|
$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 norm($brom) and norm($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 fwver {
|
sub brom {
|
||||||
my $dlink=shift;
|
my $obj = shift;
|
||||||
my $model = $dlink->model();
|
my $brom = undef;
|
||||||
my $id = $dlink->id();
|
|
||||||
my $fw;
|
$brom = norm($obj->session()->get('enterprises.171.10.94.89.89.2.10.0'));
|
||||||
if ($model =~ /1210/) {
|
|
||||||
#Due to the zoo of MIB from DLink by 1210 series
|
return $brom if norm($brom);
|
||||||
$fw->{0} = $dlink->session()->get($id.'.1.3.0');
|
|
||||||
} else {
|
|
||||||
$fw = $dlink->dlink_fw();
|
|
||||||
}
|
|
||||||
return $fw->{0} if ( defined $fw->{0} and $fw->{0} !~ /^\s*$/ and $fw->{0} !~ 'NOSUCHOBJECT');
|
|
||||||
}
|
}
|
||||||
|
|
||||||
sub hwver {
|
sub hwver {
|
||||||
my $dlink=shift;
|
my $obj=shift;
|
||||||
my $id = $dlink->id();
|
my $id = $obj->id();
|
||||||
my $model = &SNMP::translateObj($id);
|
my $model = &SNMP::translateObj($id);
|
||||||
my $hw;
|
my $hw = undef;
|
||||||
if ($model =~ /1210/) {
|
|
||||||
#Due to the zoo of MIB from DLink by 1210 series
|
|
||||||
$hw->{0} = $dlink->session()->get($id.'.1.2.0');
|
|
||||||
} else {
|
|
||||||
$hw = $dlink->dlink_hw();
|
|
||||||
}
|
|
||||||
return $hw->{0} if ( defined $hw->{0} and $hw->{0} !~ /^\s*$/ and $hw->{0} !~ 'NOSUCHOBJECT');
|
|
||||||
|
|
||||||
$hw = $dlink->session()->get('rmon.19.3.0');
|
#Due to the zoo of MIB from DLink by 1210 series
|
||||||
return $hw if defined($hw);
|
$hw = norm($obj->session()->get($id.'.1.2.0')) if $model =~ /1210/;
|
||||||
|
$hw = undef if norm($hw);
|
||||||
|
|
||||||
|
while(! defined $hw){
|
||||||
|
$hw = norm($obj->dlink_hw());
|
||||||
|
last if norm($hw);
|
||||||
|
|
||||||
|
$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 norm($hw);
|
||||||
}
|
}
|
||||||
|
|
||||||
sub stp_i_root_port {
|
sub stp_i_root_port {
|
||||||
|
|||||||
133
lib/SNMP/Info/Layer3/Deliberant.pm
Executable file
133
lib/SNMP/Info/Layer3/Deliberant.pm
Executable file
@@ -0,0 +1,133 @@
|
|||||||
|
# SNMP::Info::Layer3::Deliberant - SNMP Interface to Deliberant Devices
|
||||||
|
#
|
||||||
|
# Copyright (c) 2020 by 135.
|
||||||
|
|
||||||
|
package SNMP::Info::Layer3::Deliberant;
|
||||||
|
|
||||||
|
use strict;
|
||||||
|
use warnings;
|
||||||
|
use Exporter;
|
||||||
|
use SNMP::Info::Layer3;
|
||||||
|
|
||||||
|
@SNMP::Info::Layer3::Deliberant::ISA = qw/SNMP::Info::Layer3 Exporter/;
|
||||||
|
@SNMP::Info::Layer3::Deliberant::EXPORT_OK = qw//;
|
||||||
|
|
||||||
|
our ($VERSION, %GLOBALS, %MIBS, %FUNCS, %MUNGE);
|
||||||
|
|
||||||
|
$VERSION = '3.70-135';
|
||||||
|
|
||||||
|
%MIBS = ( %SNMP::Info::Layer3::MIBS, );
|
||||||
|
|
||||||
|
%GLOBALS = (
|
||||||
|
%SNMP::Info::Layer3::GLOBALS,
|
||||||
|
'model_oid' => 'enterprises.32761.3.1.1.1.3.0',
|
||||||
|
'submodel' => 'enterprises.32761.3.1.1.1.2.0',
|
||||||
|
);
|
||||||
|
|
||||||
|
%FUNCS = ( %SNMP::Info::Layer3::FUNCS, );
|
||||||
|
|
||||||
|
%MUNGE = ( %SNMP::Info::Layer3::MUNGE, );
|
||||||
|
|
||||||
|
sub vendor {
|
||||||
|
return 'deliberant';
|
||||||
|
}
|
||||||
|
|
||||||
|
sub os {
|
||||||
|
return 'deliberant-os';
|
||||||
|
}
|
||||||
|
|
||||||
|
sub os_ver {
|
||||||
|
my $obj = shift;
|
||||||
|
my $os_ver;
|
||||||
|
my $os_ver_oid = $obj->description;
|
||||||
|
$os_ver_oid =~ /\,\s(.*)/;
|
||||||
|
$os_ver = $1;
|
||||||
|
|
||||||
|
if (defined $os_ver) {
|
||||||
|
return $os_ver;
|
||||||
|
}
|
||||||
|
return 'unknown';
|
||||||
|
}
|
||||||
|
sub model {
|
||||||
|
my $obj = shift;
|
||||||
|
my $id = $obj->id();
|
||||||
|
my $model = $obj->model_oid || undef;
|
||||||
|
my $submodel = $obj->submodel || undef;
|
||||||
|
$model .= ' (' . $obj->submodel . ')' if defined($submodel);
|
||||||
|
|
||||||
|
return $model if defined $model;
|
||||||
|
return $obj->SUPER::model();
|
||||||
|
}
|
||||||
|
|
||||||
|
sub serial {
|
||||||
|
my $obj = shift;
|
||||||
|
return $obj->SUPER::serial();
|
||||||
|
}
|
||||||
|
|
||||||
|
1;
|
||||||
|
__END__
|
||||||
|
|
||||||
|
=head1 NAME
|
||||||
|
|
||||||
|
SNMP::Info::Layer3::Deliberant - SNMP Interface to Deliberant Devices
|
||||||
|
|
||||||
|
=head1 SYNOPSIS
|
||||||
|
|
||||||
|
# Let SNMP::Info determine the correct subclass for you.
|
||||||
|
my $obj = new SNMP::Info(
|
||||||
|
AutoSpecify => 1,
|
||||||
|
Debug => 1,
|
||||||
|
DestHost => 'myrouter',
|
||||||
|
Community => 'public',
|
||||||
|
Version => 2
|
||||||
|
)
|
||||||
|
or die "Can't connect to DestHost.\n";
|
||||||
|
|
||||||
|
my $class = $obj->class();
|
||||||
|
print "SNMP::Info determined this device to fall under subclass : $class\n";
|
||||||
|
|
||||||
|
=head1 DESCRIPTION
|
||||||
|
|
||||||
|
Subclass for Deliberant Devices
|
||||||
|
|
||||||
|
=head2 Inherited Classes
|
||||||
|
|
||||||
|
=over
|
||||||
|
|
||||||
|
=item SNMP::Info::Layer3
|
||||||
|
|
||||||
|
=back
|
||||||
|
|
||||||
|
=head2 Inherited Classes' MIBs
|
||||||
|
|
||||||
|
See L<SNMP::Info::Layer3/"Required MIBs"> for its own MIB requirements.
|
||||||
|
|
||||||
|
=head1 GLOBALS
|
||||||
|
|
||||||
|
These are methods that return scalar value from SNMP
|
||||||
|
|
||||||
|
=over
|
||||||
|
|
||||||
|
=item $obj->vendor()
|
||||||
|
|
||||||
|
Returns 'deliberant-oem'
|
||||||
|
|
||||||
|
=item $obj->os()
|
||||||
|
|
||||||
|
Returns 'rotek-os'
|
||||||
|
|
||||||
|
=item $obj->os_ver()
|
||||||
|
|
||||||
|
Returns the software version.
|
||||||
|
|
||||||
|
=item $obj->model()
|
||||||
|
|
||||||
|
Returns the model extracted.
|
||||||
|
|
||||||
|
=item $obj->serial()
|
||||||
|
|
||||||
|
Returns serial number.
|
||||||
|
|
||||||
|
=cut
|
||||||
|
|
||||||
|
=back
|
||||||
@@ -23,22 +23,15 @@ $VERSION = '3.70-135';
|
|||||||
%GLOBALS = (
|
%GLOBALS = (
|
||||||
%SNMP::Info::Layer3::GLOBALS,
|
%SNMP::Info::Layer3::GLOBALS,
|
||||||
'model_oid' => 'mib-2.47.1.1.1.1.13.1',
|
'model_oid' => 'mib-2.47.1.1.1.1.13.1',
|
||||||
'model_oid_41752' => 'enterprises.41752.6.1.1.1.19.0',
|
|
||||||
'model_oid_8886_6_140' => 'enterprises.8886.6.1.1.1.19.0',
|
'model_oid_8886_6_140' => 'enterprises.8886.6.1.1.1.19.0',
|
||||||
'serial_oid' => 'mib-2.47.1.1.1.1.11.1',
|
'serial_oid' => 'mib-2.47.1.1.1.1.11.1',
|
||||||
'serial_oid_41752' => 'enterprises.41752.6.1.1.1.14.0',
|
|
||||||
'serial_oid_8886_6_140' => 'enterprises.8886.6.1.1.1.14.0',
|
'serial_oid_8886_6_140' => 'enterprises.8886.6.1.1.1.14.0',
|
||||||
'os_ver_oid' => 'mib-2.47.1.1.1.1.10.1',
|
'os_ver_oid' => 'mib-2.47.1.1.1.1.10.1',
|
||||||
'os_ver_oid_41752' => 'enterprises.41752.6.1.1.1.1.0',
|
|
||||||
'os_ver_oid_8886_6_140' => 'enterprises.8886.6.1.1.1.1.0',
|
'os_ver_oid_8886_6_140' => 'enterprises.8886.6.1.1.1.1.0',
|
||||||
'brom_oid' => 'mib-2.47.1.1.1.1.9.1',
|
'brom_oid' => 'mib-2.47.1.1.1.1.9.1',
|
||||||
'brom_oid_41752' => 'enterprises.41752.6.1.1.1.13.0',
|
|
||||||
'brom_oid_8886_6_140' => 'enterprises.8886.6.1.1.1.13.0',
|
'brom_oid_8886_6_140' => 'enterprises.8886.6.1.1.1.13.0',
|
||||||
'hw_oid' => 'mib-2.47.1.1.1.1.8.1',
|
'hw_oid' => 'mib-2.47.1.1.1.1.8.1',
|
||||||
'hw_oid_41752' => 'enterprises.41752.6.1.1.1.2.0',
|
|
||||||
'hw_oid_8886_6_140' => 'enterprises.8886.6.1.1.1.2.0',
|
'hw_oid_8886_6_140' => 'enterprises.8886.6.1.1.1.2.0',
|
||||||
'model_rotek' => 'enterprises.41752.3.1.1.1.3.0',
|
|
||||||
'model_41752' => 'enterprises.41752.3.1.1.1.3.0',
|
|
||||||
);
|
);
|
||||||
|
|
||||||
%FUNCS = ( %SNMP::Info::Layer3::FUNCS, );
|
%FUNCS = ( %SNMP::Info::Layer3::FUNCS, );
|
||||||
@@ -47,45 +40,20 @@ $VERSION = '3.70-135';
|
|||||||
|
|
||||||
sub vendor {
|
sub vendor {
|
||||||
my $obj = shift;
|
my $obj = shift;
|
||||||
return main($obj)->{vendor};
|
return 'raisecom';
|
||||||
}
|
}
|
||||||
|
|
||||||
sub os {
|
sub os {
|
||||||
my $obj = shift;
|
my $obj = shift;
|
||||||
return main($obj)->{os};
|
return 'raisecom-os';
|
||||||
}
|
}
|
||||||
|
|
||||||
sub main {
|
sub main {
|
||||||
my $obj = shift;
|
my $obj = shift;
|
||||||
my $response = undef; my $serial = undef; my $model = undef; my $hw = undef; my $os_ver = undef; my $brom = undef;
|
my $response = undef; my $serial = undef; my $model = undef; my $hw = undef; my $os_ver = undef; my $brom = undef;
|
||||||
my $vendor = 'raisecom'; my $os = 'rcios';
|
|
||||||
my $id = $obj->id;
|
my $id = $obj->id;
|
||||||
|
|
||||||
#Rotek kostilyng
|
if ($id =~ /8886\.6\.(140|191|150|21[3,4])$/) {
|
||||||
if ($id =~ /41752$/) {
|
|
||||||
my %rotek = ();#undef;#('vendor', 'os', 'model', 'os_ver', 'serial');
|
|
||||||
for my $key ('vendor', 'os', 'model', 'os_ver', 'serial') {
|
|
||||||
no strict 'refs';
|
|
||||||
my $sub = *{'SNMP::Info::Layer3::Rotek::'.$key};
|
|
||||||
$rotek{$key} = &$sub($obj);
|
|
||||||
}
|
|
||||||
return %rotek;
|
|
||||||
}
|
|
||||||
|
|
||||||
if ( $id =~ /41752\.26\.502/ ) {
|
|
||||||
$model = $obj->model_oid_41752 || undef;
|
|
||||||
|
|
||||||
$hw = ($obj->hw_oid_41752 =~ /.*\sversion\s(.*)/)[0];
|
|
||||||
|
|
||||||
$obj->os_ver_oid_41752 =~ /ROS_(.*)\.(\d+)/;
|
|
||||||
$os_ver = $1 . ' (' . $2 . ')' if defined($1) and defined($2);
|
|
||||||
|
|
||||||
$obj->brom_oid_41752 =~ /.*_BOOT_(.*)_(\d+)/;
|
|
||||||
$brom = $1 . ' (' . $2 . ')' if defined($1) and defined($2);
|
|
||||||
|
|
||||||
$serial = $obj->serial_oid_41752 || undef;
|
|
||||||
}
|
|
||||||
elsif ($id =~ /8886\.6\.(140|191|150|21[3,4])$/) {
|
|
||||||
$model = $obj->model_oid_8886_6_140 || undef;
|
$model = $obj->model_oid_8886_6_140 || undef;
|
||||||
|
|
||||||
$obj->os_ver_oid_8886_6_140 =~ /ROS_(.*)\.ISCOM.*\.(\d*\.+\d*)/;
|
$obj->os_ver_oid_8886_6_140 =~ /ROS_(.*)\.ISCOM.*\.(\d*\.+\d*)/;
|
||||||
@@ -100,7 +68,7 @@ sub main {
|
|||||||
|
|
||||||
#All another known ways to HW
|
#All another known ways to HW
|
||||||
while (not defined($hw)) {
|
while (not defined($hw)) {
|
||||||
$obj->hw_oid_8886_6_140 =~ /.*[v,V]ersion[:,\s]*(.*)/;
|
$obj->hw_oid_8886_6_140 =~ /.*[v,V]ersion[:,\s]*(.*)/ if defined $obj->hw_oid_8886_6_140;
|
||||||
$hw = $1 if defined $1;
|
$hw = $1 if defined $1;
|
||||||
last;
|
last;
|
||||||
}
|
}
|
||||||
@@ -122,36 +90,71 @@ sub main {
|
|||||||
last;
|
last;
|
||||||
}
|
}
|
||||||
|
|
||||||
#All another known ways to Bootrom
|
|
||||||
$obj->brom_oid_8886_6_140 =~ /Bootstrap_([\d\W]+)\.ISCOM.*\.(\d*\.+\d*)/;
|
|
||||||
$brom = $1 . ' (' . $2 . ')' if defined($1) and defined($2);
|
|
||||||
|
|
||||||
$brom = $obj->brom_oid || undef if not defined($brom);
|
|
||||||
|
|
||||||
#Serial
|
#Serial
|
||||||
$serial = $obj->serial_oid_8886_6_140 || undef;
|
$serial = $obj->serial_oid_8886_6_140 || undef;
|
||||||
|
|
||||||
####
|
####
|
||||||
#final formatting before output.
|
#final formatting before output.
|
||||||
####
|
####
|
||||||
$model .= ' HW:' . $hw if defined($model) and defined($hw);
|
#$model .= ' HW:' . $hw if defined($model) and defined($hw);
|
||||||
$os_ver .= ' bootrom:' . $brom if defined($os_ver) and defined($brom);
|
#$os_ver .= ' bootrom:' . $brom if defined($os_ver) and defined($brom);
|
||||||
|
|
||||||
return { 'vendor' => $vendor, 'os' => $os, 'model' => $model, 'os_ver' => $os_ver, 'serial' => $serial };
|
return { 'model' => $model, 'os_ver' => $os_ver, 'serial' => $serial };
|
||||||
}
|
}
|
||||||
|
|
||||||
sub os_ver {
|
sub os_ver {
|
||||||
my $obj = shift;
|
my $obj = shift;
|
||||||
return main($obj)->{os_ver};
|
my $os_ver = $obj->main()->{os_ver};
|
||||||
|
my $brom = $obj->brom() || undef;
|
||||||
|
|
||||||
|
$os_ver .= ' Bootrom:' . $brom if defined $brom;
|
||||||
|
return $os_ver if defined $os_ver;
|
||||||
}
|
}
|
||||||
sub model {
|
sub model {
|
||||||
my $obj = shift;
|
my $obj = shift;
|
||||||
return main($obj)->{model};
|
my $model = $obj->main()->{model} || undef;
|
||||||
|
my $hw = $obj->hw() || undef;
|
||||||
|
|
||||||
|
if (not defined $model or $model eq 'NOSUCHOBJECT') {
|
||||||
|
$model = $obj->session()->get('enterprises.8886.22.2.1.2.0') || undef;
|
||||||
|
}
|
||||||
|
|
||||||
|
$model .= ' HW:' . $hw if defined $hw;
|
||||||
|
return $model if defined $model;
|
||||||
|
return $obj->id();
|
||||||
}
|
}
|
||||||
|
|
||||||
sub serial {
|
sub serial {
|
||||||
my $obj = shift;
|
my $obj = shift;
|
||||||
return main($obj)->{serial};
|
my $serial = $obj->main()->{serial} || undef;
|
||||||
|
|
||||||
|
while(not defined $serial) {
|
||||||
|
$serial = $obj->session()->get('mib-2.47.1.1.1.1.11.1') || undef;
|
||||||
|
last;
|
||||||
|
}
|
||||||
|
return $serial if defined $serial;
|
||||||
|
}
|
||||||
|
|
||||||
|
sub hwver {
|
||||||
|
my $obj = shift;
|
||||||
|
my $hw = $obj->session()->get('mib-2.47.1.1.1.1.8.1') || undef;
|
||||||
|
|
||||||
|
while (not defined($hw)) {
|
||||||
|
$obj->hw_oid_8886_6_140 =~ /.*[v,V]ersion[:,\s]*(.*)/ if defined $obj->hw_oid_8886_6_140;
|
||||||
|
$hw = $1 if defined $1;
|
||||||
|
last;
|
||||||
|
}
|
||||||
|
return $hw if defined $hw;
|
||||||
|
}
|
||||||
|
|
||||||
|
sub brom {
|
||||||
|
my $obj = shift;
|
||||||
|
my $brom = undef;
|
||||||
|
|
||||||
|
$obj->brom_oid_8886_6_140 =~ /Bootstrap_([\d\W]+)\.ISCOM.*\.(\d*\.+\d*)/ if defined $obj->brom_oid_8886_6_140;
|
||||||
|
$brom = $1 . ' (' . $2 . ')' if defined($1) and defined($2);
|
||||||
|
|
||||||
|
$brom = $obj->brom_oid || undef if not defined($brom);
|
||||||
}
|
}
|
||||||
|
|
||||||
1;
|
1;
|
||||||
|
|||||||
@@ -20,9 +20,7 @@ $VERSION = '3.70-135';
|
|||||||
|
|
||||||
%GLOBALS = (
|
%GLOBALS = (
|
||||||
%SNMP::Info::Layer3::GLOBALS,
|
%SNMP::Info::Layer3::GLOBALS,
|
||||||
'model_41752' => 'enterprises.41752.3.1.1.1.3.0',
|
'model_oid' => 'enterprises.41752.3.1.1.1.3.0',
|
||||||
'model_rotek' => 'enterprises.32761.3.1.1.1.3.0',
|
|
||||||
'submodel' => 'enterprises.32761.3.1.1.1.2.0',
|
|
||||||
);
|
);
|
||||||
|
|
||||||
%FUNCS = ( %SNMP::Info::Layer3::FUNCS, );
|
%FUNCS = ( %SNMP::Info::Layer3::FUNCS, );
|
||||||
@@ -34,33 +32,91 @@ sub vendor {
|
|||||||
}
|
}
|
||||||
|
|
||||||
sub os {
|
sub os {
|
||||||
return 'rotek';
|
return 'rotek-os';
|
||||||
}
|
}
|
||||||
|
|
||||||
sub os_ver {
|
sub os_ver {
|
||||||
my $obj = shift;
|
my $obj = shift;
|
||||||
my $os_ver;
|
my $os_ver = undef;
|
||||||
my $os_ver_oid = $obj->description();
|
|
||||||
$os_ver_oid =~ /\,\s(.*)/;
|
|
||||||
$os_ver = $1;
|
|
||||||
|
|
||||||
if (defined $os_ver) {
|
my $os_ver_oid = $obj->os_ver_oid_41752 || undef;
|
||||||
return $os_ver;
|
$os_ver_oid =~ /ROS_(.*)\.(\d+)/ || undef $_ if defined $os_ver_oid;
|
||||||
|
$os_ver = $1 . ' (' . $2 . ')' if defined($1) and defined($2);
|
||||||
|
|
||||||
|
while(not defined $os_ver) {
|
||||||
|
$obj->description =~ /\,\s(.*)/;
|
||||||
|
$os_ver = $1 if defined $1;
|
||||||
|
last if defined $os_ver;
|
||||||
|
|
||||||
|
$obj->description() =~ /[\w,\W,\d,\-]+v\d+rev\d+\s+([\d,\.]+)\s+[\w,\-,\d]+$/;
|
||||||
|
$os_ver = $1 if defined $1;
|
||||||
|
last;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return $os_ver if defined $os_ver;
|
||||||
return 'unknown';
|
return 'unknown';
|
||||||
}
|
}
|
||||||
|
|
||||||
|
sub brom {
|
||||||
|
my $obj = shift;
|
||||||
|
my $brom = undef;
|
||||||
|
$obj->brom_oid_41752 =~ /.*_BOOT_(.*)_(\d+)/;
|
||||||
|
$brom = $1 . ' (' . $2 . ')' if defined($1) and defined($2);
|
||||||
|
|
||||||
|
return $brom if defined $brom;
|
||||||
|
}
|
||||||
|
|
||||||
sub model {
|
sub model {
|
||||||
my $obj = shift;
|
my $obj = shift;
|
||||||
my $id = $obj->id();
|
my $id = $obj->id();
|
||||||
if ($id =~ /32761$/) {
|
my $hw = $obj->hwver() || undef;
|
||||||
return $obj->model_rotek . ' (' . $obj->submodel . ')';
|
my $model = $obj->model_oid || undef;
|
||||||
}
|
|
||||||
elsif ($id =~ /41752$/) {
|
while (not defined $model) {
|
||||||
return $obj->model_41752;
|
$model = $obj->model_oid_41752 || undef;
|
||||||
|
last if defined $model;
|
||||||
|
|
||||||
|
$obj->description() =~ /([\w,\W,\d,\-]+)v\d+rev\d+\s+[\d,\.]+\s+[\w,\-,\d]+$/;
|
||||||
|
$model = $1 if defined $1;
|
||||||
|
last if defined $model;
|
||||||
|
|
||||||
|
last;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
$model .= ' HW:' . $hw if defined $hw;
|
||||||
|
|
||||||
|
return $model if defined $model;
|
||||||
return $obj->SUPER::model();
|
return $obj->SUPER::model();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
sub serial {
|
||||||
|
my $obj = shift;
|
||||||
|
my $serial = $obj->serial_oid_41752 || undef;
|
||||||
|
|
||||||
|
while (not defined $serial) {
|
||||||
|
$obj->description() =~ /[\w,\W,\d,\-]+v\d+rev\d+\s+[\d,\.]+\s+([\w,\-,\d]+)$/;
|
||||||
|
$serial = $1 if defined $1;
|
||||||
|
|
||||||
|
last;
|
||||||
|
}
|
||||||
|
return $serial if defined $serial;
|
||||||
|
return $obj->SUPER::serial();
|
||||||
|
}
|
||||||
|
|
||||||
|
sub hwver{
|
||||||
|
my $obj = shift;
|
||||||
|
my $hw = ($obj->hw_oid_41752 =~ /.*\sversion\s(.*)/)[0] || undef if defined $obj->hw_oid_41752;
|
||||||
|
|
||||||
|
while (not defined $hw) {
|
||||||
|
$obj->description() =~ /[\w,\W,\d,\-]+(v\d+rev\d+)\s+[\d,\.]+\s+[\w,\-,\d]+$/;
|
||||||
|
$hw = $1 if defined $1;
|
||||||
|
|
||||||
|
last;
|
||||||
|
}
|
||||||
|
|
||||||
|
return $hw if defined $hw;
|
||||||
|
}
|
||||||
|
|
||||||
1;
|
1;
|
||||||
__END__
|
__END__
|
||||||
|
|
||||||
@@ -111,7 +167,7 @@ Returns 'rotek'
|
|||||||
|
|
||||||
=item $obj->os()
|
=item $obj->os()
|
||||||
|
|
||||||
Returns 'rotek'
|
Returns 'rotek-os'
|
||||||
|
|
||||||
=item $obj->os_ver()
|
=item $obj->os_ver()
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user