Does the existing behaviour cause you problems? The rationale for why it behaves the way it does is that link-local addresses are good IF client and server are on the same link, since there's no possibility of addresses changing or renumbering. A client getting DNS server addresses from RADV is by definition on the same link as the server. One getting DNS addresses by DHCP is not (there may be a DHCP relay involved) but has DHCP to handle renumbering.
Cheers Simon. On 24/12/15 13:39, Pali Rohár wrote: > Before this patch when both RADV and DHCPv6 is running and DNS server > address was not configured then RADV were sending link-local address and > DHCPv6 global address. > > This patch change behaviour of RADV and when both RADV and DHCPv6 is > running without configured DNS server then in RADV RDNSS will be same > global address as in DHCPv6 instead link-local address. > --- > man/dnsmasq.8 | 4 ++-- > src/radv.c | 22 ++++++++++++++++++++++ > 2 files changed, 24 insertions(+), 2 deletions(-) > > diff --git a/man/dnsmasq.8 b/man/dnsmasq.8 > index 6a121fe..bb588d3 100644 > --- a/man/dnsmasq.8 > +++ b/man/dnsmasq.8 > @@ -1695,8 +1695,8 @@ the machine running dnsmasq. By default, the "managed > address" bits are set, and > the "use SLAAC" bit is reset. This can be changed for individual > subnets with the mode keywords described in > .B --dhcp-range. > -RFC6106 DNS parameters are included in the advertisements. By default, > -the relevant link-local address of the machine running dnsmasq is sent > +RFC6106 DNS parameters are included in the advertisements. By default > +the relevant DHCPv6 address (or link-local when using SLAAC) of the machine > running dnsmasq is sent > as recursive DNS server. If provided, the DHCPv6 options dns-server and > domain-search are used for the DNS server (RDNSS) and the domain serach list > (DNSSL). > .TP > diff --git a/src/radv.c b/src/radv.c > index 39f1e92..15e116c 100644 > --- a/src/radv.c > +++ b/src/radv.c > @@ -482,6 +482,28 @@ static void send_ra_alias(time_t now, int iface, char > *iface_name, struct in6_ad > } > } > > + if (daemon->port == NAMESERVER_PORT && !done_dns && parm.link_pref_time != > 0 && parm.other) > + for (context = daemon->dhcp6; context; context = context->next) > + if (context->if_index == iface && > !IN6_IS_ADDR_UNSPECIFIED(&context->local6)) > + { > + /* squash duplicates */ > + struct dhcp_context *c; > + for (c = context->current; c; c = c->current) > + if ((c->flags & CONTEXT_USED) && > + IN6_ARE_ADDR_EQUAL(&context->local6, &c->local6)) > + break; > + > + if (!c) > + { > + done_dns = 1; > + put_opt6_char(ICMP6_OPT_RDNSS); > + put_opt6_char(3); > + put_opt6_short(0); > + put_opt6_long(min_pref_time); > + put_opt6(&context->local6, IN6ADDRSZ); > + } > + } > + > if (daemon->port == NAMESERVER_PORT && !done_dns && parm.link_pref_time != > 0) > { > /* default == us, as long as we are supplying DNS service. */ > _______________________________________________ Dnsmasq-discuss mailing list Dnsmasq-discuss@lists.thekelleys.org.uk http://lists.thekelleys.org.uk/mailman/listinfo/dnsmasq-discuss