On Sun, Aug 07, 2011 at 04:02:32AM +0200, Florian Fuessl wrote:
> Alexander Bluhm <[email protected]> wrote Sat., Aug. 06, 2011
> > On Sat, Aug 06, 2011 at 12:47:27AM +0200, Alexander Bluhm wrote:
> > > To trigger the bug, you need two adresses in the same network on
> > > the carp and on the parent interface.  One of them has the route,
> > > the other cannot do ndp.
> 
> Thank you. This patch works like a charm! :-)

By thinking about it, I found another bug with carp and neighbor
discovery.  When you have two carp interfaces on one physical
interface and the same prefix on both carp interfaces but not on
the physical, neighbor discovery will fail for one fo the carp
interfaces.

I don't know wether this is a common use case.

It is easy to fix.  When comparing two carp interfaces, assume they
have same prefixes if they have the same parent.

ok?
Can this go into 5.0?

bluhm


Index: netinet6/in6.c
===================================================================
RCS file: /data/mirror/openbsd/cvs/src/sys/netinet6/in6.c,v
retrieving revision 1.92
diff -u -p -r1.92 in6.c
--- netinet6/in6.c      7 Aug 2011 15:18:40 -0000       1.92
+++ netinet6/in6.c      8 Aug 2011 08:22:19 -0000
@@ -1956,6 +1956,8 @@ in6_ifpprefix(const struct ifnet *ifp, c
 #if NCARP > 0
            (ifp->if_type != IFT_CARP || rt->rt_ifp != ifp->if_carpdev) &&
            (rt->rt_ifp->if_type != IFT_CARP || rt->rt_ifp->if_carpdev != ifp)&&
+           (ifp->if_type != IFT_CARP || rt->rt_ifp->if_type != IFT_CARP ||
+           rt->rt_ifp->if_carpdev != ifp->if_carpdev) &&
 #endif
            1)) {
                RTFREE(rt);

Reply via email to