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