#!/bin/sh
# post-dhcpd.ini
#
# DHCP server for the inside network
# Modified by Benoit Mortier
# 08/04/2001
# opensides@caramail.com

. /etc/config

[ -f /etc/dhcpc/dhcpcd-$OUTSIDE_DEV.info ] && . /etc/dhcpc/dhcpcd-$OUTSIDE_DEV.info

. /etc/inside.info

#
# Build the config file
#

echo "default-lease-time 6000;" >> /etc/dhcpd.conf
echo "max-lease-time 72000;" >> /etc/dhcpd.conf
echo "option subnet-mask $INSIDE_NETMASK;" >> /etc/dhcpd.conf
echo "option broadcast-address $INSIDE_BROADCAST;" >> /etc/dhcpd.conf
echo "option routers $INSIDE_IP;" >> /etc/dhcpd.conf
if [ $NAME_SERVER_IP1 ]; then
	echo "option domain-name-servers ${NAME_SERVER_IP1}${NAME_SERVER_IP2:+, $NAME_SERVER_IP2};" >> /etc/dhcpd.conf
fi
if [ $DHCP_WINS_SERVER ]; then
	echo "option netbios-name-servers $DHCP_WINS_SERVER, $DHCP_WINS_SERVER;" >> /etc/dhcpd.conf
fi
if [ $DHCP_DISKLESS_ROOTPATH ]; then
	echo "option root-path \"$DHCP_DISKLESS_ROOTPATH\";" >> /etc/dhcpd.conf
fi
if [ $DHCP_DISKLESS_LOGSERVER ]; then
	echo "option log-servers $DHCP_DISKLESS_LOGSERVER;" >> /etc/dhcpd.conf
fi
echo "option domain-name \"$DOMAIN\";" >> /etc/dhcpd.conf

# Build list of devices for use by dhcpd if not manually specified
if [ -z "$DHCPD_DEVICES" ]; then
	DHCPD_DEVICES="$INSIDE_DEV"
	if [ -n "$INSIDE_EXTRA_IF" ]; then
		for i in $INSIDE_EXTRA_IF; do
			eval "DHCPD_DEVICES=\"$DHCPD_DEVICES \$INSIDE_${i}_DEV\""
		done
	fi
fi

# Make sure each device is entered only once
DHCPD_DEVICES=`for i in $DHCPD_DEVICES; do echo i; done | sort -u`

for i in $DHCPD_DEVICES; do
	if [ "$i" = $INSIDE_DEV ]; then
		echo "subnet $INSIDE_NETWORK netmask $INSIDE_NETMASK {" >> /etc/dhcpd.conf
		if [ -n "$DHCP_RANGE_START" -a -n "$DHCP_RANGE_END" ]; then
			echo "  range $DHCP_RANGE_START $DHCP_RANGE_END;" >> /etc/dhcpd.conf
		fi
		echo "}" >> /etc/dhcpd.conf
		DHCPD_DEVICES_REAL="$INSIDE_DEV"
	fi
done
if [ -n "$INSIDE_EXTRA_IF" ]; then
	for i in $INSIDE_EXTRA_IF; do
		eval "i_dev=\$INSIDE_${i}_DEVICE"
		for j in $DHCPD_DEVICES; do
			if [ "$j" = $i_dev ]; then
				eval "echo \"subnet \$INSIDE_${i}_NETWORK netmask \$INSIDE_${i}_NETMASK {\" >> /etc/dhcpd.conf"
				if [ -n "`eval "echo \"\$DHCP_${i}_RANGE_START\""`" -a -n "`eval "echo \"\$DHCP_${i}_RANGE_END\""`" ]; then
					eval "echo \"  range \$DHCP_${i}_RANGE_START \$DHCP_${i}_RANGE_END;\" >> /etc/dhcpd.conf"
				fi
				eval "echo \"  option broadcast-address \$INSIDE_${i}_BROADCAST;\" >> /etc/dhcpd.conf"
				eval "echo \"  option routers \$INSIDE_${i}_IP;\" >> /etc/dhcpd.conf"
				echo "}" >> /etc/dhcpd.conf
				eval "DHCPD_DEVICES_REAL=\"$DHCPD_DEVICES_REAL \$INSIDE_${i}_DEV\""
			fi
		done
	done
fi

#
# Create the empty leases database
#
echo -n > /etc/dhcpd.leases

#
# Run the server in the inside lan
#
/bin/dhcpd $DHCPD_DEVICES_REAL
