#!/bin/sh

set -e

. /usr/share/debconf/confmodule

Defaults ()
{
	_ETH0_METHOD="${_ETH0_METHOD:-dhcp}"
	_ETH0_ADDRESS="${_ETH0_ADDRESS:-192.168.1.2}"
	_ETH0_BROADCAST="${_ETH0_BROADCAST:-192.168.1.0}"
	_ETH0_GATEWAY="${_ETH0_GATEWAY:-192.168.1.1}"
	_ETH0_NETMASK="${_ETH0_NETMASK:-255.255.255.0}"
	_ETH0_NETWORK="${_ETH0_NETWORK:-192.168.1.255}"
	_ETH0_NAMESERVERS="${_ETH0_NAMESERVERS:-192.168.1.1}"
}

#db_get live-debconfig/ifupdown/eth0-method
#_ETH0_METHOD="${RET}" # select

Defaults

db_set live-debconfig/ifupdown/eth0-method "${_ETH0_METHOD}"
db_fset live-debconfig/ifupdown/eth0-method seen false

db_set live-debconfig/ifupdown/eth0-address "${_ETH0_ADDRESS}"
db_fset live-debconfig/ifupdown/eth0-address seen false

db_set live-debconfig/ifupdown/eth0-broadcast "${_ETH0_BROADCAST}"
db_fset live-debconfig/ifupdown/eth0-broadcast seen false

db_set live-debconfig/ifupdown/eth0-gateway "${_ETH0_GATEWAY}"
db_fset live-debconfig/ifupdown/eth0-gateway seen false

db_set live-debconfig/ifupdown/eth0-netmask "${_ETH0_NETMASK}"
db_fset live-debconfig/ifupdown/eth0-netmask seen false

db_set live-debconfig/ifupdown/eth0-network "${_ETH0_NETWORK}"
db_fset live-debconfig/ifupdown/eth0-network seen false

db_set live-debconfig/ifupdown/nameservers "${_NAMESERVERS}"
db_fset live-debconfig/ifupdown/nameservers seen false

db_settitle live-debconfig/title
db_input high live-debconfig/ifupdown/eth0-method || true
db_go

db_get live-debconfig/ifupdown/eth0-method
_ETH0_METHOD="${RET}" # select

case "${_ETH0_METHOD}" in
	none)
		db_stop

		exit
		;;

	dhcp)

		;;

	static)
		db_settitle live-debconfig/title
		db_input high live-debconfig/ifupdown/eth0-address || true
		db_go

		db_settitle live-debconfig/title
		db_input high live-debconfig/ifupdown/eth0-broadcast || true
		db_go

		db_settitle live-debconfig/title
		db_input high live-debconfig/ifupdown/eth0-gateway || true
		db_go

		db_settitle live-debconfig/title
		db_input high live-debconfig/ifupdown/eth0-netmask || true
		db_go

		db_settitle live-debconfig/title
		db_input high live-debconfig/ifupdown/eth0-network || true
		db_go

		db_settitle live-debconfig/title
		db_input high live-debconfig/ifupdown/nameservers || true
		db_go
		;;
esac

_NUMBER="0"

while db_get live-debconfig/ifupdown/eth${_NUMBER}-method && [ "${RET}" ]
do
	if db_get live-debconfig/ifupdown/eth${_NUMBER}-comment
	then
		eval _ETH${_NUMBER}_COMMENT="\"${RET}\"" # string (w/ empty)
	fi

	if db_get live-debconfig/ifupdown/eth${_NUMBER}-method
	then
		eval _ETH${_NUMBER}_METHOD="\"${RET}\"" # select
	fi

	if db_get live-debconfig/ifupdown/eth${_NUMBER}-address
	then
		eval _ETH${_NUMBER}_ADDRESS="\"${RET}\"" # string (w/o empty)
	fi

	if db_get live-debconfig/ifupdown/eth${_NUMBER}-broadcast
	then
		eval _ETH${_NUMBER}_BROADCAST="\"${RET}\"" # string (w/ empty)
	fi

	if db_get live-debconfig/ifupdown/eth${_NUMBER}-gateway
	then
		eval _ETH${_NUMBER}_GATEWAY="\"${RET}\"" # string (w/ empty)
	fi

	if db_get live-debconfig/ifupdown/eth${_NUMBER}-netmask
	then
		eval _ETH${_NUMBER}_NETMASK="\"${RET}\"" # string (w/ empty)
	fi

	if db_get live-debconfig/ifupdown/eth${_NUMBER}-network
	then
		eval _ETH${_NUMBER}_NETWORK="\"${RET}\"" # string (w/ empty)
	fi

	_NUMBER="$((${_NUMBER} + 1))"
done

_ETH_NUMBER="${_NUMBER}"

db_get live-debconfig/ifupdown/nameservers
_NAMESERVERS="${RET}" # string (w/ empty)

Defaults

db_stop

# Create /etc/network/interfaces

cat > /etc/network/interfaces << EOF
# Used by ifup(8) and ifdown(8). See the interfaces(5) manpage or
# /usr/share/doc/ifupdown/examples for more information.

# The loopback network interface
auto lo
iface lo inet loopback
EOF

for _NUMBER in $(seq 0 ${_ETH_NUMBER})
do
	eval _COMMENT="$`echo _ETH${_NUMBER}_COMMENT`"
	eval _METHOD="$`echo _ETH${_NUMBER}_METHOD`"
	eval _ADDRESS="$`echo _ETH${_NUMBER}_ADDRESS`"
	eval _BROADCAST="$`echo _ETH${_NUMBER}_BROADCAST`"
	eval _GATEWAY="$`echo _ETH${_NUMBER}_GATEWAY`"
	eval _NETMASK="$`echo _ETH${_NUMBER}_NETMASK`"
	eval _NETWORK="$`echo _ETH${_NUMBER}_NETWORK`"

	if [ -z "${_METHOD}" ]
	then
		continue
	fi

	echo >> /etc/network/interfaces

	if [ -n "${_COMMENT}" ]
	then
		echo "# ${_COMMENT}" >> /etc/network/interfaces
	fi

	case "${_METHOD}" in
		dhcp)

cat >> /etc/network/interfaces << EOF
auto eth${_NUMBER}
iface eth${_NUMBER} inet dhcp
EOF

			;;

		static)

cat >> /etc/network/interfaces << EOF
auto eth${_NUMBER}
iface eth${_NUMBER} inet static
	address		${_ADDRESS}
EOF

			if [ -n "${_BROADCAST}" ]
			then
				echo "	broadcast	${_BROADCAST}" >> /etc/network/interfaces
			fi

			if [ -n "${_GATEWAY}" ]
			then
				echo "	gateway		${_GATEWAY}" >> /etc/network/interfaces
			fi

			echo "	netmask		${_NETMASK}" >> /etc/network/interfaces

			if [ -n "${_NETWORK}" ]
			then
				echo "	network		${_NETWORK}" >> /etc/network/interfaces
			fi
			;;
	esac

	_NUMBER="$((${_NUMBER} + 1))"
done

# Create /etc/resolv.conf
if [ -n "${_NAMESERVERS}" ]
then
	rm -f /etc/resolv.conf

	for _NAMESERVER in $(echo ${_NAMESERVERS} | sed -e 's|,| |g')
	do
		echo "nameserver ${_NAMESERVER}" >> /etc/resolv.conf
	done
fi

# Create /etc/hosts
case "${_ETH0_METHOD}" in
	static)

cat > /etc/hosts << EOF
127.0.0.1	localhost
${_ETH0_ADDRESS}	$(cat /etc/hostname)

# The following lines are desirable for IPv6 capable hosts
::1     ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
EOF

		;;
esac
