From 1b18fb5ada2de44f0d39f2bdfaae20133ec5f0ac Mon Sep 17 00:00:00 2001 From: jbjohnso Date: Fri, 30 Jan 2009 16:25:55 +0000 Subject: [PATCH] -Suppress expected errors and provide a hint on a common cisco misconfiguration. git-svn-id: https://svn.code.sf.net/p/xcat/code/xcat-core/trunk@2674 8638fb3e-16cb-4fca-ae20-7b5d299a9bcd --- perl-xCAT/xCAT/MacMap.pm | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-) diff --git a/perl-xCAT/xCAT/MacMap.pm b/perl-xCAT/xCAT/MacMap.pm index 201e31b21..301eed4c2 100644 --- a/perl-xCAT/xCAT/MacMap.pm +++ b/perl-xCAT/xCAT/MacMap.pm @@ -217,11 +217,18 @@ sub handle_output { sub walkoid { my $session = shift; my $oid = shift; + my %namedargs = @_; my $retmap = undef; my $varbind = new SNMP::Varbind([$oid,'']); $session->getnext($varbind); if ($session->{ErrorStr}) { - xCAT::MsgUtils->message("S","Error communicating with ".$session->{DestHost}.": ".$session->{ErrorStr}); + unless ($namedargs{silentfail}) { + if ($namedargs{warncisco}) { + xCAT::MsgUtils->message("S","Error communicating with ".$session->{DestHost}." (First attempt at indexing by VLAN failed, ensure that the switch has the vlan configured such that it appears in 'show vlan'): ".$session->{ErrorStr}); + } else { + xCAT::MsgUtils->message("S","Error communicating with ".$session->{DestHost}.": ".$session->{ErrorStr}); + } + } return undef; } my $count=0; @@ -307,7 +314,7 @@ sub refresh_switch { return; } #Above is valid without community string indexing, on cisco, we need it on the next one and onward - my $iftovlanmap = walkoid($session,'.1.3.6.1.4.1.9.9.68.1.2.2.1.2'); + my $iftovlanmap = walkoid($session,'.1.3.6.1.4.1.9.9.68.1.2.2.1.2',silentfail=>1); my %vlans_to_check; if (defined($iftovlanmap)) { #We have a cisco, the intelligent thing is to do SNMP gets on the ports # that we can verify are populated per switch table @@ -325,8 +332,10 @@ sub refresh_switch { } my $vlan; + my $iscisco=0; foreach $vlan (sort keys %vlans_to_check) { #Sort, because if numbers, we want 1 first unless (not $vlan or $vlan eq 'NA' or $vlan eq '1') { #don't subject users to the context pain unless needed + $iscisco=1; if ($snmpver ne '3') { $session = new SNMP::Session( DestHost => $switch, @@ -363,12 +372,12 @@ sub refresh_switch { } } unless ($session) { return; } - my $bridgetoifmap = walkoid($session,'.1.3.6.1.2.1.17.1.4.1.2'); # Good for all switches + my $bridgetoifmap = walkoid($session,'.1.3.6.1.2.1.17.1.4.1.2',ciscowarn=>$iscisco); # Good for all switches # my $mactoindexmap = walkoid($session,'.1.3.6.1.2.1.17.4.3.1.2'); - my $mactoindexmap = walkoid($session,'.1.3.6.1.2.1.17.7.1.2.2.1.2'); + my $mactoindexmap = walkoid($session,'.1.3.6.1.2.1.17.7.1.2.2.1.2',silentfail=>1); unless (defined($mactoindexmap)) { #if no qbridge defined, try bridge mib, probably cisco #$mactoindexmap = walkoid($session,'.1.3.6.1.2.1.17.7.1.2.2.1.2'); - $mactoindexmap = walkoid($session,'.1.3.6.1.2.1.17.4.3.1.2'); + $mactoindexmap = walkoid($session,'.1.3.6.1.2.1.17.4.3.1.2',ciscowarn=>$iscisco); } #Ok, time to process the data foreach my $oid (keys %$namemap) { #$oid =~ m/1.3.6.1.2.1.31.1.1.1.1.(.*)/;