#142 Sixnet Switch Support

This commit is contained in:
Eric A. Miller
2018-04-12 22:57:54 -04:00
parent 9ed5a187a9
commit 4e18ccc9e2
5 changed files with 278 additions and 0 deletions

View File

@@ -2,6 +2,7 @@ Version 3.55
[NEW FEATURES] [NEW FEATURES]
* #253 Nexans switch support (paecker) * #253 Nexans switch support (paecker)
* #142 Sixnet Switch Support
[ENHANCEMENTS] [ENHANCEMENTS]

View File

@@ -61,6 +61,7 @@ lib/SNMP/Info/Layer2/Netgear.pm
lib/SNMP/Info/Layer2/Nexans.pm lib/SNMP/Info/Layer2/Nexans.pm
lib/SNMP/Info/Layer2/NWSS2300.pm lib/SNMP/Info/Layer2/NWSS2300.pm
lib/SNMP/Info/Layer2/Orinoco.pm lib/SNMP/Info/Layer2/Orinoco.pm
lib/SNMP/Info/Layer2/Sixnet.pm
lib/SNMP/Info/Layer2/Trapeze.pm lib/SNMP/Info/Layer2/Trapeze.pm
lib/SNMP/Info/Layer2/Ubiquiti.pm lib/SNMP/Info/Layer2/Ubiquiti.pm
lib/SNMP/Info/Layer2/ZyXEL_DSLAM.pm lib/SNMP/Info/Layer2/ZyXEL_DSLAM.pm
@@ -198,6 +199,7 @@ xt/lib/Test/SNMP/Info/Layer2/Netgear.pm
xt/lib/Test/SNMP/Info/Layer2/Nexans.pm xt/lib/Test/SNMP/Info/Layer2/Nexans.pm
xt/lib/Test/SNMP/Info/Layer2/NWSS2300.pm xt/lib/Test/SNMP/Info/Layer2/NWSS2300.pm
xt/lib/Test/SNMP/Info/Layer2/Orinoco.pm xt/lib/Test/SNMP/Info/Layer2/Orinoco.pm
xt/lib/Test/SNMP/Info/Layer2/Sixnet.pm
xt/lib/Test/SNMP/Info/Layer2/Trapeze.pm xt/lib/Test/SNMP/Info/Layer2/Trapeze.pm
xt/lib/Test/SNMP/Info/Layer2/Ubiquiti.pm xt/lib/Test/SNMP/Info/Layer2/Ubiquiti.pm
xt/lib/Test/SNMP/Info/Layer2/ZyXEL_DSLAM.pm xt/lib/Test/SNMP/Info/Layer2/ZyXEL_DSLAM.pm

View File

@@ -644,6 +644,12 @@ SNMP Interface to Juniper (Trapeze) Wireless Controllers
See documentation in L<SNMP::Info::Layer2::Trapeze> for details. See documentation in L<SNMP::Info::Layer2::Trapeze> for details.
=item SNMP::Info::Layer2::Sixnet
SNMP Interface to Sixnet industrial switches
See documentation in L<SNMP::Info::Layer2::Sixnet> for details.
=item SNMP::Info::Layer2::Ubiquiti =item SNMP::Info::Layer2::Ubiquiti
SNMP Interface to Ubiquiti Access Points and other devices SNMP Interface to Ubiquiti Access Points and other devices
@@ -1635,6 +1641,7 @@ sub device_type {
14525 => 'SNMP::Info::Layer2::Trapeze', 14525 => 'SNMP::Info::Layer2::Trapeze',
14823 => 'SNMP::Info::Layer3::Aruba', 14823 => 'SNMP::Info::Layer3::Aruba',
17163 => 'SNMP::Info::Layer3::Steelhead', 17163 => 'SNMP::Info::Layer3::Steelhead',
20540 => 'SNMP::Info::Layer2::Sixnet',
26543 => 'SNMP::Info::Layer3::IBMGbTor', 26543 => 'SNMP::Info::Layer3::IBMGbTor',
); );

View File

@@ -0,0 +1,182 @@
# SNMP::Info::Layer2::Sixnet
#
# Copyright (c) 2018 Eric Miller
# All rights reserved.
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions are met:
#
# * Redistributions of source code must retain the above copyright notice,
# this list of conditions and the following disclaimer.
# * Redistributions in binary form must reproduce the above copyright
# notice, this list of conditions and the following disclaimer in the
# documentation and/or other materials provided with the distribution.
# * Neither the name of the University of California, Santa Cruz nor the
# names of its contributors may be used to endorse or promote products
# derived from this software without specific prior written permission.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
# LIABLE FOR # ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
# POSSIBILITY OF SUCH DAMAGE.
package SNMP::Info::Layer2::Sixnet;
use strict;
use Exporter;
use SNMP::Info::Layer2;
@SNMP::Info::Layer2::Sixnet::ISA = qw/SNMP::Info::Layer2 Exporter/;
@SNMP::Info::Layer2::Sixnet::EXPORT_OK = qw//;
use vars qw/$VERSION %GLOBALS %FUNCS %MIBS %MUNGE/;
$VERSION = '3.54';
%MIBS = (%SNMP::Info::Layer2::MIBS, 'SIXNET-MIB' => 'sxid',);
%GLOBALS = (
%SNMP::Info::Layer2::GLOBALS,
'os_ver' => 'firmwareRevision',
's_model' => 'sxid',
'ps1_status' => 'p1status',
'ps2_status' => 'p2status',
);
%FUNCS = (%SNMP::Info::Layer2::FUNCS,);
%MUNGE = (%SNMP::Info::Layer2::MUNGE,);
sub vendor {
return 'sixnet';
}
sub os {
return 'sixnet';
}
sub model {
my $sixnet = shift;
my $s_model = $sixnet->s_model();
return $s_model if defined $s_model;
my $id = $sixnet->id();
return unless defined $id;
my $model = SNMP::translateObj($id);
return $model ? $model : $id;
}
1;
__END__
=head1 NAME
SNMP::Info::Layer2::Sixnet - SNMP Interface to Sixnet industrial switches
=head1 AUTHOR
Eric Miller
=head1 SYNOPSIS
my $sixnet = new SNMP::Info(
AutoSpecify => 1,
Debug => 1,
DestHost => 'myswitch',
Community => 'public',
Version => 2
)
or die "Can't connect to DestHost.\n";
my $class = $sixnet->class();
print " Using device sub class : $class\n";
=head1 DESCRIPTION
SNMP::Info::Layer2::Sixnet is a subclass of SNMP::Info that provides an
interface to Sixnet industrial switches.
For speed or debugging purposes you can call the subclass directly, but not
after determining a more specific class using the method above.
my $sixnet = new SNMP::Info::Layer2::Sixnet(...);
=head2 Inherited Classes
=over
=item SNMP::Info::Layer2
=back
=head2 Required MIBs
=over
=item F<SIXNET-MIB>
=back
=head2 Inherited MIBs
See L<SNMP::Info::Layer2/"Required MIBs"> for its MIB requirements.
=head1 GLOBALS
These are methods that return scalar value from SNMP
=over
=item $sixnet->vendor()
Returns 'sixnet'
=item $sixnet->os()
Returns 'sixnet'
=item $sixnet->os_ver()
Returns the software version returned by C<firmwareRevision>
=item $sixnet->model()
Returns model type. Returns C<sxid> if it exists, otherwise cross references
$sixnet->id() with the F<SIXNET-MIB>.
=item $sixnet->ps1_status()
(C<p1status>)
=item $sixnet->ps2_status()
(C<p2status>)
=back
=head2 Globals imported from SNMP::Info::Layer2
See L<SNMP::Info::Layer2/"GLOBALS"> for details.
=head1 TABLE METHODS
These are methods that return tables of information in the form of a reference
to a hash.
=head2 Table Methods imported from SNMP::Info::Layer2
See L<SNMP::Info::Layer2/"TABLE METHODS"> for details.
=cut

View File

@@ -0,0 +1,86 @@
# Test::SNMP::Info::Layer2::Sixnet
#
# Copyright (c) 2018 Eric Miller
# All rights reserved.
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions are met:
#
# * Redistributions of source code must retain the above copyright notice,
# this list of conditions and the following disclaimer.
# * Redistributions in binary form must reproduce the above copyright
# notice, this list of conditions and the following disclaimer in the
# documentation and/or other materials provided with the distribution.
# * Neither the name of the University of California, Santa Cruz nor the
# names of its contributors may be used to endorse or promote products
# derived from this software without specific prior written permission.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
# LIABLE FOR # ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
# POSSIBILITY OF SUCH DAMAGE.
package Test::SNMP::Info::Layer2::Sixnet;
use Test::Class::Most parent => 'My::Test::Class';
use SNMP::Info::Layer2::Sixnet;
sub setup : Tests(setup) {
my $test = shift;
$test->SUPER::setup;
# Start with a common cache that will serve most tests
my $cache_data = {
'_layers' => 2,
# This is made up as no snmpwalk of device
'_description' => 'SLX-18MG - Industrial Ethernet Managed Switch',
# SIXNET-MIB::etms
'_id' => '.1.3.6.1.4.1.20540.2.1',
'_s_model' => '01180S_18MG-x',
'store' => {},
};
$test->{info}->cache($cache_data);
}
sub os : Tests(2) {
my $test = shift;
can_ok($test->{info}, 'os');
is($test->{info}->os(), 'sixnet', q(OS returns 'sixnet'));
}
sub vendor : Tests(2) {
my $test = shift;
can_ok($test->{info}, 'vendor');
is($test->{info}->vendor(), 'sixnet', q(Vendor returns 'sixnet'));
}
sub model : Tests(5) {
my $test = shift;
can_ok($test->{info}, 'model');
is($test->{info}->model(), '01180S_18MG-x', q(Model is expected value));
$test->{info}{_s_model} = undef;
is($test->{info}->model(), 'etms', q(Model is expected value using id));
$test->{info}{_id} = '.100.3.6.1.4.1.20540.2.1';
is($test->{info}->model(), '.100.3.6.1.4.1.20540.2.1',
q(Model is expected value when id doesn't translate));
$test->{info}->clear_cache();
is($test->{info}->model(), undef, q(No data returns undef model));
}
1;