summaryrefslogtreecommitdiff
path: root/sys/netinet6
diff options
context:
space:
mode:
authorAlexander Bluhm <bluhm@cvs.openbsd.org>2011-08-08 13:04:36 +0000
committerAlexander Bluhm <bluhm@cvs.openbsd.org>2011-08-08 13:04:36 +0000
commitc0c72c02c3074b28bf03dff1966e741f71c6adbf (patch)
tree1d7ebc41424081fc206d32f2fa039e7579b9eb8d /sys/netinet6
parent35b6324b7f7d83ebdc050b5fbc67c1c38cc3df31 (diff)
If two carp interfaces on the same physical interface had addresses
with the same prefix, neighbor discovery did not work. When comparing two carp interfaces in in6_ifpprefix(), assume they share the prefix if they have the same parent. sure deraadt@
Diffstat (limited to 'sys/netinet6')
-rw-r--r--sys/netinet6/in6.c4
1 files changed, 3 insertions, 1 deletions
diff --git a/sys/netinet6/in6.c b/sys/netinet6/in6.c
index 6e977f8bce3..52fd97568f7 100644
--- a/sys/netinet6/in6.c
+++ b/sys/netinet6/in6.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: in6.c,v 1.92 2011/08/07 15:18:40 bluhm Exp $ */
+/* $OpenBSD: in6.c,v 1.93 2011/08/08 13:04:35 bluhm Exp $ */
/* $KAME: in6.c,v 1.372 2004/06/14 08:14:21 itojun Exp $ */
/*
@@ -1956,6 +1956,8 @@ in6_ifpprefix(const struct ifnet *ifp, const struct in6_addr *addr)
#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);