#!/bin/sh /etc/rc.common
START=60

lease_file=/tmp/dhcpd.leases
config_file=/etc/dhcpd.conf
pid_file=/var/run/dhcpd.pid
hosts_file=/tmp/dhcpd.hosts
dhcp_ifs=""

parse_dhcp() {
	local cfg="$1"
	config_get net "$cfg" interface
	[ -n "$net" ] || return 0

	config_get_bool ignore "$1" ignore 0
	if [ "$ignore" -eq 1 ]; then return 0; fi

	local dev
	network_get_device dev "$net" && append dhcp_ifs "$dev"
}

parse_host_entry() {
		local cfg="$1"

		config_get name "$cfg" name

		config_get ip "$cfg" ip
		[ -n "$ip" ] || return 0

	local i=0
		config_get mac "$cfg" mac
		for m in $mac; do
		local hostid="$name"
		if [ $i -ne 0 ]; then hostid="$name"_"$i"; fi

		echo "host $hostid {" >> "$hosts_file"
		echo "hardware ethernet $m;" >> "$hosts_file"
		echo "fixed-address $ip;" >> "$hosts_file"
		echo "}" >> $hosts_file

		i=$((i+1))
	done
}

init_config() {
	echo " #Automatically generated by dhcpd initscript, any modifications will be overwritten" > "$hosts_file"

	. /lib/functions/network.sh

	config_load dhcp
	config_foreach parse_host_entry	host
	config_foreach parse_dhcp dhcp
}

start() {
	if [ -e $pid_file ] ; then
            echo "  dhcpd already running with PID `cat $pid_file`"
    	    return 1
        fi

	echo Starting isc-dhcpd

	if [ ! -e $lease_file ]; then
		echo "  Creating $lease_file"
		touch $lease_file
	fi
	
	/usr/sbin/dhcpd -q -cf $config_file -lf $lease_file
	
	if [ $? -ne 0 ]; then
		echo "  isc-dhcpd failed to start"
	fi
}

stop() {
	echo "Stopping isc-dhcpd"
	if [ -e $pid_file ]; then
		kill -KILL `cat $pid_file`

		if [ $? -ne 0 ]; then
			echo "  PID " `cat $pid_file` not found
			echo "  Is the DHCP server running?"
		fi
	
		rm -f $pid_file
	else
		echo "  $pid_file not found"
	fi
}