#!/usr/bin/sh #---------------------------------------------------------------------------- # fli4lctrl - extend isdnctrl program for dsl connections # # called by imond # # commands emulated for dsl (pppoe & pptp): # # fli4lctrl hangup pppoe # fli4lctrl dial pppoe # fli4lctrl dialmode pppoe off|auto|manual # fli4lctrl status pppoe # # Creation: 2000-11-14 fm # Last Update: $Id$ # # Copyright (c) 2000-@@YEAR@@ the eisfair team, team(at)eisfair(dot)org # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. #---------------------------------------------------------------------------- cmd=${1} device=${2} arg=${3} case "${device}" in pppoe) device=ppp0 ;; # map pppoe to ppp0 i*) exec /sbin/isdnctrl $* 2>/dev/null ;; # start isdnctrl esac pgm_name=$(basename ${0}) case "${cmd}" in hangup) if [ -f /run/pppoe.up ] then if [ -f /run/pppoe.pid ] then exec kill -9 $(cat /run/pppoe.pid) 2>/dev/null else # This doesn't work because one of the two pptp processes # die if we send a SIGHUP: # exec kill -1 `cat /var/run/ppp0.pid` 2>/dev/null # Here we kill pppd, etc/rc.d/pptp restarts it with # defaultroute, because fli4lctrl cannot set the default # route again to ppp0 - not existant :-( exec kill $(cat /run/ppp0.pid) 2>/dev/null fi fi ;; dial) dialmode=$(cat /run/pppoe.dialmode) case "${dialmode}" in off) /usr/sbin/ip route del default 2>/dev/null echo "${pgm_name}: pppoe dialmode is off" >&2 exit 1 ;; auto) /usr/sbin/ip route del default 2>/dev/null /usr/sbin/ip route add default dev ${device} ( /usr/bin/ping -c 1 www.fli4l.de 2>/dev/null sleep 1 i=1 while [ ${i} -le 5 ] do /usr/bin/ping -c 1 www.fli4l.de 2>/dev/null if [ ${?} -eq 0 ] then break fi sleep 2 i=$((${i} + 1)) done ) >/dev/null & ;; manual) /usr/sbin/ip route del default 2>/dev/null /usr/sbin/ip route add default dev ${device} ( /usr/bin/ping -c 1 www.fli4l.de 2>/dev/null sleep 1 i=1 while [ ${i} -le 5 ] do /usr/bin/ping -c 1 www.fli4l.de 2>/dev/null if [ ${?} -eq 0 ] then break fi sleep 2 i=$((${i} + 1)) done ) >/dev/null & ;; *) echo "${pgm_name}: unknown dialmode in /run/pppoe.dialmode" >&2 exit 2 ;; esac ;; dialmode) case "$arg" in off) /usr/bin/delete-all-routes ${device} echo ${arg} >/run/pppoe.dialmode ;; auto) /usr/sbin/ip route del default 2>/dev/null dri=$(cat /etc/default-route-interface 2>/dev/null) if [ "${dri}" = "pppoe" ] then /usr/sbin/ip route add default dev ${device} fi echo ${arg} >/run/pppoe.dialmode ;; manual) /usr/bin/delete-all-routes ${device} echo ${arg} >/run/pppoe.dialmode ;; *) echo "${pgm_name}: invalid arguments" >&2 exit 2 ;; esac ;; status) if [ -f /run/pppoe.up ] then echo "online" exit 1 # exit code 1 if online fi echo "offline" exit 0 # exit code 0 if offline ;; *) echo "${pgm_name}: invalid arguments" >&2 exit 2 ;; esac exit 0 # --------------------------------------------------------------------------- # end # ---------------------------------------------------------------------------