#!/bin/sh

################################################
#                                              #
# DSL-Watchdog                                 #
#                                              #
# (c) 2004 Leonhard Fellermayr <leo@slacky.de> #
#                                              #
################################################

while :; do
{

  # DSL running && ISDN running => kill ISDN

  test -e /proc/sys/net/ipv4/conf/ppp0/log_martians && test -e /proc/sys/net/ipv4/conf/ippp0/log_martians &&
  {
    echo -n "Killing ISDN..."
    /sbin/isdnctrl hangup ippp0 >/dev/null 2>&1
    /etc/rc.d/i4l stop >/dev/null 2>&1
    # restore default route that was killed by i4l stop
    GW=`/sbin/ifconfig ppp0 | grep "inet addr" | cut -f3 -d":" | cut -f1 -d" "`
    /sbin/route add default gw $GW
    echo "`date` - DSL connection restored. Killing ISDN..." >> /var/log/dsl-watchdog.log
    echo "done"
  }

  # DSL not running && ISDN not running => dial ISDN

  test -e /proc/sys/net/ipv4/conf/ppp0/log_martians || test -e /proc/sys/net/ipv4/conf/ippp0/log_martians ||
  {
    echo -n "Dialing ISDN..."
    /etc/rc.d/i4l start >/dev/null 2>&1
    /sbin/isdnctrl dial ippp0 >/dev/null 2>&1
    echo "`date` - No DSL connection! ISDN dial-up triggered." >> /var/log/dsl-watchdog.log
    echo "done"
  }

  sleep 5

};

done

