#!/bin/sh
#
# /sbin/netsetup:       Script zur Netzwerkkonfiguration  
#
#                                 (c) Ralf Flaxa, 1994
#
# Version: 1.8
# Datum: 2. Mai 1994                                              
#
# Dieses Skript soll die Netzwerkkonfigurierung erleichtern. 
# Es ist auf die Linux Support Team Distribution (LST) Version 1.8 
# abgestimmt. Trotz mittlerweile ber 30 KB ist es leider nicht
# mglich, alle Spezielflle abzudecken. Ich hoffe trotzdem,
# dass es hilfreich ist.
#
# Feedback bitte per e-mail an   rfflaxa@informatik.uni-erlangen.de
#
# Wir wollen ein feedback ! Damit trgst Du zur Weiterentwicklung bei.
# 

PrintUsage()
{
	echo
	echo "$0: Netzwerk konfigurieren"
	echo "Usage: $0 [-install] [-hostname] [-localnet] [-addhost] "
	echo "		  [-network] [-router] [-nameserver] [-mail] "
	echo "                  [-slip] [-uucp] [-news] [-ether] [-diagnose]"
	echo
}


# Test, ob die Netzwerktools berhaupt installiert und aktiviert sind
testifnet()
{
    if [ ! -f etc/NETWORKING ]; then
	echo "Scheinbar ist das Netzwerkpaket nicht installiert (kein etc/NETWORKING)";
	exit 1;
    else
	netenabled=`cat etc/NETWORKING`;
	if [ "$netenabled" = "YES" ]; then
		echo "Netzwerk ist aktiviert ( /etc/NETWORKING=\"YES\")";
	else
		echo "Netzwerk ist deaktiviert ( /etc/NETWORKING=\"NO\")";
		exit 1;
	fi
    fi
}

#
#
banner()
{
        echo "--------------------------------------------"
        echo
        echo "       Linux Support Team Distribution"
        echo "                Version 1.8"
        echo
        echo "        Network Administration Utility"
        echo
        echo "--------------------------------------------"
}

#
# Ueberprft, ob Host bereits in etc/hosts bekannt ist
#
verifyhost()
{
	if [ "$1" = "" ]; then
		echo 'falscher Aufruf von verifyhost() !!! '
		return 1
	fi 
	knownhost=`grep "$1" etc/hosts `;
	if [ "$knownhost" != "" ]; then
		knownhost="$1"
	fi
}

#
# Hostname fr diesen Host setzen (Eintrag in etc/hosts muss existieren)
#
setuphostname()
{

# Sicherheitskopie von etc/hosts anlegen

cp etc/hosts etc/hosts.tmp

while [ 1 ]; do	
	echo
	echo "-------------- HOSTNAME Setup --------------"   
	echo
        echo -n "Hostname fr diesen Rechner [`hostname`]: "
        read hostname;
        if [ "$hostname" = "" -o "$hostname" = "`hostname`" ]; then
                hostname="`hostname`"
	fi

	verifyhost $hostname

	if [ "$knownhost" = "" ]; then
		echo
		echo "$hostname muss in /etc/hosts eingetragen werden. "

		askipaddr -c -v "192.0.2.1"

		hosteintragen "$hostname" "$ipaddr"

		if [ "$eingetragen" != "j" ]; then
			# Man wollte den Eintrag in etc/hosts nicht
			# vornehmen. Ganz schlecht. Mssen wir
			# nochmal fragen ...
			continue
		fi

		# hostname -S $hostname
		hostname $hostname
		echo
		echo -n "Neuer Hostname: "
		break
	else
		echo
		echo "$hostname ist in /etc/hosts bekannt "

		if [ "$hostname" != 'hostname' ]; then
			# hostname -S $hostname
			hostname $hostname
			echo
			echo -n "Hostname gendert auf: "
		else
			echo
			echo -n "Hostname bleibt: "
		fi
		break
	fi
done

HOSTNAME=`hostname`
# IPADDR=`hostname -i `
IPADDR=`grep "$HOSTNAME" etc/hosts | cut -f 1 `
echo "$HOSTNAME ($IPADDR)"
echo
echo "$HOSTNAME" > etc/host
DOMAINNAME=`domainname` 
if [ "$DOMAINNAME" = "" ]; then
	echo "Kann DOMAINNAME nicht ermitteln !"
	echo "Whle default domain .yourdomain"
	DOMAINNAME=.yourdomain
fi	
echo "$HOSTNAME.$DOMAINNAME" > etc/HOSTNAME

}


#
# zeigt einen Eintrag aus /etc/hosts an mittels grep
#
showentry()
{
	if [ "$1" = "" ]; then
		echo 'falscher Aufruf von showentry !!! '
		return 1
	fi
	echo
	grep "$1\>" etc/hosts
	echo
}


#
# Fragt nach einem Hostnamen und fhrt evtl. verifyhost() aus  
# Usage: askhostname [-c] [-d] [-v vorschlag] [ -t Typ_des_Rechners ]
#
askhostname()
{
	checkit="no"
	hosttype="Rechners"
	vorschlag="flakki"

	# Parseschleife
	while [ 1 ]; do
		if [ $# -gt 0 -a "$1" = '-c' ]; then
			checkit="yes"
			shift 1
		elif [ $# -gt 0 -a "$1" = '-d' ]; then
			default="yes"
			shift 1
		elif [ $# -gt 1 -a "$1" = '-v' ]; then
			vorschlag="$2"
			shift 2
		elif [ $# -gt 1 -a "$1" = '-t' ]; then
			shift 1
			hosttype="$2"
			break
		elif [ $# = 0 ]; then
			break
		else 
			echo 'Falscher Aufruf von askhostname !!! '
			return 1
		fi
	done

	# Abfrageschleife
	while [ 1 ]; do
		echo
		echo -n "Bitte geben Sie den Hostnamen des $hosttype ein "

		if [ "$vorschlag" != "" ]; then
			if [ "$default" = "" ]; then
				echo -n "(Bsp. $vorschlag): "
			else
				echo -n "[$vorschlag]: "
			fi
		fi

		read hostname

		if [ "$hostname" = "" ]; then
		    if [ "$vorschlag" != "" ]; then
			if [ "$default" != "" ]; then
				hostname="$vorschlag"
			else
				echo -n "Wollen Sie $vorschlag als Name des $hosttypes bernehmen (j/n): "
				read ans
				if [ "$ans" = "j" ]; then
					hostname="$vorschlag"
				elif [ "$ans" = "n" ]; then
					return 0
				else
					echo 'falsche Eingabe !! neuer Versuch ...'
					continue
				fi 
			fi
		    else
			# kein Vorschlag und keine Eingabe
			checkit="no"
			knownhost=""
			hostname=""
			return 0	
		    fi
		fi
		if [ "$check" != "" ]; then
			verifyhost $hostname
			if [ "$knownhost" != "" ]; then
				checkit="exists"
			else
				checkit="new"
			fi
		fi
		return 0
	done
}


#
# Eine IP-Addresse auf Richtigkeit prfen und klassifizieren
#
classifyipaddr()
{
	echo -n "Prfen von \"$1\" ... "
	ipcheck="unchecked"
	class=`echo $1 | cut -f1 -d. `
	network=`echo $1 | cut -f2 -d. `
	subnet=`echo $1 | cut -f3 -d. `
	machine=`echo $1 | cut -f4 -d. `
	if [ ! "$class.$network.$subnet.$machine" = "$1" ]; then
		class="No IP adress at all ! "
		return 1
	elif [ "$network" = "" -o "$network" -gt "255" -o "0" -gt "$network" ]; then
		class="Bad network !"
		return 1
	elif [ "$subnet" = "" -o "$subnet" -gt "255" -o "0" -gt "$subnet" ]; then
		class="Bad subnet !"
		return 1
	elif [ "$machine" = "" -o "$machine" -gt "255" -o "0" -gt "$machine" ]; then
		class="Bad machine !"
		return 1
	elif [ "128" -gt "$class" -a "$class" -gt "0" ]; then
		class="A";
	elif [ "192" -gt "$class" -a "$class" -gt "127" ]; then
		class="B";
	elif [ "255" -gt "$class" -a "$class" -gt "191" ]; then
		class="C";
	else
		echo "Bad class !"
		return 1
	fi 
	ipcheck="ok"
	echo "(Class $class Netzwerk)"
}


#
# Ueberprft, ob IP Adresse bereits vergeben ist
#
# Usage: verifyipaddr ipaddr
#
# Wirkung: setzt knownipaddr
#
verifyipaddr()
{
	if [ $# = 0 ]; then
		echo 'falscher Aufruf von verifyipaddr() !!! '
	fi
	knownipaddr=`grep "$1\>" etc/hosts | cut -f1 -d " " `
}


#
# IP Adresse fr einen Rechner eingeben
#
# Usage: askipaddr [-c] [-d] [-v Vorschlag] [-t Text]   
#
# Optionen:  -c         checkt, ob eine gltige IP-Adresse angegeben
#                       bzw. mit default gesetzt wird.
#            -d         nimmt den Vorschlag als default, falls nur
#                       return getippt wird
# Argumente: Text       Fragt nach "Geben Sie die IP Adresse Text an : "
#                       statt "Geben Sie die IP Adresse an : "
#            Vorschlag  Gibt zustzlich einen Vorschlag mit an
#
# Wirkung:
# setzt $ipaddr auf die eingegebene ipaddr, setzt $ipcheck auf "ok" oder "bad"
# und $class (wenn ipcheck ok) auf die Netzwerklasse ("A", "B", oder "C")  oder 
# auf einen Fehlerstring (falls ipcheck "bad")
#
askipaddr()
{
	checkit=""
	default=""
	name=""
	vorschlag=""
	# Argumente parsen
	while [ 0 ]; do
		if [ $# = 0 ]; then
			break
		elif [ $# -gt 0 -a "$1" = '-c' ]; then
			checkit="yes"
			shift 1
		elif [ $# -gt 0 -a "$1" = '-d' ]; then
			default="yes"
			shift 1
		elif [ $# -gt 1 -a "$1" = '-v' ]; then
			vorschlag="$2"
			shift 2
		elif [ $# -gt 1 -a "$1" = '-t' ]; then
			shift 1
			text="$@"
			break
		else
			echo 'Falscher Aufruf von askipaddr !! '
			return 1
		fi
	done

	# Abfrageschleife
	while [ 1 ]; do
		echo
		echo -n "Geben Sie die IP Adresse "
		echo -n "$text ein "
		if [ "$vorschlag" != "" ]; then
			if [ "$default" = "" ]; then
				echo -n "(z.B. $vorschlag): "
			else
				echo -n "[$vorschlag]: "
			fi
		else
			echo -n ": "
		fi

		read ipaddr;

		if [ "$ipaddr" = "" ]; then
		    if [ "$vorschlag" != "" ]; then
			if [ "$default" != "" ]; then
				ipaddr="$vorschlag"
			else
				echo -n "Wollen Sie $vorschlag als IP-Adresse"
				echo -n "$text bernehmen (j/n) : "
				read ans
				if [ "$ans" = "j" ]; then
					ipaddr="$vorschlag"
				elif [ "$ans" = "n" ]; then
					return 0
				else
					echo 'falsche Eingabe !! neuer Versuch ...'
					continue
				fi 
			fi
		    else
			continue
		    fi
		fi

		if [ "$check" != "" ]; then
			classifyipaddr $ipaddr
			if [ "$ipcheck" = "ok" ]; then
				verifyipaddr $ipaddr
				return 0
			else
				echo "$class"
			fi
		else
			verifyipaddr $ipaddr
			return 0
		fi
	done
}



#
# host in /etc/hosts eintragen
#
# Usage:  hosteintragen [-a] [-d] [-f] [-q] hostname ipaddr
#
hosteintragen()
{
	cp etc/hosts etc/hosts.tmp
	eingetragen="n"
	force=""
	allowdoubles=""		# keine doubles erlaubt
	allowalias=""		# keine alias erlaubt
	# Argumente parsen
	while [ 0 ]; do
		if [ $# = 2 ]; then
			break
		elif [ $# -gt 0 -a "$1" = '-f' ]; then
			force="yes"
			shift 1
		elif [ $# -gt 0 -a "$1" = '-q' ]; then
			quiet="yes"
			shift 1
		elif [ $# -gt 0 -a "$1" = '-a' ]; then
			allowalias="yes"
			shift 1
		elif [ $# -gt 0 -a "$1" = '-d' ]; then
			allowdoubles="yes"
			shift 1
		else
			echo "argline=$@"
			echo "force=$force"
			echo "allowdoubles=$allowdoubles"
			echo "allowalias=$allowalias"
			echo "quiet=$quiet"
			echo 'Falscher Aufruf von hosteintragen !! '
			echo "Arg 1 (hostname) = $1 "
			echo "Arg 2 (ipaddr) = $2 "
			return 1
		fi
	done

	knownhost=""
	verifyhost $1
	knownipaddr=""	
	verifyipaddr $2
	
	if [ "$knownhost" != "" ]; then
	    if [ "$knownipaddr" != "" ]; then
		# Sowohl Hostname wie IP-Adresse gefunden
		if [ "`showentry $knownipaddr `" = "`showentry $knownhost `" ]; then
			# exakt dieser Eintrag existiert bereits
			eingetragen="j"
			showentry $knownhost
			echo "Dieser Eintrag existiert bereits. Deshalb nichts verndert."
			return 0
		fi
	    else
		# Nur hostname gefunden
		if [ "$quiet" != "yes" ]; then
			echo
			echo "Warnung ! Dieser Name ist bereits vergeben ! "
			echo "Folgender Eintrag in etc/hosts gefunden :"
			showentry $knownhost
		fi
		if  [ "$allowdoubles" != "yes" ]; then
			if [ "$quiet" != "yes" ]; then
				echo 
				echo 'Alter Eintrag bleibt bestehen !!! '
			fi
			eingetragen="n"
			return 1
		else
			ans=""
			if [ "$quiet" != "yes" ]; then
				echo
				echo -n "Wollen Sie den alten Eintrag lschen ? (j/n): "							
				read delete
			fi
			if [ "$delete" = "j" -o "$force" = "yes" ]; then
				delentry=`showentry "$knownhost" `
				sed "/$delentry/d" < etc/hosts.tmp > etc/hosts
				echo "$2	$1" >> etc/hosts
				eingetragen="j"
			else
				eingetragen="n"
			fi
		fi	
	    fi			
	else
	    if [ "$knownipaddr" != "" ]; then
		# Nur IP-Adresse gefunden
		if [ "$quiet" != "yes" ]; then
			echo
			echo "Warnung ! Diese IP-Adresse ist bereits vergeben ! "
			echo "/etc/hosts enthlt bereits folgenden Eintrag :"
			showentry $2
		fi
		if  [ "$allowalias" != "yes" ]; then
			if [ "$quiet" != "yes" ]; then
				echo 
				echo 'Alter Eintrag bleibt bestehen !!! '
			fi
			eingetragen="n"
			return 1
		else
			if [ "$quiet" != "yes" ]; then
				echo
				echo "Soll dieser Eintrag um den zustzlichen alias-Namen"
				echo -n "$1 erweitert werden ? (j/n): "
				read doalias;
			fi
			if [ "$doalias" = "j" -o "$force" = "yes" ]; then
				sed "/$knownipaddr/s/$knownipaddr/$knownipaddr $1/" \
       					< etc/hosts.tmp > /etc/hosts
				eingetragen="j"
				return 0;
			else
				eingetragen="n"
			fi
		fi
	    else
		# Weder IP Adresse noch Hostnamen gefunden
		ans=""
		if [ "$force" != "yes" ]; then
			if [ "$quiet" != "yes" ]; then
				echo
				echo "Folgender Eintrag soll in etc/hosts aufgenommen werden:"
				echo "$2	$1"
				echo
				echo -n "Einverstanden ? (j/n): "
				read ans;
				if [ "$ans" != "j" ]; then
					echo
					echo "/etc/hosts bleibt unverndert ! "
					eingetragen="n"
					return 0;
				fi
			fi
		fi
		echo "$2	$1" >> etc/hosts
		eingetragen="j"
		return 0;
	    fi
	fi
}


#
# Fragt nach Hostnamen und IP-Adresse eines Rechners und trgt diesen
# falls ntig in etc/hosts ein
#
addhost()
{ 
    echo
    echo "---------------- HOSTS Setup ----------------"   
    echo 
    echo "Wollen Sie Namen von anderen Rechner in eine Tabelle (/etc/hosts)"
    echo "eintragen lassen, um diese per Namen statt per IP-Adresse"
    echo -n "ansprechen zu knnen ? (j/n): "
    read ans
    if [ "$ans" = "n" ]; then
	return 0
    fi

    while [ 1 ]; do

	askhostname -c -d 

	verifyhost $hostname

	if [ "$knownhost" = "$hostname" ]; then
		echo
		echo "Warnung ! Dieser Name ist bereits vergeben ! "
		echo "Folgender Eintrag in /etc/hosts gefunden :"
		showentry $knownhost
	fi

	askipaddr -c -t "fr $hostname"

	hosteintragen -a -d  $hostname $ipaddr

	echo
	echo -n "Weitere Rechner eintragen ? (j/n): "
	read ans;
	if [ "$ans" = "n" ]; then
		return 0;
	fi
    done
}



setuplocalnet()
{
	echo
	echo "-------------- LOCALNET Setup --------------"   
	echo 
	echo -n "Haben Sie ein lokales Netzwerk ? (j/n): "
	read ans
	if [ "$ans" != "j" ]; then
		LOCALNETSTATUS="nicht_verfgbar"
		return 0
	fi
	LOCALNETSTATUS="verfgbar"
	LOCALNET=`echo $IPADDR | cut -f 1-3 -d .`.0
	echo
	echo -n "Netzwerk IP Adresse [$LOCALNET]: "
	read ans;
	if [ "$ans" != "" ]; then
		LOCALNET=$ans;
	fi

	classifyipaddr $LOCALNET

	first=`echo $LOCALNET | cut -f 1 -d . `

	case $class in
	A)	LOCALNETIPREV="$first"
		LOCALNUM="$first." 
		NETMASK="255.$network.$subnet.$machine"
		BROADCAST="$first.255.255.255" ;;
	B)	LOCALNETIPREV="$network.$first"
		LOCALNUM="$first.$network." 
		NETMASK="255.255.$subnet.$machine"
		BROADCAST="$first.$network.255.255";;
	C)	LOCALNETIPREV="$subnet.$network.$first"
		LOCALNUM="$first.$network.$subnet." 
		NETMASK="255.255.255.$machine"
		BROADCAST="$first.$network.$subnet.255";;
	esac

	echo -n "NETMASK:  [$NETMASK]: "
	read ans
	if [ "$ans" != "" ]; then
		NETMASK=$ans
	fi

	echo -n "BROADCAST: [$BROADCAST]: "
	read ans
	if [ "$ans" != "" ]; then
		BROADCAST=$ans
	fi
	
	setupdomain

	knownnet=`grep "$LOCALNET\>" etc/networks | cut -f1`
	if [ "$knownnet" != "$LOCALNET" ]; then
		echo "$DOMAINNAME	$LOCALNET" >> etc/networks
	fi
	
}

setupdomain()
{
	echo
	echo "------------- LOCALDOMAIN Setup -------------"   
	echo
  	DOMAINNAME="`domainname`"
	if [ "$DOMAINNAME" = "" ]; then
		DOMAINNAME="informatik.uni-erlangen.de"
	fi
	echo -n "Domainname fr dieses Netz [$DOMAINNAME]: "
	read ans;
	if [ "$ans" != "" ]; then
		DOMAINNAME=$ans
		domainname $DOMAINNAME
	fi
	echo "$DOMAINNAME" > etc/domain
}

setupnetwork()
{
	echo
	echo "-------------- NETZWERK Setup --------------"   
	echo 

	echo
	echo "Sind Sie ein Gateway (haben Sie direkte Verbindung "
	echo -n "zu mindestens 2 Netzwerken) ? (j/n): "
	read ans

	GATEWAY="NO"
	if [ "$ans" = "j" ]; then
		GATEWAY="YES"
	fi
	echo "$GATEWAY" > etc/GATEWAY
	

    while [ 1 ]; do
	echo
	echo -n "Mchten Sie weitere Netzwerke in /etc/networks eintragen ? (j/n): "
	read ans;
	if [ "$ans" != "j" ]; then
		return 0;
	fi

	network=`echo $IPADDR | cut -f 1-3 -d .`.0
	echo
	echo -n "Netzwerk IP Adresse (muss auf .0 enden): "
	read ans;
	if [ "$ans" != "" ]; then
		network=$ans
	fi
	setupnetdomain
	knownnet=`grep "$network\>" etc/networks | cut -f1`
	if [ "$knownnet" != "$network" ]; then
		echo "$domainname	$network" >> etc/networks
	fi
    done
}

setupnetdomain()
{
	echo
	echo "------------- DOMAINNAME Setup -------------"   
	echo
  	domainname="`domainname`"
	if [ "$domainname" = "" ]; then
		domainname="informatik.uni-erlangen.de"
	fi
	echo -n "Domainname fr dieses Netz [$domainname]: "
	read ans;
	if [ "$ans" != "" ]; then
		domainname=$ans
	fi
}




setuprouter()
{
	echo
	echo "--------------- ROUTER Setup ---------------"   
	echo
	echo "Haben Sie Anschluss zu einem default Router, der Sie mit "
	echo -n "anderen Netzwerken verbindet ? (j/n): "
	read ans
	if [ "$ans" != "j" ]; then
		ROUTER=""
		return 0
	fi

	if [ "$ROUTER" = "" ]; then
		ROUTER=`echo $IPADDR | cut -f 1-3 -d .`.1
	fi

	askipaddr -c -d -v $ROUTER -t "des Routers"

	ROUTER="$ipaddr" 

	hosteintragen -a -d "router" $ROUTER

	# router sollte in etc/gateways eingetragen werden, oder ?
}


setupmail()
{
	echo
	echo "--------------- MAIL Setup ----------------"   
	echo
	HOSTNAME=`hostname`
	DOMAINNAME=`domainname`
	FULLNAME="$HOSTNAME.$DOMAINNAME"
	echo "Mailsetup fr $FULLNAME "
	echo

	echo -n "Haben Sie einen Mailserver ? (j/n): "
	read ans
	if [ "$ans" = "j" ]; then
		echo -n "Geben Sie die IP-Adresse des Mailservers an: "
		read MAILSERVER

	else 
		# Dann sind wir eben selber Mailserver
		MAILSERVER=$IPADDR
		echo
		echo "Whle `hostname` als Mailserver ..."
	fi

	# hier sollte der Mailserver konfiguriert werden ...
	echo

	hosteintragen -a -d mailserver $MAILSERVER


}

setupnameserver()
{
	echo
	echo "------------ NAMESERVER Setup ------------"   
	echo "order hosts,bind" > etc/host.conf
	echo "multi on" >> etc/host.conf

	while [ 1 ]; do
		echo
		echo -n "Soll dieser Rechner als Nameserver konfiguriert werden? (j/n): "
		read ans;
		if [ "$ans" = "j" -o "$ans" = "n" ]; then
			break
		fi
	done

	if [ "$ans" = "j" ]; then
		NAMESERVER="$IPADDR"
		NAMEDOMAIN="$DOMAINNAME"
		echo
		echo "Rufe /sbin/hostcvt.build auf, um DNS zu konfigurieren. "
		( cd sbin; hostcvt.build );
	else
		echo -n "Haben Sie einen Nameserver ? (j/n): "
		read ans
		if [ "$ans" = "n" ]; then
			return 1
		fi
		while [ 1 ]; do
			echo
			echo -n "IP Adresse des Nameservers: "
			read NAMESERVER;
			if [ "$NAMESERVER" != "" ]; then
				break
			fi
		done
		while [ 1 ]; do
			echo
			echo -n "Domain des Nameservers [$DOMAINNAME]: "
			read NAMEDOMAIN;
			if [ "$NAMEDOMAIN" = "" ]; then
				NAMEDOMAIN=$DOMAINNAME
			fi
			echo -n "Ist $NAMEDOMAIN als Domain des Nameservers ok ? (j/n): "
			read ans
			if [ "$ans" = "j" ]; then
				break
			fi
		done	
		echo "domain $NAMEDOMAIN" > etc/resolv.conf
		echo "nameserver $NAMESERVER" >> etc/resolv.conf
	fi

	hosteintragen -a -d "nameserver" $NAMESERVER

}


setupslip()
{
while [ 1 ]; do
	echo
	echo "--------------- SLIP Setup ---------------"   
	echo

	echo "Knnen Sie mit SLIP Verbindung zu anderen Netzwerken "
	echo -n "herstellen ? (j/n): "
	read ans
	if [ "$ans" = "b" ]; then
		break
	fi
	if [ "$ans" != "j" ]; then
		SLIPSTATUS="nicht_verfgbar"
		return 0	
	fi

	SLIPSTATUS="verfgbar"
	if [ "$SLIPSERVER" = "" ]; then
		askipaddr -c -t "des SLIP-Servers"
		if [ "$ipaddr" = "" ]; then
			echo
			echo 'Sie bentigen aber einen SLIP-Server !!! '
			continue
		fi
	else 
		askipaddr -c -d -v $SLIPSERVER -t "des SLIP-Servers"
	fi

	SLIPSERVER=$ipaddr

	classifyipaddr $ipaddr

	case $class in
		A)	SLIPNET=`echo $SLIPSERVER | cut -f 1 -d .`.0.0.0 ;;
		B)	SLIPNET=`echo $SLIPSERVER | cut -f 1-2 -d .`.0.0 ;;
		C)	SLIPNET=`echo $SLIPSERVER | cut -f 1-3 -d .`.0 ;;
	esac

	hosteintragen -a -d slipserver $SLIPSERVER  

	echo
	echo "Welche lokale SLIP Adresse (SLIPLOCAL) teilt Ihnen der Server zu ? "
	if [ "$SLIPLOCAL" = "" ]; then
		askipaddr -c -t "von Ihrem Modem-SLIP Anschluss"
		if [ "$ipaddr" = "" ]; then
			echo
			echo 'Es kann sein, dass die dynamische Adressvergabe nicht funktioniert !!! '
		fi
	else 
		askipaddr -c -d -v $SLIPLOCAL -t "von Ihrem Modem-SLIP Anschluss"
	fi

	SLIPLOCAL=$ipaddr

	hosteintragen -a -d sliplocal $SLIPLOCAL 

	SLIPLINE="ungltig"
	while [ "$SLIPLINE" = "ungltig" ]; do
		echo
		echo "Modemanschluss fr SLIP (COM1=1 COM2=2 COM3=3 COM4=4)"
		echo -n "Welcher Anschluss ? (1/2/3/4) : " 
		read ans
		case $ans in
			1)	SLIPLINE="ttyS0";;
			2)	SLIPLINE="ttyS1";;
			3)	SLIPLINE="ttyS2";;
			4)	SLIPLINE="ttyS3";;
			*)	echo 'ungltige Eingabe !!! '
				SLIPLINE="ungltig";;
		esac
	done 
	echo
	
	SLIPSPEED="ungltig"

	while [ "$SLIPSPEED" = "ungltig" ]; do
		echo "Auswahl der Modem-Geschwindigkeit: "
		echo
		echo "1	 	57600 Baud"
		echo "2	 	38400 Baud"
		echo "3	 	19200 Baud"
		echo "4	 	 9600 Baud"
		echo "5	 	 4800 Baud"
		echo "6	 	 2400 Baud"
		echo
		echo -n "Bitte whlen Sie (1/2/3/4/5/6) : "
		read ans
		case $ans in
			1)	SLIPSPEED="57600";;
			2)	SLIPSPEED="38400";;
			3)	SLIPSPEED="19200";;
			4)	SLIPSPEED="9600";;
			5)	SLIPSPEED="4800";;
			6)	SLIPSPEED="2400";;
			*)	echo 'ungltige Eingabe !!! '
				SLIPSPEED="ungltig";;
		esac
	done

	echo
	echo -n "Telefonnummer zum SLIP-Server: "
	read SLIPPHONE
	echo

	echo -n "Loginname fr SLIP: "
	read SLIPUSER
	echo

	echo -n "Password fr SLIP: "
	read SLIPPASSWD
	break
done

	echo
	echo "OK. Viel Glck ! Falls es nicht funktioniert, editieren Sie"
	echo "/usr/local/scripts/slipuni.dip bzw /usr/local/bin/startslip"
	echo
	# Das Anrufskript anpassen
	(sed "/SLIPSPEED/s/SLIPSPEED/$SLIPSPEED/" | \
		sed "/SLIPPHONE/s/SLIPPHONE/$SLIPPHONE/" | \
		sed "/SLIPUSER/s/SLIPUSER/$SLIPUSER/" | \
		sed "/SLIPPASSWD/s/SLIPPASSWD/$SLIPPASSWD/" | \
		sed "/SLIPLOCAL/s/SLIPLOCAL/$SLIPLOCAL/" | \
		sed "/SLIPSERVER/s/SLIPSERVER/$SLIPSERVER/" | \
		sed "/SLIPLINE/s/SLIPLINE/$SLIPLINE/" ) \
		 < usr/local/scripts/slipuni.dip.sample > usr/local/scripts/slipuni.dip
	# Die Routings anpassen
	(sed "/SLIPSERVER/s/SLIPSERVER/$SLIPSERVER/"  \
		) < usr/local/scripts/startslip.sample > usr/local/bin/startslip	
	chmod 744 usr/local/bin/startslip
}
	
setupuucp()
{
	echo
	echo "--------------- UUCP Setup ---------------"   
	echo
	while [ 1 ]; do
		echo "Knnen Sie mit UUCP Verbindung zu anderen Netzwerken "
		echo -n "herstellen ? (j/n) : "
		read ans
		if [ "$ans" != "j" ]; then
			UUCPSTATUS="nicht_verfgbar"
			SMARTHOST=""
			return 0
		fi
		UUCPSTATUS="verfgbar"
		echo
		echo -n "IP Adresse des UUCP Smarthosts: "
		read SMARTHOST;
		echo
		if [ "$SMARTHOST" = "" ]; then
			echo 'Sie mssen einen Smarthost angeben !! '
			echo
		else
			break
		fi
		echo
	done

	hosteintragen -a -d "smarthost" $SMARTHOST

	echo "Sorry. Dieser Teil des Skripts ist noch unvollstndig ..."
	echo "Sie finden Hilfe zu UUCP unter /usr/doc/uucp-gamma1.05/... "
	echo
}

setupnews()
{
	echo
	echo "--------------- NEWS Setup ---------------"   
	echo
	echo -n "IP Adresse des NNTP-Servers: "
	read NEWSSERVER
	if [ "$NEWSSERVER" = "" ]; then
		echo "kein Newsserver eingetragen"
		echo
		return	
	fi
	echo

	hosteintragen -a -d "newsserver" $NEWSSERVER

	echo "$NEWSSERVER" > etc/nntpserver

	if [ -f usr/local/lib/news/whoami.in ]; then



	echo "Geben Sie den text an, der fr Ihre Organisation erscheinen soll:"

	read ORGANIZATION
	( sed "s/ORGANIZATION/$ORGANIZATION/" ) < usr/local/lib/news/organization.in \
	> usr/local/lib/news/organization
	chown news.uucp usr/local/lib/news/organization
	HOSTNAME="`hostname`"
	DOMAINNAME="`domainname`"
	( sed "s/HOSTNAME/$HOSTNAME/" ) < usr/local/lib/news/whoami.in \
	> usr/local/lib/news/whoami
	chown news.uucp usr/local/lib/news/whoami
	( sed "s/HOSTNAME/$HOSTNAME/" | sed "s/DOMAINNAME/$DOMAINNAME/" ) \
	 < usr/local/lib/news/mailname.in > usr/local/lib/news/mailname	
	chown news.uucp usr/local/lib/news/mailname
	echo

	fi
}


resethosts()
{
	rm -f etc/hosts
	if [ -f etc/hosts.in ]; then
		cp -a etc/hosts.in etc/hosts
	else
		touch etc/hosts
	fi
	chmod 644 etc/hosts
}

resetnet()
{
	rm -f etc/networks
	if [ -f etc/networks.in ]; then
		cp etc/networks.in etc/networks
	else
		touch etc/networks
	fi
	chmod 644 etc/networks
}

setupether()
{
	echo
	echo "------------ ETHERNET Setup -------------"   
	echo
	echo -n "Haben Sie eine Ethernet-Karte angeschlossen ? (j/n): "
	read ans
	if [ "$ans" = "j" ]; then
		echo "YES" > etc/ETHERNET
	else 
		echo "NO" > etc/ETHERNET
	fi
}

testifether()
{
	if [ -f etc/ETHERNET ]; then
		ETHERNET=`cat etc/ETHERNET`
		if [ "$ETHERNET" = "YES" ]; then
			echo "Ethernetkarte aktiviert (etc/ETHERNET=\"YES\")" 
		elif [ "$ETHERNET" = "NO" ]; then
			echo "Ethernetkarte deaktiviert (etc/ETHERNET=\"NO\")"
		else
			echo 'kein zulssiger Wert in etc/ETHERNET !!! '
			ETHERNET="invalid"
		fi
	else
		echo "keine Ethernetkarte installiert. (etc/ETHERNET existiert nicht)"
		ETHERNET="none"
	fi
}

readnetstatus()
{
	if [ -f etc/NETCONF ]; then
		echo "Lese Netzwerkkonfiguration aus /etc/NETCONF ... "
		. etc/NETCONF
	else
		echo 'Kann Netzwerkkonfiguration nicht einlesen !!! '
		echo 'Datei /etc/NETCONF existiert nicht !!! '
	fi
	if [ -f etc/NETSTATUS ]; then
		echo "Lese Netzwerkstatus aus /etc/NETSTATUS ... "
		. etc/NETSTATUS
	else
		echo 'Kann Netzwerkstatus nicht einlesen !!! '
		echo 'Datei /etc/NETSTATUS existiert nicht !!! '
	fi
}

shownetstatus()
{
	echo
	echo "----- Aktuelle Netzwerkkonfiguration : -----"
	echo
	echo "Host: $HOSTNAME ($IPADDR)"
	echo "Domain: $DOMAINNAME"
	echo "Router: $ROUTER"
	echo "Mailserver: $MAILSERVER"
	echo "Nameserver: $NAMESERVER"
	echo "Newsserver: $NEWSSERVER"
	if [ "$LOCALNETSTATUS" = "" ]; then
		LOCALNETSTATUS="nicht_konfiguriert"
	fi
	echo "LOCALNET: ($LOCALNETSTATUS)"
	if [ "$LOCALNETSTATUS" != "nicht_verfgbar" -a \
	    "$LOCALNETSTATUS" != "nicht_konfiguriert" ]; then
		echo "      Interface: $ETHERDEVICE ($IPADDR)"
		echo "      Netaddress: $LOCALNET Netmask: $NETMASK  Broadcast: $BROADCAST"
	fi
	if [ "$SLIPSTATUS" = "" ]; then
		SLIPSTATUS="nicht_konfiguriert"
	fi
	echo "SLIP: ($SLIPSTATUS)"
	if [ "$SLIPSTATUS" != "nicht_verfgbar" -a \
	    "$SLIPSTATUS" != "nicht_konfiguriert" ]; then
		echo "      Interface: $SLIPDEVICE ($SLIPLOCAL)"
		echo "      Netaddress: $SLIPNET"
		echo "      Server: $SLIPSERVER (ber $SLIPLINE, $SLIPSPEED Baud)"
	fi
	if [ "$UUCPSTATUS" = "" ]; then
		UUCPSTATUS="nicht_konfiguriert"
	fi
	echo "UUCP: ($UUCPSTATUS)"
	if [ "$UUCPSTATUS" != "nicht_verfgbar" -a \
	    "$UUCPSTATUS" != "nicht_konfiguriert" ]; then
		echo "      Smarthost: $SMARTHOST" 
	fi
	echo "--------------------------------------------"
}

netdiagnose()
{
	echo
	echo -n "Wollen Sie die Interfacekonfiguration sehen ? (j/n): "
	read ans
	if [ "$ans" = "j" ]; then
		echo
		sbin/ifconfig
	fi
	echo -n "Wollen Sie das aktuelle Routing sehen ? (j/n): "
	read ans
	if [ "$ans" = "j" ]; then
		echo
		sbin/route -n
	fi
	echo
	echo -n "Wollen Sie den Netzwerkstatus sehen ? (j/n): "
	read ans
	if [ "$ans" = "j" ]; then
		echo
		netstat -i
	fi
	echo
}



savenetstatus()
{
	NETCONF=etc/NETCONF
	NETSTATUS=etc/NETSTATUS
	# hsslich hsslich .keine Zeit mehr, das sauber zu machen
	# Das nchste Mal dann 
	echo "Schreibe Parameter zurck in /etc/NETCONF ... "
	HOSTNAME=`hostname`
	echo "$HOSTNAME" > etc/host
	DOMAINNAME=`domainname`
	echo "$DOMAINNAME" > etc/domain
	# aktuelle Werte speichern
	echo "CONFIGPATH=$CONFIGPATH" > $NETCONF
	echo "HOSTNAME=$HOSTNAME" >> $NETCONF
	echo "DOMAINNAME=$DOMAINNAME" >> $NETCONF
	echo "FULLNAME=$FULLNAME" >> $NETCONF
	echo "IPADDR=$IPADDR" >> $NETCONF
	echo "LOCALNET=$LOCALNET" >> $NETCONF
	echo "LOCALNUM=$LOCALNUM" >> $NETCONF
	echo "LOCALNETIPREV=$LOCALNETIPREV" >> $NETCONF
	echo "NETMASK=$NETMASK" >> $NETCONF
	echo "BROADCAST=$BROADCAST" >> $NETCONF
	echo "SLIPNET=$SLIPNET" >> $NETCONF
	echo "SLIPSERVER=$SLIPSERVER" >> $NETCONF
	echo "SLIPSPEED=$SLIPSPEED" >> $NETCONF
	echo "SLIPLOCAL=$SLIPLOCAL" >> $NETCONF
	echo "SLIPLINE=$SLIPLINE" >> $NETCONF
	echo "ROUTER=$ROUTER" >> $NETCONF
	echo "MAILSERVER=$MAILSERVER" >> $NETCONF
	echo "SMARTHOST=$SMARTHOST" >> $NETCONF
	echo "NEWSSERVER=$NEWSSERVER" >> $NETCONF
	echo "NAMESERVER=$NAMESERVER" >> $NETCONF
	echo "NAMEDOMAIN=$NAMEDOMAIN" >> $NETCONF
	echo " " >> $NETCONF
	echo "export CONFIGPATH HOSTNAME DOMAINNAME FULLNAME IPADDR LOCALNET" >> $NETCONF
	echo "export LOCALNUM LOCALIPREV NETMASK BROADCAST ROUTER SLIPNET" >> $NETCONF
	echo "export SLIPSERVER SLIPLOCAL SLIPLINE SLIPSPEED " >> $NETCONF
	echo "export MAILROUTER SMARTHOST NEWSSERVER NAMESERVER NAMEDOMAIN" >> $NETCONF

	echo "LOCALNETSTATUS=$LOCALNETSTATUS" > $NETSTATUS
	echo "SLIPSTATUS=$SLIPSTATUS" >> $NETSTATUS
	echo "UUCPSTATUS=$UUCPSTATUS" >> $NETSTATUS
	echo "export LOCALNETSTATUS SLIPSTATUS UUCPSTATUS" >> $NETSTATUS
}
	



#
# Hauptprogramm !!!
#

ROOTDEV=/

if [ "$1" = "-instroot" ]; then
	ROOTDEV=$2;
	shift 2;
fi

cd $ROOTDEV

#PATH="$PATH:/sbin:/usr/sbin:/root/bin:/root/usr/bin:/root/sbin:/root/usr/sbin:/root/usr/local/bin"
#HARDWARE="$ROOTDEV/etc/hardware"

NETCONF=etc/NETCONF
NETSTATUS=etc/NETSTATUS

#hash -r

banner;

if [ "$1" = '-h' -o "$1" = '-help' -o "$1" = '-?' -o $# -lt 1 ]; then
	PrintUsage
	exit 0
fi


# Sind wir berhaupt Netzwerkfhig 
testifnet;
testifether;

# Netzwerkkonfiguration einlesen
readnetstatus;

# Zeige aktuelle Einstellungen
shownetstatus;

# Sicherheitskopie von etc/hosts anlegen 
if [ -f etc/hosts ]; then
	cp etc/hosts etc/hosts.save
fi

while [ 1 ]; do
	if [ "$1" = '-install' ]; then
		# Tabellen initialisieren
		echo
		echo 'Initialisiere Netzwerkkonfiguration neu !!! '
		resethosts;
		resetnet;

		# etc/NETSTATUS lschen
		rm -f $NETSTATUS
		touch $NETSTATUS
		chmod 644 $NETSTATUS

		# etc/hosts initialisieren
		if [ -f etc/hosts.in ]; then
			cp -a etc/hosts.in etc/hosts
			chmod 644 etc/hosts
		fi

		# etc/networks initialisieren
		if [ -f etc/networks.in ]; then
			cp -a etc/networks.in etc/networks
			chmod 644 etc/networks
		fi

		# Namen und domain dieses Rechners setzen
		setuphostname;
		setupdomain;
		
		# Ethernetkarte konfigurieren
		setupether;

		# Lokales Netzwerk konfigurieren
		setuplocalnet

		# SLIP Whlzugang zu anderen Netzwerken
		setupslip

		# UUCP Whlzugang zu anderen Netzwerken
		setupuucp

		# Default Router setzen
		setuprouter

		# Mailnamen und Mailserver angeben
		setupmail;

		# News und NNTP Server konfigurieren
		setupnews;

		# Wide Area Network konfigurieren
		setupnetwork

		# Rechner in etc/hosts eintragen
		addhost
		# Nameserver konfigurieren bzw. angeben
		setupnameserver;

		# War dies der erste Durchlauf 
		if [ -f etc/netsetup.notice ]; then
			mv etc/netsetup.notice etc/netsetup.done
		fi
	elif [ "$1" = '-hostname' ]; then
		setuphostname;
	elif [ "$1" = '-localnet' ]; then
		setuplocalnet;	
	elif [ "$1" = '-addhost' ]; then
		addhost;
	elif [ "$1" = '-network' ]; then
		setupnetwork;
	elif [ "$1" = '-router' ]; then
		setuprouter;	
	elif [ "$1" = '-mail' ]; then
		setupmail;	
	elif [ "$1" = '-nameserver' ]; then
		setupnameserver;
	elif [ "$1" = '-slip' ]; then
		setupslip;	
	elif [ "$1" = '-uucp' ]; then
		setupuucp;
	elif [ "$1" = '-news' ]; then
		setupnews;
	elif [ "$1" = '-ether' ]; then
		setupether;
	elif [ "$1" = '-diagnose' ]; then
		netdiagnose;
	fi
	echo -n "Waren Ihre Angaben korrekt (j/n) ? : "
	read ans;
	if [ "$ans" = "j" ]; then
		echo "Ok, Sie knnen /sbin/netsetup auch spter wieder aufrufen"
		break;
	fi
done

# Und die Frchte der Konfiguration speichern
savenetstatus

echo
echo "Netzwerkkonfigurierung beendet."
echo

sync
