Resurrecting an old topic...

On 2011-10-27 16:05, Stefan Rinkes wrote:
I'm currently using a current kernel with following patch:
--- sys/netinet6/in6.c 8 Aug 2011 13:04:35 -0000 1.93
+++ sys/netinet6/in6.c 27 Oct 2011 19:59:00 -0000
@@ -2476,6 +2476,14 @@ in6if_do_dad(struct ifnet *ifp)
* NS would confuse the DAD procedure.
*/
return (0);
+#if NCARP > 0
+ case IFT_CARP:
+ /*
+ * XXX: DAD does not work currently on carp(4)
+ * so disable it for now.
+ */
+ return (0);
+#endif
default:
/*
* Our DAD routine requires the interface up and running.

It disables DAD on CARP, cause it does not work on normal CARP and creates
false alarms on balancing CARP. Not great, but at least balancing and IPv6
works now.

Looking at the code, DAD should already be disabled on carp interfaces.

As soon as you assign a vhid to a carp interface, a link-local address is attached. in6_ifattach_linklocal() unconditionally sets IN6_IFF_NODAD on the interface. Further down it removes it but not for CARP interfaces:

        if (in6if_do_dad(ifp) && ((ifp->if_flags & IFF_POINTOPOINT) ||
            (ifp->if_type == IFT_CARP)) == 0) {
                ia->ia6_flags &= ~IN6_IFF_NODAD;
                ia->ia6_flags |= IN6_IFF_TENTATIVE;
        }

So all CARP interfaces should have IN6_IFF_NODAD set.

Simon

Reply via email to