dnsmasq: add specific interface procd triggers
authorhux <xinxing.huchn@gmail.com>
Mon, 7 May 2018 22:37:48 +0000 (00:37 +0200)
committerHans Dedecker <dedeckeh@gmail.com>
Fri, 11 May 2018 11:49:03 +0000 (13:49 +0200)
Right now interface.update events are sent out by netifd upon interface state,
route, address (lifetime), prefix lifetime changes.
Dnsmasq is only interested in interface state changes and currently adds an
interface trigger for all the "interface.*" events.
In combination with commit 23bba9cb330, which triggers a SIGHUP signal to dnsmasq,
IPv6 address/prefix lifetime changes on the wan will trigger dnsmasq reloads which
can become frequent in case of shorter lifetimes.

To avoid frequent dnsmasq reload, this patch adds specific interface triggers.
During dnsmasq init it loops dhcp uci section; if the value of the ignore option
is set to 0, then the corresponding interface trigger is not installed.
Otherwise, if the ignore option value is 1, then procd_add_interface_trigger is
called which adds the interface trigger.

Signed-off-by: hux <xinxing.huchn@gmail.com>
package/network/services/dnsmasq/Makefile
package/network/services/dnsmasq/files/dnsmasq.init

index b6502bf5d04ef8f48a99d9f2e1506942846fa9da..60ed9ed6fb3c90a08cdc957f3008baed376ca8bf 100644 (file)
@@ -9,7 +9,7 @@ include $(TOPDIR)/rules.mk
 
 PKG_NAME:=dnsmasq
 PKG_VERSION:=2.79
 
 PKG_NAME:=dnsmasq
 PKG_VERSION:=2.79
-PKG_RELEASE:=3
+PKG_RELEASE:=4
 
 PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.xz
 PKG_SOURCE_URL:=http://thekelleys.org.uk/dnsmasq/
 
 PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.xz
 PKG_SOURCE_URL:=http://thekelleys.org.uk/dnsmasq/
index 1881b2bcdcc5ae66cac322dc0e00d0a2091bf946..2c71a777c33bec788650a666a1da2fb2b6fa1cfb 100644 (file)
@@ -1042,10 +1042,22 @@ dnsmasq_stop()
        rm -f ${BASEDHCPSTAMPFILE}.${cfg}.*.dhcp
 }
 
        rm -f ${BASEDHCPSTAMPFILE}.${cfg}.*.dhcp
 }
 
+add_interface_trigger()
+{
+       local interface ignore
+
+       config_get interface "$1" interface
+       config_get_bool ignore "$1" ignore 0
+
+       [ -n "$interface" -a $ignore -eq 0 ] && procd_add_interface_trigger "interface.*" "$interface" /etc/init.d/dnsmasq reload
+}
+
 service_triggers()
 {
        procd_add_reload_trigger "dhcp" "system"
 service_triggers()
 {
        procd_add_reload_trigger "dhcp" "system"
-       procd_add_raw_trigger "interface.*" 2000 /etc/init.d/dnsmasq reload
+
+       config_load dhcp
+       config_foreach add_interface_trigger dhcp
 }
 
 boot()
 }
 
 boot()