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,
 | 
			
		||||
     $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
									
								
							
							
						
						
									
										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 {
 | 
			
		||||
    return 'alcatel-lucent';
 | 
			
		||||
    return 'alcatel';
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
sub os_ver {
 | 
			
		||||
 
 | 
			
		||||
@@ -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 {
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										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 = (
 | 
			
		||||
    %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;
 | 
			
		||||
 
 | 
			
		||||
@@ -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()
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user