Changeset 39152


Ignore:
Timestamp:
2013-12-21T14:31:28+01:00 (4 years ago)
Author:
jow
Message:

dnsmasq: rework init procedure

  • cache udhcp check results to speed up subsequent reloads
  • enable procd file tracking for /var/etc/dnsmasq.conf to only reload service if needed
  • implement reload action to only restart dnsmasq if /var/etc/dnsmasq.conf actually changed
  • launch dnsmasq from interface hotplug to avoid race conditions with network bringup

Signed-off-by: Jo-Philipp Wich <jow@…>

Location:
trunk/package/network/services/dnsmasq
Files:
1 added
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/package/network/services/dnsmasq/Makefile

    r38648 r39152  
    8484        $(INSTALL_DIR) $(1)/etc/init.d 
    8585        $(INSTALL_BIN) ./files/dnsmasq.init $(1)/etc/init.d/dnsmasq 
     86        $(INSTALL_DIR) $(1)/etc/hotplug.d/iface 
     87        $(INSTALL_DATA) ./files/dnsmasq.hotplug $(1)/etc/hotplug.d/iface/25-dnsmasq 
    8688endef 
    8789 
  • trunk/package/network/services/dnsmasq/files/dnsmasq.init

    r39101 r39152  
    3232        done 
    3333        echo "$res" 
     34} 
     35 
     36dhcp_check() { 
     37        local ifname="$1" 
     38        local stamp="/var/run/dnsmasq.$ifname.dhcp" 
     39        local rv=0 
     40 
     41        [ -s "$stamp" ] && return $(cat "$stamp") 
     42 
     43        udhcpc -n -q -s /bin/true -t 1 -i "$ifname" >&- && rv=1 || rv=0 
     44 
     45        [ $rv -eq 1 ] && \ 
     46                logger -t dnsmasq \ 
     47                        "found already running DHCP-server on interface '$ifname'" \ 
     48                        "refusing to start, use 'option force 1' to override" 
     49 
     50        echo $rv > "$stamp" 
     51        return $rv 
     52} 
     53 
     54log_once() { 
     55        pidof dnsmasq >/dev/null || \ 
     56                logger -t dnsmasq "$@" 
    3457} 
    3558 
     
    142165        config_get_bool rebind "$cfg" rebind_protection 1 
    143166        [ $rebind -gt 0 ] && { 
    144                 logger -t dnsmasq \ 
     167                log_once \ 
    145168                        "DNS rebinding protection is active," \ 
    146169                        "will discard upstream RFC1918 responses!" 
     
    150173                config_get_bool rebind_localhost "$cfg" rebind_localhost 0 
    151174                [ $rebind_localhost -gt 0 ] && { 
    152                         logger -t dnsmasq "Allowing 127.0.0.0/8 responses" 
     175                        log_once "Allowing 127.0.0.0/8 responses" 
    153176                        xappend "--rebind-localhost-ok" 
    154177                } 
    155178 
    156179                append_rebind_domain() { 
    157                         logger -t dnsmasq "Allowing RFC1918 responses for domain $1" 
     180                        log_once "Allowing RFC1918 responses for domain $1" 
    158181                        xappend "--rebind-domain-ok=$1" 
    159182                } 
     
    357380        #check for an already active dhcp server on the interface, unless 'force' is set 
    358381        config_get_bool force "$cfg" force 0 
    359         [ $force -gt 0 ] || { 
    360                 udhcpc -n -q -s /bin/true -t 1 -i $ifname >&- && { 
    361                         logger -t dnsmasq \ 
    362                                 "found already running DHCP-server on interface '$ifname'" \ 
    363                                 "refusing to start, use 'option force 1' to override" 
    364                         return 0 
    365                 } 
    366         } 
     382        [ $force -gt 0 ] || dhcp_check "$ifname" || return 0 
    367383 
    368384        config_get start "$cfg" start 
     
    493509} 
    494510 
     511boot() { 
     512        # Will be launched through hotplug 
     513        return 0 
     514} 
     515 
    495516start_service() { 
    496517        include /lib/functions 
     
    500521        procd_open_instance 
    501522        procd_set_param command $PROG -C $CONFIGFILE -k 
     523        procd_set_param file $CONFIGFILE 
    502524        procd_close_instance 
    503525 
     
    553575} 
    554576 
     577reload_service() { 
     578        rc_procd start_service "$@" 
     579        return 0 
     580} 
     581 
    555582stop_service() { 
    556583        [ -f /tmp/resolv.conf ] && { 
     
    558585                ln -s /tmp/resolv.conf.auto /tmp/resolv.conf 
    559586        } 
    560 } 
     587        rm -f /var/run/dnsmasq.*.dhcp 
     588} 
Note: See TracChangeset for help on using the changeset viewer.