#!/bin/sh IBPATH=${IBPATH:-@IBSCRIPTPATH@} usage() { echo Usage: `basename $0` "[-h] [-v] [-N | -nocolor] [-G]" \ "[-C ca_name] [-P ca_port] [-t(imeout) timeout_ms] " exit 255 } green() { if [ "$bw" = "yes" ]; then if [ "$verbose" = "yes" ]; then echo $1 fi return fi if [ "$verbose" = "yes" ]; then echo -e "\\033[1;032m" $1 "\\033[0;39m" fi } red() { if [ "$bw" = "yes" ]; then echo $1 return fi echo -e "\\033[1;031m" $1 "\\033[0;39m" } guid_addr="" bw="" verbose="" ca_info="" suppress_deprecated="no" while [ "$1" ]; do case $1 in -G) guid_addr=yes ;; -nocolor|-N) bw=yes ;; -v) verbose=yes ;; -P | -C | -t | -timeout) case $2 in -*) usage ;; esac if [ x$2 = x ] ; then usage fi ca_info="$ca_info $1 $2" shift ;; -S) suppress_deprecated="yes" ;; -*) usage ;; *) break ;; esac shift done if [ $# -lt 2 ]; then usage fi portnum=$2 if [ "$suppress_deprecated" = "no" ]; then /usr/bin/echo -e "*** WARNING ***: this command is deprecated\n\n" 1>&2 fi if [ "$guid_addr" ]; then if ! lid=`$IBPATH/ibaddr $ca_info -G -L $1 | awk '/failed/{exit 255} {print $3}'`; then echo -n "guid $1 address resolution: " red "FAILED" exit 255 fi guid=$1 else lid=$1 if ! temp=`$IBPATH/ibaddr $ca_info -L $1 | awk '/failed/{exit 255} {print $1}'`; then echo -n "lid $1 address resolution: " red "FAILED" exit 255 fi fi is_switch=`$IBPATH/smpquery $ca_info nodeinfo $lid $portnum | awk -F '[.:]*' '/^NodeType/{ if ($2 == "Switch") {print 1}}'` if [ "$is_switch" -a "$portnum" == "0" ]; then ignore_check=true fi text="`eval $IBPATH/smpquery $ca_info portinfo $lid $portnum`" rv=$? if echo "$text" | awk -v ignore_check=$ignore_check -v mono=$bw -F '[.:]*' ' function blue(s) { if (mono) printf s else if (!quiet) { printf "\033[1;034m" s printf "\033[0;39m" } } # Checks /^PhysLinkState/{ if ($2 != "LinkUp") {err = err "#error: Physical link state is " $2 " lid '$lid' port '$portnum'\n"; exit 255}} /^LinkState/{ if ($2 != "Active") warn = warn "#warn: Logical link state is " $2 " lid '$lid' port '$portnum'\n"} /^LinkWidthActive/{ if ($2 == "1X") warn = warn "#warn: Link configured as 1X lid '$lid' port '$portnum'\n"} /^Lid/{ if (ignore_check == "0" && $2 == "0") warn = warn "#warn: Lid is not configured lid '$lid' port '$portnum'\n"} /^SMLid/{ if (ignore_check == "0" && $2 == "0") warn = warn "#warn: SM Lid is not configured\n"} #/^LocalPort/ { if ($2 != '$portnum') {err = err "#error: port " $2 " does not match query ('$portnum')\n"; exit 255}} /^ib/ {print $0; next} /ibpanic:/ {print $0} /ibwarn:/ {print $0} /iberror:/ {print $0} END { if (err != "") { blue(err) exit 255 } if (warn != "") { blue(warn) exit 255 } exit 0 }' 2>&1 && test $rv -eq 0 ; then if [ "$verbose" = "yes" ]; then echo -n "Port check lid $lid port $portnum: " green "OK" fi exit 0 else echo -n "Port check lid $lid port $portnum: " red "FAILED" exit 255 fi