|
Packit |
db064d |
#!/bin/sh
|
|
Packit |
db064d |
|
|
Packit |
db064d |
IBPATH=${IBPATH:-@IBSCRIPTPATH@}
|
|
Packit |
db064d |
|
|
Packit |
db064d |
usage() {
|
|
Packit |
db064d |
echo Usage: `basename $0` "[-h] [-b] [-v] [-N | -nocolor]" \
|
|
Packit |
db064d |
"[<topology-file> \| -C ca_name -P ca_port -t(imeout) timeout_ms]"
|
|
Packit |
db064d |
exit -1
|
|
Packit |
db064d |
}
|
|
Packit |
db064d |
|
|
Packit |
db064d |
user_abort() {
|
|
Packit |
db064d |
echo "Aborted"
|
|
Packit |
db064d |
exit 1
|
|
Packit |
db064d |
}
|
|
Packit |
db064d |
|
|
Packit |
db064d |
trap user_abort SIGINT
|
|
Packit |
db064d |
|
|
Packit |
db064d |
gflags=""
|
|
Packit |
db064d |
verbose=""
|
|
Packit |
db064d |
brief=""
|
|
Packit |
db064d |
v=0
|
|
Packit |
db064d |
ntype=""
|
|
Packit |
db064d |
nodeguid=""
|
|
Packit |
db064d |
topofile=""
|
|
Packit |
db064d |
ca_info=""
|
|
Packit |
db064d |
|
|
Packit |
db064d |
while [ "$1" ]; do
|
|
Packit |
db064d |
case $1 in
|
|
Packit |
db064d |
-h)
|
|
Packit |
db064d |
usage
|
|
Packit |
db064d |
;;
|
|
Packit |
db064d |
-N|-nocolor)
|
|
Packit |
db064d |
gflags=-N
|
|
Packit |
db064d |
;;
|
|
Packit |
db064d |
-v)
|
|
Packit |
db064d |
verbose=-v
|
|
Packit |
db064d |
brief=""
|
|
Packit |
db064d |
v=1
|
|
Packit |
db064d |
;;
|
|
Packit |
db064d |
-b)
|
|
Packit |
db064d |
brief=-b
|
|
Packit |
db064d |
verbose=""
|
|
Packit |
db064d |
;;
|
|
Packit |
db064d |
-P | -C | -t | -timeout)
|
|
Packit |
db064d |
case $2 in
|
|
Packit |
db064d |
-*)
|
|
Packit |
db064d |
usage
|
|
Packit |
db064d |
;;
|
|
Packit |
db064d |
esac
|
|
Packit |
db064d |
if [ x$2 = x ] ; then
|
|
Packit |
db064d |
usage
|
|
Packit |
db064d |
fi
|
|
Packit |
db064d |
ca_info="$ca_info $1 $2"
|
|
Packit |
db064d |
shift
|
|
Packit |
db064d |
;;
|
|
Packit |
db064d |
-*)
|
|
Packit |
db064d |
usage
|
|
Packit |
db064d |
;;
|
|
Packit |
db064d |
*)
|
|
Packit |
db064d |
if [ "$topofile" ]; then
|
|
Packit |
db064d |
usage
|
|
Packit |
db064d |
fi
|
|
Packit |
db064d |
topofile="$1"
|
|
Packit |
db064d |
;;
|
|
Packit |
db064d |
esac
|
|
Packit |
db064d |
shift
|
|
Packit |
db064d |
done
|
|
Packit |
db064d |
|
|
Packit |
db064d |
if [ "$topofile" ]; then
|
|
Packit |
db064d |
netcmd="cat $topofile"
|
|
Packit |
db064d |
else
|
|
Packit |
db064d |
netcmd="$IBPATH/ibnetdiscover $ca_info"
|
|
Packit |
db064d |
fi
|
|
Packit |
db064d |
|
|
Packit |
db064d |
text="`eval $netcmd`"
|
|
Packit |
db064d |
rv=$?
|
|
Packit |
db064d |
echo "$text" | awk '
|
|
Packit |
db064d |
BEGIN {
|
|
Packit |
db064d |
ne=0
|
|
Packit |
db064d |
}
|
|
Packit |
db064d |
function check_node(lid, port)
|
|
Packit |
db064d |
{
|
|
Packit |
db064d |
if (system("'$IBPATH'/ibchecknode -S '"$ca_info"' '$gflags' '$verbose' " lid)) {
|
|
Packit |
db064d |
ne++
|
|
Packit |
db064d |
print "\n# " ntype ": nodeguid 0x" nodeguid " failed"
|
|
Packit |
db064d |
return 1;
|
|
Packit |
db064d |
}
|
|
Packit |
db064d |
return system("'$IBPATH'/ibdatacounts -S '"$ca_info"' '$gflags' '$verbose' '$brief' " lid " " port);
|
|
Packit |
db064d |
}
|
|
Packit |
db064d |
|
|
Packit |
db064d |
/^Ca/ || /^Switch/ || /^Rt/ {
|
|
Packit |
db064d |
nnodes++
|
|
Packit |
db064d |
ntype=$1; nodeguid=substr($3, 4, 16); ports=$2
|
|
Packit |
db064d |
if ('$v')
|
|
Packit |
db064d |
print "\n# Checking " ntype ": nodeguid 0x" nodeguid
|
|
Packit |
db064d |
|
|
Packit |
db064d |
err = 0;
|
|
Packit |
db064d |
if (ntype != "Switch")
|
|
Packit |
db064d |
next
|
|
Packit |
db064d |
|
|
Packit |
db064d |
lid = substr($0, index($0, "port 0 lid ") + 11)
|
|
Packit |
db064d |
lid = substr(lid, 1, index(lid, " ") - 1)
|
|
Packit |
db064d |
err = check_node(lid, 255)
|
|
Packit |
db064d |
}
|
|
Packit |
db064d |
/^\[/ {
|
|
Packit |
db064d |
nports++
|
|
Packit |
db064d |
port = $1
|
|
Packit |
db064d |
sub("\\(.*\\)", "", port)
|
|
Packit |
db064d |
gsub("[\\[\\]]", "", port)
|
|
Packit |
db064d |
if (ntype != "Switch") {
|
|
Packit |
db064d |
lid = substr($0, index($0, " lid ") + 5)
|
|
Packit |
db064d |
lid = substr(lid, 1, index(lid, " ") - 1)
|
|
Packit |
db064d |
check_node(lid, port)
|
|
Packit |
db064d |
} else if (err)
|
|
Packit |
db064d |
system("'$IBPATH'/ibdatacounts -S '"$ca_info"' '$gflags' '$verbose' '$brief' " lid " " port);
|
|
Packit |
db064d |
}
|
|
Packit |
db064d |
|
|
Packit |
db064d |
/^ib/ {print $0; next}
|
|
Packit |
db064d |
/ibpanic:/ {print $0}
|
|
Packit |
db064d |
/ibwarn:/ {print $0}
|
|
Packit |
db064d |
/iberror:/ {print $0}
|
|
Packit |
db064d |
|
|
Packit |
db064d |
END {
|
|
Packit |
db064d |
printf "*** WARNING ***: this command is deprecated; Please use \"ibqueryerrors --counters\n"
|
|
Packit |
db064d |
printf "\n## Summary: %d nodes checked, %d bad nodes found\n", nnodes, ne
|
|
Packit |
db064d |
printf "## %d ports checked\n", nports
|
|
Packit |
db064d |
exit (ne )
|
|
Packit |
db064d |
}
|
|
Packit |
db064d |
'
|
|
Packit |
db064d |
|
|
Packit |
db064d |
exit $rv
|