1219820Sjeff#!/bin/sh 2219820Sjeff 3219820SjeffIBPATH=${IBPATH:-@IBSCRIPTPATH@} 4219820Sjeff 5219820Sjefffunction usage() { 6219820Sjeff echo Usage: `basename $0` "[-h] [-b] [-v] [-N | -nocolor]" \ 7219820Sjeff "[<topology-file> \| -C ca_name -P ca_port -t(imeout) timeout_ms]" 8219820Sjeff exit -1 9219820Sjeff} 10219820Sjeff 11219820Sjefffunction user_abort() { 12219820Sjeff echo "Aborted" 13219820Sjeff exit 1 14219820Sjeff} 15219820Sjeff 16219820Sjefftrap user_abort SIGINT 17219820Sjeff 18219820Sjeffgflags="" 19219820Sjeffverbose="" 20219820Sjeffbrief="" 21219820Sjeffv=0 22219820Sjeffntype="" 23219820Sjeffnodeguid="" 24219820Sjefftopofile="" 25219820Sjeffca_info="" 26219820Sjeff 27219820Sjeffwhile [ "$1" ]; do 28219820Sjeff case $1 in 29219820Sjeff -h) 30219820Sjeff usage 31219820Sjeff ;; 32219820Sjeff -N|-nocolor) 33219820Sjeff gflags=-N 34219820Sjeff ;; 35219820Sjeff -v) 36219820Sjeff verbose=-v 37219820Sjeff brief="" 38219820Sjeff v=1 39219820Sjeff ;; 40219820Sjeff -b) 41219820Sjeff brief=-b 42219820Sjeff verbose="" 43219820Sjeff ;; 44219820Sjeff -P | -C | -t | -timeout) 45219820Sjeff case $2 in 46219820Sjeff -*) 47219820Sjeff usage 48219820Sjeff ;; 49219820Sjeff esac 50219820Sjeff if [ x$2 = x ] ; then 51219820Sjeff usage 52219820Sjeff fi 53219820Sjeff ca_info="$ca_info $1 $2" 54219820Sjeff shift 55219820Sjeff ;; 56219820Sjeff -*) 57219820Sjeff usage 58219820Sjeff ;; 59219820Sjeff *) 60219820Sjeff if [ "$topofile" ]; then 61219820Sjeff usage 62219820Sjeff fi 63219820Sjeff topofile="$1" 64219820Sjeff ;; 65219820Sjeff esac 66219820Sjeff shift 67219820Sjeffdone 68219820Sjeff 69219820Sjeffif [ "$topofile" ]; then 70219820Sjeff netcmd="cat $topofile" 71219820Sjeffelse 72219820Sjeff netcmd="$IBPATH/ibnetdiscover $ca_info" 73219820Sjefffi 74219820Sjeff 75219820Sjefftext="`eval $netcmd`" 76219820Sjeffrv=$? 77219820Sjeffecho "$text" | awk ' 78219820SjeffBEGIN { 79219820Sjeff ne=0 80219820Sjeff} 81219820Sjefffunction check_node(lid, port) 82219820Sjeff{ 83219820Sjeff if (system("'$IBPATH'/ibchecknode '"$ca_info"' '$gflags' '$verbose' " lid)) { 84219820Sjeff ne++ 85219820Sjeff print "\n# " ntype ": nodeguid 0x" nodeguid " failed" 86219820Sjeff return 1; 87219820Sjeff } 88219820Sjeff return system("'$IBPATH'/ibcheckerrs '"$ca_info"' '$gflags' '$verbose' '$brief' " lid " " port); 89219820Sjeff} 90219820Sjeff 91219820Sjeff/^Ca/ || /^Switch/ || /^Rt/ { 92219820Sjeff nnodes++ 93219820Sjeff ntype=$1; nodeguid=substr($3, 4, 16); ports=$2 94219820Sjeff if ('$v') 95219820Sjeff print "\n# Checking " ntype ": nodeguid 0x" nodeguid 96219820Sjeff 97219820Sjeff err = 0; 98219820Sjeff if (ntype != "Switch") 99219820Sjeff next 100219820Sjeff 101219820Sjeff lid = substr($0, index($0, "port 0 lid ") + 11) 102219820Sjeff lid = substr(lid, 1, index(lid, " ") - 1) 103219820Sjeff err = check_node(lid, 255) 104219820Sjeff } 105219820Sjeff/^\[/ { 106219820Sjeff nports++ 107219820Sjeff port = $1 108219820Sjeff sub("\\(.*\\)", "", port) 109219820Sjeff gsub("[\\[\\]]", "", port) 110219820Sjeff if (ntype != "Switch") { 111219820Sjeff lid = substr($0, index($0, " lid ") + 5) 112219820Sjeff lid = substr(lid, 1, index(lid, " ") - 1) 113219820Sjeff check_node(lid, port) 114219820Sjeff } else if (err) 115219820Sjeff system("'$IBPATH'/ibdatacounts '"$ca_info"' '$gflags' '$verbose' '$brief' " lid " " port); 116219820Sjeff} 117219820Sjeff 118219820Sjeff/^ib/ {print $0; next} 119219820Sjeff/ibpanic:/ {print $0} 120219820Sjeff/ibwarn:/ {print $0} 121219820Sjeff/iberror:/ {print $0} 122219820Sjeff 123219820SjeffEND { 124219820Sjeff printf "\n## Summary: %d nodes checked, %d bad nodes found\n", nnodes, ne 125219820Sjeff printf "## %d ports checked\n", nports 126219820Sjeff exit (ne ) 127219820Sjeff} 128219820Sjeff' 129219820Sjeffexit $rv 130