From 6d873132835f80e6b2342287cbcaf4a2a2d3a860 Mon Sep 17 00:00:00 2001 From: Max Baker <> Date: Thu, 11 Jun 2009 21:49:37 +0000 Subject: [PATCH] fix subtle bug in the loading order of CiscoVTP vs CiscoStpExtensions because of a conflict between Bridge::v_name and CiscoVTP::v_name --- Info/Layer3/C3550.pm | 73 ++++++++++++++++++++++++-------------------- Info/Layer3/C6500.pm | 58 ++++++++++++++++++++--------------- 2 files changed, 74 insertions(+), 57 deletions(-) diff --git a/Info/Layer3/C3550.pm b/Info/Layer3/C3550.pm index f76d849c..8017f0f6 100644 --- a/Info/Layer3/C3550.pm +++ b/Info/Layer3/C3550.pm @@ -1,7 +1,7 @@ # SNMP::Info::Layer3::C3550 # $Id$ # -# Copyright (c) 2008 Max Baker changes from version 0.8 and beyond. +# Copyright (c) 2008-2009 Max Baker changes from version 0.8 and beyond. # Copyright (c) 2004 Regents of the University of California # All rights reserved. # @@ -36,6 +36,7 @@ use Exporter; use SNMP::Info::CiscoVTP; use SNMP::Info::CiscoStack; use SNMP::Info::CDP; +use SNMP::Info::CiscoConfig; use SNMP::Info::CiscoStats; use SNMP::Info::CiscoImage; use SNMP::Info::CiscoPortSecurity; @@ -45,60 +46,66 @@ use SNMP::Info::CiscoStpExtensions; use vars qw/$VERSION %GLOBALS %MIBS %FUNCS %MUNGE/; -@SNMP::Info::Layer3::C3550::ISA - = qw/SNMP::Info::CiscoVTP SNMP::Info::CiscoStack - SNMP::Info::CDP SNMP::Info::CiscoStats - SNMP::Info::CiscoPortSecurity - SNMP::Info::CiscoImage SNMP::Info::CiscoPower - SNMP::Info::Layer3 +# NOTE : Top-most items gets precedence for @ISA +@SNMP::Info::Layer3::C3550::ISA = qw/ + SNMP::Info::CiscoVTP SNMP::Info::CiscoStpExtensions + SNMP::Info::CiscoStack + SNMP::Info::CDP + SNMP::Info::CiscoStats + SNMP::Info::CiscoImage + SNMP::Info::CiscoPortSecurity + SNMP::Info::CiscoConfig + SNMP::Info::CiscoPower + SNMP::Info::Layer3 Exporter/; @SNMP::Info::Layer3::C3550::EXPORT_OK = qw//; -$VERSION = '2.00'; +$VERSION = '2.01'; + +# NOTE: Order creates precedence +# Example: v_name exists in Bridge.pm and CiscoVTP.pm +# Bridge is called from Layer3 and CiscoStpExtensions +# So we want CiscoVTP to come last to get the right one. +# The @ISA order should match these orders. %MIBS = ( - %SNMP::Info::Layer3::MIBS, %SNMP::Info::CiscoPower::MIBS, - %SNMP::Info::CiscoPortSecurity::MIBS, %SNMP::Info::CiscoImage::MIBS, - %SNMP::Info::CiscoStats::MIBS, %SNMP::Info::CDP::MIBS, - %SNMP::Info::CiscoStack::MIBS, %SNMP::Info::CiscoVTP::MIBS, - %SNMP::Info::CiscoStpExtensions::MIBS, + %SNMP::Info::Layer3::MIBS, %SNMP::Info::CiscoPower::MIBS, + %SNMP::Info::CiscoConfig::MIBS, %SNMP::Info::CiscoPortSecurity::MIBS, + %SNMP::Info::CiscoImage::MIBS, %SNMP::Info::CiscoStats::MIBS, + %SNMP::Info::CDP::MIBS, %SNMP::Info::CiscoStack::MIBS, + %SNMP::Info::CiscoStpExtensions::MIBS, %SNMP::Info::CiscoVTP::MIBS, ); %GLOBALS = ( %SNMP::Info::Layer3::GLOBALS, - %SNMP::Info::CiscoStpExtensions::GLOBALS, %SNMP::Info::CiscoPower::GLOBALS, + %SNMP::Info::CiscoConfig::GLOBALS, %SNMP::Info::CiscoPortSecurity::GLOBALS, %SNMP::Info::CiscoImage::GLOBALS, %SNMP::Info::CiscoStats::GLOBALS, %SNMP::Info::CDP::GLOBALS, %SNMP::Info::CiscoStack::GLOBALS, + %SNMP::Info::CiscoStpExtensions::GLOBALS, %SNMP::Info::CiscoVTP::GLOBALS, - 'ports2' => 'ifNumber', ); %FUNCS = ( - %SNMP::Info::Layer3::FUNCS, %SNMP::Info::CiscoPower::FUNCS, - %SNMP::Info::CiscoPortSecurity::FUNCS, %SNMP::Info::CiscoImage::FUNCS, - %SNMP::Info::CiscoStats::FUNCS, %SNMP::Info::CDP::FUNCS, - %SNMP::Info::CiscoStack::FUNCS, %SNMP::Info::CiscoVTP::FUNCS, - %SNMP::Info::CiscoStpExtensions::FUNCS, + %SNMP::Info::Layer3::FUNCS, %SNMP::Info::CiscoPower::FUNCS, + %SNMP::Info::CiscoConfig::FUNCS, %SNMP::Info::CiscoPortSecurity::FUNCS, + %SNMP::Info::CiscoImage::FUNCS, %SNMP::Info::CiscoStats::FUNCS, + %SNMP::Info::CDP::FUNCS, %SNMP::Info::CiscoStack::FUNCS, + %SNMP::Info::CiscoStpExtensions::FUNCS, %SNMP::Info::CiscoVTP::FUNCS, ); %MUNGE = ( - # Inherit all the built in munging - %SNMP::Info::Layer3::MUNGE, - %SNMP::Info::CiscoStpExtensions::MUNGE, - %SNMP::Info::CiscoPower::MUNGE, - %SNMP::Info::CiscoPortSecurity::MUNGE, - %SNMP::Info::CiscoImage::MUNGE, - %SNMP::Info::CiscoStats::MUNGE, - %SNMP::Info::CDP::MUNGE, - %SNMP::Info::CiscoStack::MUNGE, - %SNMP::Info::CiscoVTP::MUNGE, + %SNMP::Info::Layer3::MUNGE, %SNMP::Info::CiscoPower::MUNGE, + %SNMP::Info::CiscoConfig::MUNGE, %SNMP::Info::CiscoPortSecurity::MUNGE, + %SNMP::Info::CiscoImage::MUNGE, %SNMP::Info::CiscoStats::MUNGE, + %SNMP::Info::CDP::MUNGE, %SNMP::Info::CiscoStack::MUNGE, + %SNMP::Info::CiscoStpExtensions::MUNGE, %SNMP::Info::CiscoVTP::MUNGE, ); sub vendor { @@ -122,14 +129,14 @@ sub model { sub ports { my $c3550 = shift; - my $ports2 = $c3550->ports2(); - my $id = $c3550->id(); my $model = &SNMP::translateObj($id); if ( $model =~ /(12|24|48)(C|T|TS|G|TS-E|TS-S|T-E)?$/ ) { return $1; } - return $ports2; + + my $ports = $c3550->orig_ports(); + return $ports; } # Verions prior to 12.1(22)EA1a use the older CiscoStack method diff --git a/Info/Layer3/C6500.pm b/Info/Layer3/C6500.pm index a036c547..9b9d9f71 100644 --- a/Info/Layer3/C6500.pm +++ b/Info/Layer3/C6500.pm @@ -1,7 +1,7 @@ # SNMP::Info::Layer3::C6500 # $Id$ # -# Copyright (c) 2008 Max Baker +# Copyright (c) 2008-2009 Max Baker # All rights reserved. # # Redistribution and use in source and binary forms, with or without @@ -32,7 +32,6 @@ package SNMP::Info::Layer3::C6500; use strict; use Exporter; -use SNMP::Info::CiscoVTP; use SNMP::Info::CiscoStack; use SNMP::Info::CDP; use SNMP::Info::CiscoStats; @@ -42,32 +41,43 @@ use SNMP::Info::CiscoConfig; use SNMP::Info::CiscoPower; use SNMP::Info::Layer3; use SNMP::Info::CiscoStpExtensions; +use SNMP::Info::CiscoVTP; use vars qw/$VERSION %GLOBALS %MIBS %FUNCS %MUNGE/; -@SNMP::Info::Layer3::C6500::ISA - = qw/SNMP::Info::CiscoVTP SNMP::Info::CiscoStack - SNMP::Info::CDP SNMP::Info::CiscoStats +# NOTE : Top-most items gets precedence for @ISA +@SNMP::Info::Layer3::C6500::ISA = qw/ + SNMP::Info::CiscoVTP + SNMP::Info::CiscoStpExtensions + SNMP::Info::CiscoStack + SNMP::Info::CDP SNMP::Info::CiscoImage + SNMP::Info::CiscoStats SNMP::Info::CiscoPortSecurity SNMP::Info::CiscoConfig SNMP::Info::CiscoPower SNMP::Info::Layer3 - SNMP::Info::CiscoStpExtensions - Exporter/; + Exporter +/; @SNMP::Info::Layer3::C6500::EXPORT_OK = qw//; use vars qw/$VERSION %GLOBALS %MIBS %FUNCS %MUNGE/; -$VERSION = '2.00'; +$VERSION = '2.01'; + +# NOTE: Order creates precedence +# Example: v_name exists in Bridge.pm and CiscoVTP.pm +# Bridge is called from Layer3 and CiscoStpExtensions +# So we want CiscoVTP to come last to get the right one. +# The @ISA order should match these orders. %MIBS = ( - %SNMP::Info::Layer3::MIBS, %SNMP::Info::CiscoPower::MIBS, - %SNMP::Info::CiscoConfig::MIBS, %SNMP::Info::CiscoPortSecurity::MIBS, - %SNMP::Info::CiscoImage::MIBS, %SNMP::Info::CiscoStats::MIBS, - %SNMP::Info::CDP::MIBS, %SNMP::Info::CiscoStack::MIBS, - %SNMP::Info::CiscoVTP::MIBS, %SNMP::Info::CiscoStpExtensions::MIBS, + %SNMP::Info::Layer3::MIBS, %SNMP::Info::CiscoPower::MIBS, + %SNMP::Info::CiscoConfig::MIBS, %SNMP::Info::CiscoPortSecurity::MIBS, + %SNMP::Info::CiscoImage::MIBS, %SNMP::Info::CiscoStats::MIBS, + %SNMP::Info::CDP::MIBS, %SNMP::Info::CiscoStack::MIBS, + %SNMP::Info::CiscoStpExtensions::MIBS, %SNMP::Info::CiscoVTP::MIBS, ); %GLOBALS = ( @@ -79,25 +89,25 @@ $VERSION = '2.00'; %SNMP::Info::CiscoStats::GLOBALS, %SNMP::Info::CDP::GLOBALS, %SNMP::Info::CiscoStack::GLOBALS, - %SNMP::Info::CiscoVTP::GLOBALS, %SNMP::Info::CiscoStpExtensions::GLOBALS, + %SNMP::Info::CiscoVTP::GLOBALS, ); %FUNCS = ( - %SNMP::Info::Layer3::FUNCS, %SNMP::Info::CiscoPower::FUNCS, - %SNMP::Info::CiscoConfig::FUNCS, %SNMP::Info::CiscoPortSecurity::FUNCS, - %SNMP::Info::CiscoImage::FUNCS, %SNMP::Info::CiscoStats::FUNCS, - %SNMP::Info::CDP::FUNCS, %SNMP::Info::CiscoStack::FUNCS, - %SNMP::Info::CiscoVTP::FUNCS, %SNMP::Info::CiscoStpExtensions::FUNCS, + %SNMP::Info::Layer3::FUNCS, %SNMP::Info::CiscoPower::FUNCS, + %SNMP::Info::CiscoConfig::FUNCS, %SNMP::Info::CiscoPortSecurity::FUNCS, + %SNMP::Info::CiscoImage::FUNCS, %SNMP::Info::CiscoStats::FUNCS, + %SNMP::Info::CDP::FUNCS, %SNMP::Info::CiscoStack::FUNCS, + %SNMP::Info::CiscoStpExtensions::FUNCS, %SNMP::Info::CiscoVTP::FUNCS, ); %MUNGE = ( - %SNMP::Info::Layer3::MUNGE, %SNMP::Info::CiscoPower::MUNGE, - %SNMP::Info::CiscoConfig::MUNGE, %SNMP::Info::CiscoPortSecurity::MUNGE, - %SNMP::Info::CiscoImage::MUNGE, %SNMP::Info::CiscoStats::MUNGE, - %SNMP::Info::CDP::MUNGE, %SNMP::Info::CiscoStack::MUNGE, - %SNMP::Info::CiscoVTP::MUNGE, %SNMP::Info::CiscoStpExtensions::MUNGE, + %SNMP::Info::Layer3::MUNGE, %SNMP::Info::CiscoPower::MUNGE, + %SNMP::Info::CiscoConfig::MUNGE, %SNMP::Info::CiscoPortSecurity::MUNGE, + %SNMP::Info::CiscoImage::MUNGE, %SNMP::Info::CiscoStats::MUNGE, + %SNMP::Info::CDP::MUNGE, %SNMP::Info::CiscoStack::MUNGE, + %SNMP::Info::CiscoStpExtensions::MUNGE, %SNMP::Info::CiscoVTP::MUNGE, ); sub vendor {