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