1219820Sjeff#!/bin/sh 2219820Sjeff 3219820SjeffIBPATH=${IBPATH:-@IBSCRIPTPATH@} 4219820Sjeff 5219820Sjefffunction usage() { 6219820Sjeff echo Usage: `basename $0` "[-h] [-b] [-v] [-G] [-T <threshold_file>]" \ 7219820Sjeff "[-s(how_thresholds)] [-N \| -nocolor] [-C ca_name] [-P ca_port]" \ 8219820Sjeff "[-t(imeout) timeout_ms] <lid|guid> [<port>]" 9219820Sjeff exit -1 10219820Sjeff} 11219820Sjeff 12219820Sjefffunction green() { 13219820Sjeff if [ "$bw" = "yes" ]; then 14219820Sjeff if [ "$verbose" = "yes" ]; then 15219820Sjeff echo $1 16219820Sjeff fi 17219820Sjeff return 18219820Sjeff fi 19219820Sjeff if [ "$verbose" = "yes" ]; then 20219820Sjeff echo -e "\\033[1;032m" $1 "\\033[0;39m" 21219820Sjeff fi 22219820Sjeff} 23219820Sjeff 24219820Sjefffunction red() { 25219820Sjeff if [ "$bw" = "yes" ]; then 26219820Sjeff echo $1 27219820Sjeff return 28219820Sjeff fi 29219820Sjeff echo -e "\\033[1;031m" $1 "\\033[0;39m" 30219820Sjeff} 31219820Sjeff 32219820Sjefffunction show_thresholds() { 33219820Sjeff echo "SymbolErrors=$SymbolErrors" 34219820Sjeff echo "LinkRecovers=$LinkRecovers" 35219820Sjeff echo "LinkDowned=$LinkDowned" 36219820Sjeff echo "RcvErrors=$RcvErrors" 37219820Sjeff echo "RcvRemotePhysErrors=$RcvRemotePhysErrors" 38219820Sjeff echo "RcvSwRelayErrors=$RcvSwRelayErrors" 39219820Sjeff echo "XmtDiscards=$XmtDiscards" 40219820Sjeff echo "XmtConstraintErrors=$XmtConstraintErrors" 41219820Sjeff echo "RcvConstraintErrors=$RcvConstraintErrors" 42219820Sjeff echo "LinkIntegrityErrors=$LinkIntegrityErrors" 43219820Sjeff echo "ExcBufOverrunErrors=$ExcBufOverrunErrors" 44219820Sjeff echo "VL15Dropped=$VL15Dropped" 45219820Sjeff} 46219820Sjeff 47219820Sjefffunction get_thresholds() { 48219820Sjeff . $1 49219820Sjeff} 50219820Sjeff 51219820Sjeff# Default thresholds 52219820SjeffSymbolErrors=10 53219820SjeffLinkRecovers=10 54219820SjeffLinkDowned=10 55219820SjeffRcvErrors=10 56219820SjeffRcvRemotePhysErrors=100 57219820SjeffRcvSwRelayErrors=100 58219820SjeffXmtDiscards=100 59219820SjeffXmtConstraintErrors=100 60219820SjeffRcvConstraintErrors=100 61219820SjeffLinkIntegrityErrors=10 62219820SjeffExcBufOverrunErrors=10 63219820SjeffVL15Dropped=100 64219820Sjeff 65219820Sjeffguid_addr="" 66219820Sjeffbw="" 67219820Sjeffverbose="" 68219820Sjeffbrief="" 69219820Sjeffca_info="" 70219820Sjeff 71219820Sjeffwhile [ "$1" ]; do 72219820Sjeff case $1 in 73219820Sjeff -G) 74219820Sjeff guid_addr=yes 75219820Sjeff ;; 76219820Sjeff -nocolor|-N) 77219820Sjeff bw=yes 78219820Sjeff ;; 79219820Sjeff -v) 80219820Sjeff verbose=yes 81219820Sjeff brief="" 82219820Sjeff ;; 83219820Sjeff -b) 84219820Sjeff brief=yes 85219820Sjeff verbose="" 86219820Sjeff ;; 87219820Sjeff -T) 88219820Sjeff if ! [ -r $2 ]; then 89219820Sjeff echo "Can't use threshold file '$2'" 90219820Sjeff usage 91219820Sjeff fi 92219820Sjeff get_thresholds $2 93219820Sjeff shift 94219820Sjeff ;; 95219820Sjeff -s) 96219820Sjeff show_thresholds 97219820Sjeff exit 0 98219820Sjeff ;; 99219820Sjeff -P | -C | -t | -timeout) 100219820Sjeff case $2 in 101219820Sjeff -*) 102219820Sjeff usage 103219820Sjeff ;; 104219820Sjeff esac 105219820Sjeff if [ x$2 = x ] ; then 106219820Sjeff usage 107219820Sjeff fi 108219820Sjeff ca_info="$ca_info $1 $2" 109219820Sjeff shift 110219820Sjeff ;; 111219820Sjeff -*) 112219820Sjeff usage 113219820Sjeff ;; 114219820Sjeff *) 115219820Sjeff break 116219820Sjeff ;; 117219820Sjeff esac 118219820Sjeff shift 119219820Sjeffdone 120219820Sjeff 121219820Sjeff#default is all ports 122219820Sjeffportnum=255 123219820Sjeff 124219820Sjeffif [ $# -lt 1 ]; then 125219820Sjeff usage 126219820Sjefffi 127219820Sjeff 128219820Sjeffif [ "$2" ]; then 129219820Sjeff portnum=$2 130219820Sjefffi 131219820Sjeff 132219820Sjeffif [ "$portnum" = "255" ]; then 133219820Sjeff portname="all" 134219820Sjeffelse 135219820Sjeff portname=$2 136219820Sjefffi 137219820Sjeff 138219820Sjeffif [ "$guid_addr" ]; then 139219820Sjeff if ! lid=`$IBPATH/ibaddr $ca_info -G -L $1 | awk '/failed/{exit -1} {print $3}'`; then 140219820Sjeff echo -n "guid $1 address resolution: " 141219820Sjeff red "FAILED" 142219820Sjeff exit -1 143219820Sjeff fi 144219820Sjeff guid=$1 145219820Sjeffelse 146219820Sjeff lid=$1 147219820Sjeff if ! temp=`$IBPATH/ibaddr $ca_info -L $1 | awk '/failed/{exit -1} {print $1}'`; then 148219820Sjeff echo -n "lid $1 address resolution: " 149219820Sjeff red "FAILED" 150219820Sjeff exit -1 151219820Sjeff fi 152219820Sjefffi 153219820Sjeff 154219820Sjeffnodename=`$IBPATH/smpquery $ca_info nodedesc $lid | sed -e "s/^Node Description:\.*\(.*\)/\1/"` 155219820Sjeff 156219820Sjefftext="`eval $IBPATH/perfquery $ca_info $lid $portnum`" 157219820Sjeffrv=$? 158219820Sjeffif echo "$text" | awk -v mono=$bw -v brief=$brief -F '[.:]*' ' 159219820Sjefffunction blue(s) 160219820Sjeff{ 161219820Sjeff if (brief == "yes") { 162219820Sjeff return 163219820Sjeff } 164219820Sjeff if (mono) 165219820Sjeff printf s 166219820Sjeff else if (!quiet) { 167219820Sjeff printf "\033[1;034m" s 168219820Sjeff printf "\033[0;39m" 169219820Sjeff } 170219820Sjeff} 171219820Sjeff 172219820SjeffBEGIN { 173219820Sjeff th["SymbolErrors"] = '$SymbolErrors' 174219820Sjeff th["LinkRecovers"] = '$LinkRecovers' 175219820Sjeff th["LinkDowned"] = '$LinkDowned' 176219820Sjeff th["RcvErrors"] = '$RcvErrors' 177219820Sjeff th["RcvRemotePhysErrors"] = '$RcvRemotePhysErrors' 178219820Sjeff th["RcvSwRelayErrors"] = '$RcvSwRelayErrors' 179219820Sjeff th["XmtDiscards"] = '$XmtDiscards' 180219820Sjeff th["XmtConstraintErrors"] = '$XmtConstraintErrors' 181219820Sjeff th["RcvConstraintErrors"] = '$RcvConstraintErrors' 182219820Sjeff th["LinkIntegrityErrors"] = '$LinkIntegrityErrors' 183219820Sjeff th["ExcBufOverrunErrors"] = '$ExcBufOverrunErrors' 184219820Sjeff th["VL15Dropped"] = '$VL15Dropped' 185219820Sjeff} 186219820Sjeff 187219820Sjeff/^CounterSelect/ {next} 188219820Sjeff 189219820Sjeff/AllPortSelect/ {next} 190219820Sjeff 191219820Sjeff/^ib/ {print $0; next} 192219820Sjeff/ibpanic:/ {print $0} 193219820Sjeff/ibwarn:/ {print $0} 194219820Sjeff/iberror:/ {print $0} 195219820Sjeff 196219820Sjeff/^PortSelect/ { if ($2 != '$portnum') {err = err "error: lid '$lid' port " $2 " does not match query ('$portnum')\n"; exit -1}} 197219820Sjeff 198219820Sjeff$1 ~ "(Xmt|Rcv)(Pkts|Data)" { next } 199219820Sjeff 200219820Sjeff { if (th[$1] > 0 && $2 >= th[$1]) 201219820Sjeff warn = warn "#warn: counter " $1 " = " $2 " \t(threshold " th[$1] ") lid '$lid' port '$portnum'\n" 202219820Sjeff } 203219820SjeffEND { 204219820Sjeff if (err != "") { 205219820Sjeff blue(err) 206219820Sjeff exit -1 207219820Sjeff } 208219820Sjeff if (warn != "") { 209219820Sjeff blue(warn) 210219820Sjeff exit -1 211219820Sjeff } 212219820Sjeff exit 0 213219820Sjeff}' 2>&1 && test $rv -eq 0 ; then 214219820Sjeff if [ "$verbose" = "yes" ]; then 215219820Sjeff echo -n "Error check on lid $lid ($nodename) port $portname: " 216219820Sjeff green OK 217219820Sjeff fi 218219820Sjeff exit 0 219219820Sjeffelse 220219820Sjeff echo -n "Error check on lid $lid ($nodename) port $portname: " 221219820Sjeff red FAILED 222219820Sjeff exit -1 223219820Sjefffi 224