summaryrefslogtreecommitdiffstats
path: root/sys/netinet6
diff options
context:
space:
mode:
authorqingli <qingli@FreeBSD.org>2013-06-24 05:01:13 +0000
committerqingli <qingli@FreeBSD.org>2013-06-24 05:01:13 +0000
commit2478a430f6feedba08f44ddd4ccde7886c72c230 (patch)
tree68f91880046ec3a9b394bab5abbe48d49abcaccb /sys/netinet6
parent750d72521e8699c02d93a1a2b94f463b4c460cf0 (diff)
downloadFreeBSD-src-2478a430f6feedba08f44ddd4ccde7886c72c230.zip
FreeBSD-src-2478a430f6feedba08f44ddd4ccde7886c72c230.tar.gz
Delete the nd6 entries associated with an off-link prefix
if the same prefix cannot be found on an alternative interface. Reviewed by: hrs MFC after: 1 week
Diffstat (limited to 'sys/netinet6')
-rw-r--r--sys/netinet6/nd6_rtr.c8
1 files changed, 7 insertions, 1 deletions
diff --git a/sys/netinet6/nd6_rtr.c b/sys/netinet6/nd6_rtr.c
index f6bae0c..03d06b4 100644
--- a/sys/netinet6/nd6_rtr.c
+++ b/sys/netinet6/nd6_rtr.c
@@ -1720,6 +1720,7 @@ nd6_prefix_offlink(struct nd_prefix *pr)
}
}
error = a_failure;
+ a_failure = 1;
if (error == 0) {
pr->ndpr_stateflags &= ~NDPRF_ONLINK;
@@ -1758,7 +1759,8 @@ nd6_prefix_offlink(struct nd_prefix *pr)
&opr->ndpr_prefix.sin6_addr),
opr->ndpr_plen, if_name(ifp),
if_name(opr->ndpr_ifp), e));
- }
+ } else
+ a_failure = 0;
}
}
} else {
@@ -1770,6 +1772,10 @@ nd6_prefix_offlink(struct nd_prefix *pr)
if_name(ifp), error));
}
+ if (a_failure)
+ lltable_prefix_free(AF_INET6, (struct sockaddr *)&sa6,
+ (struct sockaddr *)&mask6, LLE_STATIC);
+
return (error);
}
OpenPOWER on IntegriCloud