#!/bin/sh IBPATH=${IBPATH:-/usr/local/sbin} usage() { echo Usage: `basename $0` "[-h] [-b] [-v] [-N | -nocolor]"\ "[ | -C ca_name -P ca_port -t(imeout) timeout_ms]" exit -1 } 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