]> CyberLeo.Net >> Repos - FreeBSD/releng/10.0.git/blob - contrib/ofed/management/infiniband-diags/scripts/ibdatacounts.in
- Copy stable/10 (r259064) to releng/10.0 as part of the
[FreeBSD/releng/10.0.git] / contrib / ofed / management / infiniband-diags / scripts / ibdatacounts.in
1 #!/bin/sh
2
3 IBPATH=${IBPATH:-@IBSCRIPTPATH@}
4
5 function 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
12 function 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
24 function 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
32 guid_addr=""
33 bw=""
34 verbose=""
35 brief=""
36 ca_info=""
37
38 while [ "$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
74 done
75
76 #default is all ports
77 portnum=255
78
79 if [ $# -lt 1 ]; then
80         usage
81 fi
82
83 if [ "$2" ]; then
84         portnum=$2
85 fi
86
87 if [ "$portnum" = "255" ]; then
88         portname="all"
89 else
90         portname=$2
91 fi
92
93 if [ "$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
100 else
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
107 fi
108
109 nodename=`smpquery $ca_info nodedesc $lid | sed -e "s/^Node Description:\.*\(.*\)/\1/"`
110
111 text="`eval $IBPATH/perfquery $ca_info $lid $portnum`"
112 rv=$?
113 if echo "$text" | awk -v mono=$bw -v brief=$brief -F '[.:]*' '
114 function 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
144 END {
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
160 else
161         echo -n "Error on lid $lid ($nodename) port $portname: "
162         red FAILED
163         exit -1
164 fi