Lines Matching refs:ln
318 struct llinfo_nd6 *ln = arg; in nd6_llinfo_free() local
320 if (ln->ln_next != NULL || ln->ln_prev != NULL) { in nd6_llinfo_free()
321 panic("%s: trying to free %p when it is in use", __func__, ln); in nd6_llinfo_free()
326 if (ln->ln_hold != NULL) { in nd6_llinfo_free()
327 m_freem_list(ln->ln_hold); in nd6_llinfo_free()
328 ln->ln_hold = NULL; in nd6_llinfo_free()
332 VERIFY(ln->ln_rt->rt_llinfo == ln); in nd6_llinfo_free()
333 if (ln->ln_rt->rt_llinfo_purge != NULL) { in nd6_llinfo_free()
334 ln->ln_rt->rt_llinfo_purge(ln->ln_rt); in nd6_llinfo_free()
337 zfree(llinfo_nd6_zone, ln); in nd6_llinfo_free()
343 struct llinfo_nd6 *ln = rt->rt_llinfo; in nd6_llinfo_purge() local
346 VERIFY(rt->rt_llinfo_purge == nd6_llinfo_purge && ln != NULL); in nd6_llinfo_purge()
348 if (ln->ln_llreach != NULL) { in nd6_llinfo_purge()
350 ifnet_llreach_free(ln->ln_llreach); in nd6_llinfo_purge()
351 ln->ln_llreach = NULL; in nd6_llinfo_purge()
353 ln->ln_lastused = 0; in nd6_llinfo_purge()
359 struct llinfo_nd6 *ln = rt->rt_llinfo; in nd6_llinfo_get_ri() local
360 struct if_llreach *lr = ln->ln_llreach; in nd6_llinfo_get_ri()
373 ifnet_llreach_up2calexp(lr, ln->ln_lastused); in nd6_llinfo_get_ri()
381 struct llinfo_nd6 *ln = rt->rt_llinfo; in nd6_llinfo_get_iflri() local
382 struct if_llreach *lr = ln->ln_llreach; in nd6_llinfo_get_iflri()
395 ifnet_llreach_up2upexp(lr, ln->ln_lastused); in nd6_llinfo_get_iflri()
403 struct llinfo_nd6 *ln = rt->rt_llinfo; in nd6_llinfo_refresh() local
409 if (!ln || ln->ln_expire == 0 || in nd6_llinfo_refresh()
415 if ((ln->ln_state > ND6_LLINFO_INCOMPLETE) && in nd6_llinfo_refresh()
416 (ln->ln_state < ND6_LLINFO_PROBE)) { in nd6_llinfo_refresh()
417 if (ln->ln_expire > timenow) { in nd6_llinfo_refresh()
418 ln_setexpire(ln, timenow); in nd6_llinfo_refresh()
419 ND6_CACHE_STATE_TRANSITION(ln, ND6_LLINFO_PROBE); in nd6_llinfo_refresh()
459 ln_setexpire(struct llinfo_nd6 *ln, uint64_t expiry) in ln_setexpire() argument
461 ln->ln_expire = expiry; in ln_setexpire()
465 ln_getexpire(struct llinfo_nd6 *ln) in ln_getexpire() argument
470 if (ln->ln_expire != 0) { in ln_getexpire()
471 struct rtentry *rt = ln->ln_rt; in ln_getexpire()
482 ln->ln_expire - rt->base_uptime; in ln_getexpire()
775 struct llinfo_nd6 *ln; in nd6_service_neighbor_cache() local
841 ln = llinfo_nd6.ln_next; in nd6_service_neighbor_cache()
842 while (ln != NULL && ln != &llinfo_nd6) { in nd6_service_neighbor_cache()
851 next = ln->ln_next; in nd6_service_neighbor_cache()
852 rt = ln->ln_rt; in nd6_service_neighbor_cache()
856 if (ln->ln_flags & ND6_LNF_TIMER_SKIP) { in nd6_service_neighbor_cache()
858 ln = next; in nd6_service_neighbor_cache()
866 ln, rt); in nd6_service_neighbor_cache()
871 if ((struct llinfo_nd6 *)rt->rt_llinfo != ln) { in nd6_service_neighbor_cache()
873 __func__, rt->rt_llinfo, ln); in nd6_service_neighbor_cache()
881 rt, ln); in nd6_service_neighbor_cache()
886 ln->ln_flags |= ND6_LNF_TIMER_SKIP; in nd6_service_neighbor_cache()
888 if (ln->ln_expire == 0 || (rt->rt_flags & RTF_STATIC)) { in nd6_service_neighbor_cache()
895 if (ln->ln_state > ND6_LLINFO_INCOMPLETE) { in nd6_service_neighbor_cache()
896 ND6_CACHE_STATE_TRANSITION(ln, (short)ND6_LLINFO_STALE); in nd6_service_neighbor_cache()
898 ND6_CACHE_STATE_TRANSITION(ln, ND6_LLINFO_PURGE); in nd6_service_neighbor_cache()
900 ln_setexpire(ln, timenow); in nd6_service_neighbor_cache()
909 if (ln->ln_expire > timenow) { in nd6_service_neighbor_cache()
910 switch (ln->ln_state) { in nd6_service_neighbor_cache()
919 ln = next; in nd6_service_neighbor_cache()
931 ln = next; in nd6_service_neighbor_cache()
941 switch (ln->ln_state) { in nd6_service_neighbor_cache()
943 if (ln->ln_asked < nd6_mmaxtries) { in nd6_service_neighbor_cache()
944 struct ifnet *exclifp = ln->ln_exclifp; in nd6_service_neighbor_cache()
945 ln->ln_asked++; in nd6_service_neighbor_cache()
946 ln_setexpire(ln, timenow + retrans / 1000); in nd6_service_neighbor_cache()
952 NULL, &dst->sin6_addr, ln); in nd6_service_neighbor_cache()
955 &dst->sin6_addr, ln, NULL); in nd6_service_neighbor_cache()
961 struct mbuf *m = ln->ln_hold; in nd6_service_neighbor_cache()
962 ln->ln_hold = NULL; in nd6_service_neighbor_cache()
1014 if (ln->ln_expire != 0) { in nd6_service_neighbor_cache()
1015 ND6_CACHE_STATE_TRANSITION(ln, ND6_LLINFO_STALE); in nd6_service_neighbor_cache()
1016 ln_setexpire(ln, timenow + nd6_gctimer); in nd6_service_neighbor_cache()
1041 if (ln->ln_expire != 0) { in nd6_service_neighbor_cache()
1058 ln->ln_asked = 1; in nd6_service_neighbor_cache()
1059 ND6_CACHE_STATE_TRANSITION(ln, ND6_LLINFO_PROBE); in nd6_service_neighbor_cache()
1060 ln_setexpire(ln, timenow + retrans / 1000); in nd6_service_neighbor_cache()
1065 &dst->sin6_addr, ln, NULL); in nd6_service_neighbor_cache()
1071 ND6_CACHE_STATE_TRANSITION(ln, ND6_LLINFO_STALE); /* XXX */ in nd6_service_neighbor_cache()
1072 ln_setexpire(ln, timenow + nd6_gctimer); in nd6_service_neighbor_cache()
1078 if (ln->ln_asked < nd6_umaxtries) { in nd6_service_neighbor_cache()
1079 ln->ln_asked++; in nd6_service_neighbor_cache()
1080 ln_setexpire(ln, timenow + retrans / 1000); in nd6_service_neighbor_cache()
1085 &dst->sin6_addr, ln, NULL); in nd6_service_neighbor_cache()
1131 ln = next; in nd6_service_neighbor_cache()
1136 ln = llinfo_nd6.ln_next; in nd6_service_neighbor_cache()
1137 while (ln != NULL && ln != &llinfo_nd6) { in nd6_service_neighbor_cache()
1138 struct rtentry *rt = ln->ln_rt; in nd6_service_neighbor_cache()
1139 struct llinfo_nd6 *next = ln->ln_next; in nd6_service_neighbor_cache()
1142 if (ln->ln_flags & ND6_LNF_TIMER_SKIP) { in nd6_service_neighbor_cache()
1143 ln->ln_flags &= ~ND6_LNF_TIMER_SKIP; in nd6_service_neighbor_cache()
1146 ln = next; in nd6_service_neighbor_cache()
2188 struct llinfo_nd6 *ln = NULL; in nd6_purge_interface_llinfo() local
2195 ln = llinfo_nd6.ln_next; in nd6_purge_interface_llinfo()
2196 while (ln != NULL && ln != &llinfo_nd6) { in nd6_purge_interface_llinfo()
2200 nln = ln->ln_next; in nd6_purge_interface_llinfo()
2201 rt = ln->ln_rt; in nd6_purge_interface_llinfo()
2225 ln = nln; in nd6_purge_interface_llinfo()
2368 struct llinfo_nd6 *ln = rt->rt_llinfo; in nd6_lookup() local
2378 ND6_CACHE_STATE_TRANSITION(ln, ND6_LLINFO_NOSTATE); in nd6_lookup()
2380 ND6_CACHE_STATE_TRANSITION(ln, ND6_LLINFO_REACHABLE); in nd6_lookup()
2381 ln_setexpire(ln, 0); in nd6_lookup()
2552 struct llinfo_nd6 *ln = NULL; in nd6_free() local
2562 ln = rt->rt_llinfo; in nd6_free()
2580 if ((ln && ln->ln_router) || dr) { in nd6_free()
2610 ND6_CACHE_STATE_TRANSITION(ln, ND6_LLINFO_INCOMPLETE); in nd6_free()
2647 struct llinfo_nd6 *ln = rt->rt_llinfo; in nd6_rtrequest() local
2738 ((rt->rt_flags & RTF_LLINFO) && ln == NULL)) { in nd6_rtrequest()
2753 if (ln != NULL) { in nd6_rtrequest()
2754 ln_setexpire(ln, in nd6_rtrequest()
2805 if (ln != NULL) { in nd6_rtrequest()
2812 rt->rt_llinfo = ln = nd6_llinfo_alloc(Z_WAITOK); in nd6_rtrequest()
2821 ln->ln_rt = rt; in nd6_rtrequest()
2835 ND6_CACHE_STATE_TRANSITION(ln, ND6_LLINFO_REACHABLE); in nd6_rtrequest()
2836 ln_setexpire(ln, 0); in nd6_rtrequest()
2842 ND6_CACHE_STATE_TRANSITION(ln, ND6_LLINFO_NOSTATE); in nd6_rtrequest()
2844 ln_setexpire(ln, (ifp->if_eflags & IFEF_IPV6_ND6ALT) ? in nd6_rtrequest()
2847 LN_INSERTHEAD(ln); in nd6_rtrequest()
2864 for (i = 0; i < 10 && llinfo_nd6.ln_prev != ln; i++) { in nd6_rtrequest()
2895 ln_setexpire(ln, 0); in nd6_rtrequest()
2896 ND6_CACHE_STATE_TRANSITION(ln, ND6_LLINFO_REACHABLE); in nd6_rtrequest()
2942 ln_setexpire(ln, 0); in nd6_rtrequest()
2943 ND6_CACHE_STATE_TRANSITION(ln, ND6_LLINFO_REACHABLE); in nd6_rtrequest()
2973 if (ln == NULL) { in nd6_rtrequest()
3004 if (ln->ln_flags & ND6_LNF_IN_USE) { in nd6_rtrequest()
3005 LN_DEQUEUE(ln); in nd6_rtrequest()
3016 if (ln->ln_hold != NULL) { in nd6_rtrequest()
3017 m_freem_list(ln->ln_hold); in nd6_rtrequest()
3018 ln->ln_hold = NULL; in nd6_rtrequest()
3484 struct llinfo_nd6 *ln; in nd6_ioctl() local
3510 ln = rt->rt_llinfo; in nd6_ioctl()
3511 nbi_32.state = ln->ln_state; in nd6_ioctl()
3512 nbi_32.asked = ln->ln_asked; in nd6_ioctl()
3513 nbi_32.isrouter = ln->ln_router; in nd6_ioctl()
3514 nbi_32.expire = (int)ln_getexpire(ln); in nd6_ioctl()
3522 struct llinfo_nd6 *ln; in nd6_ioctl() local
3548 ln = rt->rt_llinfo; in nd6_ioctl()
3549 nbi_64.state = ln->ln_state; in nd6_ioctl()
3550 nbi_64.asked = ln->ln_asked; in nd6_ioctl()
3551 nbi_64.isrouter = ln->ln_router; in nd6_ioctl()
3552 nbi_64.expire = (int)ln_getexpire(ln); in nd6_ioctl()
3665 struct llinfo_nd6 *ln = NULL; in nd6_cache_lladdr() local
3719 ln = (struct llinfo_nd6 *)rt->rt_llinfo; in nd6_cache_lladdr()
3720 if (ln == NULL) { in nd6_cache_lladdr()
3792 ln_setexpire(ln, 0); in nd6_cache_lladdr()
3799 ND6_CACHE_STATE_TRANSITION(ln, newstate); in nd6_cache_lladdr()
3801 if ((ln->ln_state == ND6_LLINFO_STALE) || in nd6_cache_lladdr()
3802 (ln->ln_state == ND6_LLINFO_REACHABLE)) { in nd6_cache_lladdr()
3803 struct mbuf *m = ln->ln_hold; in nd6_cache_lladdr()
3810 if (ln->ln_state == ND6_LLINFO_STALE) { in nd6_cache_lladdr()
3811 ln_setexpire(ln, timenow + nd6_gctimer); in nd6_cache_lladdr()
3814 ln->ln_hold = NULL; in nd6_cache_lladdr()
3827 } else if (ln->ln_state == ND6_LLINFO_INCOMPLETE) { in nd6_cache_lladdr()
3829 ln_setexpire(ln, timenow); in nd6_cache_lladdr()
3869 ln->ln_router = 0; in nd6_cache_lladdr()
3879 ln->ln_router = 1; in nd6_cache_lladdr()
3881 ln->ln_router = 0; in nd6_cache_lladdr()
3888 ln->ln_router = 0; in nd6_cache_lladdr()
3896 ln->ln_router = 1; in nd6_cache_lladdr()
3913 if (ln->ln_router || (rt->rt_flags & RTF_ROUTER)) { in nd6_cache_lladdr()
3946 if (do_update && ln->ln_router) { in nd6_cache_lladdr()
4021 struct llinfo_nd6 *ln = NULL; in nd6_output_list() local
4236 ln = rt->rt_llinfo; in nd6_output_list()
4270 ln = rt->rt_llinfo; in nd6_output_list()
4277 if (!ln || !rt) { in nd6_output_list()
4291 (uint64_t)VM_KERNEL_ADDRPERM(ln), in nd6_output_list()
4305 ln->ln_state < ND6_LLINFO_REACHABLE) { in nd6_output_list()
4306 ND6_CACHE_STATE_TRANSITION(ln, ND6_LLINFO_STALE); in nd6_output_list()
4307 ln_setexpire(ln, timenow + nd6_gctimer); in nd6_output_list()
4317 if (ln->ln_state == ND6_LLINFO_STALE) { in nd6_output_list()
4318 ln->ln_asked = 0; in nd6_output_list()
4319 ND6_CACHE_STATE_TRANSITION(ln, ND6_LLINFO_DELAY); in nd6_output_list()
4320 ln_setexpire(ln, timenow + nd6_delay); in nd6_output_list()
4330 if (ln->ln_state > ND6_LLINFO_INCOMPLETE) { in nd6_output_list()
4340 if (ln->ln_state == ND6_LLINFO_DELAY || in nd6_output_list()
4341 (ln->ln_expire != 0 && ip6_neighborgcthresh > 0 && in nd6_output_list()
4344 if (ln->ln_state == ND6_LLINFO_DELAY) { in nd6_output_list()
4347 if (ln->ln_expire != 0 && ip6_neighborgcthresh > 0 && in nd6_output_list()
4350 if (ln->ln_flags & ND6_LNF_IN_USE) { in nd6_output_list()
4351 LN_DEQUEUE(ln); in nd6_output_list()
4352 LN_INSERTHEAD(ln); in nd6_output_list()
4367 ln->ln_exclifp = ((origifp == ifp) ? NULL : origifp); in nd6_output_list()
4379 if (ln->ln_state == ND6_LLINFO_NOSTATE) { in nd6_output_list()
4380 ND6_CACHE_STATE_TRANSITION(ln, ND6_LLINFO_INCOMPLETE); in nd6_output_list()
4382 if (ln->ln_hold) { in nd6_output_list()
4383 m_freem_list(ln->ln_hold); in nd6_output_list()
4385 ln->ln_hold = m0; in nd6_output_list()
4386 if (!ND6_LLINFO_PERMANENT(ln) && ln->ln_asked == 0) { in nd6_output_list()
4387 ln->ln_asked++; in nd6_output_list()
4391 ln_setexpire(ln, timenow + ndi->retrans / 1000); in nd6_output_list()
4397 &dst->sin6_addr, ln); in nd6_output_list()
4399 nd6_ns_output(ifp, NULL, &dst->sin6_addr, ln, NULL); in nd6_output_list()
4415 if (ln->ln_expire != 0 && ip6_neighborgcthresh > 0 && in nd6_output_list()
4419 if (ln->ln_flags & ND6_LNF_IN_USE) { in nd6_output_list()
4420 LN_DEQUEUE(ln); in nd6_output_list()
4421 LN_INSERTHEAD(ln); in nd6_output_list()