On Fri, Aug 05, 2011 at 11:50:41PM +0200, Alexander Bluhm wrote:
> On Fri, Aug 05, 2011 at 02:00:21PM +0200, Florian Fuessl wrote:
> > Feature or bug?
>
> Sounds like a bug, but I cannot reproduce it.
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.
Does this diff help?
I still see some nd6_lookup errors but after a short time ndp works.
Perhaps that is the problem Todd mentioned.
bluhm
Index: netinet6/in6.c
===================================================================
RCS file: /data/mirror/openbsd/cvs/src/sys/netinet6/in6.c,v
retrieving revision 1.91
diff -u -p -r1.91 in6.c
--- netinet6/in6.c 26 Jul 2011 21:19:51 -0000 1.91
+++ netinet6/in6.c 5 Aug 2011 22:19:48 -0000
@@ -1945,7 +1945,10 @@ in6_ifpprefix(const struct ifnet *ifp, c
if (rt == NULL)
return (0);
if ((rt->rt_flags & (RTF_CLONING | RTF_CLONED)) == 0 ||
- rt->rt_ifp != ifp) {
+ (rt->rt_ifp != ifp &&
+ (ifp->if_type != IFT_CARP || rt->rt_ifp != ifp->if_carpdev) &&
+ (rt->rt_ifp->if_type != IFT_CARP || rt->rt_ifp->if_carpdev != ifp)
+ )) {
RTFREE(rt);
return (0);
}