# SNMP::Info::Layer1::Asante # Max Baker # # Copyright (c) 2004 Max Baker changes from version 0.8 and beyond. # # Copyright (c) 2002,2003 Regents of the University of California # 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::Layer1::Asante; $VERSION = 1.0; # $Id$ use strict; use Exporter; use SNMP::Info::Layer1; @SNMP::Info::Layer1::Asante::ISA = qw/SNMP::Info::Layer1 Exporter/; @SNMP::Info::Layer1::Asante::EXPORT_OK = qw//; use vars qw/$VERSION %FUNCS %GLOBALS %MIBS %MUNGE $AUTOLOAD $INIT $DEBUG/; # Set for No CDP %GLOBALS = ( %SNMP::Info::Layer1::GLOBALS, ); %FUNCS = (%SNMP::Info::Layer1::FUNCS, 'i_speed2' => 'ifSpeed', 'i_mac2' => 'ifPhysAddress', 'i_descr2' => 'ifDescr', 'i_name2' => 'ifName', 'asante_port' => 'ePortIndex', 'asante_group' => 'ePortGrpIndex', 'i_type' => 'ePortStateType', 'asante_up' => 'ePortStateLinkStatus', ); %MIBS = ( %SNMP::Info::Layer1::MIBS, 'ASANTE-HUB1012-MIB' => 'asante' ); %MUNGE = (%SNMP::Info::Layer1::MUNGE, 'i_mac2' => \&SNMP::Info::munge_mac, 'i_speed2' => \&SNMP::Info::munge_speed, ); sub interfaces { my $asante = shift; my $rptr_port = $asante->rptr_port(); my %interfaces; foreach my $port (keys %$rptr_port){ $interfaces{$port} = $port; } return \%interfaces; } sub os { return 'asante'; } sub os_ver { my $asante = shift; my $descr = $asante->description(); if ($descr =~ /software v(\d+\.\d+)/){ return $1; } } sub vendor { return 'asante'; } sub model { my $asante = shift; my $id = $asante->id(); my $model = &SNMP::translateObj($id); return $model; } sub i_up { my $asante = shift; my $asante_up = $asante->asante_up(); my $i_up = {}; foreach my $port (keys %$asante_up){ my $up = $asante_up->{$port}; $i_up->{$port} = 'down' if $up =~ /on/; $i_up->{$port} = 'up' if $up =~ /off/; } return $i_up; } sub i_speed { my $asante = shift; my $i_speed = $asante->i_speed2(); my %i_speed; $i_speed{"1.2"} = $i_speed->{1}; return \%i_speed; } sub i_mac { my $asante = shift; my $i_mac = $asante->i_mac2(); my %i_mac; $i_mac{"1.2"} = $i_mac->{1}; return \%i_mac; } sub i_description { return undef; } sub i_name { my $asante = shift; my $i_name = $asante->i_descr2(); my %i_name; $i_name{"1.2"} = $i_name->{1}; return \%i_name; } 1; __END__ =head1 NAME SNMP::Info::Layer1::Asante - SNMP Interface to old Asante 1012 Hubs =head1 AUTHOR Max Baker =head1 SYNOPSIS # Let SNMP::Info determine the correct subclass for you. my $asante = new SNMP::Info( AutoSpecify => 1, Debug => 1, # These arguments are passed directly on to SNMP::Session DestHost => 'myswitch', Community => 'public', Version => 2 ) or die "Can't connect to DestHost.\n"; my $class = $asante->class(); print "SNMP::Info determined this device to fall under subclass : $class\n"; =head1 DESCRIPTION Provides abstraction to the configuration information obtainable from a Asante device through SNMP. =head2 Inherited Classes =over =item SNMP::Info::Layer1 =back =head2 Required MIBs =over =item ASANTE-HUB1012-MIB Download from http://www.mibdepot.com =item MIBs listed in SNMP::Info::Layer1 =back =head1 GLOBALS =head2 Overrides =over =item $asante->os() Returns 'asante' =item $asante->os_ver() Culls software version from description() =item $asante->vendor() Returns 'asante' :) =item $asante->root_ip() Returns IP Address of Managed Hub. (B) =item $asante->model() Trys to cull out AT-nnnnX out of the description field. =back =head2 Globals inherited from SNMP::Info::Layer1 See documentation in SNMP::Info::Layer1 for details. =head1 TABLE ENTRIES =head2 Overrides =over =item $asante->i_name() Returns reference to map of IIDs to human-set port name. =item $asante->i_up() Returns reference to map of IIDs to link status. Changes the values of ati_up() to 'up' and 'down'. =back =head2 Asante MIB =over =item $asante->ati_p_name() (B) =item $asante->ati_up() (B) =back =head2 Table Methods imported from SNMP::Info::Layer1 See documentation in SNMP::Info::Layer1 for details. =cut