summaryrefslogtreecommitdiffstats
path: root/sys/netinet6/nd6.c
diff options
context:
space:
mode:
Diffstat (limited to 'sys/netinet6/nd6.c')
-rw-r--r--sys/netinet6/nd6.c13
1 files changed, 13 insertions, 0 deletions
diff --git a/sys/netinet6/nd6.c b/sys/netinet6/nd6.c
index 3ff8b22..ad7e079 100644
--- a/sys/netinet6/nd6.c
+++ b/sys/netinet6/nd6.c
@@ -512,6 +512,19 @@ nd6_llinfo_timer(arg)
ln->ln_asked++;
nd6_llinfo_settimer(ln, (long)ndi->retrans * hz / 1000);
nd6_ns_output(ifp, dst, dst, ln, 0);
+ } else if (rt->rt_ifa != NULL &&
+ rt->rt_ifa->ifa_addr->sa_family == AF_INET6 &&
+ (((struct in6_ifaddr *)rt->rt_ifa)->ia_flags & IFA_ROUTE)) {
+ /*
+ * This is an unreachable neighbor whose address is
+ * specified as the destination of a p2p interface
+ * (see in6_ifinit()). We should not free the entry
+ * since this is sort of a "static" entry generated
+ * via interface address configuration.
+ */
+ ln->ln_asked = 0;
+ ln->ln_expire = 0; /* make it permanent */
+ ln->ln_state = ND6_LLINFO_STALE;
} else {
(void)nd6_free(rt, 0);
ln = NULL;
OpenPOWER on IntegriCloud