1219820Sjeff#!/bin/sh
2219820Sjeff
3219820SjeffIBPATH=${IBPATH:-@IBSCRIPTPATH@}
4219820Sjeff
5219820Sjefffunction usage() {
6219820Sjeff	echo Usage: `basename $0` "[-h] [-b] [-v] [-G] [-N | -nocolor]" \
7219820Sjeff	    "[-C ca_name] [-P ca_port] [-t(imeout) timeout_ms] <lid|guid>" \
8219820Sjeff	    "[<port>]"
9219820Sjeff	exit -1
10219820Sjeff}
11219820Sjeff
12219820Sjefffunction green() {
13219820Sjeff	if [ "$bw" = "yes" ]; then
14219820Sjeff		if [ "$verbose" = "yes" ]; then
15219820Sjeff			echo $1
16219820Sjeff		fi
17219820Sjeff		return
18219820Sjeff	fi
19219820Sjeff	if [ "$verbose" = "yes" ]; then
20219820Sjeff		echo -e "\\033[1;032m" $1 "\\033[0;39m"
21219820Sjeff	fi
22219820Sjeff}
23219820Sjeff
24219820Sjefffunction red() {
25219820Sjeff	if [ "$bw" = "yes" ]; then
26219820Sjeff		echo $1
27219820Sjeff		return
28219820Sjeff	fi
29219820Sjeff	echo -e "\\033[1;031m" $1 "\\033[0;39m"
30219820Sjeff}
31219820Sjeff
32219820Sjeffguid_addr=""
33219820Sjeffbw=""
34219820Sjeffverbose=""
35219820Sjeffbrief=""
36219820Sjeffca_info=""
37219820Sjeff
38219820Sjeffwhile [ "$1" ]; do
39219820Sjeff	case $1 in
40219820Sjeff	-G)
41219820Sjeff		guid_addr=yes
42219820Sjeff		;;
43219820Sjeff	-nocolor|-N)
44219820Sjeff		bw=yes
45219820Sjeff		;;
46219820Sjeff	-v)
47219820Sjeff		verbose=yes
48219820Sjeff		brief=""
49219820Sjeff		;;
50219820Sjeff	-b)
51219820Sjeff		brief=yes
52219820Sjeff		verbose=""
53219820Sjeff		;;
54219820Sjeff	-P | -C | -t | -timeout)
55219820Sjeff		case $2 in
56219820Sjeff		-*)
57219820Sjeff			usage
58219820Sjeff			;;
59219820Sjeff		esac
60219820Sjeff		if [ x$2 = x ] ; then
61219820Sjeff			usage
62219820Sjeff		fi
63219820Sjeff		ca_info="$ca_info $1 $2"
64219820Sjeff		shift
65219820Sjeff		;;
66219820Sjeff	-*)
67219820Sjeff		usage
68219820Sjeff		;;
69219820Sjeff	*)
70219820Sjeff		break
71219820Sjeff		;;
72219820Sjeff	esac
73219820Sjeff	shift
74219820Sjeffdone
75219820Sjeff
76219820Sjeff#default is all ports
77219820Sjeffportnum=255
78219820Sjeff
79219820Sjeffif [ $# -lt 1 ]; then
80219820Sjeff	usage
81219820Sjefffi
82219820Sjeff
83219820Sjeffif [ "$2" ]; then
84219820Sjeff	portnum=$2
85219820Sjefffi
86219820Sjeff
87219820Sjeffif [ "$portnum" = "255" ]; then
88219820Sjeff	portname="all"
89219820Sjeffelse
90219820Sjeff	portname=$2
91219820Sjefffi
92219820Sjeff
93219820Sjeffif [ "$guid_addr" ]; then
94219820Sjeff	if ! lid=`$IBPATH/ibaddr $ca_info -G -L $1 | awk '/failed/{exit -1} {print $3}'`; then
95219820Sjeff		echo -n "guid $1 address resolution: "
96219820Sjeff		red "FAILED"
97219820Sjeff		exit -1
98219820Sjeff	fi
99219820Sjeff	guid=$1
100219820Sjeffelse
101219820Sjeff	lid=$1
102219820Sjeff	if ! temp=`$IBPATH/ibaddr $ca_info -L $1 | awk '/failed/{exit -1} {print $1}'`; then
103219820Sjeff		echo -n "lid $1 address resolution: "
104219820Sjeff		red "FAILED"
105219820Sjeff		exit -1
106219820Sjeff	fi
107219820Sjefffi
108219820Sjeff
109219820Sjeffnodename=`smpquery $ca_info nodedesc $lid | sed -e "s/^Node Description:\.*\(.*\)/\1/"`
110219820Sjeff
111219820Sjefftext="`eval $IBPATH/perfquery $ca_info $lid $portnum`"
112219820Sjeffrv=$?
113219820Sjeffif echo "$text" | awk -v mono=$bw -v brief=$brief -F '[.:]*' '
114219820Sjefffunction blue(s)
115219820Sjeff{
116219820Sjeff	if (brief == "yes") {
117219820Sjeff		return
118219820Sjeff	}
119219820Sjeff	if (mono)
120219820Sjeff		printf s
121219820Sjeff	else if (!quiet) {
122219820Sjeff		printf "\033[1;034m" s
123219820Sjeff		printf "\033[0;39m"
124219820Sjeff	}
125219820Sjeff}
126219820Sjeff
127219820Sjeff# Only display Xmit/Rcv Pkts/Data
128219820Sjeff
129219820Sjeff/^# Port counters/ {print}
130219820Sjeff
131219820Sjeff/^CounterSelect/ {next}
132219820Sjeff
133219820Sjeff/AllPortSelect/ {next}
134219820Sjeff
135219820Sjeff/^ib/	{print $0; next}
136219820Sjeff/ibpanic:/	{print $0}
137219820Sjeff/ibwarn:/	{print $0}
138219820Sjeff/iberror:/	{print $0}
139219820Sjeff
140219820Sjeff/^PortSelect/	{ if ($2 != '$portnum') {err = err "error: lid '$lid' port " $2 " does not match query ('$portnum')\n"; exit -1}}
141219820Sjeff
142219820Sjeff$1 ~ "(Xmt|Rcv)(Pkts|Data)" { print $1 ":........................." $2 }
143219820Sjeff
144219820SjeffEND {
145219820Sjeff	if (err != "") {
146219820Sjeff		blue(err)
147219820Sjeff		exit -1
148219820Sjeff	}
149219820Sjeff	if (warn != "") {
150219820Sjeff		blue(warn)
151219820Sjeff		exit -1
152219820Sjeff	}
153219820Sjeff	exit 0
154219820Sjeff}' 2>&1 && test $rv -eq 0 ; then
155219820Sjeff	if [ "$verbose" = "yes" ]; then
156219820Sjeff		echo -n "Error on lid $lid ($nodename) port $portname: "
157219820Sjeff		green OK
158219820Sjeff	fi
159219820Sjeff	exit 0
160219820Sjeffelse
161219820Sjeff	echo -n "Error on lid $lid ($nodename) port $portname: "
162219820Sjeff	red FAILED
163219820Sjeff	exit -1
164219820Sjefffi
165