1219820Sjeff#!/bin/sh
2219820Sjeff
3219820SjeffIBPATH=${IBPATH:-@IBSCRIPTPATH@}
4219820Sjeff
5219820Sjefffunction usage() {
6219820Sjeff	echo Usage: `basename $0` "[-h] [<topology-file>" \
7219820Sjeff	    "| -C ca_name -P ca_port -t(imeout) timeout_ms]"
8219820Sjeff	exit -1
9219820Sjeff}
10219820Sjeff
11219820Sjefffunction user_abort() {
12219820Sjeff	echo "Aborted"
13219820Sjeff	exit 1
14219820Sjeff}
15219820Sjeff
16219820Sjefftrap user_abort SIGINT
17219820Sjeff
18219820Sjeffgflags=""
19219820Sjeffverbose=""
20219820Sjeffv=0
21219820Sjefftopofile=""
22219820Sjeffca_info=""
23219820Sjeff
24219820Sjeffwhile [ "$1" ]; do
25219820Sjeff	case $1 in
26219820Sjeff	-h)
27219820Sjeff		usage
28219820Sjeff		;;
29219820Sjeff	-P | -C | -t | -timeout)
30219820Sjeff		case $2 in
31219820Sjeff		-*)
32219820Sjeff			usage
33219820Sjeff			;;
34219820Sjeff		esac
35219820Sjeff		if [ x$2 = x ] ; then
36219820Sjeff			usage
37219820Sjeff		fi
38219820Sjeff		ca_info="$ca_info $1 $2"
39219820Sjeff		shift
40219820Sjeff		;;
41219820Sjeff	-*)
42219820Sjeff		usage
43219820Sjeff		;;
44219820Sjeff	*)
45219820Sjeff		if [ "$topofile" ]; then
46219820Sjeff			usage
47219820Sjeff		fi
48219820Sjeff		topofile="$1"
49219820Sjeff		;;
50219820Sjeff	esac
51219820Sjeff	shift
52219820Sjeffdone
53219820Sjeff
54219820Sjeffif [ "$topofile" ]; then
55219820Sjeff	netcmd="cat $topofile"
56219820Sjeffelse
57219820Sjeff	netcmd="$IBPATH/ibnetdiscover $ca_info"
58219820Sjefffi
59219820Sjeff
60219820Sjefftext="`eval $netcmd`"
61219820Sjeffrv=$?
62219820Sjeffecho "$text" | awk '
63219820Sjeff
64219820Sjefffunction clear_counters(lid)
65219820Sjeff{
66219820Sjeff	if (system("'$IBPATH'/perfquery'"$ca_info"' '$gflags' -R -a " lid))
67219820Sjeff		nodeerr++
68219820Sjeff}
69219820Sjeff
70219820Sjefffunction clear_port_counters(lid, port)
71219820Sjeff{
72219820Sjeff	if (system("'$IBPATH'/perfquery'"$ca_info"' '$gflags' -R " lid " " port))
73219820Sjeff		nodeerr++
74219820Sjeff}
75219820Sjeff
76219820Sjeff/^Ca/ || /^Switch/ || /^Rt/ {
77219820Sjeff			nnodes++
78219820Sjeff			ntype=$1; nodeguid=substr($3, 4, 16); ports=$2
79219820Sjeff			if (ntype != "Switch")
80219820Sjeff				next
81219820Sjeff
82219820Sjeff			lid = substr($0, index($0, "port 0 lid ") + 11)
83219820Sjeff			lid = substr(lid, 1, index(lid, " ") - 1)
84219820Sjeff			clear_counters(lid)
85219820Sjeff		}
86219820Sjeff
87219820Sjeff/^\[/   {
88219820Sjeff			port = $1
89219820Sjeff			sub("\\(.*\\)", "", port)
90219820Sjeff			gsub("[\\[\\]]", "", port)
91219820Sjeff			if (ntype != "Switch") {
92219820Sjeff				lid = substr($0, index($0, " lid ") + 5)
93219820Sjeff				lid = substr(lid, 1, index(lid, " ") - 1)
94219820Sjeff				clear_port_counters(lid, port)
95219820Sjeff			}
96219820Sjeff		}
97219820Sjeff
98219820Sjeff/^ib/	{print $0; next}
99219820Sjeff/ibpanic:/	{print $0}
100219820Sjeff/ibwarn:/	{print $0}
101219820Sjeff/iberror:/	{print $0}
102219820Sjeff
103219820SjeffEND {
104219820Sjeff	printf "\n## Summary: %d nodes cleared %d errors\n", nnodes, nodeerr
105219820Sjeff}
106219820Sjeff'
107219820Sjeffexit $rv
108