diff --git a/ChangeLog b/ChangeLog index 49ff8e6a..9a7cae0f 100644 --- a/ChangeLog +++ b/ChangeLog @@ -4,6 +4,7 @@ version 2.09 [NEW FEATURES] + * Support for Avaya Secure Routers in new class L3::Tasman * [3381027] Support for Cisco Nexus in new class L3::Nexus * Add EDP and LLDP L2 Topology to L3::Extreme * [1424336] Support for Extreme Discovery Protocol (EDP) diff --git a/Info.pm b/Info.pm index 9c171910..7a13e6f4 100644 --- a/Info.pm +++ b/Info.pm @@ -795,6 +795,12 @@ Subclass for Generic Sun Routers running SunOS. See documentation in L for details. +=item SNMP::Info::Layer3::Tasman + +Subclass for Avaya Secure Routers. + +See documentation in L for details. + =item SNMP::Info::Layer3::Timetra Alcatel-Lucent SR Class. @@ -1408,6 +1414,10 @@ sub device_type { # Cisco FWSM $objtype = 'SNMP::Info::Layer3::CiscoFWSM' if ( $desc =~ /Cisco Firewall Services Module/i ); + + # Avaya Secure Router + $objtype = 'SNMP::Info::Layer3::Tasman' + if ( $desc =~ /^(avaya|nortel)\s+(SR|secure\srouter)\s+\d{4}/i ); # HP VirtualConnect blade switches $objtype = 'SNMP::Info::Layer2::HPVC' diff --git a/Info/Layer3/Tasman.pm b/Info/Layer3/Tasman.pm new file mode 100644 index 00000000..408f320b --- /dev/null +++ b/Info/Layer3/Tasman.pm @@ -0,0 +1,259 @@ +# SNMP::Info::Layer3::Tasman +# +# Copyright (c) 2012 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::Layer3::Tasman; + +use strict; +use Exporter; + +use SNMP::Info::Layer3; +use SNMP::Info::MAU; + +@SNMP::Info::Layer3::Tasman::ISA = qw/SNMP::Info::MAU + SNMP::Info::Layer3 Exporter/; +@SNMP::Info::Layer3::Tasman::EXPORT_OK = qw//; + +use vars qw/$VERSION %GLOBALS %MIBS %FUNCS %MUNGE/; + +$VERSION = '2.09'; + +%MIBS = ( + %SNMP::Info::Layer3::MIBS, + %SNMP::Info::MAU::MIBS, + 'NT-ENTERPRISE-DATA-MIB' => 'ntEnterpriseRouters', + 'SYSTEM-MIB' => 'nnsysVersion', + 'CHASSIS-MIB' => 'nnchassisModel', + 'ENVIRONMENT-MIB' => 'nnenvPwrsupStatus', +); + +%GLOBALS = ( + %SNMP::Info::Layer3::GLOBALS, + %SNMP::Info::MAU::GLOBALS, + 'ps1_type' => 'nnenvPwrsupType.1', + 'ps1_status' => 'nnenvPwrsupStatus.1', + 'ps2_type' => 'nnenvPwrsupType.2', + 'ps2_status' => 'nnenvPwrsupStatus.2', +); + +%FUNCS = ( + %SNMP::Info::Layer3::FUNCS, + %SNMP::Info::MAU::FUNCS, +); + +%MUNGE = ( + %SNMP::Info::Layer3::MUNGE, + %SNMP::Info::MAU::MUNGE, +); + +# use MAU-MIB for admin. duplex and admin. speed +*SNMP::Info::Layer3::Tasman::i_duplex_admin + = \&SNMP::Info::MAU::mau_i_duplex_admin; +*SNMP::Info::Layer3::Tasman::i_speed_admin + = \&SNMP::Info::MAU::mau_i_speed_admin; + +sub vendor { + return 'avaya'; +} + +sub os { + return 'tasman'; +} + +sub os_ver { + my $tasman = shift; + my $version = $tasman->nnsysVersion() || ""; + my $descr = $tasman->description() || ""; + + # Newer versions + return $1 if ( $version =~ /^SW:\s+(.+?)\s+/ ); + # Older versions + return $1 if ( $descr =~ /Software Version\s+=\s+[r]*(.+),/); + # Can't find + return; +} + +sub model { + my $tasman = shift; + + my $id = $tasman->id(); + my $ch_model = $tasman->nnchassisModel(); + + return $ch_model if $ch_model; + + my $model = &SNMP::translateObj($id); + return $id unless defined $model; + + $model =~ s/^ntSecureRouter/SR/; + return $model; +} + +sub serial { + my $tasman = shift; + + # Newer versions of the software redefined the MIB in a non-backwards + # compatible manner. Try the old OID first. + my $serial = $tasman->nnchassisOperStatus(); + # Newer versions populate status, serial should contain some numbers + return $serial if ($serial !~ /^\D+$/); + + # Unfortunately newer versions don't seem to populate the newer OID. + return $tasman->nnchassisSerialNumber(); +} + +1; +__END__ + +=head1 NAME + +SNMP::Info::Layer3::Tasman - SNMP Interface to Avaya Secure Routers + +=head1 AUTHOR + +Eric Miller + +=head1 SYNOPSIS + + # Let SNMP::Info determine the correct subclass for you. + my $tasman = new SNMP::Info( + AutoSpecify => 1, + Debug => 1, + # These arguments are passed directly to SNMP::Session + DestHost => 'myswitch', + Community => 'public', + Version => 2 + ) + or die "Can't connect to DestHost.\n"; + + my $class = $tasman->class(); + print "SNMP::Info determined this device to fall under subclass : $class\n"; + +=head1 DESCRIPTION + +Subclass for Avaya Secure Routers + +=head2 Inherited Classes + +=over + +=item SNMP::Info::Layer3 + +=item SNMP::Info::MAU + +=back + +=head2 Required MIBs + +=over + +=item F + +=item F + +=item F + +=item F + +=item Inherited Classes' MIBs + +See L for its own MIB requirements. + +See L for its own MIB requirements. + +=back + +=head1 GLOBALS + +These are methods that return scalar values from SNMP + +=over + +=item $tasman->vendor() + +Returns 'avaya' + +=item $tasman->model() + +Tries to get the model from C and if not available +cross references $tasman->id() to F. + +Substitutes 'SR' for 'ntSecureRouter' in the name for readability. + +=item $tasman->os() + +Returns 'tasman' + +=item $tasman->os_ver() + +Grabs the os version from C + +=item $tasman->ps1_type() + +(C) + +=item $tasman->ps1_status() + +(C) + +=item $tasman->ps2_type() + +(C) + +=item $tasman->ps2_status() + +(C) + +=item $tasman->serial() + +Tries both (C) and (C for details. + +=head2 Global Methods imported from SNMP::Info::MAU + +See documentation in L 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::Layer3 + +See documentation in L for details. + +=head2 Table Methods imported from SNMP::Info::MAU + +See documentation in L for details. + +=cut diff --git a/MANIFEST b/MANIFEST index 1e8821a0..83db3996 100644 --- a/MANIFEST +++ b/MANIFEST @@ -82,6 +82,7 @@ Info/Layer3/Passport.pm Info/Layer3/Pf.pm Info/Layer3/SonicWALL.pm Info/Layer3/Sun.pm +Info/Layer3/Tasman.pm Info/Layer3/Timetra.pm Info/Layer7.pm Info/Layer7/APC.pm