From 60871f7709561435f6ee0e73b2efd583f3f5bfc2 Mon Sep 17 00:00:00 2001 From: Jarrod Johnson Date: Sat, 20 May 2017 12:53:42 -0400 Subject: [PATCH] Workaround switches that report ifindex in bridge Some switches report ifindex instead of bridge index. This is not compliant behavior. However, we can detect that every last mac was a dead end, and assume this is the case to try to get better result. This won't work if there is overlap in interface and bridge indexes, so in that case, the spec compliant behavior is assumed. --- perl-xCAT/xCAT/MacMap.pm | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/perl-xCAT/xCAT/MacMap.pm b/perl-xCAT/xCAT/MacMap.pm index 54edb1824..23ceeb169 100644 --- a/perl-xCAT/xCAT/MacMap.pm +++ b/perl-xCAT/xCAT/MacMap.pm @@ -772,7 +772,6 @@ sub refresh_switch { xCAT::MsgUtils->message("S", "Error communicating with " . $session->{DestHost} . ": failed to get a valid response to BRIDGE-MIB request"); return; } - # 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', silentfail => 1, verbose => $self->{show_verbose_info}, switch => $switch, callback => $self->{callback}); unless (defined($mactoindexmap)) { #if no qbridge defined, try bridge mib, probably cisco @@ -783,6 +782,21 @@ sub refresh_switch { xCAT::MsgUtils->message("S", "Error communicating with " . $session->{DestHost} . ": Unable to get MAC entries via either BRIDGE or Q-BRIDE MIB"); return; } + my $bridgeifvalid = 0; + foreach (keys %$mactoindexmap) { + my $index = $mactoindexmap->{$_}; + if (defined($bridgetoifmap->{$index})) { + $bridgeifvalid = 1; + last; + } + } + unless ($bridgeifvalid) { + # create a dummy bridgetoifmap to cover switches that thing it should go straight to ifindex + $bridgetoifmap = {}; + foreach (keys %$namemap) { + $bridgetoifmap->{$_} = $_; + } + } if (defined($self->{collect_mac_info})) { my %index_to_mac = (); foreach (keys %$mactoindexmap) {