#
-# Copyright (C) 2006-2008 OpenWrt.org
+# Copyright (C) 2006-2011 OpenWrt.org
#
# This is free software, licensed under the GNU General Public License v2.
# See /LICENSE for more information.
PKG_NAME:=dhcp
PKG_VERSION:=3.1.0
-PKG_RELEASE:=2
+PKG_RELEASE:=3
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
PKG_SOURCE_URL:=ftp://ftp.isc.org/isc/dhcp/
lease_file=/tmp/dhcpd.leases
config_file=/etc/dhcpd.conf
pid_file=/var/run/dhcpd.pid
+hosts_file=/tmp/dhcpd.hosts
+dhcp_ifs=""
+
+append_interface() {
+ local ifname=$(uci_get_state network "$1" device)
+ if [ "$(uci_get_state network "$1" type)" = "bridge" ]; then
+ ifname=$(uci_get_state network "$1" ifname); fi
+
+ if [ -z "$dhcp_ifs" ]; then
+ dhcp_ifs="$ifname"
+ else
+ dhcp_ifs="$dhcp_ifs $ifname"
+ fi
+}
+
+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
+
+ append_interface $net
+}
+
+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"
+
+ include /lib/network
+ scan_interfaces
+ config_load dhcp
+
+ config_foreach parse_host_entry host
+ config_foreach parse_dhcp dhcp
+}
start() {
if [ -e $pid_file ] ; then