1219820Sjeff#!/bin/sh 2219820Sjeff 3219820SjeffIBPATH=${IBPATH:-@IBSCRIPTPATH@} 4219820Sjeff 5219820Sjefffunction usage() { 6219820Sjeff echo Usage: `basename $0` "[-h] [-v] [-N | -nocolor] [-G]" \ 7219820Sjeff "[-C ca_name] [-P ca_port] [-t(imeout) timeout_ms] <lid|guid> <port>" 8219820Sjeff exit -1 9219820Sjeff} 10219820Sjeff 11219820Sjefffunction green() { 12219820Sjeff if [ "$bw" = "yes" ]; then 13219820Sjeff if [ "$verbose" = "yes" ]; then 14219820Sjeff echo $1 15219820Sjeff fi 16219820Sjeff return 17219820Sjeff fi 18219820Sjeff if [ "$verbose" = "yes" ]; then 19219820Sjeff echo -e "\\033[1;032m" $1 "\\033[0;39m" 20219820Sjeff fi 21219820Sjeff} 22219820Sjeff 23219820Sjefffunction red() { 24219820Sjeff if [ "$bw" = "yes" ]; then 25219820Sjeff echo $1 26219820Sjeff return 27219820Sjeff fi 28219820Sjeff echo -e "\\033[1;031m" $1 "\\033[0;39m" 29219820Sjeff} 30219820Sjeff 31219820Sjeffguid_addr="" 32219820Sjeffbw="" 33219820Sjeffverbose="" 34219820Sjeffca_info="" 35219820Sjeff 36219820Sjeffwhile [ "$1" ]; do 37219820Sjeff case $1 in 38219820Sjeff -G) 39219820Sjeff guid_addr=yes 40219820Sjeff ;; 41219820Sjeff -nocolor|-N) 42219820Sjeff bw=yes 43219820Sjeff ;; 44219820Sjeff -v) 45219820Sjeff verbose=yes 46219820Sjeff ;; 47219820Sjeff -P | -C | -t | -timeout) 48219820Sjeff case $2 in 49219820Sjeff -*) 50219820Sjeff usage 51219820Sjeff ;; 52219820Sjeff esac 53219820Sjeff if [ x$2 = x ] ; then 54219820Sjeff usage 55219820Sjeff fi 56219820Sjeff ca_info="$ca_info $1 $2" 57219820Sjeff shift 58219820Sjeff ;; 59219820Sjeff -*) 60219820Sjeff usage 61219820Sjeff ;; 62219820Sjeff *) 63219820Sjeff break 64219820Sjeff ;; 65219820Sjeff esac 66219820Sjeff shift 67219820Sjeffdone 68219820Sjeff 69219820Sjeffif [ $# -lt 2 ]; then 70219820Sjeff usage 71219820Sjefffi 72219820Sjeff 73219820Sjeffportnum=$2 74219820Sjeff 75219820Sjeffif [ "$guid_addr" ]; then 76219820Sjeff if ! lid=`$IBPATH/ibaddr $ca_info -G -L $1 | awk '/failed/{exit -1} {print $3}'`; then 77219820Sjeff echo -n "guid $1 address resolution: " 78219820Sjeff red "FAILED" 79219820Sjeff exit -1 80219820Sjeff fi 81219820Sjeff guid=$1 82219820Sjeffelse 83219820Sjeff lid=$1 84219820Sjeff if ! temp=`$IBPATH/ibaddr $ca_info -L $1 | awk '/failed/{exit -1} {print $1}'`; then 85219820Sjeff echo -n "lid $1 address resolution: " 86219820Sjeff red "FAILED" 87219820Sjeff exit -1 88219820Sjeff fi 89219820Sjefffi 90219820Sjeff 91219820Sjeff 92219820Sjefftext="`eval $IBPATH/smpquery $ca_info portinfo $lid $portnum`" 93219820Sjeffrv=$? 94219820Sjeffif echo "$text" | awk -v mono=$bw -F '[.:]*' ' 95219820Sjefffunction blue(s) 96219820Sjeff{ 97219820Sjeff if (mono) 98219820Sjeff printf s 99219820Sjeff else if (!quiet) { 100219820Sjeff printf "\033[1;034m" s 101219820Sjeff printf "\033[0;39m" 102219820Sjeff } 103219820Sjeff} 104219820Sjeff 105219820Sjeff# Only check PortPhysicalState and PortState 106219820Sjeff 107219820Sjeff/^PhysLinkState/{ if ($2 != "LinkUp") {err = err "#error: Physical link state is " $2 " lid '$lid' port '$portnum'\n"; exit -1}} 108219820Sjeff 109219820Sjeff/^LinkState/{ if ($2 != "Active") warn = warn "#warn: Logical link state is " $2 " lid '$lid' port '$portnum'\n"} 110219820Sjeff 111219820Sjeff/^ib/ {print $0; next} 112219820Sjeff/ibpanic:/ {print $0} 113219820Sjeff/ibwarn:/ {print $0} 114219820Sjeff/iberror:/ {print $0} 115219820Sjeff 116219820SjeffEND { 117219820Sjeff if (err != "") { 118219820Sjeff blue(err) 119219820Sjeff exit -1 120219820Sjeff } 121219820Sjeff if (warn != "") { 122219820Sjeff blue(warn) 123219820Sjeff exit -1 124219820Sjeff } 125219820Sjeff exit 0 126219820Sjeff}' 2>&1 && test $rv -eq 0 ; then 127219820Sjeff if [ "$verbose" = "yes" ]; then 128219820Sjeff echo -n "Port check lid $lid port $portnum: " 129219820Sjeff green "OK" 130219820Sjeff fi 131219820Sjeff exit 0 132219820Sjeffelse 133219820Sjeff echo -n "Port check lid $lid port $portnum: " 134219820Sjeff red "FAILED" 135219820Sjeff exit -1 136219820Sjefffi 137