From 2f4704b18dce56179e37217be5a3d1cf5fde03c1 Mon Sep 17 00:00:00 2001 From: Max Baker <> Date: Tue, 6 Jan 2004 23:55:47 +0000 Subject: [PATCH] *** empty log message *** --- Info/Layer2/Allied.pm | 246 +++++++++++++++++++++++++++++++++++++ Info/Layer2/C2900.pm | 1 + Info/Layer2/ZyXEL_DSLAM.pm | 224 +++++++++++++++++++++++++++++++++ 3 files changed, 471 insertions(+) create mode 100644 Info/Layer2/Allied.pm create mode 100644 Info/Layer2/ZyXEL_DSLAM.pm diff --git a/Info/Layer2/Allied.pm b/Info/Layer2/Allied.pm new file mode 100644 index 00000000..36791abe --- /dev/null +++ b/Info/Layer2/Allied.pm @@ -0,0 +1,246 @@ +# SNMP::Info::Layer2::Allied +# Max Baker , Dmitry Sergienko +# +# Copyright (c) 2004 Max Baker +# 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 Netdisco 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::Allied; +$VERSION = 0.8; +# $Id$ +use strict; + +use Exporter; +use SNMP::Info::Layer2; +use SNMP::Info::Layer1; + +@SNMP::Info::Layer2::Allied::ISA = qw/SNMP::Info::Layer2 Exporter/; +@SNMP::Info::Layer2::Allied::EXPORT_OK = qw//; + +use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE $AUTOLOAD $INIT $DEBUG/; + +%GLOBALS = ( + %SNMP::Info::Layer2::GLOBALS + ); + +%FUNCS = (%SNMP::Info::Layer2::FUNCS, + 'ip_adresses'=> 'atNetAddress', + 'ip_mac' => 'atPhysAddress', + 'i_name' => 'ifName', + 'i_up2' => 'ifOperStatus', + ); + +%MIBS = ( + %SNMP::Info::Layer2::MIBS, + 'AtiSwitch-MIB' => 'atiswitchProductType', + 'AtiStackInfo-MIB' => 'atiswitchEnhancedStacking', + ); + +%MUNGE = (%SNMP::Info::Layer2::MUNGE, + ); + +sub vendor { + return 'allied'; +} + +sub os { + return 'allied'; +} + +sub os_ver { + my $allied = shift; + my $descr = $allied->description(); + + if ($descr =~ m/version (\d+\.\d+)/){ + return $1; + } +} + +sub model { + my $allied = shift; + + my $desc = $allied->description(); + + if ($desc =~ /(AT-80\d{2}\S*)/){ + return $1; + } + return undef; +} + +sub ip { + my $allied = shift; + my $ip_hash = $allied->ip_addresses(); + my $ip; + my $found_ip; + + foreach $ip (values %{$ip_hash}) { + my $found_ip = SNMP::Info::munge_ip($ip) if (defined $ip); + last; # this is only one IP address + } + return $found_ip; +} + +sub mac{ + my $allied = shift; + my $mac_hash = $allied->ip_mac(); + my $mac; + my $found_mac; + + foreach $mac (values %{$mac_hash}) { + $found_mac = SNMP::Info::munge_mac($mac); + last; # this is only one MAC address + } + return $found_mac; +} + +sub i_up { + my $allied = shift; + + my $i_up = SNMP::Info::Layer1::i_up($allied); + my $i_up2 = $allied->i_up2(); + + foreach my $port (keys %$ati_up){ + my $up = $ati_up->{$port}; + $i_up->{$port} = 'down' if $up eq 'linktesterror'; + $i_up->{$port} = 'up' if $up eq 'nolinktesterror'; + } + + return $i_up; +} +1; +__END__ + +=head1 NAME + +SNMP::Info::Layer2::Allied - SNMP Interface to Allied Telesyn switches + +=head1 AUTHOR + +Max Baker (C) + +=head1 SYNOPSIS + + # Let SNMP::Info determine the correct subclass for you. + my $allied = new SNMP::Info( + AutoSpecify => 1, + Debug => 1, + # These arguments are passed directly on to SNMP::Session + DestHost => 'myhub', + Community => 'public', + Version => 1 + ) + or die "Can't connect to DestHost.\n"; + + my $class = $l1->class(); + print "SNMP::Info determined this device to fall under subclass : $class\n"; + +=head1 DESCRIPTION + +Provides abstraction to the configuration information obtainable from a +Allied device through SNMP. See inherited classes' documentation for +inherited methods. + +=head2 Inherited Classes + +=over + +=item SNMP::Info::Layer1 + +=back + +=head2 Required MIBs + +=over + +=item ATI-MIB + +Download for your device from http://www.allied-telesyn.com/allied/support/ + +=item Inherited Classes + +MIBs listed in SNMP::Info::Layer1 and its inherited classes. + +=back + +=head1 GLOBALS + +These are methods that return scalar value from SNMP + +=head2 Overrides + +=over + +=item $allied->vendor() + +Returns 'allied' :) + +=item $allied->os() + +Returns 'allied' + +=item $allied->os_ver() + +Culls Version from description() + +=item $allied->root_ip() + +Returns IP Address of Managed Hub. + +(B) + +=item $allied->model() + +Trys to cull out AT-nnnnX out of the description field. + +=back + +=head2 Global Methods imported from SNMP::Info::Layer1 + +See documentation in SNMP::Info::Layer1 for details. + +=head1 TABLE ENTRIES + +=head2 Overrides + +=over + +=item $allied->i_name() + +Returns reference to map of IIDs to human-set port name. + +=item $allied->i_up() + +Returns reference to map of IIDs to link status. Changes +the values of ati_up() to 'up' and 'down'. + +=back + +=head2 Allied MIB + +=over + +=back + +=cut diff --git a/Info/Layer2/C2900.pm b/Info/Layer2/C2900.pm index 3def4b73..60881388 100644 --- a/Info/Layer2/C2900.pm +++ b/Info/Layer2/C2900.pm @@ -49,6 +49,7 @@ use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE $AUTOLOAD $INIT $DEBUG/; %FUNCS = (%SNMP::Info::Layer2::FUNCS, %SNMP::Info::CiscoVTP::FUNCS, + 'i_name' => 'ifAlias', # C2900PortEntry 'c2900_p_index' => 'c2900PortIfIndex', 'c2900_p_duplex' => 'c2900PortDuplexStatus', diff --git a/Info/Layer2/ZyXEL_DSLAM.pm b/Info/Layer2/ZyXEL_DSLAM.pm new file mode 100644 index 00000000..ae15aef6 --- /dev/null +++ b/Info/Layer2/ZyXEL_DSLAM.pm @@ -0,0 +1,224 @@ +# SNMP::Info::Layer2::ZyXEL_DSLAM +# Dmitry Sergienko +# +# Copyright (c) 2004 Max Baker +# 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 Netdisco 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::ZyXEL_DSLAM; +$VERSION = 0.8; +# $Id$ +use strict; + +use Exporter; +use SNMP::Info::Layer2; + +@SNMP::Info::Layer2::ZyXEL_DSLAM::ISA = qw/SNMP::Info::Layer2 Exporter/; +@SNMP::Info::Layer2::ZyXEL_DSLAM::EXPORT_OK = qw//; + +use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE $AUTOLOAD $INIT $DEBUG/; + +# Set for No CDP +%GLOBALS = ( + %SNMP::Info::Layer2::GLOBALS + ); + +%FUNCS = (%SNMP::Info::Layer2::FUNCS, + 'ip_adresses' => 'ipAdEntAddr', + 'i_name' => 'ifDescr', + 'i_description' => 'adslLineConfProfile', + ); + +%MIBS = ( + %SNMP::Info::Layer2::MIBS, + 'ADSL-LINE-MIB' => 'adslLineConfProfile' + ); + +%MUNGE = (%SNMP::Info::Layer2::MUNGE + ); + + +sub layers { + my $zyxel = shift; + my $layers = $zyxel->layers(); + return $layers if defined $layers; + + # If these don't claim to have any layers, so we'll give them 1+2 + return '00000011'; +} + +sub vendor { + return 'ZyXEL'; +} + +sub os { + return 'ZyXEL'; +} + +sub os_ver { + my $zyxel = shift; + my $descr = $zyxel->description(); + + if ($descr =~ m/version (\S+) /){ + return $1; + } + return undef; +} + +sub model { + my $zyxel = shift; + + my $desc = $zyxel->description(); + + if ($desc =~ /8-port ADSL Module\(Annex A\)/){ + return "AAM1008-61"; + } elsif ($desc =~ /8-port ADSL Module\(Annex B\)/){ + return "AAM1008-63"; + } + return undef; +} + +sub ip{ + my $zyxel = shift; + my $ip_hash = $zyxel->ip_addresses(); + my $ip; + + foreach $ip (keys %{$ip_hash}) { + my $found_ip = $ip if (defined $ip and $ip =~ /\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$/); + } + return $ip; +} +1; +__END__ + +=head1 NAME + +SNMP::Info::Layer2::ZyXEL_DSLAM - SNMP Interface to ZyXEL DSLAM + +=head1 AUTHOR + +Dmitry Sergienko (C) + +=head1 SYNOPSIS + + # Let SNMP::Info determine the correct subclass for you. + my $zyxel = new SNMP::Info( + AutoSpecify => 1, + Debug => 1, + # These arguments are passed directly on to SNMP::Session + DestHost => 'myhub', + Community => 'public', + Version => 1 + ) + or die "Can't connect to DestHost.\n"; + + my $class = $l2->class(); + print "SNMP::Info determined this device to fall under subclass : $class\n"; + +=head1 DESCRIPTION + +Provides abstraction to the configuration information obtainable from a +ZyXEL device through SNMP. See inherited classes' documentation for +inherited methods. + +=head2 Inherited Classes + +=over + +=item SNMP::Info::Layer2 + +=back + +=head2 Required MIBs + +=over + +=item ADSL-LINE-MIB + +This MIB assumedly obtainable through ZyXEL or possibly included with your device. + +=item Inherited Classes + +MIBs listed in SNMP::Info::Layer2 and their inherited classes. + +=back + +=head1 GLOBALS + +These are methods that return scalar value from SNMP + +=head2 Overrides + +=over + +=item $zyxel->vendor() + +Returns 'ZyXEL' :) + +=item $zyxel->os() + +Returns 'ZyXEL' + +=item $zyxel->os_ver() + +Culls Version from description() + +=item $zyxel->ip() + +Returns IP Address of DSLAM. + +(B) + +=item $zyxel->model() + +Trys to cull out model out of the description field. + +=back + +=head2 Global Methods imported from SNMP::Info::Layer2 + +See documentation in SNMP::Info::Layer2 for details. + +=head1 TABLE ENTRIES + +=head2 Overrides + +=over + +=item $zyxel->i_name() + +Returns reference to map of IIDs to port name (B). + +=item $zyxel->i_description() + +Returns reference to map of IIDs to human-set port description (profile name). + +=back + +=head2 Table Methods imported from SNMP::Info::Layer2 + +See documentation in SNMP::Info::Layer2 for details. + +=cut