[PATCH] add interface and hosts parsing from uci dhcp config to ISC dhcpd (fix bridges)

This allows people to use the luci interface to specify to dhcpd which
interfaces it should listen to, and which static MAC->IP host mappings
should it define
For the interface, this has to be done in the initscript, via
commandline when the server is started
For the static hosts, the initscript makes a file called
/tmp/dhcpd.hosts which you can include in your dhcpd.config to use the
webgui defined hosts
Fix: 7.5.2011. Now works properly on interfaces which are in a bridge

Signed-off-by: Rajko Stojadinovic <admin@rajko.info>


git-svn-id: svn://svn.openwrt.org/openwrt/packages@26998 3c298f89-4303-0410-b956-a3cf2f4a3e73
This commit is contained in:
jow 2011-05-24 10:01:23 +00:00
parent 3475b58d04
commit 64045af765
2 changed files with 61 additions and 2 deletions

View File

@ -1,5 +1,5 @@
#
# 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.
@ -9,7 +9,7 @@ include $(TOPDIR)/rules.mk
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/

View File

@ -4,6 +4,65 @@ 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=""
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