ibcheckportwidth.in revision 219820
1242275Sneel#!/bin/sh
2242275Sneel
3242275SneelIBPATH=${IBPATH:-@IBSCRIPTPATH@}
4242275Sneel
5242275Sneelfunction usage() {
6242275Sneel	echo Usage: `basename $0` "[-h] [-v] [-N | -nocolor] [-G]" \
7242275Sneel	   "[-C ca_name] [-P ca_port] [-t(imeout) timeout_ms] <lid|guid> <port>"
8242275Sneel	exit -1
9242275Sneel}
10242275Sneel
11242275Sneelfunction green() {
12242275Sneel	if [ "$bw" = "yes" ]; then
13242275Sneel		if [ "$verbose" = "yes" ]; then
14242275Sneel			echo $1
15242275Sneel		fi
16242275Sneel		return
17242275Sneel	fi
18242275Sneel	if [ "$verbose" = "yes" ]; then
19242275Sneel		echo -e "\\033[1;032m" $1 "\\033[0;39m"
20242275Sneel	fi
21242275Sneel}
22242275Sneel
23242275Sneelfunction red() {
24242275Sneel	if [ "$bw" = "yes" ]; then
25242275Sneel		echo $1
26242275Sneel		return
27242275Sneel	fi
28242275Sneel	echo -e "\\033[1;031m" $1 "\\033[0;39m"
29242275Sneel}
30242275Sneel
31242275Sneelguid_addr=""
32242275Sneelbw=""
33242275Sneelverbose=""
34242275Sneelca_info=""
35242275Sneel
36242275Sneelwhile [ "$1" ]; do
37242275Sneel	case $1 in
38242275Sneel	-G)
39242275Sneel		guid_addr=yes
40242275Sneel		;;
41242275Sneel	-nocolor|-N)
42242275Sneel		bw=yes
43242275Sneel		;;
44242275Sneel	-v)
45242275Sneel		verbose=yes
46242275Sneel		;;
47242275Sneel	-P | -C | -t | -timeout)
48242275Sneel		case $2 in
49242275Sneel		-*)
50242275Sneel			usage
51242275Sneel			;;
52242275Sneel		esac
53242275Sneel		if [ x$2 = x ] ; then
54242275Sneel			usage
55242275Sneel		fi
56242275Sneel		ca_info="$ca_info $1 $2"
57242275Sneel		shift
58242275Sneel		;;
59242275Sneel	-*)
60242275Sneel		usage
61242275Sneel		;;
62242275Sneel	*)
63242275Sneel		break
64242275Sneel		;;
65242275Sneel	esac
66242275Sneel	shift
67242275Sneeldone
68242275Sneel
69242275Sneelif [ $# -lt 2 ]; then
70242275Sneel	usage
71242275Sneelfi
72242275Sneel
73242275Sneelportnum=$2
74242275Sneel
75242275Sneelif [ "$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 LinkWidthActive if LinkWidthSupported is not 1X
106/^LinkWidthSupported/{ if ($2 != "1X") { next } }
107/^LinkWidthActive/{ if ($2 == "1X") warn = warn "#warn: Link configured as 1X  lid '$lid' port '$portnum'\n"}
108
109/^ib/	{print $0; next}
110/ibpanic:/	{print $0}
111/ibwarn:/	{print $0}
112/iberror:/	{print $0}
113
114END {
115	if (err != "") {
116		blue(err)
117		exit -1
118	}
119	if (warn != "") {
120		blue(warn)
121		exit -1
122	}
123	exit 0
124}' 2>&1 && test $rv -eq 0 ; then
125	if [ "$verbose" = "yes" ]; then
126		echo -n "Port check lid $lid port $portnum: "
127		green "OK"
128	fi
129	exit 0
130else
131	echo -n "Port check lid $lid port $portnum: "
132	red "FAILED"
133	exit -1
134fi
135