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 <[email protected]> Index: dhcpd.init =================================================================== --- dhcpd.init (revision 26837) +++ dhcpd.init (working copy) @@ -4,7 +4,66 @@ 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 echo " dhcpd already running with PID `cat $pid_file`" @@ -17,9 +76,11 @@ echo " Creating $lease_file" touch $lease_file fi + + init_config + + /usr/sbin/dhcpd -q -cf $config_file -lf $lease_file $dhcp_ifs - /usr/sbin/dhcpd -q -cf $config_file -lf $lease_file - if [ $? -ne 0 ]; then echo " isc-dhcpd failed to start" fi _______________________________________________ openwrt-devel mailing list [email protected] https://lists.openwrt.org/mailman/listinfo/openwrt-devel
