diff options
author | qingli <qingli@FreeBSD.org> | 2013-06-24 05:01:13 +0000 |
---|---|---|
committer | qingli <qingli@FreeBSD.org> | 2013-06-24 05:01:13 +0000 |
commit | 2478a430f6feedba08f44ddd4ccde7886c72c230 (patch) | |
tree | 68f91880046ec3a9b394bab5abbe48d49abcaccb /sys/netinet6 | |
parent | 750d72521e8699c02d93a1a2b94f463b4c460cf0 (diff) | |
download | FreeBSD-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.c | 8 |
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); } |