#!/bin/sh
#***********************************************************************
#
# adsl-status
#
# Shell script to report on status of ADSL connection
#
# Copyright (C) 2000-2001 Roaring Penguin Software Inc.
#
# $Id: adsl-status,v 1.3 2002/04/09 17:28:39 dfs Exp $
#
# This file may be distributed under the terms of the GNU General
# Public License.
#
# LIC: GPL
#
# Usage: adsl-status [config_file]
# If config_file is omitted, defaults to /etc/ppp/pppoe.conf
#
#***********************************************************************

PPPD_PIDFILE="/var/run/ppp-modem.pid"
PPPWATCH_PIDFILE=`ls /var/run/ | grep pppwatch-ppp[0-9]*.pid | awk 'NR==1'`

# If no PPPWATCH_PIDFILE, connection is down
#if [ ! -r "/var/run/$PPPWATCH_PIDFILE" ] ; then
#	echo "modem-status: Link is down"
#	echo "              (can't read pppwatch PID file $PPPWATCH_PIDFILE)"
#	exit 1
#fi

# Determine log device
TMP=${PPPWATCH_PIDFILE#"pppwatch-"}
LOGDEVICE=${TMP%".pid"}
#echo "LOGDEVICE=$LOGDEVICE"

# If no PPPD_PIDFILE, something fishy!
if [ ! -r "$PPPD_PIDFILE" ] ; then
    echo "modem-status: Link is down"
    echo "              (can't read pppd PID file $PPPD_PIDFILE)"
    exit 1
fi

PPPD_PID=`cat "$PPPD_PIDFILE" | awk ' NR == 1'`

# Sigh.  Some versions of pppd put PID files in /var/run; others put them
# in /etc/ppp.  Since it's too messy to figure out what pppd does, we
# try both locations.
for i in /etc/ppp/ppp[0-9]*.pid /var/run/ppp[0-9]*.pid ; do
    if [ -r $i ] ; then
	PID=`cat $i | awk 'NR == 1 { print $1 }'`
	if [ "$PID" = "$PPPD_PID" ] ; then
	    IF=`basename $i .pid`
#	    netstat -rn | grep " ${IF}\$" > /dev/null
	    route -n | grep " ${IF}\$" > /dev/null
	    # /sbin/ifconfig $IF | grep "UP.*POINTOPOINT" > /dev/null
	    if [ "$?" != "0" ] ; then
		echo "modem-status: Link is attached to $IF, but $IF is down"
		exit 1
	    fi
	    echo "modem-status: Link is up and running on $IF"
	    /sbin/ifconfig $IF
	    exit 0
	fi
    fi
done

echo "modem-status: Link is down"
echo "              (could not find interface corresponding to pppd pid $PPPD_PID)"
exit 1
