On 21/01/14 16:19, Dave Taht wrote:
I have finally got my first-ever comcast ipv6 set of users up, and we
have a problem
with the interrelationship between addresses assigned dynamically by
dhcpv6-pd and other means in dnsmasq 2.68.

What happens now is that dhcpv6-pd works but dnsmasq 2.68 filters out the

13: sw00: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qlen 1000
     inet6 2601:X:Y:9a1::1/64 scope global dynamic
        valid_lft 182420sec preferred_lft 182420sec

so sends no ras.

adding a second "stable" interface dnsmasq picks up.

     inet6 2601:3:8180:9a1::2/64 scope global
        valid_lft forever preferred_lft forever

this check was not in dnsmasq 2.66, and was put in later for fairly
sound reasons
(like you don't want to start serving RAs on a SLAAC assigned
address), but in the
dhcp-pd case or otherwise assigned by the router (6in4) case, we do.

Anyway the below patch "fixes it" but I'd like there to be some clear indicator
of where things came from somehow.

Comparing the code in bpf.c (for *BSD) and netlink.c (for Linux) I think it's clear what's meant: exclusion of privacy addresses and addresses installed as a result of RAs received. The patch covers the first of those, but there doesn't seem to be a Linux equivalent of the BSD IN6_IFF_AUTOCONF flag to detect RA-originated addresses. I looked at the kernel source, and there's no candidate I can see.

I suspect that this patch is the best that can be done.



From 4f55df81d69d20230e18c90d772904372b2b90a4 Mon Sep 17 00:00:00 2001
From: Jonas Gorski <xx...@openwrt.org>
Date: Wed, 8 Jan 2014 11:55:08 +0100
Subject: [PATCH] allow dhcp range construction with non-permanent addresses

The linux kernel treats all addresses with a limited lifetime as being
non permanent, but when taking over the prefix livetimes from upstream
assigned prefixes through DHCP, addresses will always have a limited

Still reject temporary addresses, as they indicate autoconfigured

Contributed by T-Labs, Deutsche Telekom Innovation Laboratories

Signed-off-by: Jonas Gorski <j...@openwrt.org>
  src/netlink.c | 2 +-
  1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/src/netlink.c b/src/netlink.c
index 3be94ee..d5de4ab 100644
--- a/src/netlink.c
+++ b/src/netlink.c
@@ -265,7 +265,7 @@ int iface_enumerate(int family, void *parm, int
      if (ifa->ifa_flags & IFA_F_DEPRECATED)
        flags |= IFACE_DEPRECATED;

-    if (ifa->ifa_flags & IFA_F_PERMANENT)
+    if (!(ifa->ifa_flags & IFA_F_TEMPORARY))
        flags |= IFACE_PERMANENT;

      if (addrp && callback_ok)

Dnsmasq-discuss mailing list

Reply via email to