]> CyberLeo.Net >> Repos - FreeBSD/releng/9.2.git/blob - contrib/ofed/management/infiniband-diags/scripts/ibdiscover.pl
- Copy stable/9 to releng/9.2 as part of the 9.2-RELEASE cycle.
[FreeBSD/releng/9.2.git] / contrib / ofed / management / infiniband-diags / scripts / ibdiscover.pl
1 #!/usr/bin/perl
2
3 #
4 # Read mapfile
5 #
6 open(MAP, "< ibdiscover.map");
7
8 while (<MAP>) {
9         ($pre, $port, $desc) = split /\|/;
10         $val{$pre} = $desc;
11         #               print "Ack1 - $pre - $port - $desc\n";
12 }
13 close(MAP);
14
15 #
16 # Read old topo map in
17 #
18 open(TOPO, "< ibdiscover.topo");
19 $topomap = 0;
20
21 while (<TOPO>) {
22         $topomap = 1;
23         ($localPort, $localGuid, $remotePort, $remoteGuid) = split /\|/;
24         chomp $remoteGuid;
25         $var = sprintf("%s|%2s|%2s|%s", $localGuid, $localPort, $remotePort,
26                 $remoteGuid);
27         $topo{$var} = 1;
28         #       ${$pre} = $desc;
29         #               print "Ack1 - $pre - $port - $desc\n";
30 }
31 close(TOPO);
32
33 #
34 # Read stdin and output enhanced output
35 #
36 # Search and replace =0x???? with value
37 # Search and replace -000???? with value
38
39 open(TOPO2, " >ibdiscover.topo.new");
40 while (<STDIN>) {
41         ($a, $b, $local, $d) = /([sh])([\s\S]*)=0x([a-f\d]*)([\s\S]*)/;
42         if ($local ne "") {
43                 printf(
44                         "\n%s GUID: %s  %s\n",
45                         ($a eq "s" ? "Switch" : "Host"),
46                         $local, $val{$local}
47                 );
48                 chomp $local;
49                 $localGuid = $local;
50         } else {
51                 ($localPort, $type, $remoteGuid, $remotePort) =
52                   /([\s\S]*)"([SH])\-000([a-f\d]*)"([\s\S]*)\n/;
53                 ($localPort)  = $localPort  =~ /\[(\d*)]/;
54                 ($remotePort) = $remotePort =~ /\[(\d*)]/;
55                 if ($remoteGuid ne "" && $localPort ne "") {
56                         printf(TOPO2 "%d|%s|%d|%s\n",
57                                 $localPort, $localGuid, $remotePort, $remoteGuid);
58                         $var = sprintf("%s|%2s|%2s|%s",
59                                 $localGuid, $localPort, $remotePort, $remoteGuid);
60                         $topo{$var} += 1;
61                         printf(
62                                 "Local: %2s  Remote: %2s  %7s  GUID: %s  Location: %s\n",
63                                 $localPort,
64                                 $remotePort,
65                                 ($type eq "H" ? "Host" : "Switch"),
66                                 $remoteGuid,
67                                 ($val{$remoteGuid} ne "" ? $val{$remoteGuid} : $remoteGuid)
68                         );
69                 }
70         }
71 }
72 close(STDIN);
73 close(TOPO2);
74
75 printf("\nDelta change in topo (change between successive runs)\n\n");
76
77 foreach $el (keys %topo) {
78         if ($topo{$el} < 2 || $topomap == 0) {
79                 ($lg, $lp, $rp, $rg) = split(/\|/, $el);
80                 printf(
81 "Link change:  Local/Remote Port %2d/%2d Local/Remote GUID: %s/%s\n",
82                         $lp, $rp, $lg, $rg);
83                 printf("\tLocations: Local/Remote\n\t\t%s\n\t\t%s\n\n",
84                         $val{$lg}, $val{$rg});
85         }
86 }