#!/bin/sh
# $Id: linkcheck,v 1.21 2011/11/18 04:08:25 grog Exp $
#
# Check network connectivity at regular intervals.
SYSTEMS="hub w3 www.auug.org.au ozlabs.org ftp.netbsd.org"
NSYS=5
if [ "$1" != "" ]; then
  LINKSTATS=$1
else
  LINKSTATS=/home/grog/public_html/net/3glinkstats
fi
# The other side of the link.
# lns1.mel4.internode.on.net (150.101.212.19) 
# lns1.syd6.internode.on.net (150.101.197.94)
# NEXTHOP=150.101.197.94
# Do it Internode's way
# NEXTHOP=resolv.internode.on.net.
# Do it Internode's second way
NEXTHOP=optusnet.com.au
while :; do 
  SPEED=0
  tcpcheck &
  TIME=`ping -c 1 $NEXTHOP`
  ping -c1 $NEXTHOP >/dev/null 2>&1
  if [ $? -eq 0 ]; then 
    SPEED=`echo $TIME | awk -F/ -f ~/bin/pingbadness.awk`
    TIME=`echo $TIME | sed 's:.*stddev =::; s:/.*: ms:'`
  fi
  if [ "$SPEED" = "" ]; then 
    SPEED=0
  fi
  if [ "$SPEED" = 0 ]; then
    TIME=
  fi
  # Sometimes, it seems, ping doesn't return !0 on error
  REMOTE=0
  BADLIST=
  for i in $SYSTEMS; do
    if ping -c1 $i >/dev/null 2>&1; then
      REMOTE=`expr $REMOTE + 1`
    else
      BADLIST="$BADLIST $i"
    fi
  done
echo `date +%s` $SPEED $REMOTE $BADLIST '	#' `date`  $TIME >> $LINKSTATS
if [ $REMOTE -eq $NSYS ]; then
  sleep 60
else
  sleep 1
fi
done