#! /bin/bash
#
# Start des Netzwerks; Teil des c't/ODS-Servers.
# Reiner Klaproth, 3.1.1999
# header geaendert, efl, 23aug01
#

# Abteilung dirty tricks..
. /etc/rc.config

ETHER=yes
if ! [ -f /etc/Systemverwaltung/RCS/ether,v ]; then
	ETHER=no
  else
    cd /etc/Systemverwaltung
    co -p ether  > /tmp/ether.$$ 2>/dev/null
    cd /
    awk -F: '{ print $2 ":" $1 ":" $4 ":" $5 ":" $6 }' /tmp/ether.$$ >/tmp/ether
    sort /tmp/ether > /tmp/network
    rm -f /tmp/ether.$$ /tmp/ether
fi

ret_code=$rc_ok
case "$1" in
    start)
	echo "Starte Netzwerk."
	/sbin/ifconfig lo 127.0.0.1
	/sbin/route add -net 127.0.0.0 dev lo
	if [ "$ETHER" = no ]; then
		echo -n "Keine Netzwerkkarte angegeben. Starte Netz nicht!"
		echo -e $rc_failed
		exit 1
	fi
	NR=0
	while read zeile ; do
                MODUL=`echo $zeile | cut -d: -f1`
		IP=`echo $zeile | cut -d: -f2`
		MASKE=`echo $zeile | cut -d: -f3`
		NETZ=`echo $zeile | cut -d: -f4`
		BCAST=`echo $zeile | cut -d: -f5`
		DEV="eth$NR"
		echo "Konfiguriere Netzkarte $DEV."
		if ! grep -q "$DEV:" /proc/net/dev ; then
			modprobe $MODUL.o $PARAM
		fi
		if ! [ "$IP" = "ADSL" ] ; then
		    /sbin/ifconfig $DEV $IP netmask $MASKE broadcast $BCAST up
		    /sbin/route add -net $NETZ netmask $MASKE dev $DEV
		    if [ "$START_DHCP" = "yes" ]; then
			/sbin/route add -host dhcpdummy gw $IP dev $DEV
		    fi
		  else
		    /sbin/ifconfig $DEV 192.168.99.100 netmask 255.255.255.0 broadcast 192.168.99.255 up
		    /sbin/ifconfig $DEV down
		    # Eintragen der Karte in /etc/ppp/pppoe.conf
		    file=/etc/ppp/pppoe.conf
		    cp -f $file $file.old
		    sed "s/^ETH=.*/ETH=$DEV/ " $file.old > $file
		    echo "$DEV" > /var/lock/adsl-dev
		fi
		NR=`expr $NR + 1`
        done < /tmp/network
	rm -f /tmp/network

	if [ -f /etc/route.conf ]; then
	   # Zustzliches Routing aus /etc/route.conf lesen
	   while read netip maske gate ; do
		case $netip in
		  \#*|"") ;;
		  *)
		     if ! [ -z "$gate" ]; then
			echo "Setze Route fr Netz $netip."
			/sbin/route add -net $netip netmask $maske gateway $gate
		     fi
		  ;;
		esac
	   done < /etc/route.conf
	fi
       echo -e "$ret_code"
    ;;
    stop)
 	if test -x /usr/bin/wall ; then
	    echo "Netzwerk wird jetzt heruntergefahren." | /usr/bin/wall
	    sleep 1
	fi

	# Routing aus /etc/route.conf rausschmeissen
	if [ -f /etc/route.conf ]; then
	   while read netip maske gate ; do
		case $netip in
		  \#*|"") ;;
		  *)
		    if ! [ -z "$gate" ]; then
			echo "Entferne Route zu $netip."
			/sbin/route del $netip
		    fi
		  ;;
		esac
	   done < /etc/route.conf
	fi

	# Die Netzkarten entladen
	NR=0
	while read zeile ; do
		DEV="eth$NR"
		MODUL=`echo $zeile | cut -d: -f1`
		IP=`echo $zeile | cut -d: -f2`
		NETZ=`echo $zeile | cut -d: -f4`
	        echo "Schliee Netzkarten-Interface $DEV."
		if ! [ "$IP" = "ADSL" ] ; then
		    if [ "$START_DHCP" = "yes" ]; then
		        /sbin/route del dhcpdummy dev $DEV
		    fi
		    /sbin/route del $NETZ
		fi
		/sbin/ifconfig $DEV down
		NR=`expr $NR + 1`
        done < /tmp/network
	rm -f /tmp/network
	echo -e $ret_code
    ;;
    *)
    echo "Aufruf: $0 {start|stop}"
    exit 1
esac

exit 0
