Add ibcheckroutes script.
ibcheckroutes validates route between all leaf switches, switches or
CAs in the fabric.

Signed-off-by: Doron Shoham <dor...@voltaire.com>
---
 infiniband-diags/Makefile.am              |    4 +-
 infiniband-diags/configure.in             |    1 +
 infiniband-diags/man/ibcheckroutes.8      |   46 ++++++++++
 infiniband-diags/scripts/ibcheckroutes.in |  138 +++++++++++++++++++++++++++++
 4 files changed, 187 insertions(+), 2 deletions(-)
 create mode 100644 infiniband-diags/man/ibcheckroutes.8
 create mode 100644 infiniband-diags/scripts/ibcheckroutes.in

diff --git a/infiniband-diags/Makefile.am b/infiniband-diags/Makefile.am
index 1cdb60e..57363c4 100644
--- a/infiniband-diags/Makefile.am
+++ b/infiniband-diags/Makefile.am
@@ -33,7 +33,7 @@ sbin_SCRIPTS = scripts/ibcheckerrs scripts/ibchecknet 
scripts/ibchecknode \
               scripts/iblinkinfo.pl scripts/ibprintswitch.pl \
               scripts/ibprintca.pl scripts/ibprintrt.pl \
               scripts/ibfindnodesusing.pl scripts/ibidsverify.pl \
-              scripts/check_lft_balance.pl
+              scripts/check_lft_balance.pl scripts/ibcheckroutes
 
 noinst_LIBRARIES = libcommon.a
 
@@ -76,7 +76,7 @@ man_MANS = man/ibaddr.8 man/ibcheckerrors.8 man/ibcheckerrs.8 
\
        man/ibprintswitch.8 man/ibprintca.8 man/ibfindnodesusing.8 \
        man/ibdatacounts.8 man/ibdatacounters.8 \
        man/ibrouters.8 man/ibprintrt.8 man/ibidsverify.8 \
-       man/check_lft_balance.8
+       man/check_lft_balance.8 man/ibcheckroutes.8
 
 BUILT_SOURCES = ibdiag_version
 ibdiag_version:
diff --git a/infiniband-diags/configure.in b/infiniband-diags/configure.in
index 3ef35cc..aa178c5 100644
--- a/infiniband-diags/configure.in
+++ b/infiniband-diags/configure.in
@@ -158,6 +158,7 @@ AC_CONFIG_FILES([\
        scripts/ibcheckportwidth \
        scripts/ibcheckstate \
        scripts/ibcheckwidth \
+       scripts/ibcheckroutes \
        scripts/ibclearcounters \
        scripts/ibclearerrors \
        scripts/ibdatacounts \
diff --git a/infiniband-diags/man/ibcheckroutes.8 
b/infiniband-diags/man/ibcheckroutes.8
new file mode 100644
index 0000000..e4cb9cb
--- /dev/null
+++ b/infiniband-diags/man/ibcheckroutes.8
@@ -0,0 +1,46 @@
+.TH IBCHECKPORT 8 "September 10, 2009" "OpenIB" "OpenIB Diagnostics"
+
+.SH NAME
+ibcheckroutes \- validate routes between all hosts in fabric
+
+.SH SYNOPSIS
+.B ibcheckroutes
+[\-l] [\-s] [\-c] [\-n topology-file ] [\-h] [\-N] [\-b] [\-e] [\-C ca_name] 
[\-P ca_port] [\-t(imeout) timeout_ms]
+
+.SH DESCRIPTION
+.PP
+ibcheckroutes is a script which uses a full topology file that was created by 
ibnetdiscover,
+scans the network to validate route between all leaf switches, switches or CAs 
in the fabric.
+
+.SH OPTIONS
+.PP
+\-n  Use topology-file.
+.PP
+\-l  Check routes between all leaf switches.
+.PP
+\-s  Check routes between all switches.
+.PP
+\-c  Check routes between all CAs.
+.PP
+\-h  Show help.
+.PP
+\-N  Use mono rather than color mode.
+.PP
+\-b  Suppress output.
+.PP
+\-e  Show errors only.
+.PP
+\-C <ca_name>    Use the specified ca_name.
+.PP
+\-P <ca_port>    Use the specified ca_port.
+.PP
+\-t <timeout_ms> Override the default timeout for the solicited mads.
+
+.SH SEE ALSO
+.BR ibnetdiscover(8),
+.BR ibtracert(8)
+
+.SH AUTHOR
+.TP
+Doron Shoham
+.RI < dor...@voltaire.com >
diff --git a/infiniband-diags/scripts/ibcheckroutes.in 
b/infiniband-diags/scripts/ibcheckroutes.in
new file mode 100644
index 0000000..0b1af63
--- /dev/null
+++ b/infiniband-diags/scripts/ibcheckroutes.in
@@ -0,0 +1,138 @@
+#!/bin/sh
+
+IBPATH=${IBPATH:-...@ibscriptpath@}
+
+function usage() {
+       echo -e Usage: `basename $0` "[-l] [-s] [-c] [-h] [-N] [-b] [-e] [-n 
topology-file ] \
+[-C ca_name] [-P ca_port] [-t(imeout) timeout_ms]"
+       echo -e "  Validate routes between all leaf switches, switches or CAs 
in the fabric"
+       echo -e " -n   - Use topology-file"
+       echo -e " -l   - Check routes between all leaf switches"
+       echo -e " -s   - Check routes between all switches"
+       echo -e " -c   - Check routes between all CAs"
+       echo -e " -h   - Show help"
+       echo -e " -N   - Use mono rather than color mode"
+       echo -e " -b   - Suppress output"
+       echo -e " -e   - Show errors only"
+       echo -e " -C   - Use the specified ca_name"
+       echo -e " -P   - Use the specified ca_port"
+       echo -e " -t   - Override the default timeout for the solicited mads"
+       exit -1
+}
+
+function user_abort() {
+       echo "Aborted"
+       exit 1
+}
+
+function green() {
+       if [ "$bw" = "yes" ]; then
+               printf "${res_col}[OK]\n" $1
+               return
+       fi
+       printf "\033[1;032m${res_col}[OK]\033[0;39m\n" $1
+}
+
+function red() {
+       if [ "$bw" = "yes" ]; then
+               printf "${res_col}[FAILED]\n" "$1"
+               return
+       fi
+       printf "\033[31m${res_col}[FAILED]\033[0m\n" "$1"
+}
+
+trap user_abort SIGINT SIGTERM
+
+bw=""
+brief=0
+error=0
+ca_info=""
+st=0
+method="leaf"
+topofile=/tmp/net
+discover=1
+res_col="%-20.20s"
+
+function get_opts() {
+       while getopts P:C:t:n:beNhlsc o; do
+               case "$o" in
+               n)
+                       topofile="$OPTARG"
+                       discover=0
+                       ;;
+               l)
+                       method="leaf"
+                       ;;
+               s)
+                       method="sw"
+                       ;;
+               c)
+                       method="ca"
+                       ;;
+               h)
+                       usage
+                       ;;
+               N)
+                       bw="yes"
+                       ;;
+               b)
+                       brief=1
+                       ;;
+               e)
+                       error=1
+                       ;;
+               P | C | t | timeout)
+                       ca_info="$ca_info -$o $OPTARG"
+                       ;;
+               *)
+                       usage
+                       ;;
+               esac
+       done
+}
+
+get_opts $*
+
+if [ $discover -eq 1 ]; then
+       $IBPATH/ibnetdiscover $ca_info > $topofile
+fi
+
+# find LIDs to check
+case $method in
+leaf)
+       [ $brief -eq 0 ] && echo -e "Checking routes between all Leaf Switches"
+       LIDS=($(awk  '/# lid /{a[$(NF-1)]=$(NF-1)} END{for(v in a) print v}' 
$topofile))
+       ;;
+sw)
+       [ $brief -eq 0 ] && echo -e "Checking routes between all Switches"
+       LIDS=($(awk '/^Switch/ {a[$(NF-2)]=$(NF-2)} END{for(v in a) print v}' 
$topofile))
+       ;;
+ca)
+       [ $brief -eq 0 ] && echo -e "Checking routes between all CAs"
+       LIDS=($(awk  '/# lid /{lmc=$7; e=2^lmc+$5; for(i=$5; i<e; i++) {print 
i}}' $topofile))
+       ;;
+esac
+
+# number of LIDs
+n=${#li...@]}
+
+if [ $N -lt 2 ]; then
+       [ $brief -eq 0 ] && echo "Error: found single node"
+       exit 0
+fi
+
+# check routes
+[ $brief -eq 0 ] && echo -e "Checking route between:\nSource lid --> 
Destination lid"
+for((s=0; s<N-1; s++)); do
+       for ((d=s+1; d<N; d++)); do
+               $IBPATH/ibtracert $ca_info ${LIDS[$s]} ${LIDS[$d]} > /dev/null
+               if [ $? -eq 0 ]; then
+                       [ $brief -eq 0 ] && [ $error -eq 0 ] && green 
"${LIDS[$s]}-->${LIDS[$d]}"
+               else
+                       [ $brief -eq 0 ] && red "${LIDS[$s]}-->${LIDS[$d]}"
+                       st=1
+               fi
+       done
+done
+
+exit $st
-- 
1.5.4


_______________________________________________
general mailing list
general@lists.openfabrics.org
http://lists.openfabrics.org/cgi-bin/mailman/listinfo/general

To unsubscribe, please visit http://openib.org/mailman/listinfo/openib-general

Reply via email to