Lines Matching refs:ln

287 	struct llinfo_nd6 *ln = arg;
289 if (ln->ln_next != NULL || ln->ln_prev != NULL) {
290 panic("%s: trying to free %p when it is in use", __func__, ln);
295 if (ln->ln_hold != NULL) {
296 m_freem(ln->ln_hold);
297 ln->ln_hold = NULL;
301 VERIFY(ln->ln_rt->rt_llinfo == ln);
302 if (ln->ln_rt->rt_llinfo_purge != NULL)
303 ln->ln_rt->rt_llinfo_purge(ln->ln_rt);
305 zfree(llinfo_nd6_zone, ln);
311 struct llinfo_nd6 *ln = rt->rt_llinfo;
314 VERIFY(rt->rt_llinfo_purge == nd6_llinfo_purge && ln != NULL);
316 if (ln->ln_llreach != NULL) {
318 ifnet_llreach_free(ln->ln_llreach);
319 ln->ln_llreach = NULL;
321 ln->ln_lastused = 0;
327 struct llinfo_nd6 *ln = rt->rt_llinfo;
328 struct if_llreach *lr = ln->ln_llreach;
341 ifnet_llreach_up2calexp(lr, ln->ln_lastused);
349 struct llinfo_nd6 *ln = rt->rt_llinfo;
350 struct if_llreach *lr = ln->ln_llreach;
363 ifnet_llreach_up2upexp(lr, ln->ln_lastused);
642 struct llinfo_nd6 *ln;
665 ln = llinfo_nd6.ln_next;
666 while (ln != NULL && ln != &llinfo_nd6) {
674 next = ln->ln_next;
675 rt = ln->ln_rt;
679 if (ln->ln_flags & ND6_LNF_TIMER_SKIP) {
681 ln = next;
687 panic("%s: ln(%p) rt(%p) rt_ifp == NULL", __func__,
688 ln, rt);
692 /* rt_llinfo must always be equal to ln */
693 if ((struct llinfo_nd6 *)rt->rt_llinfo != ln) {
694 panic("%s: rt_llinfo(%p) is not equal to ln(%p)",
695 __func__, rt->rt_llinfo, ln);
702 panic("%s: rt(%p) key is NULL ln(%p)", __func__,
703 rt, ln);
708 ln->ln_flags |= ND6_LNF_TIMER_SKIP;
710 if (ln->ln_expire > timenow.tv_sec) {
712 ln = next;
720 ln = next;
733 switch (ln->ln_state) {
735 if (ln->ln_asked < nd6_mmaxtries) {
736 ln->ln_asked++;
737 ln->ln_expire = timenow.tv_sec + retrans / 1000;
743 &dst->sin6_addr, ln);
746 &dst->sin6_addr, ln, 0);
750 struct mbuf *m = ln->ln_hold;
751 ln->ln_hold = NULL;
775 if (ln->ln_expire) {
776 ln->ln_state = ND6_LLINFO_STALE;
777 ln->ln_expire = rt_expiry(rt, timenow.tv_sec,
786 if (ln->ln_expire) {
801 ln->ln_asked = 1;
802 ln->ln_state = ND6_LLINFO_PROBE;
803 ln->ln_expire = timenow.tv_sec + retrans / 1000;
808 &dst->sin6_addr, ln, 0);
814 ln->ln_state = ND6_LLINFO_STALE; /* XXX */
815 ln->ln_expire = rt_expiry(rt, timenow.tv_sec,
821 if (ln->ln_asked < nd6_umaxtries) {
822 ln->ln_asked++;
823 ln->ln_expire = timenow.tv_sec + retrans / 1000;
828 &dst->sin6_addr, ln, 0);
842 ln = next;
847 ln = llinfo_nd6.ln_next;
848 while (ln != NULL && ln != &llinfo_nd6) {
849 struct rtentry *rt = ln->ln_rt;
850 struct llinfo_nd6 *next = ln->ln_next;
853 if (ln->ln_flags & ND6_LNF_TIMER_SKIP)
854 ln->ln_flags &= ~ND6_LNF_TIMER_SKIP;
856 ln = next;
1206 struct llinfo_nd6 *ln;
1293 ln = llinfo_nd6.ln_next;
1294 while (ln != NULL && ln != &llinfo_nd6) {
1298 nln = ln->ln_next;
1299 rt = ln->ln_rt;
1321 ln = nln;
1424 struct llinfo_nd6 *ln = rt->rt_llinfo;
1425 ln->ln_state = ND6_LLINFO_NOSTATE;
1609 struct llinfo_nd6 *ln;
1619 ln = rt->rt_llinfo;
1638 if ((ln && ln->ln_router) || dr) {
1668 ln->ln_state = ND6_LLINFO_INCOMPLETE;
1713 struct llinfo_nd6 *ln;
1742 ln = rt->rt_llinfo;
1743 if (ln->ln_state < ND6_LLINFO_REACHABLE)
1751 ln->ln_byhint++;
1752 if (ln->ln_byhint > nd6_maxnudhint)
1756 ln->ln_state = ND6_LLINFO_REACHABLE;
1757 if (ln->ln_expire) {
1764 ln->ln_expire = timenow.tv_sec + ndi->reachable;
1780 struct llinfo_nd6 *ln = rt->rt_llinfo;
1856 ((rt->rt_flags & RTF_LLINFO) && ln == NULL)) {
1861 * (RTF_LLINFO && ln == NULL case).
1872 if (ln != NULL)
1873 ln->ln_expire =
1918 if (ln != NULL)
1924 rt->rt_llinfo = ln = nd6_llinfo_alloc();
1925 if (ln == NULL) {
1936 Bzero(ln, sizeof(*ln));
1937 ln->ln_rt = rt;
1942 * and ln->ln_expire should have some lifetime
1945 ln->ln_state = ND6_LLINFO_REACHABLE;
1946 ln->ln_byhint = 0;
1952 ln->ln_state = ND6_LLINFO_NOSTATE;
1955 ln->ln_expire = (ifp->if_eflags & IFEF_IPV6_ND6ALT)
1959 LN_INSERTHEAD(ln);
1972 for (i = 0; i < 10 && llinfo_nd6.ln_prev != ln; i++) {
2002 ln->ln_expire = 0;
2003 ln->ln_state = ND6_LLINFO_REACHABLE;
2004 ln->ln_byhint = 0;
2041 ln->ln_expire = 0;
2042 ln->ln_state = ND6_LLINFO_REACHABLE;
2043 ln->ln_byhint = 0;
2071 if (ln == NULL)
2098 * llinfo_nd6, and likewise, ln->ln_rt stil points to this
2101 if (ln->ln_flags & ND6_LNF_IN_USE)
2102 LN_DEQUEUE(ln);
2111 if (ln->ln_hold != NULL) {
2112 m_freem(ln->ln_hold);
2113 ln->ln_hold = NULL;
2533 struct llinfo_nd6 *ln;
2558 ln = rt->rt_llinfo;
2559 nbi_32.state = ln->ln_state;
2560 nbi_32.asked = ln->ln_asked;
2561 nbi_32.isrouter = ln->ln_router;
2562 nbi_32.expire = ln->ln_expire;
2570 struct llinfo_nd6 *ln;
2595 ln = rt->rt_llinfo;
2596 nbi_64.state = ln->ln_state;
2597 nbi_64.asked = ln->ln_asked;
2598 nbi_64.isrouter = ln->ln_router;
2599 nbi_64.expire = ln->ln_expire;
2661 struct llinfo_nd6 *ln = NULL;
2716 ln = (struct llinfo_nd6 *)rt->rt_llinfo;
2717 if (ln == NULL)
2776 ln->ln_state = newstate;
2778 if (ln->ln_state == ND6_LLINFO_STALE) {
2779 struct mbuf *m = ln->ln_hold;
2786 ln->ln_expire = timenow.tv_sec + nd6_gctimer;
2787 ln->ln_hold = NULL;
2801 } else if (ln->ln_state == ND6_LLINFO_INCOMPLETE) {
2803 ln->ln_expire = timenow.tv_sec;
2842 ln->ln_router = 0;
2851 ln->ln_router = 1;
2853 ln->ln_router = 0;
2859 ln->ln_router = 0;
2867 ln->ln_router = 1;
2882 if (do_update && ln->ln_router &&
2934 struct llinfo_nd6 *ln = NULL;
3146 ln = rt->rt_llinfo;
3176 ln = rt->rt_llinfo;
3183 if (!ln || !rt) {
3196 "(ln=%p, rt=%p)\n",
3197 ip6_sprintf(&dst->sin6_addr), ln, rt);
3210 ln->ln_state < ND6_LLINFO_REACHABLE) {
3211 ln->ln_state = ND6_LLINFO_STALE;
3212 ln->ln_expire = rt_expiry(rt, timenow.tv_sec, nd6_gctimer);
3222 if (ln->ln_state == ND6_LLINFO_STALE) {
3223 ln->ln_asked = 0;
3224 ln->ln_state = ND6_LLINFO_DELAY;
3225 ln->ln_expire = rt_expiry(rt, timenow.tv_sec, nd6_delay);
3233 if (ln->ln_state > ND6_LLINFO_INCOMPLETE) {
3242 if (ln->ln_flags & ND6_LNF_IN_USE) {
3243 LN_DEQUEUE(ln);
3244 LN_INSERTHEAD(ln);
3260 if (ln->ln_state == ND6_LLINFO_NOSTATE)
3261 ln->ln_state = ND6_LLINFO_INCOMPLETE;
3262 if (ln->ln_hold)
3263 m_freem(ln->ln_hold);
3264 ln->ln_hold = m;
3265 if (ln->ln_expire && ln->ln_asked < nd6_mmaxtries &&
3266 ln->ln_expire < timenow.tv_sec) {
3267 ln->ln_asked++;
3272 ln->ln_expire = timenow.tv_sec + ndi->retrans / 1000;
3276 /* We still have a reference on rt (for ln) */
3278 nd6_prproxy_ns_output(ifp, NULL, &dst->sin6_addr, ln);
3280 nd6_ns_output(ifp, NULL, &dst->sin6_addr, ln, 0);
3291 if (ln->ln_flags & ND6_LNF_IN_USE) {
3292 LN_DEQUEUE(ln);
3293 LN_INSERTHEAD(ln);