From ddca296e2af6cc09d2607e51fc69364c5c9de412 Mon Sep 17 00:00:00 2001 From: Max Baker <> Date: Tue, 20 Jun 2006 03:58:10 +0000 Subject: [PATCH] added generic L2::Cisco class and fixed warnings in CiscoStack --- ChangeLog | 2 ++ Info.pm | 11 ++++++++++- Info/CiscoStack.pm | 29 ++++++++++++++++------------- 3 files changed, 28 insertions(+), 14 deletions(-) diff --git a/ChangeLog b/ChangeLog index 816e8720..329f3ad8 100644 --- a/ChangeLog +++ b/ChangeLog @@ -4,7 +4,9 @@ ChangeLog $Id$ version 1.04 + Added C1130 and C1240 to L2::Aironet (Ralf Gross) + Added detection for Cisco 2960. + + Added generic L2::Cisco Class * Corrected detection for Cisco Supervisor Engine 2 and 32 (IOS). + * Fixed warnings in CiscoStack version 1.03 (04/14/06) - Beta/developer release * Use ipNetToMedia table instead of atTable for ARP diff --git a/Info.pm b/Info.pm index 1cf4acc3..770182b2 100644 --- a/Info.pm +++ b/Info.pm @@ -38,7 +38,7 @@ and was orginally written by Max Baker. Currently being maintained by team of Open Source authors headed by Eric Miller and Bill Fenner. - + =head1 SYNOPSIS use SNMP::Info; @@ -372,6 +372,11 @@ does not support everything that has the name Catalyst. Subclass for Nortel/Bay Centillion and 5000BH ATM switches. +=item SNMP::Info::Layer2::Cisco + +Generic Cisco subclass for layer2 devices that are not yet supported +in more specific subclasses. + =item SNMP::Info::Layer2::Foundry Subclass for Foundry Switches. Tested on EdgeIron 24G. @@ -815,6 +820,7 @@ Algorithm for Subclass Detection: Catalyst 2970 -> SNMP::Info::Layer3::C6500 Catalyst 3550/3548 -> SNMP::Info::Layer3::C3550 Catalyst WS-C 2926,5xxx -> SNMP::Info::Layer2::Catalyst + Cisco (not covered by above) -> SNMP::Info::Layer2::Cisco Extreme -> SNMP::Info::Layer3::Extreme Foundry (EdgeIron,????) -> SNMP::Info::Layer2::Foundry HP Procurve -> SNMP::Info::Layer2::HP @@ -954,6 +960,9 @@ sub device_type { #Nortel 2270 $objtype = 'SNMP::Info::Layer2::N2270' if ($desc =~ /Nortel\s+(Networks\s+)??WLAN\s+-\s+Security\s+Switch/) ; + # Default generic cisco + $objtype = 'SNMP::Info::Layer2::Cisco' if ($objtype eq 'SNMP::Info::Layer2' and $desc =~ /\bCisco\b/); + } elsif ($info->has_layer(1)) { $objtype = 'SNMP::Info::Layer1'; # Allied crap-o-hub diff --git a/Info/CiscoStack.pm b/Info/CiscoStack.pm index 7391fb0b..e119badc 100644 --- a/Info/CiscoStack.pm +++ b/Info/CiscoStack.pm @@ -1,7 +1,7 @@ # SNMP::Info::CiscoStack # Max Baker # -# Copyright (c)2003,2004 Max Baker +# Copyright (c)2003,2004,2006 Max Baker # All rights reserved. # # Redistribution and use in source and binary forms, with or without @@ -170,15 +170,16 @@ sub serial { sub i_type { my $stack = shift; - my $p_port = $stack->p_port(); - my $p_type = $stack->p_type(); + my $p_port = $stack->p_port() || {}; + my $p_type = $stack->p_type() || {}; # Get more generic port types from IF-MIB - my $i_type = $stack->i_type2(); + my $i_type = $stack->i_type2() || {}; # Now Override w/ port entries foreach my $port (keys %$p_type) { my $iid = $p_port->{$port}; + next unless defined $iid; $i_type->{$iid} = $p_type->{$port}; } @@ -190,8 +191,8 @@ sub i_type { sub i_name { my $stack = shift; - my $p_port = $stack->p_port(); - my $p_name = $stack->p_name(); + my $p_port = $stack->p_port() || {}; + my $p_name = $stack->p_name() || {}; my %i_name; foreach my $port (keys %$p_name) { @@ -206,12 +207,13 @@ sub i_duplex { my $stack = shift; #my $i_duplex = $stack->SUPER::i_duplex(); - my $p_port = $stack->p_port(); - my $p_duplex = $stack->p_duplex(); + my $p_port = $stack->p_port() || {}; + my $p_duplex = $stack->p_duplex() || {}; my $i_duplex = {}; foreach my $port (keys %$p_duplex) { my $iid = $p_port->{$port}; + next unless defined $iid; $i_duplex->{$iid} = $p_duplex->{$port}; } return $i_duplex; @@ -220,8 +222,8 @@ sub i_duplex { sub i_duplex_admin { my $stack = shift; - my $p_port = $stack->p_port(); - my $p_duplex_admin = $stack->p_duplex_admin(); + my $p_port = $stack->p_port() || {}; + my $p_duplex_admin = $stack->p_duplex_admin() || {}; my %i_duplex_admin; foreach my $port (keys %$p_duplex_admin) { @@ -250,7 +252,7 @@ sub set_i_speed_admin { my $stack = shift; my ($speed, $iid) = @_; - my $p_port = $stack->p_port(); + my $p_port = $stack->p_port() || {}; my %reverse_p_port = reverse %$p_port; $speed = lc($speed); @@ -268,7 +270,7 @@ sub set_i_duplex_admin { my $stack = shift; my ($duplex, $iid) = @_; - my $p_port = $stack->p_port(); + my $p_port = $stack->p_port() || {}; my %reverse_p_port = reverse %$p_port; $duplex = lc($duplex); @@ -285,11 +287,12 @@ sub set_i_duplex_admin { sub interfaces { my $self = shift; my $i_index = $self->i_index(); - my $portnames = $self->p_port(); + my $portnames = $self->p_port() || {}; my %portmap = reverse %$portnames; my %interfaces = (); foreach my $iid (keys %$i_index) { + next unless defined $iid; my $if = $i_index->{$iid}; my $port = $portmap{$iid}; $interfaces{$iid} = $port || $if;