#! /bin/bash
#
# /etc/ppp/inet-on <provider>
# ffnet eine Providerverbindung mit ISDN ohne direkte Anwahl
# Bedingung ist eine syncPPP-ISDN-Verbindung (Modus 3 oder 4)
# bzw. ADSL (Modus 5) !
# (C) R.Klaproth, 16.09.2000
#
# Muss von root aufgerufen werden; z.B. per cron oder at
if [ `id -u` != 0 ]; then
	echo "Das darf nur root!"
	exit 1
fi

provider=$1

export PATH=/bin:/usr/bin:/sbin:/usr/sbin:/usr/lib/ods-server/bin:/etc/ppp

cd /etc/ppp

PPP-config -r > SYSTEM

if ! grep -q "^$provider:" SYSTEM ; then
        echo "Fehlerhafter Provider"
        exit 1
fi

# Ist das auch ein syncPPP-Provider ?
modus=`grep "^$provider:" SYSTEM | cut -d: -f3`
if [ $modus -lt 3 ]; then
	echo "Kein syncPPP-Provider"
	exit 1
fi

# Die Vorgaben sind ok. Noch ein Test: Sind wir schon online?
for f in `cat SYSTEM | cut -d: -f1` ; do
	if [ -f /var/lock/$f ]; then
		echo "Der Server ist schon online per $f"
		exit 2
	fi
done
# OK, lass uns das Ding dreh'n
username=`grep "^$provider:" SYSTEM | cut -d: -f4`
phone=`grep "^$provider:" SYSTEM | cut -d: -f2`
nameserver=`grep "^$provider:" SYSTEM | cut -d: -f6`
proxy=`grep "^$provider:" SYSTEM | cut -d: -f7 | sed "s/;/:/" `

rm -f SYSTEM

# Wenn ADSL, dann machen wir 'ne Sonderbehandlung
if [ $modus = 5 ]; then
	# Erstens: Device festlegen
	/sbin/ifconfig > /var/log/interfaces
	DEVICES="ppp0 ppp1"
	DEVICE=""
	for f in $DEVICES ; do
		if ! grep -q "^$f" /var/log/interfaces ; then
			DEVICE=$f
			break ;
		fi
	done
	rm -f /var/log/interfaces /var/run/pppoe.stop
	echo "$provider" > /var/lock/$DEVICE
	echo "$DEVICE" > /var/lock/$provider
	ETH=`cat /var/lock/adsl-dev`
	# Die Parameter haben wir. Nun testen, ob ADSL schon aktiv ist
	PID=`pidof pppoe`
	if ! [ -z "$PID" ]; then
		echo "Problem: ADSL scheint schon aktiv zu sein. Ich gebe auf!"
		exit 1
	fi
	( /usr/sbin/adsl-connect $ETH $username >/dev/null 2>&1 &)
	nameserver -root $provider $nameserver
	proxy-config "$proxy"
	exit 0
fi

# Parameter holen
. /etc/rc.config
test -z $MSN_OUT && MSN_OUT=1

# "locking" fuer die Schnittstellen
DEVICES="ippp0 ippp1"
DEVICE=""
for f in $DEVICES; do
	if /usr/lib/ods-server/bin/lock -l $f 2>/dev/null; then
		DEVICE=$f
		break;
	fi
done
if [ -z $DEVICE ]; then
	echo "Kein Kanal frei"
	exit 1
fi

# Laden der ISDN-Module 
/sbin/loadisdn
if [ $? = 1 ]; then
	lock -u $DEVICE
	echo "ISDN-Module konnten nicht geladen werden. Ich gebe auf."
	exit 1
fi

# Jetzt wirds ernst
echo root > /var/lock/online.user
echo $provider > /var/lock/$DEVICE
echo $DEVICE > /var/lock/$provider
echo $DEVICE > /var/lock/$provider.standby

/usr/bin/logger -i -p daemon.notice "Gebe Internet-Verbindung zu $provider frei"

# eigentlicher Verbindungsaufbau
/sbin/isdnctrl addif $DEVICE
/sbin/isdnctrl addphone $DEVICE out $phone
/sbin/isdnctrl eaz $DEVICE $MSN_OUT
/sbin/isdnctrl l2_prot $DEVICE hdlc
/sbin/isdnctrl l3_prot $DEVICE trans
/sbin/isdnctrl encap $DEVICE syncppp
/sbin/isdnctrl secure $DEVICE on
/sbin/isdnctrl huptimeout $DEVICE 150
/sbin/isdnctrl chargehup $DEVICE on
/sbin/isdnctrl dialmode $DEVICE auto
# wichtig, sonst koennten falsche chap/pap-secrets beim
# jeweiligen ipppd landen
/sbin/isdnctrl pppbind $DEVICE `echo -n $DEVICE | cut -b5`

if [ $modus = "4" ] ; then
	# Sonderbehandlung fr MPPP
	DEVICE1=ippp11          # zweites Interface
	echo $DEVICE > /var/lock/slave
	/sbin/isdnctrl addslave $DEVICE $DEVICE1
	/sbin/isdnctrl addphone $DEVICE1 out $phone
	/sbin/isdnctrl eaz $DEVICE1 $MSN_OUT
	/sbin/isdnctrl l2_prot $DEVICE1 hdlc
	/sbin/isdnctrl l3_prot $DEVICE1 trans
	/sbin/isdnctrl encap $DEVICE1 syncppp
	/sbin/isdnctrl secure $DEVICE1 on
	/sbin/isdnctrl huptimeout $DEVICE1 150
	# und nun den ipppd-Daemon anwerfen:
        /sbin/ifconfig $DEVICE 192.168.99.1 pointopoint 192.168.99.2 metric 1

	/sbin/ipppd remotename $provider name $username \
	   ipcp-accept-local ipcp-accept-remote noipdefault defaultroute \
	   ipparam $modus -detach +mp /dev/$DEVICE /dev/$DEVICE1 &

  else
	# jetzt den eigentlichen PPP-Daemonen anwerfen
	/sbin/ifconfig $DEVICE 192.168.99.1 pointopoint 192.168.99.2 metric 1

	/sbin/ipppd remotename $provider name $username \
	   ipcp-accept-local ipcp-accept-remote noipdefault defaultroute \
	   ipparam $modus -detach /dev/$DEVICE &

fi
route add -host 192.168.99.2 $DEVICE

# Umbau der Daemons
nameserver -root $provider $nameserver
proxy-config "$proxy"

route add default $DEVICE

exit 0
