1#!/bin/sh 2 3IBPATH=${IBPATH:-@IBSCRIPTPATH@} 4 5function usage() { 6 echo Usage: `basename $0` "[-h] [-b] [-v] [-G] [-N | -nocolor]" \ 7 "[-C ca_name] [-P ca_port] [-t(imeout) timeout_ms] <lid|guid>" \ 8 "[<port>]" 9 exit -1 10} 11 12function green() { 13 if [ "$bw" = "yes" ]; then 14 if [ "$verbose" = "yes" ]; then 15 echo $1 16 fi 17 return 18 fi 19 if [ "$verbose" = "yes" ]; then 20 echo -e "\\033[1;032m" $1 "\\033[0;39m" 21 fi 22} 23 24function red() { 25 if [ "$bw" = "yes" ]; then 26 echo $1 27 return 28 fi 29 echo -e "\\033[1;031m" $1 "\\033[0;39m" 30} 31 32guid_addr="" 33bw="" 34verbose="" 35brief="" 36ca_info="" 37 38while [ "$1" ]; do 39 case $1 in 40 -G) 41 guid_addr=yes 42 ;; 43 -nocolor|-N) 44 bw=yes 45 ;; 46 -v) 47 verbose=yes 48 brief="" 49 ;; 50 -b) 51 brief=yes 52 verbose="" 53 ;; 54 -P | -C | -t | -timeout) 55 case $2 in 56 -*) 57 usage 58 ;; 59 esac 60 if [ x$2 = x ] ; then 61 usage 62 fi 63 ca_info="$ca_info $1 $2" 64 shift 65 ;; 66 -*) 67 usage 68 ;; 69 *) 70 break 71 ;; 72 esac 73 shift 74done 75 76#default is all ports 77portnum=255 78 79if [ $# -lt 1 ]; then 80 usage 81fi 82 83if [ "$2" ]; then 84 portnum=$2 85fi 86 87if [ "$portnum" = "255" ]; then 88 portname="all" 89else 90 portname=$2 91fi 92 93if [ "$guid_addr" ]; then 94 if ! lid=`$IBPATH/ibaddr $ca_info -G -L $1 | awk '/failed/{exit -1} {print $3}'`; then 95 echo -n "guid $1 address resolution: " 96 red "FAILED" 97 exit -1 98 fi 99 guid=$1 100else 101 lid=$1 102 if ! temp=`$IBPATH/ibaddr $ca_info -L $1 | awk '/failed/{exit -1} {print $1}'`; then 103 echo -n "lid $1 address resolution: " 104 red "FAILED" 105 exit -1 106 fi 107fi 108 109nodename=`smpquery $ca_info nodedesc $lid | sed -e "s/^Node Description:\.*\(.*\)/\1/"` 110 111text="`eval $IBPATH/perfquery $ca_info $lid $portnum`" 112rv=$? 113if echo "$text" | awk -v mono=$bw -v brief=$brief -F '[.:]*' ' 114function blue(s) 115{ 116 if (brief == "yes") { 117 return 118 } 119 if (mono) 120 printf s 121 else if (!quiet) { 122 printf "\033[1;034m" s 123 printf "\033[0;39m" 124 } 125} 126 127# Only display Xmit/Rcv Pkts/Data 128 129/^# Port counters/ {print} 130 131/^CounterSelect/ {next} 132 133/AllPortSelect/ {next} 134 135/^ib/ {print $0; next} 136/ibpanic:/ {print $0} 137/ibwarn:/ {print $0} 138/iberror:/ {print $0} 139 140/^PortSelect/ { if ($2 != '$portnum') {err = err "error: lid '$lid' port " $2 " does not match query ('$portnum')\n"; exit -1}} 141 142$1 ~ "(Xmt|Rcv)(Pkts|Data)" { print $1 ":........................." $2 } 143 144END { 145 if (err != "") { 146 blue(err) 147 exit -1 148 } 149 if (warn != "") { 150 blue(warn) 151 exit -1 152 } 153 exit 0 154}' 2>&1 && test $rv -eq 0 ; then 155 if [ "$verbose" = "yes" ]; then 156 echo -n "Error on lid $lid ($nodename) port $portname: " 157 green OK 158 fi 159 exit 0 160else 161 echo -n "Error on lid $lid ($nodename) port $portname: " 162 red FAILED 163 exit -1 164fi 165