+ config_get vendorclass "$cfg" vendorclass
+ [ -n "$vendorclass" ] || return 0
+
+ append args "--dhcp-vendorclass=$name,$vendorclass"
+
+ dhcp_option_add "$cfg" "$name"
+}
+
+dhcp_host_add() {
+ local cfg="$1"
+
+ config_get name "$cfg" name
+ [ -n "$name" ] || return 0
+
+ config_get mac "$cfg" mac
+ [ -n "$mac" ] || return 0
+
+
+ append args "--dhcp-host=$mac,$ip"
+
+ dhcp_option_add "$cfg" "$name"
+}
+
+dhcp_mac_add() {
+ local cfg="$1"
+
+ config_get name "$cfg" name
+ [ -n "$name" ] || return 0
+
+ config_get mac "$cfg" mac
+ [ -n "$mac" ] || return 0
+
+ append args "--dhcp-mac=$name,$mac"
+
+ dhcp_option_add "$cfg" "$name"
+}
+
+dhcp_add() {
+ local cfg="$1"
+ config_get net "$cfg" interface
+ [ -n "$net" ] || return 0
+
+ config_get name "$cfg" name
+ [ -n "$name" ] || name="$net"
+
+ config_get ifname "$net" ifname
+ [ -n "$ifname" ] || return 0
+
+ config_get dnsserver "$net" dns
+ [ -n "$dnsserver" ] && {
+ DNS_SERVERS="$DNS_SERVERS $dnsserver"
+ }
+
+ append_bool "$cfg" ignore "-I $ifname"
+
+ config_get proto "$net" proto
+ [ static = "$proto" ] || return 0
+
+ config_get ipaddr "$net" ipaddr
+ config_get netmask "$net" netmask
+
+ #check for an already active dhcp server on the interface, unless 'force' is set
+ config_get_bool force "$cfg" force 0
+ [ "$force" -gt 0 ] || {
+ udhcpc -n -q -R -s /bin/true -t 1 -i $ifname >&- && return 0
+ }
+
+ config_get start "$cfg" start
+ config_get limit "$cfg" limit
+ config_get leasetime "$cfg" leasetime
+ config_get options "$cfg" options
+
+ leasetime="${leasetime:-12h}"
+ start="$(dhcp_calc "${start:-100}")"
+ limit="$((${limit:-150} + 1))"
+ eval "$(ipcalc.sh $ipaddr $netmask $start $limit)"
+ append args "--dhcp-range=$name,$START,$END,$NETMASK,$leasetime${options:+ $options}"
+
+ dhcp_option_add "$cfg" "$name"
+}
+
+dhcp_option_add () {
+ local cfg="$1"
+ local name="$2"
+
+ for count in $(seq 0 100); do
+ eval current_value=\$CONFIG_"$cfg"_dhcp"$count"
+ if [ -z "$current_value" ]; then
+ let "count-=1"
+ break
+ fi
+ append args "-O $name","$current_value"
+ done
+
+}
+
+start() {
+ include /lib/network
+ scan_interfaces
+ config_load dhcp
+