Signed-off-by: hux <xinxing.hu...@gmail.com>
---
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 and the trigger is added.

 package/network/services/dnsmasq/Makefile           |  2 +-
 package/network/services/dnsmasq/files/dnsmasq.init | 14 +++++++++++++-
 2 files changed, 14 insertions(+), 2 deletions(-)

diff --git a/package/network/services/dnsmasq/Makefile 
b/package/network/services/dnsmasq/Makefile
index b6502bf5d0..60ed9ed6fb 100644
--- a/package/network/services/dnsmasq/Makefile
+++ b/package/network/services/dnsmasq/Makefile
@@ -9,7 +9,7 @@ include $(TOPDIR)/rules.mk
 
 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/
diff --git a/package/network/services/dnsmasq/files/dnsmasq.init 
b/package/network/services/dnsmasq/files/dnsmasq.init
index 1881b2bcdc..2c71a777c3 100644
--- a/package/network/services/dnsmasq/files/dnsmasq.init
+++ b/package/network/services/dnsmasq/files/dnsmasq.init
@@ -1042,10 +1042,22 @@ dnsmasq_stop()
        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"
-       procd_add_raw_trigger "interface.*" 2000 /etc/init.d/dnsmasq reload
+
+       config_load dhcp
+       config_foreach add_interface_trigger dhcp
 }
 
 boot()
-- 
2.11.0


_______________________________________________
Lede-dev mailing list
Lede-dev@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/lede-dev

Reply via email to