Lines Matching refs:lle
172 nd6_lle_event(void *arg __unused, struct llentry *lle, int evt) in nd6_lle_event() argument
181 LLE_WLOCK_ASSERT(lle); in nd6_lle_event()
183 if (lltable_get_af(lle->lle_tbl) != AF_INET6) in nd6_lle_event()
189 KASSERT(lle->la_flags & LLE_VALID, in nd6_lle_event()
190 ("%s: %p resolved but not valid?", __func__, lle)); in nd6_lle_event()
199 ifp = lltable_get_ifp(lle->lle_tbl); in nd6_lle_event()
204 lltable_fill_sa_entry(lle, (struct sockaddr *)&dst); in nd6_lle_event()
213 bcopy(lle->ll_addr, gw.sdl_data, ifp->if_addrlen); in nd6_lle_event()
635 nd6_is_stale(struct llentry *lle, long *pdelay, int *do_switch) in nd6_is_stale() argument
645 lle_hittime = llentry_get_hittime(lle); in nd6_is_stale()
655 if (lle->lle_remtime > delay) in nd6_is_stale()
656 lle->lle_remtime -= delay; in nd6_is_stale()
658 delay = lle->lle_remtime; in nd6_is_stale()
659 lle->lle_remtime = 0; in nd6_is_stale()
699 nd6_llinfo_setstate(struct llentry *lle, int newstate) in nd6_llinfo_setstate() argument
710 ifp = lle->lle_tbl->llt_ifp; in nd6_llinfo_setstate()
714 if (!ND6_LLINFO_PERMANENT(lle)) { in nd6_llinfo_setstate()
715 ifp = lle->lle_tbl->llt_ifp; in nd6_llinfo_setstate()
721 llentry_request_feedback(lle); in nd6_llinfo_setstate()
729 lle->la_asked = 0; in nd6_llinfo_setstate()
735 nd6_llinfo_settimer_locked(lle, delay); in nd6_llinfo_setstate()
737 lle->lle_remtime = remtime; in nd6_llinfo_setstate()
738 lle->ln_state = newstate; in nd6_llinfo_setstate()
1337 struct llentry *lle; in nd6_is_addr_neighbor() local
1349 if ((lle = nd6_lookup(&addr->sin6_addr, LLE_SF(AF_INET6, 0), ifp)) != NULL) { in nd6_is_addr_neighbor()
1350 LLE_RUNLOCK(lle); in nd6_is_addr_neighbor()
1357 nd6_free_children(struct llentry *lle) in nd6_free_children() argument
1362 LLE_WLOCK_ASSERT(lle); in nd6_free_children()
1364 while ((child_lle = CK_SLIST_FIRST(&lle->lle_children)) != NULL) { in nd6_free_children()
1378 nd6_try_set_entry_addr_locked(struct ifnet *ifp, struct llentry *lle, char *lladdr) in nd6_try_set_entry_addr_locked() argument
1389 lltable_set_entry_addr(ifp, lle, buf, sz, off); in nd6_try_set_entry_addr_locked()
1392 CK_SLIST_FOREACH(child_lle, &lle->lle_children, lle_child_next) { in nd6_try_set_entry_addr_locked()
1408 nd6_try_set_entry_addr(struct ifnet *ifp, struct llentry *lle, char *lladdr) in nd6_try_set_entry_addr() argument
1411 LLE_WLOCK_ASSERT(lle); in nd6_try_set_entry_addr()
1413 if (!lltable_acquire_wlock(ifp, lle)) in nd6_try_set_entry_addr()
1415 bool ret = nd6_try_set_entry_addr_locked(ifp, lle, lladdr); in nd6_try_set_entry_addr()
2313 struct llentry *lle, *lle_tmp; in nd6_get_llentry() local
2315 lle = nd6_alloc(addr, 0, ifp); in nd6_get_llentry()
2316 if (lle != NULL && family != AF_INET6) { in nd6_get_llentry()
2319 lltable_free_entry(LLTABLE6(ifp), lle); in nd6_get_llentry()
2327 if (lle == NULL) { in nd6_get_llentry()
2332 ip6_sprintf(ip6buf, addr), lle); in nd6_get_llentry()
2337 LLE_WLOCK(lle); in nd6_get_llentry()
2341 lltable_link_entry(LLTABLE6(ifp), lle); in nd6_get_llentry()
2343 lltable_free_entry(LLTABLE6(ifp), lle); in nd6_get_llentry()
2344 lle = lle_tmp; in nd6_get_llentry()
2348 lle_tmp = llentry_lookup_family(lle, child_lle->r_family); in nd6_get_llentry()
2352 lltable_link_child_entry(lle, child_lle); in nd6_get_llentry()
2359 LLE_WUNLOCK(lle); in nd6_get_llentry()
2360 lle = child_lle; in nd6_get_llentry()
2363 return (lle); in nd6_get_llentry()
2382 struct llentry *lle = NULL; in nd6_resolve_slow() local
2395 lle = nd6_lookup(&dst->sin6_addr, LLE_SF(family, LLE_EXCLUSIVE), ifp); in nd6_resolve_slow()
2396 if ((lle == NULL) && nd6_is_addr_neighbor(dst, ifp)) { in nd6_resolve_slow()
2402 lle = nd6_get_llentry(ifp, &dst->sin6_addr, family); in nd6_resolve_slow()
2405 if (lle == NULL) { in nd6_resolve_slow()
2410 LLE_WLOCK_ASSERT(lle); in nd6_resolve_slow()
2419 if ((!(lle->la_flags & LLE_CHILD)) && (lle->ln_state == ND6_LLINFO_STALE)) in nd6_resolve_slow()
2420 nd6_llinfo_setstate(lle, ND6_LLINFO_DELAY); in nd6_resolve_slow()
2427 if (lle->ln_state > ND6_LLINFO_INCOMPLETE) { in nd6_resolve_slow()
2429 lladdr = lle->ll_addr; in nd6_resolve_slow()
2432 lladdr = lle->r_linkdata; in nd6_resolve_slow()
2433 ll_len = lle->r_hdrlen; in nd6_resolve_slow()
2437 *pflags = lle->la_flags; in nd6_resolve_slow()
2439 LLE_ADDREF(lle); in nd6_resolve_slow()
2440 *plle = lle; in nd6_resolve_slow()
2442 LLE_WUNLOCK(lle); in nd6_resolve_slow()
2455 dropped = lltable_append_entry_queue(lle, m, V_nd6_maxqueuelen); in nd6_resolve_slow()
2470 if (lle->la_flags & LLE_CHILD) { in nd6_resolve_slow()
2471 struct llentry *lle_parent = lle->lle_parent; in nd6_resolve_slow()
2472 LLE_WUNLOCK(lle); in nd6_resolve_slow()
2473 lle = lle_parent; in nd6_resolve_slow()
2474 LLE_WLOCK(lle); in nd6_resolve_slow()
2476 if (lle->la_asked == 0) { in nd6_resolve_slow()
2477 lle->la_asked++; in nd6_resolve_slow()
2479 psrc = nd6_llinfo_get_holdsrc(lle, &src); in nd6_resolve_slow()
2481 nd6_llinfo_setstate(lle, ND6_LLINFO_INCOMPLETE); in nd6_resolve_slow()
2483 LLE_WUNLOCK(lle); in nd6_resolve_slow()
2513 nd6_flush_holdchain(struct ifnet *ifp, struct llentry *lle, struct mbuf *chain) in nd6_flush_holdchain() argument
2522 .ro_prepend = lle->r_linkdata, in nd6_flush_holdchain()
2523 .ro_plen = lle->r_hdrlen, in nd6_flush_holdchain()
2526 lltable_fill_sa_entry(lle, (struct sockaddr *)&dst6); in nd6_flush_holdchain()
2544 nd6_flush_children_holdchain(struct ifnet *ifp, struct llentry *lle) in nd6_flush_children_holdchain() argument
2551 CK_SLIST_FOREACH(child_lle, &lle->lle_children, lle_child_next) { in nd6_flush_children_holdchain()