]> CyberLeo.Net >> Repos - FreeBSD/releng/10.0.git/blob - contrib/ofed/management/infiniband-diags/scripts/ibcheckportwidth.in
- Copy stable/10 (r259064) to releng/10.0 as part of the
[FreeBSD/releng/10.0.git] / contrib / ofed / management / infiniband-diags / scripts / ibcheckportwidth.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 LinkWidthActive if LinkWidthSupported is not 1X
106 /^LinkWidthSupported/{ if ($2 != "1X") { next } }
107 /^LinkWidthActive/{ if ($2 == "1X") warn = warn "#warn: Link configured as 1X  lid '$lid' port '$portnum'\n"}
108
109 /^ib/   {print $0; next}
110 /ibpanic:/      {print $0}
111 /ibwarn:/       {print $0}
112 /iberror:/      {print $0}
113
114 END {
115         if (err != "") {
116                 blue(err)
117                 exit -1
118         }
119         if (warn != "") {
120                 blue(warn)
121                 exit -1
122         }
123         exit 0
124 }' 2>&1 && test $rv -eq 0 ; then
125         if [ "$verbose" = "yes" ]; then
126                 echo -n "Port check lid $lid port $portnum: "
127                 green "OK"
128         fi
129         exit 0
130 else
131         echo -n "Port check lid $lid port $portnum: "
132         red "FAILED"
133         exit -1
134 fi