Lines Matching refs:ln
540 nd6_llinfo_settimer_locked(struct llentry *ln, long tick) in nd6_llinfo_settimer_locked() argument
544 LLE_WLOCK_ASSERT(ln); in nd6_llinfo_settimer_locked()
547 if (ln->la_flags & LLE_CHILD) in nd6_llinfo_settimer_locked()
551 ln->la_expire = 0; in nd6_llinfo_settimer_locked()
552 ln->ln_ntick = 0; in nd6_llinfo_settimer_locked()
553 canceled = callout_stop(&ln->lle_timer); in nd6_llinfo_settimer_locked()
555 ln->la_expire = time_uptime + tick / hz; in nd6_llinfo_settimer_locked()
556 LLE_ADDREF(ln); in nd6_llinfo_settimer_locked()
558 ln->ln_ntick = tick - INT_MAX; in nd6_llinfo_settimer_locked()
559 canceled = callout_reset(&ln->lle_timer, INT_MAX, in nd6_llinfo_settimer_locked()
560 nd6_llinfo_timer, ln); in nd6_llinfo_settimer_locked()
562 ln->ln_ntick = 0; in nd6_llinfo_settimer_locked()
563 canceled = callout_reset(&ln->lle_timer, tick, in nd6_llinfo_settimer_locked()
564 nd6_llinfo_timer, ln); in nd6_llinfo_settimer_locked()
568 LLE_REMREF(ln); in nd6_llinfo_settimer_locked()
579 nd6_llinfo_get_holdsrc(struct llentry *ln, struct in6_addr *src) in nd6_llinfo_get_holdsrc() argument
584 if (ln->la_hold == NULL) in nd6_llinfo_get_holdsrc()
590 m = ln->la_hold; in nd6_llinfo_get_holdsrc()
750 struct llentry *ln; in nd6_llinfo_timer() local
758 ln = (struct llentry *)arg; in nd6_llinfo_timer()
759 ifp = lltable_get_ifp(ln->lle_tbl); in nd6_llinfo_timer()
763 LLE_WLOCK(ln); in nd6_llinfo_timer()
764 if (callout_pending(&ln->lle_timer)) { in nd6_llinfo_timer()
781 LLE_WUNLOCK(ln); in nd6_llinfo_timer()
789 dst = &ln->r_l3addr.addr6; in nd6_llinfo_timer()
792 if (ln->ln_ntick > 0) { in nd6_llinfo_timer()
793 if (ln->ln_ntick > INT_MAX) { in nd6_llinfo_timer()
794 ln->ln_ntick -= INT_MAX; in nd6_llinfo_timer()
795 nd6_llinfo_settimer_locked(ln, INT_MAX); in nd6_llinfo_timer()
797 ln->ln_ntick = 0; in nd6_llinfo_timer()
798 nd6_llinfo_settimer_locked(ln, ln->ln_ntick); in nd6_llinfo_timer()
803 if (ln->la_flags & LLE_STATIC) { in nd6_llinfo_timer()
807 if (ln->la_flags & LLE_DELETED) { in nd6_llinfo_timer()
808 nd6_free(&ln, 0); in nd6_llinfo_timer()
812 switch (ln->ln_state) { in nd6_llinfo_timer()
814 if (ln->la_asked < V_nd6_mmaxtries) { in nd6_llinfo_timer()
815 ln->la_asked++; in nd6_llinfo_timer()
822 ICMP6STAT_ADD(icp6s_dropped, ln->la_numheld); in nd6_llinfo_timer()
824 m = ln->la_hold; in nd6_llinfo_timer()
830 ln->la_hold = m->m_nextpkt; in nd6_llinfo_timer()
832 ln->la_numheld--; in nd6_llinfo_timer()
834 nd6_free(&ln, 0); in nd6_llinfo_timer()
859 if (!ND6_LLINFO_PERMANENT(ln)) in nd6_llinfo_timer()
860 nd6_llinfo_setstate(ln, ND6_LLINFO_STALE); in nd6_llinfo_timer()
864 if (nd6_is_stale(ln, &delay, &do_switch) != 0) { in nd6_llinfo_timer()
870 nd6_llinfo_settimer_locked(ln, delay); in nd6_llinfo_timer()
879 if (!ND6_LLINFO_PERMANENT(ln)) in nd6_llinfo_timer()
880 nd6_free(&ln, 1); in nd6_llinfo_timer()
891 ln->la_asked = 1; in nd6_llinfo_timer()
892 nd6_llinfo_setstate(ln, ND6_LLINFO_PROBE); in nd6_llinfo_timer()
895 nd6_llinfo_setstate(ln, ND6_LLINFO_STALE); /* XXX */ in nd6_llinfo_timer()
898 if (ln->la_asked < V_nd6_umaxtries) { in nd6_llinfo_timer()
899 ln->la_asked++; in nd6_llinfo_timer()
902 nd6_free(&ln, 0); in nd6_llinfo_timer()
907 __func__, ln->ln_state); in nd6_llinfo_timer()
910 if (ln != NULL) in nd6_llinfo_timer()
913 nd6_llinfo_settimer_locked(ln, (long)ndi->retrans * hz / 1000); in nd6_llinfo_timer()
914 psrc = nd6_llinfo_get_holdsrc(ln, &src); in nd6_llinfo_timer()
915 LLE_FREE_LOCKED(ln); in nd6_llinfo_timer()
916 ln = NULL; in nd6_llinfo_timer()
920 if (ln != NULL) in nd6_llinfo_timer()
921 LLE_FREE_LOCKED(ln); in nd6_llinfo_timer()
1209 struct llentry *ln; in nd6_lookup() local
1218 ln = lla_lookup(LLTABLE6(ifp), flags, (struct sockaddr *)&sin6); in nd6_lookup()
1220 return (ln); in nd6_lookup()
1227 struct llentry *ln; in nd6_alloc() local
1234 ln = lltable_alloc_entry(LLTABLE6(ifp), 0, (struct sockaddr *)&sin6); in nd6_alloc()
1235 if (ln != NULL) in nd6_alloc()
1236 ln->ln_state = ND6_LLINFO_NOSTATE; in nd6_alloc()
1238 return (ln); in nd6_alloc()
1433 struct llentry *ln; in nd6_free() local
1436 ln = *lnp; in nd6_free()
1439 LLE_WLOCK_ASSERT(ln); in nd6_free()
1442 KASSERT((ln->la_flags & LLE_CHILD) == 0, ("child lle")); in nd6_free()
1444 ifp = lltable_get_ifp(ln->lle_tbl); in nd6_free()
1446 dr = defrouter_lookup_locked(&ln->r_l3addr.addr6, ifp); in nd6_free()
1451 if ((ln->la_flags & LLE_DELETED) == 0) in nd6_free()
1452 EVENTHANDLER_INVOKE(lle_event, ln, LLENTRY_EXPIRED); in nd6_free()
1460 nd6_llinfo_settimer_locked(ln, -1); in nd6_free()
1464 ln->ln_state == ND6_LLINFO_STALE && gc) { in nd6_free()
1478 nd6_llinfo_settimer_locked(ln, in nd6_free()
1481 nd6_llinfo_settimer_locked(ln, in nd6_free()
1484 LLE_REMREF(ln); in nd6_free()
1485 LLE_WUNLOCK(ln); in nd6_free()
1504 ln->ln_state = ND6_LLINFO_INCOMPLETE; in nd6_free()
1507 if (ln->ln_router || dr) { in nd6_free()
1514 LLE_WUNLOCK(ln); in nd6_free()
1521 rt6_flush(&ln->r_l3addr.addr6, ifp); in nd6_free()
1543 if (ln->la_flags & LLE_REDIRECT) in nd6_free()
1544 nd6_free_redirect(ln); in nd6_free()
1546 if (ln->ln_router || dr) in nd6_free()
1547 LLE_WLOCK(ln); in nd6_free()
1554 LLE_WUNLOCK(ln); in nd6_free()
1556 LLE_WLOCK(ln); in nd6_free()
1558 if (ln->la_flags & LLE_LINKED) { in nd6_free()
1560 LLE_REMREF(ln); in nd6_free()
1561 lltable_unlink_entry(ln->lle_tbl, ln); in nd6_free()
1565 nd6_free_children(ln); in nd6_free()
1567 llentry_free(ln); in nd6_free()
1587 nd6_free_redirect(const struct llentry *ln) in nd6_free_redirect() argument
1594 lltable_fill_sa_entry(ln, (struct sockaddr *)&sin6); in nd6_free_redirect()
1830 struct llentry *ln; in nd6_ioctl() local
1837 ln = nd6_lookup(&nb_addr, LLE_SF(AF_INET6, 0), ifp); in nd6_ioctl()
1840 if (ln == NULL) { in nd6_ioctl()
1844 nbi->state = ln->ln_state; in nd6_ioctl()
1845 nbi->asked = ln->la_asked; in nd6_ioctl()
1846 nbi->isrouter = ln->ln_router; in nd6_ioctl()
1847 if (ln->la_expire == 0) in nd6_ioctl()
1850 nbi->expire = ln->la_expire + ln->lle_remtime / hz + in nd6_ioctl()
1852 LLE_RUNLOCK(ln); in nd6_ioctl()
1955 struct llentry *ln = NULL, *ln_tmp; in nd6_cache_lladdr() local
1987 ln = nd6_lookup(from, LLE_SF(AF_INET6, flags), ifp); in nd6_cache_lladdr()
1989 if (ln == NULL) { in nd6_cache_lladdr()
1991 ln = nd6_alloc(from, 0, ifp); in nd6_cache_lladdr()
1992 if (ln == NULL) in nd6_cache_lladdr()
2003 lltable_free_entry(LLTABLE6(ifp), ln); in nd6_cache_lladdr()
2006 lltable_set_entry_addr(ifp, ln, linkhdr, linkhdrsize, in nd6_cache_lladdr()
2011 LLE_WLOCK(ln); in nd6_cache_lladdr()
2015 lltable_link_entry(LLTABLE6(ifp), ln); in nd6_cache_lladdr()
2021 nd6_llinfo_setstate(ln, ND6_LLINFO_STALE); in nd6_cache_lladdr()
2022 EVENTHANDLER_INVOKE(lle_event, ln, in nd6_cache_lladdr()
2026 lltable_free_entry(LLTABLE6(ifp), ln); in nd6_cache_lladdr()
2027 ln = ln_tmp; in nd6_cache_lladdr()
2032 if ((ln->la_flags & LLE_STATIC)) { in nd6_cache_lladdr()
2034 LLE_WUNLOCK(ln); in nd6_cache_lladdr()
2036 LLE_RUNLOCK(ln); in nd6_cache_lladdr()
2040 olladdr = (ln->la_flags & LLE_VALID) ? 1 : 0; in nd6_cache_lladdr()
2042 llchange = bcmp(lladdr, ln->ll_addr, in nd6_cache_lladdr()
2068 if (!nd6_try_set_entry_addr(ifp, ln, lladdr)) { in nd6_cache_lladdr()
2070 LLE_WUNLOCK(ln); in nd6_cache_lladdr()
2074 nd6_llinfo_setstate(ln, ND6_LLINFO_STALE); in nd6_cache_lladdr()
2076 EVENTHANDLER_INVOKE(lle_event, ln, LLENTRY_RESOLVED); in nd6_cache_lladdr()
2078 if (ln->la_hold != NULL) in nd6_cache_lladdr()
2079 chain = nd6_grab_holdchain(ln); in nd6_cache_lladdr()
2084 lladdr != NULL ? 1 : 0, ln->ln_router); in nd6_cache_lladdr()
2086 ln->ln_router = router; in nd6_cache_lladdr()
2089 ln->la_flags |= LLE_REDIRECT; in nd6_cache_lladdr()
2092 LLE_WUNLOCK(ln); in nd6_cache_lladdr()
2094 LLE_RUNLOCK(ln); in nd6_cache_lladdr()
2097 nd6_flush_holdchain(ifp, ln, chain); in nd6_cache_lladdr()
2099 nd6_flush_children_holdchain(ifp, ln); in nd6_cache_lladdr()
2157 nd6_grab_holdchain(struct llentry *ln) in nd6_grab_holdchain() argument
2161 LLE_WLOCK_ASSERT(ln); in nd6_grab_holdchain()
2163 chain = ln->la_hold; in nd6_grab_holdchain()
2164 ln->la_hold = NULL; in nd6_grab_holdchain()
2165 ln->la_numheld = 0; in nd6_grab_holdchain()
2167 if (ln->ln_state == ND6_LLINFO_STALE) { in nd6_grab_holdchain()
2177 nd6_llinfo_setstate(ln, ND6_LLINFO_DELAY); in nd6_grab_holdchain()
2246 struct llentry *ln = NULL; in nd6_resolve() local
2278 ln = nd6_lookup(&dst6->sin6_addr, LLE_SF(family, lookup_flags), ifp); in nd6_resolve()
2279 if (ln != NULL && (ln->r_flags & RLLE_VALID) != 0) { in nd6_resolve()
2281 bcopy(ln->r_linkdata, desten, ln->r_hdrlen); in nd6_resolve()
2283 *pflags = LLE_VALID | (ln->r_flags & RLLE_IFADDR); in nd6_resolve()
2284 llentry_provide_feedback(ln); in nd6_resolve()
2286 LLE_ADDREF(ln); in nd6_resolve()
2287 *plle = ln; in nd6_resolve()
2288 LLE_WUNLOCK(ln); in nd6_resolve()
2291 } else if (plle && ln) in nd6_resolve()
2292 LLE_WUNLOCK(ln); in nd6_resolve()
2597 struct llentry *ln, *ln_tmp; in nd6_add_ifa_lle() local
2605 ln = lltable_alloc_entry(LLTABLE6(ifp), LLE_IFADDR, dst); in nd6_add_ifa_lle()
2606 if (ln == NULL) in nd6_add_ifa_lle()
2610 LLE_WLOCK(ln); in nd6_add_ifa_lle()
2615 lltable_link_entry(LLTABLE6(ifp), ln); in nd6_add_ifa_lle()
2620 EVENTHANDLER_INVOKE(lle_event, ln, LLENTRY_RESOLVED); in nd6_add_ifa_lle()
2622 LLE_WUNLOCK(ln); in nd6_add_ifa_lle()