#!/bin/sh
#
# $Id: checkhost.sh,v 1.1 1997/07/10 22:25:10 dgregor Exp $

PING=/usr/sbin/ping
TRACEROUTE=/usr/local/bin/traceroute

DEFAULTPINGTIMEOUT=3
DEFAULTTRACEROUTETIMEOUT=2
DEFAULTTRACEROUTEMAXHOPS=2

USAGE="Usage: `basename $0` [options] <host> [<host's on-network routers...>]\n\
Options: [-p ping timeout] [-t traceroute timeout] [-h maximum traceroute hops]"

set -- `getopt ?pth: $*`
if [ $? != 0 ]
then
	echo $USAGE
	exit 1
fi

for OPTION in $*
do
	case $OPTION in
		-p)
			PINGTIMEOUT=$1
			shift
		;;

		-t)
			shift
			TRACEROUTETIMEOUT=$1
			shift
		;;

		-h)
			shift
			TRACEROUTEMAXHOPS=$1
			break
		;;

		-\?)
			echo $USAGE
			exit 1
		;;

		--)
			shift
			break
		;;
	esac
done

if [ $# -lt 1 ]
then
	echo "`basename $0`: invalid usage.  Use -? for help." >&2
	exit 1
fi

HOST="$1";shift

HOSTROUTERS="$*"

if [ "x${PINGTIMEOUT}" = "x" ]; then	       # set default ping timeout
	PINGTIMEOUT=$DEFAULTPINGTIMEOUT
fi
if [ "x${TRACEROUTETIMEOUT}" = "x" ]; then     # set default traceroute timeout
	TRACEROUTETIMEOUT=$DEFAULTTRACEROUTETIMEOUT
fi
if [ "x${TRACEROUTEMAXHOPS}" = "x" ]; then       # set default max. # of tr. hops
	TRACEROUTEMAXHOPS=$DEFAULTTRACEROUTEMAXHOPS
fi

echo "Checking Host ${HOST}"

if ${PING} -n ${HOST} ${PINGTIMEOUT} > /dev/null
then
	# ping succeeded
	exit 0
fi

echo "Host ${HOST} NOT Reached in ping"

# ping failed, do a traceroute
TROUTPUT=`${TRACEROUTE} -m ${TRACEROUTEMAXHOPS} -n -w ${TRACEROUTETIMEOUT} ${HOST} 2>&1`

if echo "$TROUTPUT" | sed '1d' | grep ${HOST} > /dev/null
then
	echo "Host ${HOST} Reached in traceroute"
	exit 0
fi

if [ "x$HOSTROUTERS" != "x" ]
then
	REGEXP=`echo "${HOSTROUTERS}" | sed 's/\./\\\./g;s/  */|/g'`
	if echo "$TROUTPUT" | egrep ${REGEXP} > /dev/null
	then
		echo "One of ${HOST}'s routers were reached -- ${HOST} probably down" >&2
		echo "$TROUTPUT" >&2
		exit 10
	fi

	echo "None of ${HOST}'s routers could be reached -- possible network problem" >&2
	echo "$TROUTPUT" >&2
	exit 20
else
	echo "On-net host ${HOST} not reached -- ${HOST} probably down" >&2
	echo "$TROUTPUT" >&2
	exit 10
fi

