ar71xx: image: simplify Meraki MR16 device definition
[openwrt/openwrt.git] / package / network / services / dnsmasq / files / dnsmasq.init
index fda11401db6f8e47912809ae1b506401d0570ffb..19517d937d451c9cbe889ef0ad3ba3024b342db7 100644 (file)
@@ -125,6 +125,10 @@ append_server() {
        xappend "--server=$1"
 }
 
+append_rev_server() {
+        xappend "--rev-server=$1"
+}
+
 append_address() {
        xappend "--address=$1"
 }
@@ -440,6 +444,7 @@ dhcp_add() {
        local cfg="$1"
        local dhcp6range="::"
        local nettag
+       local tags
 
        config_get net "$cfg" interface
        [ -n "$net" ] || return 0
@@ -491,6 +496,12 @@ dhcp_add() {
        dhcp_this_host_add "$net" "$ifname" "$ADD_LOCAL_FQDN"
 
        start="$( dhcp_calc "$start" )"
+
+       add_tag() {
+               tags="${tags}tag:$1,"
+       }
+       config_list_foreach "$cfg" tag add_tag
+
        nettag="${networkid:+set:${networkid},}"
 
        if [ "$limit" -gt 0 ] ; then
@@ -508,7 +519,7 @@ dhcp_add() {
 
 
        if [ "$dhcpv4" != "disabled" ] ; then
-               xappend "--dhcp-range=$nettag$START,$END,$NETMASK,$leasetime${options:+ $options}"
+               xappend "--dhcp-range=$tags$nettag$START,$END,$NETMASK,$leasetime${options:+ $options}"
        fi
 
 
@@ -707,21 +718,6 @@ dhcp_relay_add() {
        fi
 }
 
-dnsmasq_ismain()
-{
-       local cfg="$1"
-       local port notinterfaces
-
-       config_get port "$cfg" port "53"
-       [ $port = "53" ] || return 1
-
-       config_get notinterfaces "$cfg" notinterface ""
-       [ -n $notinterfaces ] && list_contains $notinterfaces "loopback" || return 1
-
-       # dnsmasq instance is designated to listen on 127.0.0.1#53.
-       return 0
-}
-
 dnsmasq_start()
 {
        local cfg="$1" disabled resolvfile user_dhcpscript
@@ -831,6 +827,7 @@ dnsmasq_start()
        append_parm "$cfg" "domain" "--domain"
        append_parm "$cfg" "local" "--server"
        config_list_foreach "$cfg" "server" append_server
+       config_list_foreach "$cfg" "rev_server" append_rev_server
        config_list_foreach "$cfg" "address" append_address
        config_list_foreach "$cfg" "ipset" append_ipset
        config_list_foreach "$cfg" "interface" append_interface
@@ -868,10 +865,14 @@ dnsmasq_start()
        [ -n "$leasefile" -a \! -e "$leasefile" ] && touch "$leasefile"
        config_get_bool cachelocal "$cfg" cachelocal 1
 
-       config_get resolvfile "$cfg" resolvfile "/tmp/resolv.conf.auto"
-       xappend "--resolv-file=$resolvfile"
-       # So jail doesn't complain if file missing
-       [ \! -e "$resolvfile" ] && touch "$resolvfile"
+       config_get_bool noresolv "$cfg" noresolv 0
+       if [ "$noresolv" != "1" ]; then
+               config_get resolvfile "$cfg" resolvfile "/tmp/resolv.conf.auto"
+               # So jail doesn't complain if file missing
+               [ -n "$resolvfile" -a \! -e "$resolvfile" ] && touch "$resolvfile"
+       fi
+
+       [ -n "$resolvfile" ] && xappend "--resolv-file=$resolvfile"
 
        config_get hostsfile "$cfg" dhcphostsfile
        [ -e "$hostsfile" ] && xappend "--dhcp-hostsfile=$hostsfile"
@@ -984,6 +985,16 @@ dnsmasq_start()
        echo >> $CONFIGFILE_TMP
        mv -f $CONFIGFILE_TMP $CONFIGFILE
 
+       [ "$resolvfile" = "/tmp/resolv.conf.auto" ] && {
+               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
+       }
 
        procd_open_instance $cfg
        procd_set_param command $PROG -C $CONFIGFILE -k -x /var/run/dnsmasq/dnsmasq."${cfg}".pid
@@ -1001,29 +1012,20 @@ dnsmasq_start()
        procd_add_jail_mount_rw /var/run/dnsmasq/ $leasefile
 
        procd_close_instance
-
-
-       # write /tmp/resolve.conf only for main instance
-       dnsmasq_ismain $cfg && {
-               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
-       }
 }
 
 dnsmasq_stop()
 {
        local cfg="$1"
 
+       config_get resolvfile "$cfg" "resolvfile"
+
        #relink /tmp/resolve.conf only for main instance
-       dnsmasq_ismain $cfg && {
-               [ -f /tmp/resolv.conf ] && rm -f /tmp/resolv.conf
-               ln -s /tmp/resolv.conf.auto /tmp/resolv.conf
+       [ "$resolvfile" = "/tmp/resolv.conf.auto" ] && {
+               [ -f /tmp/resolv.conf ] && {
+                       rm -f /tmp/resolv.conf
+                       ln -s "$resolvfile" /tmp/resolv.conf
+               }
        }
 
        rm -f ${BASEDHCPSTAMPFILE}.${cfg}.*.dhcp