[OpenWrt-Devel] [LEDE-DEV] [PATCH] Add procd triggers only for interfaces that dnsmasq is interested in.

Hans Dedecker dedeckeh at gmail.com
Mon Jun 18 02:16:58 EDT 2018


On Sun, Jun 17, 2018 at 4:57 PM Matthias Schiffer
<mschiffer at universe-factory.net> wrote:
>
> On 05/08/2018 12:37 AM, hux wrote:
> > Signed-off-by: hux <xinxing.huchn at 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.
>
> Together with the '[ -n "$BOOT" ] && return' line in service_start(), this
> patch breaks the start of dnsmasq when no DHCP interfaces are configured in
> /etc/config/dhcp (i.e., dnsmasq is used for DNS only).
>
> I'd argue that DNS should always work (serving statically configured
> records when nothing else is available) even when no interfaces are up, so
> maybe the '[ -n "$BOOT" ] && return' should simply be removed? CCing Hans,
> he has a better grasp of the dnsmasq init script than me.
Hi Matthias,

I will look into the issue in the coming days; DNS should indeed
always work even if no dhcp interfaces are configured.

Hans
>
> Regards,
> Matthias
>
>
>
> >
> >  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()
> >
>
>

_______________________________________________
openwrt-devel mailing list
openwrt-devel at lists.openwrt.org
https://lists.openwrt.org/listinfo/openwrt-devel



More information about the openwrt-devel mailing list