mirror of
https://github.com/pi-hole/dnsmasq.git
synced 2025-12-19 10:18:25 +00:00
Fix RA problems with two interfaces on same IPv6 subnet.
This commit is contained in:
@@ -64,8 +64,13 @@ version 2.81
|
||||
|
||||
Enhance --conf-dir to load files in a deterministic order. Thanks to
|
||||
Evgenii Seliavka for the suggestion and initial patch.
|
||||
|
||||
|
||||
In the router advert code, handle case where we have two
|
||||
different interfaces on the same IPv6 net, and we're doing
|
||||
RA/DHCP service on only one of them. Thanks to NIIBE Yutaka
|
||||
for spotting this case and making the initial patch.
|
||||
|
||||
|
||||
version 2.80
|
||||
Add support for RFC 4039 DHCP rapid commit. Thanks to Ashram Method
|
||||
for the initial patch and motivation.
|
||||
|
||||
4
debian/changelog
vendored
4
debian/changelog
vendored
@@ -7,8 +7,10 @@ dnsmasq (2.81-1) unstable; urgency=low
|
||||
* Add note explaining that ENABLED is SYSV-init only. (closes: #914755)
|
||||
* Replace ash with dash in contrib/reverse-dns. (closes: #920224)
|
||||
* Move to libidn2. (closes: #932695)
|
||||
* Fix RA problem with two interfaces on same net, but RA service on
|
||||
only one of the interfaces. (closes: #949565)
|
||||
|
||||
-- Simon Kelley <simon@thekelleys.org.uk> Fri, 8 Apr 2019 17:14:15 +0000
|
||||
-- Simon Kelley <simon@thekelleys.org.uk> Mon, 27 Jan 2020 22:31:15 +0000
|
||||
|
||||
dnsmasq (2.80-1) unstable; urgency=low
|
||||
|
||||
|
||||
22
src/radv.c
22
src/radv.c
@@ -891,11 +891,21 @@ static int iface_search(struct in6_addr *local, int prefix,
|
||||
{
|
||||
struct search_param *param = vparam;
|
||||
struct dhcp_context *context;
|
||||
|
||||
struct iname *tmp;
|
||||
|
||||
(void)scope;
|
||||
(void)preferred;
|
||||
(void)valid;
|
||||
|
||||
|
||||
/* ignore interfaces we're not doing DHCP on. */
|
||||
if (!indextoname(daemon->icmp6fd, if_index, param->name) ||
|
||||
!iface_check(AF_LOCAL, NULL, param->name, NULL))
|
||||
return 1;
|
||||
|
||||
for (tmp = daemon->dhcp_except; tmp; tmp = tmp->next)
|
||||
if (tmp->name && wildcard_match(tmp->name, param->name))
|
||||
return 1;
|
||||
|
||||
for (context = daemon->dhcp6; context; context = context->next)
|
||||
if (!(context->flags & (CONTEXT_TEMPLATE | CONTEXT_OLD)) &&
|
||||
prefix <= context->prefix &&
|
||||
@@ -907,17 +917,9 @@ static int iface_search(struct in6_addr *local, int prefix,
|
||||
/* found an interface that's overdue for RA determine new
|
||||
timeout value and arrange for RA to be sent unless interface is
|
||||
still doing DAD.*/
|
||||
|
||||
if (!(flags & IFACE_TENTATIVE))
|
||||
param->iface = if_index;
|
||||
|
||||
/* should never fail */
|
||||
if (!indextoname(daemon->icmp6fd, if_index, param->name))
|
||||
{
|
||||
param->iface = 0;
|
||||
return 0;
|
||||
}
|
||||
|
||||
new_timeout(context, param->name, param->now);
|
||||
|
||||
/* zero timers for other contexts on the same subnet, so they don't timeout
|
||||
|
||||
Reference in New Issue
Block a user