Compare commits

...

10 Commits

Author SHA1 Message Date
Andrey Pazychev
db3a764d49 Dlink bugfix with syntax ($$ instead $) 2020-05-22 21:31:51 +03:00
Andrey Pazychev
62c7719186 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.
2020-05-22 14:53:04 +03:00
Andrey Pazychev
daee793df6 NSC renamed vendor code 2020-05-21 04:55:38 +03:00
Andrey Pazychev
36e8f9be61 Raisecom bugfix 2020-05-21 04:41:26 +03:00
Andrey Pazychev
91ce23ce4a Fix vendors accoding to http://oidref.com/
- Lucent
- Deliberant
- Raisecom
- Rotek
2020-05-21 03:55:54 +03:00
Andrey Pazychev
535379b3a1 Tomsk. Fix Dlink model.
Something fail -(. Undefined OID for DLink return NOSUCHOBJECT instead undef..
2020-05-21 02:23:58 +03:00
Andrey Pazychev
b9313c2ec0 Add vendor NSC (from China to Siberia)..
Kemerovo RC.
2020-05-21 01:26:11 +03:00
Andrey Pazychev
a46f27792b Paradyne bugfix regexp 2020-05-20 22:59:07 +03:00
Andrey Pazychev
43ca61299e Rotek. serial sub for calling from Raisecom. 2020-05-20 22:48:43 +03:00
Andrey Pazychev
a3f0109f06 Add vendor Paradyne 2020-05-20 22:47:58 +03:00
8 changed files with 593 additions and 104 deletions

View File

@@ -25,7 +25,7 @@ our
($VERSION, %FUNCS, %GLOBALS, %MIBS, %MUNGE, $AUTOLOAD, $INIT, $DEBUG, %SPEED_MAP,
$NOSUCH, $BIGINT, $REPEATERS);
$VERSION = '3.70-135-20.5.6';
$VERSION = '3.70-135-20.5.7';
=head1 NAME
@@ -1681,6 +1681,7 @@ sub device_type {
890 => 'SNMP::Info::Layer2::Zyxel',
1286 => 'SNMP::Info::Layer2::ECI',
1588 => 'SNMP::Info::Layer3::Foundry',
1795 => 'SNMP::Info::Layer2::Paradyne',
1872 => 'SNMP::Info::Layer3::AlteonAD',
1890 => 'SNMP::Info::Layer3::Redlion',
1916 => 'SNMP::Info::Layer3::Extreme',
@@ -1729,7 +1730,7 @@ sub device_type {
27514 => 'SNMP::Info::Layer3::Qtech',
30065 => 'SNMP::Info::Layer3::Arista',
30803 => 'SNMP::Info::Layer3::VyOS',
32761 => 'SNMP::Info::Layer3::Rotek',
32761 => 'SNMP::Info::Layer3::Deliberant',
34300 => 'SNMP::Info::Layer3::Eltex',
35098 => 'SNMP::Info::Layer3::Pica8',
35265 => 'SNMP::Info::Layer3::Eltex',
@@ -1737,7 +1738,8 @@ sub device_type {
40418 => 'SNMP::Info::Layer3::Nag',
41112 => 'SNMP::Info::Layer2::Ubiquiti',
44641 => 'SNMP::Info::Layer3::VyOS',
41752 => 'SNMP::Info::Layer3::Raisecom',
41752 => 'SNMP::Info::Layer3::Rotek',
42926 => 'SNMP::Info::Layer2::NSC',
);
my %l2sysoidmap = (
@@ -1756,6 +1758,7 @@ sub device_type {
776 => 'SNMP::Info::Layer2::Telindus',
890 => 'SNMP::Info::Layer2::Zyxel',
1286 => 'SNMP::Info::Layer2::ECI',
1795 => 'SNMP::Info::Layer2::Paradyne',
1872 => 'SNMP::Info::Layer3::AlteonAD',
1890 => 'SNMP::Info::Layer3::Redlion',
1916 => 'SNMP::Info::Layer3::Extreme',
@@ -1785,11 +1788,12 @@ sub device_type {
26543 => 'SNMP::Info::Layer3::IBMGbTor',
26928 => 'SNMP::Info::Layer2::Aerohive',
27514 => 'SNMP::Info::Layer3::Qtech',
32761 => 'SNMP::Info::Layer3::Rotek',
32761 => 'SNMP::Info::Layer3::Deliberant',
34300 => 'SNMP::Info::Layer3::Eltex',
35265 => 'SNMP::Info::Layer3::Eltex',
40418 => 'SNMP::Info::Layer3::Nag',
41752 => 'SNMP::Info::Layer3::Raisecom',
41752 => 'SNMP::Info::Layer3::Rotek',
42926 => 'SNMP::Info::Layer2::NSC',
);
my %l1sysoidmap = (
@@ -1805,6 +1809,7 @@ sub device_type {
12532 => 'SNMP::Info::Layer7::Neoteris',
14525 => 'SNMP::Info::Layer2::Trapeze',
26866 => 'SNMP::Info::Layer7::Gigamon',
41752 => 'SNMP::Info::Layer3::Rotek', #Rotek and Raisecom fucking crap -(
);
# Get just the enterprise number for generic mapping

144
lib/SNMP/Info/Layer2/NSC.pm Executable file
View 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
View 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

View File

@@ -110,7 +110,7 @@ sub os {
}
sub vendor {
return 'alcatel-lucent';
return 'alcatel';
}
sub os_ver {

View File

@@ -74,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();
}
@@ -102,54 +114,74 @@ sub os {
sub os_ver {
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 {
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 fwver {
my $dlink=shift;
my $model = $dlink->model();
my $id = $dlink->id();
my $fw;
if ($model =~ /1210/) {
#Due to the zoo of MIB from DLink by 1210 series
$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 brom {
my $obj = shift;
my $brom = undef;
$brom = norm($obj->session()->get('enterprises.171.10.94.89.89.2.10.0'));
return $brom if norm($brom);
}
sub hwver {
my $dlink=shift;
my $id = $dlink->id();
my $obj=shift;
my $id = $obj->id();
my $model = &SNMP::translateObj($id);
my $hw;
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');
my $hw = undef;
$hw = $dlink->session()->get('rmon.19.3.0');
return $hw if defined($hw);
#Due to the zoo of MIB from DLink by 1210 series
$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 {

View 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

View File

@@ -23,22 +23,15 @@ $VERSION = '3.70-135';
%GLOBALS = (
%SNMP::Info::Layer3::GLOBALS,
'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',
'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',
'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',
'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',
'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',
'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, );
@@ -47,45 +40,20 @@ $VERSION = '3.70-135';
sub vendor {
my $obj = shift;
return main($obj)->{vendor};
return 'raisecom';
}
sub os {
my $obj = shift;
return main($obj)->{os};
return 'raisecom-os';
}
sub main {
my $obj = shift;
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;
#Rotek kostilyng
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])$/) {
if ($id =~ /8886\.6\.(140|191|150|21[3,4])$/) {
$model = $obj->model_oid_8886_6_140 || undef;
$obj->os_ver_oid_8886_6_140 =~ /ROS_(.*)\.ISCOM.*\.(\d*\.+\d*)/;
@@ -100,7 +68,7 @@ sub main {
#All another known ways to 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;
last;
}
@@ -122,36 +90,71 @@ sub main {
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 = $obj->serial_oid_8886_6_140 || undef;
####
#final formatting before output.
####
$model .= ' HW:' . $hw if defined($model) and defined($hw);
$os_ver .= ' bootrom:' . $brom if defined($os_ver) and defined($brom);
#$model .= ' HW:' . $hw if defined($model) and defined($hw);
#$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 {
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 {
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 {
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;

View File

@@ -20,9 +20,7 @@ $VERSION = '3.70-135';
%GLOBALS = (
%SNMP::Info::Layer3::GLOBALS,
'model_41752' => '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',
'model_oid' => 'enterprises.41752.3.1.1.1.3.0',
);
%FUNCS = ( %SNMP::Info::Layer3::FUNCS, );
@@ -34,33 +32,91 @@ sub vendor {
}
sub os {
return 'rotek';
return 'rotek-os';
}
sub os_ver {
my $obj = shift;
my $os_ver;
my $os_ver_oid = $obj->description();
$os_ver_oid =~ /\,\s(.*)/;
$os_ver = $1;
my $os_ver = undef;
if (defined $os_ver) {
return $os_ver;
my $os_ver_oid = $obj->os_ver_oid_41752 || undef;
$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';
}
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 {
my $obj = shift;
my $id = $obj->id();
if ($id =~ /32761$/) {
return $obj->model_rotek . ' (' . $obj->submodel . ')';
}
elsif ($id =~ /41752$/) {
return $obj->model_41752;
my $hw = $obj->hwver() || undef;
my $model = $obj->model_oid || undef;
while (not defined $model) {
$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();
}
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;
__END__
@@ -111,7 +167,7 @@ Returns 'rotek'
=item $obj->os()
Returns 'rotek'
Returns 'rotek-os'
=item $obj->os_ver()