START=60
-SERVICE_USE_PID=1
+USE_PROCD=1
+PROG=/usr/sbin/dnsmasq
DNS_SERVERS=""
DOMAIN=""
}
append_bogusnxdomain() {
- xappend "--bogus-nxdomain=$1"
+ xappend "--bogus-nxdomain=$1"
}
dnsmasq() {
append_bool "$cfg" enable_tftp "--enable-tftp"
append_bool "$cfg" nonwildcard "--bind-interfaces"
append_bool "$cfg" fqdn "--dhcp-fqdn"
+ append_bool "$cfg" proxydnssec "--proxy-dnssec"
append_parm "$cfg" dhcpscript "--dhcp-script"
append_parm "$cfg" cachesize "--cache-size"
config_get hostsfile "$cfg" dhcphostsfile
[ -e "$hostsfile" ] && xappend "--dhcp-hostsfile=$hostsfile"
+ mkdir -p /tmp/hosts
+ xappend "--addn-hosts=/tmp/hosts"
+
local rebind
config_get_bool rebind "$cfg" rebind_protection 1
[ $rebind -gt 0 ] && {
dhcp_option_add "$cfg" "" 0
+ xappend "--dhcp-broadcast=tag:needs-broadcast"
+
echo >> $CONFIGFILE
}
config_get tag "$cfg" tag
- xappend "--dhcp-host=$macs${networkid:+,net:$networkid}${tag:+,set:$tag}${ip:+,$ip}${name:+,$name}"
+ config_get_bool broadcast "$cfg" broadcast 0
+ [ "$broadcast" = "0" ] && broadcast=
+
+ xappend "--dhcp-host=$macs${networkid:+,net:$networkid}${broadcast:+,set:needs-broadcast}${tag:+,set:$tag}${ip:+,$ip}${name:+,$name}"
}
dhcp_tag_add() {
dhcp_domain_add() {
local cfg="$1"
- local ip name names
+ local ip name names record
config_get names "$cfg" name "$2"
[ -n "$names" ] || return 0
config_get ip "$cfg" ip "$3"
[ -n "$ip" ] || return 0
- local oIFS="$IFS"; IFS="."; set -- $ip; IFS="$oIFS"
- local raddr="${4:+$4.$3.$2.$1.in-addr.arpa}"
-
for name in $names; do
- local fqdn="$name"
-
- [ "${fqdn%.*}" == "$fqdn" ] && \
- fqdn="$fqdn${DOMAIN:+.$DOMAIN}"
-
- xappend "--address=/$fqdn/$ip"
-
- [ -n "$raddr" ] && {
- xappend "--ptr-record=$raddr,$fqdn"
- raddr=""
- }
+ record="${record:+$record/}$name"
done
+
+ xappend "--address=/$record/$ip"
}
dhcp_srv_add() {
xappend "--cname=${cname},${target}"
}
-start() {
+dhcp_hostrecord_add() {
+ local cfg="$1"
+ local names addresses record val
+
+ config_get names "$cfg" name "$2"
+ if [ -z "$names" ]; then
+ return 0
+ fi
+
+ config_get addresses "$cfg" ip "$3"
+ if [ -z "$addresses" ]; then
+ return 0
+ fi
+
+ for val in $names $addresses; do
+ record="${record:+$record,}$val"
+ done
+
+ xappend "--host-record=$record"
+}
+
+service_triggers()
+{
+ procd_add_reload_trigger "dhcp"
+}
+
+start_service() {
include /lib/network
scan_interfaces
config_load dhcp
+ procd_open_instance
+ procd_set_param command $PROG -C $CONFIGFILE -k
+ procd_close_instance
+
# before we can call xappend
mkdir -p $(dirname $CONFIGFILE)
config_foreach dhcp_remoteid_add remoteid
config_foreach dhcp_subscrid_add subscrid
config_foreach dhcp_domain_add domain
+ config_foreach dhcp_hostrecord_add hostrecord
+
+ # add own hostname
+ [ $ADD_LOCAL_HOSTNAME -eq 1 ] && [ -n "$lanaddr" ] && {
+ local hostname="$(uci_get system @system[0] hostname OpenWrt)"
+ dhcp_hostrecord_add "" "$hostname${DOMAIN:+.$DOMAIN $hostname}" "$lanaddr"
+ }
+
echo >> $CONFIGFILE
config_foreach dhcp_srv_add srvhost
config_foreach dhcp_mx_add mxhost
config_foreach dhcp_cname_add cname
echo >> $CONFIGFILE
- # add own hostname
- [ $ADD_LOCAL_HOSTNAME -eq 1 ] && [ -n "$lanaddr" ] && {
- local hostname="$(uci_get system.@system[0].hostname)"
- dhcp_domain_add "" "${hostname:-OpenWrt}" "$lanaddr"
- }
-
- service_start /usr/sbin/dnsmasq -C $CONFIGFILE && {
- rm -f /tmp/resolv.conf
- [ $ADD_LOCAL_DOMAIN -eq 1 ] && [ -n "$DOMAIN" ] && {
- echo "search $DOMAIN" >> /tmp/resolv.conf
- }
- DNS_SERVERS="$DNS_SERVERS 127.0.0.1"
- for DNS_SERVER in $DNS_SERVERS ; do
- echo "nameserver $DNS_SERVER" >> /tmp/resolv.conf
- done
+ rm -f /tmp/resolv.conf
+ [ $ADD_LOCAL_DOMAIN -eq 1 ] && [ -n "$DOMAIN" ] && {
+ echo "search $DOMAIN" >> /tmp/resolv.conf
}
+ DNS_SERVERS="$DNS_SERVERS 127.0.0.1"
+ for DNS_SERVER in $DNS_SERVERS ; do
+ echo "nameserver $DNS_SERVER" >> /tmp/resolv.conf
+ done
}
-stop() {
- service_stop /usr/sbin/dnsmasq && {
- [ -f /tmp/resolv.conf ] && {
- rm -f /tmp/resolv.conf
- ln -s /tmp/resolv.conf.auto /tmp/resolv.conf
- }
+stop_service() {
+ [ -f /tmp/resolv.conf ] && {
+ rm -f /tmp/resolv.conf
+ ln -s /tmp/resolv.conf.auto /tmp/resolv.conf
}
}