Lines Matching refs:ln
322 struct llinfo_nd6 *__single ln = arg; in nd6_llinfo_free() local
324 if (ln->ln_next != NULL || ln->ln_prev != NULL) { in nd6_llinfo_free()
325 panic("%s: trying to free %p when it is in use", __func__, ln); in nd6_llinfo_free()
330 if (ln->ln_hold != NULL) { in nd6_llinfo_free()
331 m_freem_list(ln->ln_hold); in nd6_llinfo_free()
332 ln->ln_hold = NULL; in nd6_llinfo_free()
336 VERIFY(ln->ln_rt->rt_llinfo == ln); in nd6_llinfo_free()
337 if (ln->ln_rt->rt_llinfo_purge != NULL) { in nd6_llinfo_free()
338 ln->ln_rt->rt_llinfo_purge(ln->ln_rt); in nd6_llinfo_free()
341 zfree(llinfo_nd6_zone, ln); in nd6_llinfo_free()
347 struct llinfo_nd6 *__single ln = rt->rt_llinfo; in nd6_llinfo_purge() local
350 VERIFY(rt->rt_llinfo_purge == nd6_llinfo_purge && ln != NULL); in nd6_llinfo_purge()
352 if (ln->ln_llreach != NULL) { in nd6_llinfo_purge()
354 ifnet_llreach_free(ln->ln_llreach); in nd6_llinfo_purge()
355 ln->ln_llreach = NULL; in nd6_llinfo_purge()
357 ln->ln_lastused = 0; in nd6_llinfo_purge()
363 struct llinfo_nd6 *__single ln = rt->rt_llinfo; in nd6_llinfo_get_ri() local
364 struct if_llreach *__single lr = ln->ln_llreach; in nd6_llinfo_get_ri()
377 ifnet_llreach_up2calexp(lr, ln->ln_lastused); in nd6_llinfo_get_ri()
385 struct llinfo_nd6 *__single ln = rt->rt_llinfo; in nd6_llinfo_get_iflri() local
386 struct if_llreach *__single lr = ln->ln_llreach; in nd6_llinfo_get_iflri()
399 ifnet_llreach_up2upexp(lr, ln->ln_lastused); in nd6_llinfo_get_iflri()
407 struct llinfo_nd6 *__single ln = rt->rt_llinfo; in nd6_llinfo_refresh() local
416 if (!ln || ln->ln_expire == 0 || (rt->rt_flags & RTF_STATIC) || in nd6_llinfo_refresh()
422 if ((ln->ln_state > ND6_LLINFO_INCOMPLETE) && in nd6_llinfo_refresh()
423 (ln->ln_state < ND6_LLINFO_PROBE)) { in nd6_llinfo_refresh()
424 if (ln->ln_expire > timenow) { in nd6_llinfo_refresh()
425 ln_setexpire(ln, timenow); in nd6_llinfo_refresh()
426 ND6_CACHE_STATE_TRANSITION(ln, ND6_LLINFO_PROBE); in nd6_llinfo_refresh()
466 ln_setexpire(struct llinfo_nd6 *ln, uint64_t expiry) in ln_setexpire() argument
468 ln->ln_expire = expiry; in ln_setexpire()
472 ln_getexpire(struct llinfo_nd6 *ln) in ln_getexpire() argument
477 if (ln->ln_expire != 0) { in ln_getexpire()
478 rtentry_ref_t rt = ln->ln_rt; in ln_getexpire()
489 ln->ln_expire - rt->base_uptime; in ln_getexpire()
791 struct llinfo_nd6 *__single ln; in nd6_service_neighbor_cache() local
857 ln = llinfo_nd6.ln_next; in nd6_service_neighbor_cache()
858 while (ln != NULL && ln != &llinfo_nd6) { in nd6_service_neighbor_cache()
867 next = ln->ln_next; in nd6_service_neighbor_cache()
868 rt = ln->ln_rt; in nd6_service_neighbor_cache()
872 if (ln->ln_flags & ND6_LNF_TIMER_SKIP) { in nd6_service_neighbor_cache()
874 ln = next; in nd6_service_neighbor_cache()
882 ln, rt); in nd6_service_neighbor_cache()
887 if ((struct llinfo_nd6 *)rt->rt_llinfo != ln) { in nd6_service_neighbor_cache()
889 __func__, rt->rt_llinfo, ln); in nd6_service_neighbor_cache()
897 rt, ln); in nd6_service_neighbor_cache()
902 ln->ln_flags |= ND6_LNF_TIMER_SKIP; in nd6_service_neighbor_cache()
909 if (ln->ln_expire == 0 || (rt->rt_flags & RTF_STATIC) || in nd6_service_neighbor_cache()
917 if (ln->ln_state > ND6_LLINFO_INCOMPLETE) { in nd6_service_neighbor_cache()
918 ND6_CACHE_STATE_TRANSITION(ln, (short)ND6_LLINFO_STALE); in nd6_service_neighbor_cache()
920 ND6_CACHE_STATE_TRANSITION(ln, ND6_LLINFO_PURGE); in nd6_service_neighbor_cache()
922 ln_setexpire(ln, timenow); in nd6_service_neighbor_cache()
931 if (ln->ln_expire > timenow) { in nd6_service_neighbor_cache()
932 switch (ln->ln_state) { in nd6_service_neighbor_cache()
941 ln = next; in nd6_service_neighbor_cache()
953 ln = next; in nd6_service_neighbor_cache()
963 switch (ln->ln_state) { in nd6_service_neighbor_cache()
965 if (ln->ln_asked < nd6_mmaxtries) { in nd6_service_neighbor_cache()
966 ifnet_ref_t exclifp = ln->ln_exclifp; in nd6_service_neighbor_cache()
967 ln->ln_asked++; in nd6_service_neighbor_cache()
968 ln_setexpire(ln, timenow + retrans / 1000); in nd6_service_neighbor_cache()
974 NULL, &dst->sin6_addr, ln); in nd6_service_neighbor_cache()
977 &dst->sin6_addr, ln, NULL, 0); in nd6_service_neighbor_cache()
983 mbuf_ref_t m = ln->ln_hold; in nd6_service_neighbor_cache()
984 ln->ln_hold = NULL; in nd6_service_neighbor_cache()
1038 if (ln->ln_expire != 0) { in nd6_service_neighbor_cache()
1039 ND6_CACHE_STATE_TRANSITION(ln, ND6_LLINFO_STALE); in nd6_service_neighbor_cache()
1040 ln_setexpire(ln, timenow + nd6_gctimer); in nd6_service_neighbor_cache()
1065 if (ln->ln_expire != 0) { in nd6_service_neighbor_cache()
1082 ln->ln_asked = 1; in nd6_service_neighbor_cache()
1083 ND6_CACHE_STATE_TRANSITION(ln, ND6_LLINFO_PROBE); in nd6_service_neighbor_cache()
1084 ln_setexpire(ln, timenow + retrans / 1000); in nd6_service_neighbor_cache()
1089 &dst->sin6_addr, ln, NULL, 0); in nd6_service_neighbor_cache()
1095 ND6_CACHE_STATE_TRANSITION(ln, ND6_LLINFO_STALE); /* XXX */ in nd6_service_neighbor_cache()
1096 ln_setexpire(ln, timenow + nd6_gctimer); in nd6_service_neighbor_cache()
1102 if (ln->ln_asked < nd6_umaxtries) { in nd6_service_neighbor_cache()
1103 ln->ln_asked++; in nd6_service_neighbor_cache()
1104 ln_setexpire(ln, timenow + retrans / 1000); in nd6_service_neighbor_cache()
1109 &dst->sin6_addr, ln, NULL, 0); in nd6_service_neighbor_cache()
1156 ln = next; in nd6_service_neighbor_cache()
1161 ln = llinfo_nd6.ln_next; in nd6_service_neighbor_cache()
1162 while (ln != NULL && ln != &llinfo_nd6) { in nd6_service_neighbor_cache()
1163 rtentry_ref_t rt = ln->ln_rt; in nd6_service_neighbor_cache()
1164 struct llinfo_nd6 *__single next = ln->ln_next; in nd6_service_neighbor_cache()
1167 if (ln->ln_flags & ND6_LNF_TIMER_SKIP) { in nd6_service_neighbor_cache()
1168 ln->ln_flags &= ~ND6_LNF_TIMER_SKIP; in nd6_service_neighbor_cache()
1171 ln = next; in nd6_service_neighbor_cache()
2248 struct llinfo_nd6 *__single ln = NULL; in nd6_purge_interface_llinfo() local
2255 ln = llinfo_nd6.ln_next; in nd6_purge_interface_llinfo()
2256 while (ln != NULL && ln != &llinfo_nd6) { in nd6_purge_interface_llinfo()
2260 nln = ln->ln_next; in nd6_purge_interface_llinfo()
2261 rt = ln->ln_rt; in nd6_purge_interface_llinfo()
2285 ln = nln; in nd6_purge_interface_llinfo()
2427 struct llinfo_nd6 *__single ln = rt->rt_llinfo; in nd6_lookup() local
2449 ND6_CACHE_STATE_TRANSITION(ln, ND6_LLINFO_NOSTATE); in nd6_lookup()
2451 ND6_CACHE_STATE_TRANSITION(ln, ND6_LLINFO_REACHABLE); in nd6_lookup()
2452 ln_setexpire(ln, 0); in nd6_lookup()
2623 struct llinfo_nd6 *__single ln = NULL; in nd6_free() local
2633 ln = rt->rt_llinfo; in nd6_free()
2651 if ((ln && ln->ln_router) || dr) { in nd6_free()
2681 ND6_CACHE_STATE_TRANSITION(ln, ND6_LLINFO_INCOMPLETE); in nd6_free()
2718 struct llinfo_nd6 *__single ln = rt->rt_llinfo; in nd6_rtrequest() local
2821 ((rt->rt_flags & RTF_LLINFO) && ln == NULL)) { in nd6_rtrequest()
2836 if (ln != NULL) { in nd6_rtrequest()
2837 ln_setexpire(ln, in nd6_rtrequest()
2888 if (ln != NULL) { in nd6_rtrequest()
2895 rt->rt_llinfo = ln = nd6_llinfo_alloc(Z_WAITOK); in nd6_rtrequest()
2904 ln->ln_rt = rt; in nd6_rtrequest()
2917 ND6_CACHE_STATE_TRANSITION(ln, ND6_LLINFO_REACHABLE); in nd6_rtrequest()
2918 ln_setexpire(ln, 0); in nd6_rtrequest()
2924 ND6_CACHE_STATE_TRANSITION(ln, ND6_LLINFO_NOSTATE); in nd6_rtrequest()
2926 ln_setexpire(ln, (ifp->if_eflags & IFEF_IPV6_ND6ALT) ? in nd6_rtrequest()
2929 LN_INSERTHEAD(ln); in nd6_rtrequest()
2946 for (i = 0; i < 10 && llinfo_nd6.ln_prev != ln; i++) { in nd6_rtrequest()
2977 ln_setexpire(ln, 0); in nd6_rtrequest()
2978 ND6_CACHE_STATE_TRANSITION(ln, ND6_LLINFO_REACHABLE); in nd6_rtrequest()
3024 ln_setexpire(ln, 0); in nd6_rtrequest()
3025 ND6_CACHE_STATE_TRANSITION(ln, ND6_LLINFO_REACHABLE); in nd6_rtrequest()
3055 if (ln == NULL) { in nd6_rtrequest()
3086 if (ln->ln_flags & ND6_LNF_IN_USE) { in nd6_rtrequest()
3087 LN_DEQUEUE(ln); in nd6_rtrequest()
3098 if (ln->ln_hold != NULL) { in nd6_rtrequest()
3099 m_freem_list(ln->ln_hold); in nd6_rtrequest()
3100 ln->ln_hold = NULL; in nd6_rtrequest()
3342 struct llinfo_nd6 *__single ln; in nd6_ioctl() local
3368 ln = rt->rt_llinfo; in nd6_ioctl()
3369 nbi_32.state = ln->ln_state; in nd6_ioctl()
3370 nbi_32.asked = ln->ln_asked; in nd6_ioctl()
3371 nbi_32.isrouter = ln->ln_router; in nd6_ioctl()
3372 nbi_32.expire = (int)ln_getexpire(ln); in nd6_ioctl()
3380 struct llinfo_nd6 *__single ln; in nd6_ioctl() local
3406 ln = rt->rt_llinfo; in nd6_ioctl()
3407 nbi_64.state = ln->ln_state; in nd6_ioctl()
3408 nbi_64.asked = ln->ln_asked; in nd6_ioctl()
3409 nbi_64.isrouter = ln->ln_router; in nd6_ioctl()
3410 nbi_64.expire = (int)ln_getexpire(ln); in nd6_ioctl()
3525 struct llinfo_nd6 *__single ln = NULL; in nd6_cache_lladdr() local
3583 ln = (struct llinfo_nd6 *)rt->rt_llinfo; in nd6_cache_lladdr()
3584 if (ln == NULL) { in nd6_cache_lladdr()
3657 ln_setexpire(ln, 0); in nd6_cache_lladdr()
3664 ND6_CACHE_STATE_TRANSITION(ln, newstate); in nd6_cache_lladdr()
3666 if ((ln->ln_state == ND6_LLINFO_STALE) || in nd6_cache_lladdr()
3667 (ln->ln_state == ND6_LLINFO_REACHABLE)) { in nd6_cache_lladdr()
3668 mbuf_ref_t m = ln->ln_hold; in nd6_cache_lladdr()
3675 if (ln->ln_state == ND6_LLINFO_STALE) { in nd6_cache_lladdr()
3676 ln_setexpire(ln, timenow + nd6_gctimer); in nd6_cache_lladdr()
3679 ln->ln_hold = NULL; in nd6_cache_lladdr()
3692 } else if (ln->ln_state == ND6_LLINFO_INCOMPLETE) { in nd6_cache_lladdr()
3694 ln_setexpire(ln, timenow); in nd6_cache_lladdr()
3734 ln->ln_router = 0; in nd6_cache_lladdr()
3744 ln->ln_router = 1; in nd6_cache_lladdr()
3746 ln->ln_router = 0; in nd6_cache_lladdr()
3753 ln->ln_router = 0; in nd6_cache_lladdr()
3761 ln->ln_router = 1; in nd6_cache_lladdr()
3780 if (ln->ln_router || (rt->rt_flags & RTF_ROUTER)) { in nd6_cache_lladdr()
3820 if (do_update && ln->ln_router) { in nd6_cache_lladdr()
3895 struct llinfo_nd6 *__single ln = NULL; in nd6_output_list() local
4116 ln = rt->rt_llinfo; in nd6_output_list()
4150 ln = rt->rt_llinfo; in nd6_output_list()
4157 if (!ln || !rt) { in nd6_output_list()
4171 (uint64_t)VM_KERNEL_ADDRPERM(ln), in nd6_output_list()
4186 ln->ln_state < ND6_LLINFO_REACHABLE) { in nd6_output_list()
4187 ND6_CACHE_STATE_TRANSITION(ln, ND6_LLINFO_STALE); in nd6_output_list()
4188 ln_setexpire(ln, timenow + nd6_gctimer); in nd6_output_list()
4198 if (ln->ln_state == ND6_LLINFO_STALE) { in nd6_output_list()
4199 ln->ln_asked = 0; in nd6_output_list()
4200 ND6_CACHE_STATE_TRANSITION(ln, ND6_LLINFO_DELAY); in nd6_output_list()
4201 ln_setexpire(ln, timenow + nd6_delay); in nd6_output_list()
4211 if (ln->ln_state > ND6_LLINFO_INCOMPLETE) { in nd6_output_list()
4221 if (ln->ln_state == ND6_LLINFO_DELAY || in nd6_output_list()
4222 (ln->ln_expire != 0 && ip6_neighborgcthresh > 0 && in nd6_output_list()
4225 if (ln->ln_state == ND6_LLINFO_DELAY) { in nd6_output_list()
4228 if (ln->ln_expire != 0 && ip6_neighborgcthresh > 0 && in nd6_output_list()
4231 if (ln->ln_flags & ND6_LNF_IN_USE) { in nd6_output_list()
4232 LN_DEQUEUE(ln); in nd6_output_list()
4233 LN_INSERTHEAD(ln); in nd6_output_list()
4248 ln->ln_exclifp = ((origifp == ifp) ? NULL : origifp); in nd6_output_list()
4260 if (ln->ln_state == ND6_LLINFO_NOSTATE) { in nd6_output_list()
4261 ND6_CACHE_STATE_TRANSITION(ln, ND6_LLINFO_INCOMPLETE); in nd6_output_list()
4263 if (ln->ln_hold) { in nd6_output_list()
4264 m_freem_list(ln->ln_hold); in nd6_output_list()
4266 ln->ln_hold = m0; in nd6_output_list()
4267 if (!ND6_LLINFO_PERMANENT(ln) && ln->ln_asked == 0) { in nd6_output_list()
4268 ln->ln_asked++; in nd6_output_list()
4272 ln_setexpire(ln, timenow + ndi->retrans / 1000); in nd6_output_list()
4278 &dst->sin6_addr, ln); in nd6_output_list()
4280 nd6_ns_output(ifp, NULL, &dst->sin6_addr, ln, NULL, 0); in nd6_output_list()
4296 if (ln->ln_expire != 0 && ip6_neighborgcthresh > 0 && in nd6_output_list()
4300 if (ln->ln_flags & ND6_LNF_IN_USE) { in nd6_output_list()
4301 LN_DEQUEUE(ln); in nd6_output_list()
4302 LN_INSERTHEAD(ln); in nd6_output_list()