1219820Sjeff#!/bin/sh 2219820Sjeff 3219820SjeffIBPATH=${IBPATH:-@IBSCRIPTPATH@} 4219820Sjeff 5219820Sjefffunction usage() { 6219820Sjeff echo Usage: `basename $0` "[-h] [<topology-file>" \ 7219820Sjeff "| -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="" 20219820Sjeffv=0 21219820Sjefftopofile="" 22219820Sjeffca_info="" 23219820Sjeff 24219820Sjeffwhile [ "$1" ]; do 25219820Sjeff case $1 in 26219820Sjeff -h) 27219820Sjeff usage 28219820Sjeff ;; 29219820Sjeff -P | -C | -t | -timeout) 30219820Sjeff case $2 in 31219820Sjeff -*) 32219820Sjeff usage 33219820Sjeff ;; 34219820Sjeff esac 35219820Sjeff if [ x$2 = x ] ; then 36219820Sjeff usage 37219820Sjeff fi 38219820Sjeff ca_info="$ca_info $1 $2" 39219820Sjeff shift 40219820Sjeff ;; 41219820Sjeff -*) 42219820Sjeff usage 43219820Sjeff ;; 44219820Sjeff *) 45219820Sjeff if [ "$topofile" ]; then 46219820Sjeff usage 47219820Sjeff fi 48219820Sjeff topofile="$1" 49219820Sjeff ;; 50219820Sjeff esac 51219820Sjeff shift 52219820Sjeffdone 53219820Sjeff 54219820Sjeffif [ "$topofile" ]; then 55219820Sjeff netcmd="cat $topofile" 56219820Sjeffelse 57219820Sjeff netcmd="$IBPATH/ibnetdiscover $ca_info" 58219820Sjefffi 59219820Sjeff 60219820Sjefftext="`eval $netcmd`" 61219820Sjeffrv=$? 62219820Sjeffecho "$text" | awk ' 63219820Sjeff 64219820Sjefffunction clear_counters(lid) 65219820Sjeff{ 66219820Sjeff if (system("'$IBPATH'/perfquery'"$ca_info"' '$gflags' -R -a " lid)) 67219820Sjeff nodeerr++ 68219820Sjeff} 69219820Sjeff 70219820Sjefffunction clear_port_counters(lid, port) 71219820Sjeff{ 72219820Sjeff if (system("'$IBPATH'/perfquery'"$ca_info"' '$gflags' -R " lid " " port)) 73219820Sjeff nodeerr++ 74219820Sjeff} 75219820Sjeff 76219820Sjeff/^Ca/ || /^Switch/ || /^Rt/ { 77219820Sjeff nnodes++ 78219820Sjeff ntype=$1; nodeguid=substr($3, 4, 16); ports=$2 79219820Sjeff if (ntype != "Switch") 80219820Sjeff next 81219820Sjeff 82219820Sjeff lid = substr($0, index($0, "port 0 lid ") + 11) 83219820Sjeff lid = substr(lid, 1, index(lid, " ") - 1) 84219820Sjeff clear_counters(lid) 85219820Sjeff } 86219820Sjeff 87219820Sjeff/^\[/ { 88219820Sjeff port = $1 89219820Sjeff sub("\\(.*\\)", "", port) 90219820Sjeff gsub("[\\[\\]]", "", port) 91219820Sjeff if (ntype != "Switch") { 92219820Sjeff lid = substr($0, index($0, " lid ") + 5) 93219820Sjeff lid = substr(lid, 1, index(lid, " ") - 1) 94219820Sjeff clear_port_counters(lid, port) 95219820Sjeff } 96219820Sjeff } 97219820Sjeff 98219820Sjeff/^ib/ {print $0; next} 99219820Sjeff/ibpanic:/ {print $0} 100219820Sjeff/ibwarn:/ {print $0} 101219820Sjeff/iberror:/ {print $0} 102219820Sjeff 103219820SjeffEND { 104219820Sjeff printf "\n## Summary: %d nodes cleared %d errors\n", nnodes, nodeerr 105219820Sjeff} 106219820Sjeff' 107219820Sjeffexit $rv 108