1#!/bin/sh 2 3IBPATH=${IBPATH:-@IBSCRIPTPATH@} 4 5function usage() { 6 echo Usage: `basename $0` "[-h] [-v] [-N | -nocolor]" \ 7 "[<topology-file> | -C ca_name -P ca_port -t(imeout) timeout_ms]" 8 exit -1 9} 10 11function user_abort() { 12 echo "Aborted" 13 exit 1 14} 15 16trap user_abort SIGINT 17 18gflags="" 19verbose="" 20v=0 21ntype="" 22nodeguid="" 23oldlid="" 24topofile="" 25ca_info="" 26 27while [ "$1" ]; do 28 case $1 in 29 -h) 30 usage 31 ;; 32 -N|-nocolor) 33 gflags=-N 34 ;; 35 -v) 36 verbose=-v 37 v=1 38 ;; 39 -P | -C | -t | -timeout) 40 case $2 in 41 -*) 42 usage 43 ;; 44 esac 45 if [ x$2 = x ] ; then 46 usage 47 fi 48 ca_info="$ca_info $1 $2" 49 shift 50 ;; 51 -*) 52 usage 53 ;; 54 *) 55 if [ "$topofile" ]; then 56 usage 57 fi 58 topofile="$1" 59 ;; 60 esac 61 shift 62done 63 64if [ "$topofile" ]; then 65 netcmd="cat $topofile" 66else 67 netcmd="$IBPATH/ibnetdiscover $ca_info" 68fi 69 70text="`eval $netcmd`" 71rv=$? 72echo "$text" | awk ' 73BEGIN { 74 ne=0 75 pe=0 76} 77function check_node(lid) 78{ 79 nodechecked=1 80 if (system("'$IBPATH'/ibchecknode'"$ca_info"' '$gflags' '$verbose' " lid)) { 81 ne++ 82 badnode=1 83 return 84 } 85} 86 87/^Ca/ || /^Switch/ || /^Rt/ { 88 nnodes++ 89 ntype=$1; nodeguid=substr($3, 4, 16); ports=$2 90 if ('$v') 91 print "\n# Checking " ntype ": nodeguid 0x" nodeguid 92 93 nodechecked=0 94 badnode=0 95 if (ntype != "Switch") 96 next 97 98 lid = substr($0, index($0, "port 0 lid ") + 11) 99 lid = substr(lid, 1, index(lid, " ") - 1) 100 check_node(lid) 101 } 102/^\[/ { 103 nports++ 104 port = $1 105 if (!nodechecked) { 106 lid = substr($0, index($0, " lid ") + 5) 107 lid = substr(lid, 1, index(lid, " ") - 1) 108 check_node(lid) 109 } 110 if (badnode) { 111 print "\n# " ntype ": nodeguid 0x" nodeguid " failed" 112 next 113 } 114 sub("\\(.*\\)", "", port) 115 gsub("[\\[\\]]", "", port) 116 if (system("'$IBPATH'/ibcheckportstate'"$ca_info"' '$gflags' '$verbose' " lid " " port)) { 117 if (!'$v' && oldlid != lid) { 118 print "# Checked " ntype ": nodeguid 0x" nodeguid " with failure" 119 oldlid = lid 120 } 121 pe++; 122 } 123} 124 125/^ib/ {print $0; next} 126/ibpanic:/ {print $0} 127/ibwarn:/ {print $0} 128/iberror:/ {print $0} 129 130END { 131 printf "\n## Summary: %d nodes checked, %d bad nodes found\n", nnodes, ne 132 printf "## %d ports checked, %d ports with bad state found\n", nports, pe 133} 134' 135exit $rv 136