| #!/usr/bin/perl |
| |
| printf (STDERR "*** WARNING ***; this command is deprecated;\n"); |
| printf (STDERR " see ibnetdiscover cache features\n"); |
| printf (STDERR " and/or iblinkinfo \"check\" features\n\n"); |
| |
| # |
| # Read mapfile |
| # |
| open(MAP, "< ibdiscover.map"); |
| |
| while (<MAP>) { |
| ($pre, $port, $desc) = split /\|/; |
| $val{$pre} = $desc; |
| # print "Ack1 - $pre - $port - $desc\n"; |
| } |
| close(MAP); |
| |
| # |
| # Read old topo map in |
| # |
| open(TOPO, "< ibdiscover.topo"); |
| $topomap = 0; |
| |
| while (<TOPO>) { |
| $topomap = 1; |
| ($localPort, $localGuid, $remotePort, $remoteGuid) = split /\|/; |
| chomp $remoteGuid; |
| $var = sprintf("%s|%2s|%2s|%s", $localGuid, $localPort, $remotePort, |
| $remoteGuid); |
| $topo{$var} = 1; |
| # ${$pre} = $desc; |
| # print "Ack1 - $pre - $port - $desc\n"; |
| } |
| close(TOPO); |
| |
| # |
| # Read stdin and output enhanced output |
| # |
| # Search and replace =0x???? with value |
| # Search and replace -000???? with value |
| |
| open(TOPO2, " >ibdiscover.topo.new"); |
| while (<STDIN>) { |
| ($a, $b, $local, $d) = /([sh])([\s\S]*)=0x([a-f\d]*)([\s\S]*)/; |
| if ($local ne "") { |
| printf( |
| "\n%s GUID: %s %s\n", |
| ($a eq "s" ? "Switch" : "Host"), |
| $local, $val{$local} |
| ); |
| chomp $local; |
| $localGuid = $local; |
| } else { |
| ($localPort, $type, $remoteGuid, $remotePort) = |
| /([\s\S]*)"([SH])\-000([a-f\d]*)"([\s\S]*)\n/; |
| ($localPort) = $localPort =~ /\[(\d*)]/; |
| ($remotePort) = $remotePort =~ /\[(\d*)]/; |
| if ($remoteGuid ne "" && $localPort ne "") { |
| printf(TOPO2 "%d|%s|%d|%s\n", |
| $localPort, $localGuid, $remotePort, $remoteGuid); |
| $var = sprintf("%s|%2s|%2s|%s", |
| $localGuid, $localPort, $remotePort, $remoteGuid); |
| $topo{$var} += 1; |
| printf( |
| "Local: %2s Remote: %2s %7s GUID: %s Location: %s\n", |
| $localPort, |
| $remotePort, |
| ($type eq "H" ? "Host" : "Switch"), |
| $remoteGuid, |
| ($val{$remoteGuid} ne "" ? $val{$remoteGuid} : $remoteGuid) |
| ); |
| } |
| } |
| } |
| close(STDIN); |
| close(TOPO2); |
| |
| printf("\nDelta change in topo (change between successive runs)\n\n"); |
| |
| foreach $el (keys %topo) { |
| if ($topo{$el} < 2 || $topomap == 0) { |
| ($lg, $lp, $rp, $rg) = split(/\|/, $el); |
| printf( |
| "Link change: Local/Remote Port %2d/%2d Local/Remote GUID: %s/%s\n", |
| $lp, $rp, $lg, $rg); |
| printf("\tLocations: Local/Remote\n\t\t%s\n\t\t%s\n\n", |
| $val{$lg}, $val{$rg}); |
| } |
| } |
| |
| printf (STDERR "*** WARNING ***; this command is deprecated;\n"); |
| printf (STDERR " see ibnetdiscover cache features\n"); |
| printf (STDERR " and/or iblinkinfo \"check\" features\n\n"); |
| |