ibcheckportstate.in revision 256281
1#!/bin/sh 2 3IBPATH=${IBPATH:-@IBSCRIPTPATH@} 4 5function usage() { 6 echo Usage: `basename $0` "[-h] [-v] [-N | -nocolor] [-G]" \ 7 "[-C ca_name] [-P ca_port] [-t(imeout) timeout_ms] <lid|guid> <port>" 8 exit -1 9} 10 11function green() { 12 if [ "$bw" = "yes" ]; then 13 if [ "$verbose" = "yes" ]; then 14 echo $1 15 fi 16 return 17 fi 18 if [ "$verbose" = "yes" ]; then 19 echo -e "\\033[1;032m" $1 "\\033[0;39m" 20 fi 21} 22 23function red() { 24 if [ "$bw" = "yes" ]; then 25 echo $1 26 return 27 fi 28 echo -e "\\033[1;031m" $1 "\\033[0;39m" 29} 30 31guid_addr="" 32bw="" 33verbose="" 34ca_info="" 35 36while [ "$1" ]; do 37 case $1 in 38 -G) 39 guid_addr=yes 40 ;; 41 -nocolor|-N) 42 bw=yes 43 ;; 44 -v) 45 verbose=yes 46 ;; 47 -P | -C | -t | -timeout) 48 case $2 in 49 -*) 50 usage 51 ;; 52 esac 53 if [ x$2 = x ] ; then 54 usage 55 fi 56 ca_info="$ca_info $1 $2" 57 shift 58 ;; 59 -*) 60 usage 61 ;; 62 *) 63 break 64 ;; 65 esac 66 shift 67done 68 69if [ $# -lt 2 ]; then 70 usage 71fi 72 73portnum=$2 74 75if [ "$guid_addr" ]; then 76 if ! lid=`$IBPATH/ibaddr $ca_info -G -L $1 | awk '/failed/{exit -1} {print $3}'`; then 77 echo -n "guid $1 address resolution: " 78 red "FAILED" 79 exit -1 80 fi 81 guid=$1 82else 83 lid=$1 84 if ! temp=`$IBPATH/ibaddr $ca_info -L $1 | awk '/failed/{exit -1} {print $1}'`; then 85 echo -n "lid $1 address resolution: " 86 red "FAILED" 87 exit -1 88 fi 89fi 90 91 92text="`eval $IBPATH/smpquery $ca_info portinfo $lid $portnum`" 93rv=$? 94if echo "$text" | awk -v mono=$bw -F '[.:]*' ' 95function blue(s) 96{ 97 if (mono) 98 printf s 99 else if (!quiet) { 100 printf "\033[1;034m" s 101 printf "\033[0;39m" 102 } 103} 104 105# Only check PortPhysicalState and PortState 106 107/^PhysLinkState/{ if ($2 != "LinkUp") {err = err "#error: Physical link state is " $2 " lid '$lid' port '$portnum'\n"; exit -1}} 108 109/^LinkState/{ if ($2 != "Active") warn = warn "#warn: Logical link state is " $2 " lid '$lid' port '$portnum'\n"} 110 111/^ib/ {print $0; next} 112/ibpanic:/ {print $0} 113/ibwarn:/ {print $0} 114/iberror:/ {print $0} 115 116END { 117 if (err != "") { 118 blue(err) 119 exit -1 120 } 121 if (warn != "") { 122 blue(warn) 123 exit -1 124 } 125 exit 0 126}' 2>&1 && test $rv -eq 0 ; then 127 if [ "$verbose" = "yes" ]; then 128 echo -n "Port check lid $lid port $portnum: " 129 green "OK" 130 fi 131 exit 0 132else 133 echo -n "Port check lid $lid port $portnum: " 134 red "FAILED" 135 exit -1 136fi 137