Lines Matching refs:ln

317 	struct llinfo_nd6 *ln = arg;  in nd6_llinfo_free()  local
319 if (ln->ln_next != NULL || ln->ln_prev != NULL) { in nd6_llinfo_free()
320 panic("%s: trying to free %p when it is in use", __func__, ln); in nd6_llinfo_free()
325 if (ln->ln_hold != NULL) { in nd6_llinfo_free()
326 m_freem_list(ln->ln_hold); in nd6_llinfo_free()
327 ln->ln_hold = NULL; in nd6_llinfo_free()
331 VERIFY(ln->ln_rt->rt_llinfo == ln); in nd6_llinfo_free()
332 if (ln->ln_rt->rt_llinfo_purge != NULL) { in nd6_llinfo_free()
333 ln->ln_rt->rt_llinfo_purge(ln->ln_rt); in nd6_llinfo_free()
336 zfree(llinfo_nd6_zone, ln); in nd6_llinfo_free()
342 struct llinfo_nd6 *ln = rt->rt_llinfo; in nd6_llinfo_purge() local
345 VERIFY(rt->rt_llinfo_purge == nd6_llinfo_purge && ln != NULL); in nd6_llinfo_purge()
347 if (ln->ln_llreach != NULL) { in nd6_llinfo_purge()
349 ifnet_llreach_free(ln->ln_llreach); in nd6_llinfo_purge()
350 ln->ln_llreach = NULL; in nd6_llinfo_purge()
352 ln->ln_lastused = 0; in nd6_llinfo_purge()
358 struct llinfo_nd6 *ln = rt->rt_llinfo; in nd6_llinfo_get_ri() local
359 struct if_llreach *lr = ln->ln_llreach; in nd6_llinfo_get_ri()
372 ifnet_llreach_up2calexp(lr, ln->ln_lastused); in nd6_llinfo_get_ri()
380 struct llinfo_nd6 *ln = rt->rt_llinfo; in nd6_llinfo_get_iflri() local
381 struct if_llreach *lr = ln->ln_llreach; in nd6_llinfo_get_iflri()
394 ifnet_llreach_up2upexp(lr, ln->ln_lastused); in nd6_llinfo_get_iflri()
402 struct llinfo_nd6 *ln = rt->rt_llinfo; in nd6_llinfo_refresh() local
411 if (!ln || ln->ln_expire == 0 || (rt->rt_flags & RTF_STATIC) || in nd6_llinfo_refresh()
417 if ((ln->ln_state > ND6_LLINFO_INCOMPLETE) && in nd6_llinfo_refresh()
418 (ln->ln_state < ND6_LLINFO_PROBE)) { in nd6_llinfo_refresh()
419 if (ln->ln_expire > timenow) { in nd6_llinfo_refresh()
420 ln_setexpire(ln, timenow); in nd6_llinfo_refresh()
421 ND6_CACHE_STATE_TRANSITION(ln, ND6_LLINFO_PROBE); in nd6_llinfo_refresh()
461 ln_setexpire(struct llinfo_nd6 *ln, uint64_t expiry) in ln_setexpire() argument
463 ln->ln_expire = expiry; in ln_setexpire()
467 ln_getexpire(struct llinfo_nd6 *ln) in ln_getexpire() argument
472 if (ln->ln_expire != 0) { in ln_getexpire()
473 struct rtentry *rt = ln->ln_rt; in ln_getexpire()
484 ln->ln_expire - rt->base_uptime; in ln_getexpire()
777 struct llinfo_nd6 *ln; in nd6_service_neighbor_cache() local
843 ln = llinfo_nd6.ln_next; in nd6_service_neighbor_cache()
844 while (ln != NULL && ln != &llinfo_nd6) { in nd6_service_neighbor_cache()
853 next = ln->ln_next; in nd6_service_neighbor_cache()
854 rt = ln->ln_rt; in nd6_service_neighbor_cache()
858 if (ln->ln_flags & ND6_LNF_TIMER_SKIP) { in nd6_service_neighbor_cache()
860 ln = next; in nd6_service_neighbor_cache()
868 ln, rt); in nd6_service_neighbor_cache()
873 if ((struct llinfo_nd6 *)rt->rt_llinfo != ln) { in nd6_service_neighbor_cache()
875 __func__, rt->rt_llinfo, ln); in nd6_service_neighbor_cache()
883 rt, ln); in nd6_service_neighbor_cache()
888 ln->ln_flags |= ND6_LNF_TIMER_SKIP; in nd6_service_neighbor_cache()
895 if (ln->ln_expire == 0 || (rt->rt_flags & RTF_STATIC) || in nd6_service_neighbor_cache()
903 if (ln->ln_state > ND6_LLINFO_INCOMPLETE) { in nd6_service_neighbor_cache()
904 ND6_CACHE_STATE_TRANSITION(ln, (short)ND6_LLINFO_STALE); in nd6_service_neighbor_cache()
906 ND6_CACHE_STATE_TRANSITION(ln, ND6_LLINFO_PURGE); in nd6_service_neighbor_cache()
908 ln_setexpire(ln, timenow); in nd6_service_neighbor_cache()
917 if (ln->ln_expire > timenow) { in nd6_service_neighbor_cache()
918 switch (ln->ln_state) { in nd6_service_neighbor_cache()
927 ln = next; in nd6_service_neighbor_cache()
939 ln = next; in nd6_service_neighbor_cache()
949 switch (ln->ln_state) { in nd6_service_neighbor_cache()
951 if (ln->ln_asked < nd6_mmaxtries) { in nd6_service_neighbor_cache()
952 struct ifnet *exclifp = ln->ln_exclifp; in nd6_service_neighbor_cache()
953 ln->ln_asked++; in nd6_service_neighbor_cache()
954 ln_setexpire(ln, timenow + retrans / 1000); in nd6_service_neighbor_cache()
960 NULL, &dst->sin6_addr, ln); in nd6_service_neighbor_cache()
963 &dst->sin6_addr, ln, NULL); in nd6_service_neighbor_cache()
969 struct mbuf *m = ln->ln_hold; in nd6_service_neighbor_cache()
970 ln->ln_hold = NULL; in nd6_service_neighbor_cache()
1024 if (ln->ln_expire != 0) { in nd6_service_neighbor_cache()
1025 ND6_CACHE_STATE_TRANSITION(ln, ND6_LLINFO_STALE); in nd6_service_neighbor_cache()
1026 ln_setexpire(ln, timenow + nd6_gctimer); in nd6_service_neighbor_cache()
1051 if (ln->ln_expire != 0) { in nd6_service_neighbor_cache()
1068 ln->ln_asked = 1; in nd6_service_neighbor_cache()
1069 ND6_CACHE_STATE_TRANSITION(ln, ND6_LLINFO_PROBE); in nd6_service_neighbor_cache()
1070 ln_setexpire(ln, timenow + retrans / 1000); in nd6_service_neighbor_cache()
1075 &dst->sin6_addr, ln, NULL); in nd6_service_neighbor_cache()
1081 ND6_CACHE_STATE_TRANSITION(ln, ND6_LLINFO_STALE); /* XXX */ in nd6_service_neighbor_cache()
1082 ln_setexpire(ln, timenow + nd6_gctimer); in nd6_service_neighbor_cache()
1088 if (ln->ln_asked < nd6_umaxtries) { in nd6_service_neighbor_cache()
1089 ln->ln_asked++; in nd6_service_neighbor_cache()
1090 ln_setexpire(ln, timenow + retrans / 1000); in nd6_service_neighbor_cache()
1095 &dst->sin6_addr, ln, NULL); in nd6_service_neighbor_cache()
1142 ln = next; in nd6_service_neighbor_cache()
1147 ln = llinfo_nd6.ln_next; in nd6_service_neighbor_cache()
1148 while (ln != NULL && ln != &llinfo_nd6) { in nd6_service_neighbor_cache()
1149 struct rtentry *rt = ln->ln_rt; in nd6_service_neighbor_cache()
1150 struct llinfo_nd6 *next = ln->ln_next; in nd6_service_neighbor_cache()
1153 if (ln->ln_flags & ND6_LNF_TIMER_SKIP) { in nd6_service_neighbor_cache()
1154 ln->ln_flags &= ~ND6_LNF_TIMER_SKIP; in nd6_service_neighbor_cache()
1157 ln = next; in nd6_service_neighbor_cache()
2227 struct llinfo_nd6 *ln = NULL; in nd6_purge_interface_llinfo() local
2234 ln = llinfo_nd6.ln_next; in nd6_purge_interface_llinfo()
2235 while (ln != NULL && ln != &llinfo_nd6) { in nd6_purge_interface_llinfo()
2239 nln = ln->ln_next; in nd6_purge_interface_llinfo()
2240 rt = ln->ln_rt; in nd6_purge_interface_llinfo()
2264 ln = nln; in nd6_purge_interface_llinfo()
2407 struct llinfo_nd6 *ln = rt->rt_llinfo; in nd6_lookup() local
2429 ND6_CACHE_STATE_TRANSITION(ln, ND6_LLINFO_NOSTATE); in nd6_lookup()
2431 ND6_CACHE_STATE_TRANSITION(ln, ND6_LLINFO_REACHABLE); in nd6_lookup()
2432 ln_setexpire(ln, 0); in nd6_lookup()
2603 struct llinfo_nd6 *ln = NULL; in nd6_free() local
2613 ln = rt->rt_llinfo; in nd6_free()
2631 if ((ln && ln->ln_router) || dr) { in nd6_free()
2661 ND6_CACHE_STATE_TRANSITION(ln, ND6_LLINFO_INCOMPLETE); in nd6_free()
2698 struct llinfo_nd6 *ln = rt->rt_llinfo; in nd6_rtrequest() local
2801 ((rt->rt_flags & RTF_LLINFO) && ln == NULL)) { in nd6_rtrequest()
2816 if (ln != NULL) { in nd6_rtrequest()
2817 ln_setexpire(ln, in nd6_rtrequest()
2868 if (ln != NULL) { in nd6_rtrequest()
2875 rt->rt_llinfo = ln = nd6_llinfo_alloc(Z_WAITOK); in nd6_rtrequest()
2884 ln->ln_rt = rt; in nd6_rtrequest()
2897 ND6_CACHE_STATE_TRANSITION(ln, ND6_LLINFO_REACHABLE); in nd6_rtrequest()
2898 ln_setexpire(ln, 0); in nd6_rtrequest()
2904 ND6_CACHE_STATE_TRANSITION(ln, ND6_LLINFO_NOSTATE); in nd6_rtrequest()
2906 ln_setexpire(ln, (ifp->if_eflags & IFEF_IPV6_ND6ALT) ? in nd6_rtrequest()
2909 LN_INSERTHEAD(ln); in nd6_rtrequest()
2926 for (i = 0; i < 10 && llinfo_nd6.ln_prev != ln; i++) { in nd6_rtrequest()
2957 ln_setexpire(ln, 0); in nd6_rtrequest()
2958 ND6_CACHE_STATE_TRANSITION(ln, ND6_LLINFO_REACHABLE); in nd6_rtrequest()
3004 ln_setexpire(ln, 0); in nd6_rtrequest()
3005 ND6_CACHE_STATE_TRANSITION(ln, ND6_LLINFO_REACHABLE); in nd6_rtrequest()
3035 if (ln == NULL) { in nd6_rtrequest()
3066 if (ln->ln_flags & ND6_LNF_IN_USE) { in nd6_rtrequest()
3067 LN_DEQUEUE(ln); in nd6_rtrequest()
3078 if (ln->ln_hold != NULL) { in nd6_rtrequest()
3079 m_freem_list(ln->ln_hold); in nd6_rtrequest()
3080 ln->ln_hold = NULL; in nd6_rtrequest()
3546 struct llinfo_nd6 *ln; in nd6_ioctl() local
3572 ln = rt->rt_llinfo; in nd6_ioctl()
3573 nbi_32.state = ln->ln_state; in nd6_ioctl()
3574 nbi_32.asked = ln->ln_asked; in nd6_ioctl()
3575 nbi_32.isrouter = ln->ln_router; in nd6_ioctl()
3576 nbi_32.expire = (int)ln_getexpire(ln); in nd6_ioctl()
3584 struct llinfo_nd6 *ln; in nd6_ioctl() local
3610 ln = rt->rt_llinfo; in nd6_ioctl()
3611 nbi_64.state = ln->ln_state; in nd6_ioctl()
3612 nbi_64.asked = ln->ln_asked; in nd6_ioctl()
3613 nbi_64.isrouter = ln->ln_router; in nd6_ioctl()
3614 nbi_64.expire = (int)ln_getexpire(ln); in nd6_ioctl()
3727 struct llinfo_nd6 *ln = NULL; in nd6_cache_lladdr() local
3785 ln = (struct llinfo_nd6 *)rt->rt_llinfo; in nd6_cache_lladdr()
3786 if (ln == NULL) { in nd6_cache_lladdr()
3859 ln_setexpire(ln, 0); in nd6_cache_lladdr()
3866 ND6_CACHE_STATE_TRANSITION(ln, newstate); in nd6_cache_lladdr()
3868 if ((ln->ln_state == ND6_LLINFO_STALE) || in nd6_cache_lladdr()
3869 (ln->ln_state == ND6_LLINFO_REACHABLE)) { in nd6_cache_lladdr()
3870 struct mbuf *m = ln->ln_hold; in nd6_cache_lladdr()
3877 if (ln->ln_state == ND6_LLINFO_STALE) { in nd6_cache_lladdr()
3878 ln_setexpire(ln, timenow + nd6_gctimer); in nd6_cache_lladdr()
3881 ln->ln_hold = NULL; in nd6_cache_lladdr()
3894 } else if (ln->ln_state == ND6_LLINFO_INCOMPLETE) { in nd6_cache_lladdr()
3896 ln_setexpire(ln, timenow); in nd6_cache_lladdr()
3936 ln->ln_router = 0; in nd6_cache_lladdr()
3946 ln->ln_router = 1; in nd6_cache_lladdr()
3948 ln->ln_router = 0; in nd6_cache_lladdr()
3955 ln->ln_router = 0; in nd6_cache_lladdr()
3963 ln->ln_router = 1; in nd6_cache_lladdr()
3980 if (ln->ln_router || (rt->rt_flags & RTF_ROUTER)) { in nd6_cache_lladdr()
4020 if (do_update && ln->ln_router) { in nd6_cache_lladdr()
4095 struct llinfo_nd6 *ln = NULL; in nd6_output_list() local
4310 ln = rt->rt_llinfo; in nd6_output_list()
4344 ln = rt->rt_llinfo; in nd6_output_list()
4351 if (!ln || !rt) { in nd6_output_list()
4365 (uint64_t)VM_KERNEL_ADDRPERM(ln), in nd6_output_list()
4379 ln->ln_state < ND6_LLINFO_REACHABLE) { in nd6_output_list()
4380 ND6_CACHE_STATE_TRANSITION(ln, ND6_LLINFO_STALE); in nd6_output_list()
4381 ln_setexpire(ln, timenow + nd6_gctimer); in nd6_output_list()
4391 if (ln->ln_state == ND6_LLINFO_STALE) { in nd6_output_list()
4392 ln->ln_asked = 0; in nd6_output_list()
4393 ND6_CACHE_STATE_TRANSITION(ln, ND6_LLINFO_DELAY); in nd6_output_list()
4394 ln_setexpire(ln, timenow + nd6_delay); in nd6_output_list()
4404 if (ln->ln_state > ND6_LLINFO_INCOMPLETE) { in nd6_output_list()
4414 if (ln->ln_state == ND6_LLINFO_DELAY || in nd6_output_list()
4415 (ln->ln_expire != 0 && ip6_neighborgcthresh > 0 && in nd6_output_list()
4418 if (ln->ln_state == ND6_LLINFO_DELAY) { in nd6_output_list()
4421 if (ln->ln_expire != 0 && ip6_neighborgcthresh > 0 && in nd6_output_list()
4424 if (ln->ln_flags & ND6_LNF_IN_USE) { in nd6_output_list()
4425 LN_DEQUEUE(ln); in nd6_output_list()
4426 LN_INSERTHEAD(ln); in nd6_output_list()
4441 ln->ln_exclifp = ((origifp == ifp) ? NULL : origifp); in nd6_output_list()
4453 if (ln->ln_state == ND6_LLINFO_NOSTATE) { in nd6_output_list()
4454 ND6_CACHE_STATE_TRANSITION(ln, ND6_LLINFO_INCOMPLETE); in nd6_output_list()
4456 if (ln->ln_hold) { in nd6_output_list()
4457 m_freem_list(ln->ln_hold); in nd6_output_list()
4459 ln->ln_hold = m0; in nd6_output_list()
4460 if (!ND6_LLINFO_PERMANENT(ln) && ln->ln_asked == 0) { in nd6_output_list()
4461 ln->ln_asked++; in nd6_output_list()
4465 ln_setexpire(ln, timenow + ndi->retrans / 1000); in nd6_output_list()
4471 &dst->sin6_addr, ln); in nd6_output_list()
4473 nd6_ns_output(ifp, NULL, &dst->sin6_addr, ln, NULL); in nd6_output_list()
4489 if (ln->ln_expire != 0 && ip6_neighborgcthresh > 0 && in nd6_output_list()
4493 if (ln->ln_flags & ND6_LNF_IN_USE) { in nd6_output_list()
4494 LN_DEQUEUE(ln); in nd6_output_list()
4495 LN_INSERTHEAD(ln); in nd6_output_list()