]> CyberLeo.Net >> Repos - FreeBSD/releng/9.2.git/blob - contrib/ofed/management/infiniband-diags/scripts/ibcheckportstate.in
- Copy stable/9 to releng/9.2 as part of the 9.2-RELEASE cycle.
[FreeBSD/releng/9.2.git] / contrib / ofed / management / infiniband-diags / scripts / ibcheckportstate.in
1 #!/bin/sh
2
3 IBPATH=${IBPATH:-@IBSCRIPTPATH@}
4
5 function usage() {
6         echo Usage: `basename $0` "[-h] [-v] [-N | -nocolor] [-G]" \
7            "[-C ca_name] [-P ca_port] [-t(imeout) timeout_ms] <lid|guid> <port>"
8         exit -1
9 }
10
11 function green() {
12         if [ "$bw" = "yes" ]; then
13                 if [ "$verbose" = "yes" ]; then
14                         echo $1
15                 fi
16                 return
17         fi
18         if [ "$verbose" = "yes" ]; then
19                 echo -e "\\033[1;032m" $1 "\\033[0;39m"
20         fi
21 }
22
23 function red() {
24         if [ "$bw" = "yes" ]; then
25                 echo $1
26                 return
27         fi
28         echo -e "\\033[1;031m" $1 "\\033[0;39m"
29 }
30
31 guid_addr=""
32 bw=""
33 verbose=""
34 ca_info=""
35
36 while [ "$1" ]; do
37         case $1 in
38         -G)
39                 guid_addr=yes
40                 ;;
41         -nocolor|-N)
42                 bw=yes
43                 ;;
44         -v)
45                 verbose=yes
46                 ;;
47         -P | -C | -t | -timeout)
48                 case $2 in
49                 -*)
50                         usage
51                         ;;
52                 esac
53                 if [ x$2 = x ] ; then
54                         usage
55                 fi
56                 ca_info="$ca_info $1 $2"
57                 shift
58                 ;;
59         -*)
60                 usage
61                 ;;
62         *)
63                 break
64                 ;;
65         esac
66         shift
67 done
68
69 if [ $# -lt 2 ]; then
70         usage
71 fi
72
73 portnum=$2
74
75 if [ "$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
82 else
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
89 fi
90
91
92 text="`eval $IBPATH/smpquery $ca_info portinfo $lid $portnum`"
93 rv=$?
94 if echo "$text" | awk -v mono=$bw -F '[.:]*' '
95 function 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 PortPhysicalState and PortState
106
107 /^PhysLinkState/{ if ($2 != "LinkUp") {err = err "#error: Physical link state is " $2 "  lid '$lid' port '$portnum'\n"; exit -1}}
108
109 /^LinkState/{ if ($2 != "Active") warn = warn "#warn: Logical link state is " $2 "  lid '$lid' port '$portnum'\n"}
110
111 /^ib/   {print $0; next}
112 /ibpanic:/      {print $0}
113 /ibwarn:/       {print $0}
114 /iberror:/      {print $0}
115
116 END {
117         if (err != "") {
118                 blue(err)
119                 exit -1
120         }
121         if (warn != "") {
122                 blue(warn)
123                 exit -1
124         }
125         exit 0
126 }' 2>&1 && test $rv -eq 0 ; then
127         if [ "$verbose" = "yes" ]; then
128                 echo -n "Port check lid $lid port $portnum: "
129                 green "OK"
130         fi
131         exit 0
132 else
133         echo -n "Port check lid $lid port $portnum: "
134         red "FAILED"
135         exit -1
136 fi