aboutsummaryrefslogtreecommitdiffstats
path: root/package/network/services/dnsmasq/patches/0009-Do-unsolicited-RAs-for-interfaces-which-appear-after.patch
diff options
context:
space:
mode:
Diffstat (limited to 'package/network/services/dnsmasq/patches/0009-Do-unsolicited-RAs-for-interfaces-which-appear-after.patch')
-rw-r--r--package/network/services/dnsmasq/patches/0009-Do-unsolicited-RAs-for-interfaces-which-appear-after.patch44
1 files changed, 44 insertions, 0 deletions
diff --git a/package/network/services/dnsmasq/patches/0009-Do-unsolicited-RAs-for-interfaces-which-appear-after.patch b/package/network/services/dnsmasq/patches/0009-Do-unsolicited-RAs-for-interfaces-which-appear-after.patch
new file mode 100644
index 0000000000..0aaec7edf4
--- /dev/null
+++ b/package/network/services/dnsmasq/patches/0009-Do-unsolicited-RAs-for-interfaces-which-appear-after.patch
@@ -0,0 +1,44 @@
+From 0a496f059c1e9d75c33cce4c1211d58422ba4f62 Mon Sep 17 00:00:00 2001
+From: Maarten de Vries <maarten+dnsmasq@m.de-vri.es>
+Date: Fri, 11 May 2018 23:20:58 +0100
+Subject: [PATCH 09/10] Do unsolicited RAs for interfaces which appear after
+ dnsmasq startup.
+
+I noticed that dnsmasq often wasn't sending any unsolicited RAs for me.
+
+This turned out to happen when the interface (a bridge interface) wasn't
+created yet at the time dnsmasq started. When dnsmasq is started after
+the interface is created, it sends RAs as expected. I assume this also
+extends to other types of virtual interfaces that are created after
+dnsmasq starts.
+
+Digging into the source, it seems to be caused by a missing call to
+ra_start_unsolicited for non-template contexts in construct_worker from
+src/dhcp6.c. The attached patch adds that call, but only if the
+interface index or address changed to prevent doing fast RAs for no reason.
+
+I tested it on my own server and it appears to work as expected. When
+the interface is created and configured, dnsmasq does fast RAs for a
+while and then settles into slow RAs.
+
+Signed-off-by: Kevin Darbyshire-Bryant <ldir@darbyshire-bryant.me.uk>
+---
+ src/dhcp6.c | 7 +++++++
+ 1 file changed, 7 insertions(+)
+
+--- a/src/dhcp6.c
++++ b/src/dhcp6.c
+@@ -647,6 +647,13 @@ static int construct_worker(struct in6_a
+ is_same_net6(local, &template->start6, template->prefix) &&
+ is_same_net6(local, &template->end6, template->prefix))
+ {
++ /* First time found, do fast RA. */
++ if (template->if_index != if_index || !IN6_ARE_ADDR_EQUAL(&template->local6, local))
++ {
++ ra_start_unsolicited(param->now, template);
++ param->newone = 1;
++ }
++
+ template->if_index = if_index;
+ template->local6 = *local;
+ }