Lines Matching refs:ln
315 struct llinfo_nd6 *__single ln = arg; in nd6_llinfo_free() local
317 if (ln->ln_next != NULL || ln->ln_prev != NULL) { in nd6_llinfo_free()
318 panic("%s: trying to free %p when it is in use", __func__, ln); in nd6_llinfo_free()
323 if (ln->ln_hold != NULL) { in nd6_llinfo_free()
324 m_freem_list(ln->ln_hold); in nd6_llinfo_free()
325 ln->ln_hold = NULL; in nd6_llinfo_free()
329 VERIFY(ln->ln_rt->rt_llinfo == ln); in nd6_llinfo_free()
330 if (ln->ln_rt->rt_llinfo_purge != NULL) { in nd6_llinfo_free()
331 ln->ln_rt->rt_llinfo_purge(ln->ln_rt); in nd6_llinfo_free()
334 zfree(llinfo_nd6_zone, ln); in nd6_llinfo_free()
340 struct llinfo_nd6 *__single ln = rt->rt_llinfo; in nd6_llinfo_purge() local
343 VERIFY(rt->rt_llinfo_purge == nd6_llinfo_purge && ln != NULL); in nd6_llinfo_purge()
345 if (ln->ln_llreach != NULL) { in nd6_llinfo_purge()
347 ifnet_llreach_free(ln->ln_llreach); in nd6_llinfo_purge()
348 ln->ln_llreach = NULL; in nd6_llinfo_purge()
350 ln->ln_lastused = 0; in nd6_llinfo_purge()
356 struct llinfo_nd6 *__single ln = rt->rt_llinfo; in nd6_llinfo_get_ri() local
357 struct if_llreach *__single lr = ln->ln_llreach; in nd6_llinfo_get_ri()
370 ifnet_llreach_up2calexp(lr, ln->ln_lastused); in nd6_llinfo_get_ri()
378 struct llinfo_nd6 *__single ln = rt->rt_llinfo; in nd6_llinfo_get_iflri() local
379 struct if_llreach *__single lr = ln->ln_llreach; in nd6_llinfo_get_iflri()
392 ifnet_llreach_up2upexp(lr, ln->ln_lastused); in nd6_llinfo_get_iflri()
400 struct llinfo_nd6 *__single ln = rt->rt_llinfo; in nd6_llinfo_refresh() local
409 if (!ln || ln->ln_expire == 0 || (rt->rt_flags & RTF_STATIC) || 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 rtentry_ref_t rt = ln->ln_rt; in ln_getexpire()
482 ln->ln_expire - rt->base_uptime; in ln_getexpire()
784 struct llinfo_nd6 *__single ln; in nd6_service_neighbor_cache() local
850 ln = llinfo_nd6.ln_next; in nd6_service_neighbor_cache()
851 while (ln != NULL && ln != &llinfo_nd6) { in nd6_service_neighbor_cache()
860 next = ln->ln_next; in nd6_service_neighbor_cache()
861 rt = ln->ln_rt; in nd6_service_neighbor_cache()
865 if (ln->ln_flags & ND6_LNF_TIMER_SKIP) { in nd6_service_neighbor_cache()
867 ln = next; in nd6_service_neighbor_cache()
875 ln, rt); in nd6_service_neighbor_cache()
880 if ((struct llinfo_nd6 *)rt->rt_llinfo != ln) { in nd6_service_neighbor_cache()
882 __func__, rt->rt_llinfo, ln); in nd6_service_neighbor_cache()
890 rt, ln); in nd6_service_neighbor_cache()
895 ln->ln_flags |= ND6_LNF_TIMER_SKIP; in nd6_service_neighbor_cache()
902 if (ln->ln_expire == 0 || (rt->rt_flags & RTF_STATIC) || in nd6_service_neighbor_cache()
910 if (ln->ln_state > ND6_LLINFO_INCOMPLETE) { in nd6_service_neighbor_cache()
911 ND6_CACHE_STATE_TRANSITION(ln, (short)ND6_LLINFO_STALE); in nd6_service_neighbor_cache()
913 ND6_CACHE_STATE_TRANSITION(ln, ND6_LLINFO_PURGE); in nd6_service_neighbor_cache()
915 ln_setexpire(ln, timenow); in nd6_service_neighbor_cache()
924 if (ln->ln_expire > timenow) { in nd6_service_neighbor_cache()
925 switch (ln->ln_state) { in nd6_service_neighbor_cache()
934 ln = next; in nd6_service_neighbor_cache()
946 ln = next; in nd6_service_neighbor_cache()
956 switch (ln->ln_state) { in nd6_service_neighbor_cache()
958 if (ln->ln_asked < nd6_mmaxtries) { in nd6_service_neighbor_cache()
959 ifnet_ref_t exclifp = ln->ln_exclifp; in nd6_service_neighbor_cache()
960 ln->ln_asked++; in nd6_service_neighbor_cache()
961 ln_setexpire(ln, timenow + retrans / 1000); in nd6_service_neighbor_cache()
967 NULL, &dst->sin6_addr, ln); in nd6_service_neighbor_cache()
970 &dst->sin6_addr, ln, NULL, 0); in nd6_service_neighbor_cache()
976 mbuf_ref_t m = ln->ln_hold; in nd6_service_neighbor_cache()
977 ln->ln_hold = NULL; in nd6_service_neighbor_cache()
1031 if (ln->ln_expire != 0) { in nd6_service_neighbor_cache()
1032 ND6_CACHE_STATE_TRANSITION(ln, ND6_LLINFO_STALE); in nd6_service_neighbor_cache()
1033 ln_setexpire(ln, timenow + nd6_gctimer); in nd6_service_neighbor_cache()
1058 if (ln->ln_expire != 0) { in nd6_service_neighbor_cache()
1075 ln->ln_asked = 1; in nd6_service_neighbor_cache()
1076 ND6_CACHE_STATE_TRANSITION(ln, ND6_LLINFO_PROBE); in nd6_service_neighbor_cache()
1077 ln_setexpire(ln, timenow + retrans / 1000); in nd6_service_neighbor_cache()
1082 &dst->sin6_addr, ln, NULL, 0); in nd6_service_neighbor_cache()
1088 ND6_CACHE_STATE_TRANSITION(ln, ND6_LLINFO_STALE); /* XXX */ in nd6_service_neighbor_cache()
1089 ln_setexpire(ln, timenow + nd6_gctimer); in nd6_service_neighbor_cache()
1095 if (ln->ln_asked < nd6_umaxtries) { in nd6_service_neighbor_cache()
1096 ln->ln_asked++; in nd6_service_neighbor_cache()
1097 ln_setexpire(ln, timenow + retrans / 1000); in nd6_service_neighbor_cache()
1102 &dst->sin6_addr, ln, NULL, 0); in nd6_service_neighbor_cache()
1149 ln = next; in nd6_service_neighbor_cache()
1154 ln = llinfo_nd6.ln_next; in nd6_service_neighbor_cache()
1155 while (ln != NULL && ln != &llinfo_nd6) { in nd6_service_neighbor_cache()
1156 rtentry_ref_t rt = ln->ln_rt; in nd6_service_neighbor_cache()
1157 struct llinfo_nd6 *__single next = ln->ln_next; in nd6_service_neighbor_cache()
1160 if (ln->ln_flags & ND6_LNF_TIMER_SKIP) { in nd6_service_neighbor_cache()
1161 ln->ln_flags &= ~ND6_LNF_TIMER_SKIP; in nd6_service_neighbor_cache()
1164 ln = next; in nd6_service_neighbor_cache()
2236 struct llinfo_nd6 *__single ln = NULL; in nd6_purge_interface_llinfo() local
2243 ln = llinfo_nd6.ln_next; in nd6_purge_interface_llinfo()
2244 while (ln != NULL && ln != &llinfo_nd6) { in nd6_purge_interface_llinfo()
2248 nln = ln->ln_next; in nd6_purge_interface_llinfo()
2249 rt = ln->ln_rt; in nd6_purge_interface_llinfo()
2273 ln = nln; in nd6_purge_interface_llinfo()
2415 struct llinfo_nd6 *__single ln = rt->rt_llinfo; in nd6_lookup() local
2437 ND6_CACHE_STATE_TRANSITION(ln, ND6_LLINFO_NOSTATE); in nd6_lookup()
2439 ND6_CACHE_STATE_TRANSITION(ln, ND6_LLINFO_REACHABLE); in nd6_lookup()
2440 ln_setexpire(ln, 0); in nd6_lookup()
2611 struct llinfo_nd6 *__single ln = NULL; in nd6_free() local
2621 ln = rt->rt_llinfo; in nd6_free()
2639 if ((ln && ln->ln_router) || dr) { in nd6_free()
2669 ND6_CACHE_STATE_TRANSITION(ln, ND6_LLINFO_INCOMPLETE); in nd6_free()
2706 struct llinfo_nd6 *__single ln = rt->rt_llinfo; in nd6_rtrequest() local
2809 ((rt->rt_flags & RTF_LLINFO) && ln == NULL)) { in nd6_rtrequest()
2824 if (ln != NULL) { in nd6_rtrequest()
2825 ln_setexpire(ln, in nd6_rtrequest()
2876 if (ln != NULL) { in nd6_rtrequest()
2883 rt->rt_llinfo = ln = nd6_llinfo_alloc(Z_WAITOK); in nd6_rtrequest()
2892 ln->ln_rt = rt; in nd6_rtrequest()
2905 ND6_CACHE_STATE_TRANSITION(ln, ND6_LLINFO_REACHABLE); in nd6_rtrequest()
2906 ln_setexpire(ln, 0); in nd6_rtrequest()
2912 ND6_CACHE_STATE_TRANSITION(ln, ND6_LLINFO_NOSTATE); in nd6_rtrequest()
2914 ln_setexpire(ln, (ifp->if_eflags & IFEF_IPV6_ND6ALT) ? in nd6_rtrequest()
2917 LN_INSERTHEAD(ln); in nd6_rtrequest()
2934 for (i = 0; i < 10 && llinfo_nd6.ln_prev != ln; i++) { in nd6_rtrequest()
2965 ln_setexpire(ln, 0); in nd6_rtrequest()
2966 ND6_CACHE_STATE_TRANSITION(ln, ND6_LLINFO_REACHABLE); in nd6_rtrequest()
3012 ln_setexpire(ln, 0); in nd6_rtrequest()
3013 ND6_CACHE_STATE_TRANSITION(ln, ND6_LLINFO_REACHABLE); in nd6_rtrequest()
3043 if (ln == NULL) { in nd6_rtrequest()
3074 if (ln->ln_flags & ND6_LNF_IN_USE) { in nd6_rtrequest()
3075 LN_DEQUEUE(ln); in nd6_rtrequest()
3086 if (ln->ln_hold != NULL) { in nd6_rtrequest()
3087 m_freem_list(ln->ln_hold); in nd6_rtrequest()
3088 ln->ln_hold = NULL; in nd6_rtrequest()
3327 struct llinfo_nd6 *__single ln; in nd6_ioctl() local
3353 ln = rt->rt_llinfo; in nd6_ioctl()
3354 nbi_32.state = ln->ln_state; in nd6_ioctl()
3355 nbi_32.asked = ln->ln_asked; in nd6_ioctl()
3356 nbi_32.isrouter = ln->ln_router; in nd6_ioctl()
3357 nbi_32.expire = (int)ln_getexpire(ln); in nd6_ioctl()
3365 struct llinfo_nd6 *__single ln; in nd6_ioctl() local
3391 ln = rt->rt_llinfo; in nd6_ioctl()
3392 nbi_64.state = ln->ln_state; in nd6_ioctl()
3393 nbi_64.asked = ln->ln_asked; in nd6_ioctl()
3394 nbi_64.isrouter = ln->ln_router; in nd6_ioctl()
3395 nbi_64.expire = (int)ln_getexpire(ln); in nd6_ioctl()
3510 struct llinfo_nd6 *__single ln = NULL; in nd6_cache_lladdr() local
3568 ln = (struct llinfo_nd6 *)rt->rt_llinfo; in nd6_cache_lladdr()
3569 if (ln == NULL) { in nd6_cache_lladdr()
3642 ln_setexpire(ln, 0); in nd6_cache_lladdr()
3649 ND6_CACHE_STATE_TRANSITION(ln, newstate); in nd6_cache_lladdr()
3651 if ((ln->ln_state == ND6_LLINFO_STALE) || in nd6_cache_lladdr()
3652 (ln->ln_state == ND6_LLINFO_REACHABLE)) { in nd6_cache_lladdr()
3653 mbuf_ref_t m = ln->ln_hold; in nd6_cache_lladdr()
3660 if (ln->ln_state == ND6_LLINFO_STALE) { in nd6_cache_lladdr()
3661 ln_setexpire(ln, timenow + nd6_gctimer); in nd6_cache_lladdr()
3664 ln->ln_hold = NULL; in nd6_cache_lladdr()
3677 } else if (ln->ln_state == ND6_LLINFO_INCOMPLETE) { in nd6_cache_lladdr()
3679 ln_setexpire(ln, timenow); in nd6_cache_lladdr()
3719 ln->ln_router = 0; in nd6_cache_lladdr()
3729 ln->ln_router = 1; in nd6_cache_lladdr()
3731 ln->ln_router = 0; in nd6_cache_lladdr()
3738 ln->ln_router = 0; in nd6_cache_lladdr()
3746 ln->ln_router = 1; in nd6_cache_lladdr()
3763 if (ln->ln_router || (rt->rt_flags & RTF_ROUTER)) { in nd6_cache_lladdr()
3803 if (do_update && ln->ln_router) { in nd6_cache_lladdr()
3878 struct llinfo_nd6 *__single ln = NULL; in nd6_output_list() local
4093 ln = rt->rt_llinfo; in nd6_output_list()
4127 ln = rt->rt_llinfo; in nd6_output_list()
4134 if (!ln || !rt) { in nd6_output_list()
4148 (uint64_t)VM_KERNEL_ADDRPERM(ln), in nd6_output_list()
4162 ln->ln_state < ND6_LLINFO_REACHABLE) { in nd6_output_list()
4163 ND6_CACHE_STATE_TRANSITION(ln, ND6_LLINFO_STALE); in nd6_output_list()
4164 ln_setexpire(ln, timenow + nd6_gctimer); in nd6_output_list()
4174 if (ln->ln_state == ND6_LLINFO_STALE) { in nd6_output_list()
4175 ln->ln_asked = 0; in nd6_output_list()
4176 ND6_CACHE_STATE_TRANSITION(ln, ND6_LLINFO_DELAY); in nd6_output_list()
4177 ln_setexpire(ln, timenow + nd6_delay); in nd6_output_list()
4187 if (ln->ln_state > ND6_LLINFO_INCOMPLETE) { in nd6_output_list()
4197 if (ln->ln_state == ND6_LLINFO_DELAY || in nd6_output_list()
4198 (ln->ln_expire != 0 && ip6_neighborgcthresh > 0 && in nd6_output_list()
4201 if (ln->ln_state == ND6_LLINFO_DELAY) { in nd6_output_list()
4204 if (ln->ln_expire != 0 && ip6_neighborgcthresh > 0 && in nd6_output_list()
4207 if (ln->ln_flags & ND6_LNF_IN_USE) { in nd6_output_list()
4208 LN_DEQUEUE(ln); in nd6_output_list()
4209 LN_INSERTHEAD(ln); in nd6_output_list()
4224 ln->ln_exclifp = ((origifp == ifp) ? NULL : origifp); in nd6_output_list()
4236 if (ln->ln_state == ND6_LLINFO_NOSTATE) { in nd6_output_list()
4237 ND6_CACHE_STATE_TRANSITION(ln, ND6_LLINFO_INCOMPLETE); in nd6_output_list()
4239 if (ln->ln_hold) { in nd6_output_list()
4240 m_freem_list(ln->ln_hold); in nd6_output_list()
4242 ln->ln_hold = m0; in nd6_output_list()
4243 if (!ND6_LLINFO_PERMANENT(ln) && ln->ln_asked == 0) { in nd6_output_list()
4244 ln->ln_asked++; in nd6_output_list()
4248 ln_setexpire(ln, timenow + ndi->retrans / 1000); in nd6_output_list()
4254 &dst->sin6_addr, ln); in nd6_output_list()
4256 nd6_ns_output(ifp, NULL, &dst->sin6_addr, ln, NULL, 0); in nd6_output_list()
4272 if (ln->ln_expire != 0 && ip6_neighborgcthresh > 0 && in nd6_output_list()
4276 if (ln->ln_flags & ND6_LNF_IN_USE) { in nd6_output_list()
4277 LN_DEQUEUE(ln); in nd6_output_list()
4278 LN_INSERTHEAD(ln); in nd6_output_list()