Blame scripts/ibchecknet

Packit db064d
#!/bin/sh
Packit db064d
Packit db064d
IBPATH=${IBPATH:-/usr/local/sbin}
Packit db064d
Packit db064d
usage() {
Packit db064d
	echo Usage: `basename $0` "[-h] [-v] [-N | -nocolor]" \
Packit db064d
	    "[<topology-file> | -C ca_name -P ca_port -t(imeout) timeout_ms]"
Packit db064d
	exit -1
Packit db064d
}
Packit db064d
Packit db064d
user_abort() {
Packit db064d
	echo "Aborted"
Packit db064d
	exit 1
Packit db064d
}
Packit db064d
Packit db064d
trap user_abort SIGINT
Packit db064d
Packit db064d
gflags=""
Packit db064d
verbose=""
Packit db064d
v=0
Packit db064d
oldlid=""
Packit db064d
topofile=""
Packit db064d
ca_info=""
Packit db064d
Packit db064d
while [ "$1" ]; do
Packit db064d
	case $1 in
Packit db064d
	-h)
Packit db064d
		usage
Packit db064d
		;;
Packit db064d
	-N|-nocolor)
Packit db064d
		gflags=-N
Packit db064d
		;;
Packit db064d
	-v)
Packit db064d
		verbose=-v
Packit db064d
		v=0
Packit db064d
		;;
Packit db064d
	-P | -C | -t | -timeout)
Packit db064d
		case $2 in
Packit db064d
		-*)
Packit db064d
			usage
Packit db064d
			;;
Packit db064d
		esac
Packit db064d
		if [ x$2 = x ] ; then
Packit db064d
			usage
Packit db064d
		fi
Packit db064d
		ca_info="$ca_info $1 $2"
Packit db064d
		shift
Packit db064d
		;;
Packit db064d
	-*)
Packit db064d
		usage
Packit db064d
		;;
Packit db064d
	*)
Packit db064d
		if [ "$topofile" ]; then
Packit db064d
			usage
Packit db064d
		fi
Packit db064d
		topofile="$1"
Packit db064d
		;;
Packit db064d
	esac
Packit db064d
	shift
Packit db064d
done
Packit db064d
Packit db064d
if [ "$topofile" ]; then
Packit db064d
	netcmd="cat $topofile"
Packit db064d
else
Packit db064d
	netcmd="$IBPATH/ibnetdiscover $ca_info"
Packit db064d
fi
Packit db064d
Packit db064d
text="`eval $netcmd`"
Packit db064d
rv=$?
Packit db064d
echo "$text" | awk '
Packit db064d
BEGIN {
Packit db064d
	ne=0
Packit db064d
	pe=0
Packit db064d
}
Packit db064d
function check_node(lid, port)
Packit db064d
{
Packit db064d
	if (system("'$IBPATH'/ibchecknode -S '"$ca_info"' '$gflags' '$verbose' " lid)) {
Packit db064d
		ne++
Packit db064d
		print "\n# " ntype ": nodeguid 0x" nodeguid " failed"
Packit db064d
		return 1;
Packit db064d
	}
Packit db064d
	if (system("'$IBPATH'/ibcheckerrs -S '"$ca_info"' '$gflags' '$verbose' '$brief' " lid " " port))
Packit db064d
		return  2;
Packit db064d
	return 0;
Packit db064d
}
Packit db064d
Packit db064d
/^Ca/ || /^Switch/ || /^Rt/ {
Packit db064d
			nnodes++
Packit db064d
			ntype=$1; nodeguid=substr($3, 4, 16); ports=$2
Packit db064d
			if ('$v' || ntype != "Switch")
Packit db064d
				print "\n# Checking " ntype ": nodeguid 0x" nodeguid
Packit db064d
Packit db064d
			err = 0;
Packit db064d
			if (ntype != "Switch")
Packit db064d
				next
Packit db064d
Packit db064d
			lid = substr($0, index($0, "port 0 lid ") + 11)
Packit db064d
			lid = substr(lid, 1, index(lid, " ") - 1)
Packit db064d
			err = check_node(lid, 255)
Packit db064d
		}
Packit db064d
/^\[/	{
Packit db064d
		nports++
Packit db064d
		port = $1
Packit db064d
		sub("\\(.*\\)", "", port)
Packit db064d
		gsub("[\\[\\]]", "", port)
Packit db064d
		if (ntype != "Switch") {
Packit db064d
			lid = substr($0, index($0, " lid ") + 5)
Packit db064d
			lid = substr(lid, 1, index(lid, " ") - 1)
Packit db064d
			if (check_node(lid, port) == 2)
Packit db064d
  				pcnterr++;
Packit db064d
		} else if (err &&
Packit db064d
			   system("'$IBPATH'/ibcheckerrs -S '"$ca_info"' '$gflags' '$verbose' '$brief' " lid " " port))
Packit db064d
			pcnterr++;
Packit db064d
		if (system("'$IBPATH'/ibcheckport -S '"$ca_info"' '$gflags' '$verbose' " lid " " port)) {
Packit db064d
			if (!'$v' && oldlid != lid) {
Packit db064d
				print "# Checked " ntype ": nodeguid 0x" nodeguid " with failure"
Packit db064d
				oldlid = lid
Packit db064d
			}
Packit db064d
			pe++;
Packit db064d
		}
Packit db064d
}
Packit db064d
Packit db064d
/^ib/	{print $0; next}
Packit db064d
/ibpanic:/	{print $0}
Packit db064d
/ibwarn:/	{print $0}
Packit db064d
/iberror:/	{print $0}
Packit db064d
Packit db064d
END {
Packit db064d
	printf "\n*** WARNING ***: this command is deprecated; Please use \"ibqueryerrors -f\""
Packit db064d
	printf "\n## Summary: %d nodes checked, %d bad nodes found\n", nnodes, ne
Packit db064d
	printf "##          %d ports checked, %d bad ports found\n", nports, pe
Packit db064d
	printf "##          %d ports have errors beyond threshold\n", pcnterr
Packit db064d
	exit (ne + pe + pcnterr)
Packit db064d
}
Packit db064d
'
Packit db064d
av=$?
Packit db064d
if [ $av -ne 0 ] ; then
Packit db064d
	exit $av
Packit db064d
else
Packit db064d
	exit $rv
Packit db064d
fi