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()
2243 struct llinfo_nd6 *__single ln = NULL; in nd6_purge_interface_llinfo() local
2250 ln = llinfo_nd6.ln_next; in nd6_purge_interface_llinfo()
2251 while (ln != NULL && ln != &llinfo_nd6) { in nd6_purge_interface_llinfo()
2255 nln = ln->ln_next; in nd6_purge_interface_llinfo()
2256 rt = ln->ln_rt; in nd6_purge_interface_llinfo()
2280 ln = nln; in nd6_purge_interface_llinfo()
2422 struct llinfo_nd6 *__single ln = rt->rt_llinfo; in nd6_lookup() local
2444 ND6_CACHE_STATE_TRANSITION(ln, ND6_LLINFO_NOSTATE); in nd6_lookup()
2446 ND6_CACHE_STATE_TRANSITION(ln, ND6_LLINFO_REACHABLE); in nd6_lookup()
2447 ln_setexpire(ln, 0); in nd6_lookup()
2618 struct llinfo_nd6 *__single ln = NULL; in nd6_free() local
2628 ln = rt->rt_llinfo; in nd6_free()
2646 if ((ln && ln->ln_router) || dr) { in nd6_free()
2676 ND6_CACHE_STATE_TRANSITION(ln, ND6_LLINFO_INCOMPLETE); in nd6_free()
2713 struct llinfo_nd6 *__single ln = rt->rt_llinfo; in nd6_rtrequest() local
2816 ((rt->rt_flags & RTF_LLINFO) && ln == NULL)) { in nd6_rtrequest()
2831 if (ln != NULL) { in nd6_rtrequest()
2832 ln_setexpire(ln, in nd6_rtrequest()
2883 if (ln != NULL) { in nd6_rtrequest()
2890 rt->rt_llinfo = ln = nd6_llinfo_alloc(Z_WAITOK); in nd6_rtrequest()
2899 ln->ln_rt = rt; in nd6_rtrequest()
2912 ND6_CACHE_STATE_TRANSITION(ln, ND6_LLINFO_REACHABLE); in nd6_rtrequest()
2913 ln_setexpire(ln, 0); in nd6_rtrequest()
2919 ND6_CACHE_STATE_TRANSITION(ln, ND6_LLINFO_NOSTATE); in nd6_rtrequest()
2921 ln_setexpire(ln, (ifp->if_eflags & IFEF_IPV6_ND6ALT) ? in nd6_rtrequest()
2924 LN_INSERTHEAD(ln); in nd6_rtrequest()
2941 for (i = 0; i < 10 && llinfo_nd6.ln_prev != ln; i++) { in nd6_rtrequest()
2972 ln_setexpire(ln, 0); in nd6_rtrequest()
2973 ND6_CACHE_STATE_TRANSITION(ln, ND6_LLINFO_REACHABLE); in nd6_rtrequest()
3019 ln_setexpire(ln, 0); in nd6_rtrequest()
3020 ND6_CACHE_STATE_TRANSITION(ln, ND6_LLINFO_REACHABLE); in nd6_rtrequest()
3050 if (ln == NULL) { in nd6_rtrequest()
3081 if (ln->ln_flags & ND6_LNF_IN_USE) { in nd6_rtrequest()
3082 LN_DEQUEUE(ln); in nd6_rtrequest()
3093 if (ln->ln_hold != NULL) { in nd6_rtrequest()
3094 m_freem_list(ln->ln_hold); in nd6_rtrequest()
3095 ln->ln_hold = NULL; in nd6_rtrequest()
3334 struct llinfo_nd6 *__single ln; in nd6_ioctl() local
3360 ln = rt->rt_llinfo; in nd6_ioctl()
3361 nbi_32.state = ln->ln_state; in nd6_ioctl()
3362 nbi_32.asked = ln->ln_asked; in nd6_ioctl()
3363 nbi_32.isrouter = ln->ln_router; in nd6_ioctl()
3364 nbi_32.expire = (int)ln_getexpire(ln); in nd6_ioctl()
3372 struct llinfo_nd6 *__single ln; in nd6_ioctl() local
3398 ln = rt->rt_llinfo; in nd6_ioctl()
3399 nbi_64.state = ln->ln_state; in nd6_ioctl()
3400 nbi_64.asked = ln->ln_asked; in nd6_ioctl()
3401 nbi_64.isrouter = ln->ln_router; in nd6_ioctl()
3402 nbi_64.expire = (int)ln_getexpire(ln); in nd6_ioctl()
3517 struct llinfo_nd6 *__single ln = NULL; in nd6_cache_lladdr() local
3575 ln = (struct llinfo_nd6 *)rt->rt_llinfo; in nd6_cache_lladdr()
3576 if (ln == NULL) { in nd6_cache_lladdr()
3649 ln_setexpire(ln, 0); in nd6_cache_lladdr()
3656 ND6_CACHE_STATE_TRANSITION(ln, newstate); in nd6_cache_lladdr()
3658 if ((ln->ln_state == ND6_LLINFO_STALE) || in nd6_cache_lladdr()
3659 (ln->ln_state == ND6_LLINFO_REACHABLE)) { in nd6_cache_lladdr()
3660 mbuf_ref_t m = ln->ln_hold; in nd6_cache_lladdr()
3667 if (ln->ln_state == ND6_LLINFO_STALE) { in nd6_cache_lladdr()
3668 ln_setexpire(ln, timenow + nd6_gctimer); in nd6_cache_lladdr()
3671 ln->ln_hold = NULL; in nd6_cache_lladdr()
3684 } else if (ln->ln_state == ND6_LLINFO_INCOMPLETE) { in nd6_cache_lladdr()
3686 ln_setexpire(ln, timenow); in nd6_cache_lladdr()
3726 ln->ln_router = 0; in nd6_cache_lladdr()
3736 ln->ln_router = 1; in nd6_cache_lladdr()
3738 ln->ln_router = 0; in nd6_cache_lladdr()
3745 ln->ln_router = 0; in nd6_cache_lladdr()
3753 ln->ln_router = 1; in nd6_cache_lladdr()
3772 if (ln->ln_router || (rt->rt_flags & RTF_ROUTER)) { in nd6_cache_lladdr()
3812 if (do_update && ln->ln_router) { in nd6_cache_lladdr()
3887 struct llinfo_nd6 *__single ln = NULL; in nd6_output_list() local
4108 ln = rt->rt_llinfo; in nd6_output_list()
4142 ln = rt->rt_llinfo; in nd6_output_list()
4149 if (!ln || !rt) { in nd6_output_list()
4163 (uint64_t)VM_KERNEL_ADDRPERM(ln), in nd6_output_list()
4178 ln->ln_state < ND6_LLINFO_REACHABLE) { in nd6_output_list()
4179 ND6_CACHE_STATE_TRANSITION(ln, ND6_LLINFO_STALE); in nd6_output_list()
4180 ln_setexpire(ln, timenow + nd6_gctimer); in nd6_output_list()
4190 if (ln->ln_state == ND6_LLINFO_STALE) { in nd6_output_list()
4191 ln->ln_asked = 0; in nd6_output_list()
4192 ND6_CACHE_STATE_TRANSITION(ln, ND6_LLINFO_DELAY); in nd6_output_list()
4193 ln_setexpire(ln, timenow + nd6_delay); in nd6_output_list()
4203 if (ln->ln_state > ND6_LLINFO_INCOMPLETE) { in nd6_output_list()
4213 if (ln->ln_state == ND6_LLINFO_DELAY || in nd6_output_list()
4214 (ln->ln_expire != 0 && ip6_neighborgcthresh > 0 && in nd6_output_list()
4217 if (ln->ln_state == ND6_LLINFO_DELAY) { in nd6_output_list()
4220 if (ln->ln_expire != 0 && ip6_neighborgcthresh > 0 && in nd6_output_list()
4223 if (ln->ln_flags & ND6_LNF_IN_USE) { in nd6_output_list()
4224 LN_DEQUEUE(ln); in nd6_output_list()
4225 LN_INSERTHEAD(ln); in nd6_output_list()
4240 ln->ln_exclifp = ((origifp == ifp) ? NULL : origifp); in nd6_output_list()
4252 if (ln->ln_state == ND6_LLINFO_NOSTATE) { in nd6_output_list()
4253 ND6_CACHE_STATE_TRANSITION(ln, ND6_LLINFO_INCOMPLETE); in nd6_output_list()
4255 if (ln->ln_hold) { in nd6_output_list()
4256 m_freem_list(ln->ln_hold); in nd6_output_list()
4258 ln->ln_hold = m0; in nd6_output_list()
4259 if (!ND6_LLINFO_PERMANENT(ln) && ln->ln_asked == 0) { in nd6_output_list()
4260 ln->ln_asked++; in nd6_output_list()
4264 ln_setexpire(ln, timenow + ndi->retrans / 1000); in nd6_output_list()
4270 &dst->sin6_addr, ln); in nd6_output_list()
4272 nd6_ns_output(ifp, NULL, &dst->sin6_addr, ln, NULL, 0); in nd6_output_list()
4288 if (ln->ln_expire != 0 && ip6_neighborgcthresh > 0 && in nd6_output_list()
4292 if (ln->ln_flags & ND6_LNF_IN_USE) { in nd6_output_list()
4293 LN_DEQUEUE(ln); in nd6_output_list()
4294 LN_INSERTHEAD(ln); in nd6_output_list()