packages/net/dhcp/files/dhcpd.init
jow f07e6610b7 [packages] dhcp: use network.sh to find device names
git-svn-id: svn://svn.openwrt.org/openwrt/packages@31977 3c298f89-4303-0410-b956-a3cf2f4a3e73
2012-05-29 01:47:58 +00:00

90 lines
1.7 KiB
Bash

#!/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
}