1#!/bin/sh
2
3IBPATH=${IBPATH:-@IBSCRIPTPATH@}
4
5function usage() {
6	echo Usage: `basename $0` "[-h] [-b] [-v] [-G] [-N | -nocolor]" \
7	    "[-C ca_name] [-P ca_port] [-t(imeout) timeout_ms] <lid|guid>" \
8	    "[<port>]"
9	exit -1
10}
11
12function green() {
13	if [ "$bw" = "yes" ]; then
14		if [ "$verbose" = "yes" ]; then
15			echo $1
16		fi
17		return
18	fi
19	if [ "$verbose" = "yes" ]; then
20		echo -e "\\033[1;032m" $1 "\\033[0;39m"
21	fi
22}
23
24function red() {
25	if [ "$bw" = "yes" ]; then
26		echo $1
27		return
28	fi
29	echo -e "\\033[1;031m" $1 "\\033[0;39m"
30}
31
32guid_addr=""
33bw=""
34verbose=""
35brief=""
36ca_info=""
37
38while [ "$1" ]; do
39	case $1 in
40	-G)
41		guid_addr=yes
42		;;
43	-nocolor|-N)
44		bw=yes
45		;;
46	-v)
47		verbose=yes
48		brief=""
49		;;
50	-b)
51		brief=yes
52		verbose=""
53		;;
54	-P | -C | -t | -timeout)
55		case $2 in
56		-*)
57			usage
58			;;
59		esac
60		if [ x$2 = x ] ; then
61			usage
62		fi
63		ca_info="$ca_info $1 $2"
64		shift
65		;;
66	-*)
67		usage
68		;;
69	*)
70		break
71		;;
72	esac
73	shift
74done
75
76#default is all ports
77portnum=255
78
79if [ $# -lt 1 ]; then
80	usage
81fi
82
83if [ "$2" ]; then
84	portnum=$2
85fi
86
87if [ "$portnum" = "255" ]; then
88	portname="all"
89else
90	portname=$2
91fi
92
93if [ "$guid_addr" ]; then
94	if ! lid=`$IBPATH/ibaddr $ca_info -G -L $1 | awk '/failed/{exit -1} {print $3}'`; then
95		echo -n "guid $1 address resolution: "
96		red "FAILED"
97		exit -1
98	fi
99	guid=$1
100else
101	lid=$1
102	if ! temp=`$IBPATH/ibaddr $ca_info -L $1 | awk '/failed/{exit -1} {print $1}'`; then
103		echo -n "lid $1 address resolution: "
104		red "FAILED"
105		exit -1
106	fi
107fi
108
109nodename=`smpquery $ca_info nodedesc $lid | sed -e "s/^Node Description:\.*\(.*\)/\1/"`
110
111text="`eval $IBPATH/perfquery $ca_info $lid $portnum`"
112rv=$?
113if echo "$text" | awk -v mono=$bw -v brief=$brief -F '[.:]*' '
114function blue(s)
115{
116	if (brief == "yes") {
117		return
118	}
119	if (mono)
120		printf s
121	else if (!quiet) {
122		printf "\033[1;034m" s
123		printf "\033[0;39m"
124	}
125}
126
127# Only display Xmit/Rcv Pkts/Data
128
129/^# Port counters/ {print}
130
131/^CounterSelect/ {next}
132
133/AllPortSelect/ {next}
134
135/^ib/	{print $0; next}
136/ibpanic:/	{print $0}
137/ibwarn:/	{print $0}
138/iberror:/	{print $0}
139
140/^PortSelect/	{ if ($2 != '$portnum') {err = err "error: lid '$lid' port " $2 " does not match query ('$portnum')\n"; exit -1}}
141
142$1 ~ "(Xmt|Rcv)(Pkts|Data)" { print $1 ":........................." $2 }
143
144END {
145	if (err != "") {
146		blue(err)
147		exit -1
148	}
149	if (warn != "") {
150		blue(warn)
151		exit -1
152	}
153	exit 0
154}' 2>&1 && test $rv -eq 0 ; then
155	if [ "$verbose" = "yes" ]; then
156		echo -n "Error on lid $lid ($nodename) port $portname: "
157		green OK
158	fi
159	exit 0
160else
161	echo -n "Error on lid $lid ($nodename) port $portname: "
162	red FAILED
163	exit -1
164fi
165