Alexander Bluhm wrote Monday, August 08, 2011 10:50 AM
> 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.
Running "the simple the carp setup" this updated patch also runs fine, here.
> 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?
+1
> bluhm
Thank you,
-Florian
> 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);