Lines Matching refs:lle
2174 struct llentry *lle; in in6_lltable_destroy_lle_unlocked() local
2176 lle = __containerof(ctx, struct llentry, lle_epoch_ctx); in in6_lltable_destroy_lle_unlocked()
2177 LLE_LOCK_DESTROY(lle); in in6_lltable_destroy_lle_unlocked()
2178 LLE_REQ_DESTROY(lle); in in6_lltable_destroy_lle_unlocked()
2179 free(lle, M_LLTABLE); in in6_lltable_destroy_lle_unlocked()
2187 in6_lltable_destroy_lle(struct llentry *lle) in in6_lltable_destroy_lle() argument
2190 LLE_WUNLOCK(lle); in in6_lltable_destroy_lle()
2191 NET_EPOCH_CALL(in6_lltable_destroy_lle_unlocked, &lle->lle_epoch_ctx); in in6_lltable_destroy_lle()
2197 struct in6_llentry *lle; in in6_lltable_new() local
2199 lle = malloc(sizeof(struct in6_llentry), M_LLTABLE, M_NOWAIT | M_ZERO); in in6_lltable_new()
2200 if (lle == NULL) /* NB: caller generates msg */ in in6_lltable_new()
2203 lle->base.r_l3addr.addr6 = *addr6; in in6_lltable_new()
2204 lle->base.lle_refcnt = 1; in in6_lltable_new()
2205 lle->base.lle_free = in6_lltable_destroy_lle; in in6_lltable_new()
2206 LLE_LOCK_INIT(&lle->base); in in6_lltable_new()
2207 LLE_REQ_INIT(&lle->base); in in6_lltable_new()
2208 callout_init(&lle->base.lle_timer, 1); in in6_lltable_new()
2210 return (&lle->base); in in6_lltable_new()
2215 const struct sockaddr *smask, u_int flags, struct llentry *lle) in in6_lltable_match_prefix() argument
2221 lle_addr = &lle->r_l3addr.addr6; in in6_lltable_match_prefix()
2226 if (lle->la_flags & LLE_IFADDR) { in in6_lltable_match_prefix()
2239 if ((flags & LLE_STATIC) || !(lle->la_flags & LLE_STATIC)) in in6_lltable_match_prefix()
2246 in6_lltable_free_entry(struct lltable *llt, struct llentry *lle) in in6_lltable_free_entry() argument
2250 LLE_WLOCK_ASSERT(lle); in in6_lltable_free_entry()
2254 if ((lle->la_flags & LLE_LINKED) != 0) { in in6_lltable_free_entry()
2257 lltable_unlink_entry(llt, lle); in in6_lltable_free_entry()
2260 llentry_free(lle); in in6_lltable_free_entry()
2308 in6_lltable_hash(const struct llentry *lle, uint32_t hsize) in in6_lltable_hash() argument
2311 return (in6_lltable_hash_dst(&lle->r_l3addr.addr6, hsize)); in in6_lltable_hash()
2315 in6_lltable_fill_sa_entry(const struct llentry *lle, struct sockaddr *sa) in in6_lltable_fill_sa_entry() argument
2323 sin6->sin6_addr = lle->r_l3addr.addr6; in in6_lltable_fill_sa_entry()
2329 struct llentry *lle; in in6_lltable_find_dst() local
2335 CK_LIST_FOREACH(lle, lleh, lle_next) { in in6_lltable_find_dst()
2336 if (lle->la_flags & LLE_DELETED) in in6_lltable_find_dst()
2338 if (IN6_ARE_ADDR_EQUAL(&lle->r_l3addr.addr6, dst)) in in6_lltable_find_dst()
2342 return (lle); in in6_lltable_find_dst()
2346 in6_lltable_delete_entry(struct lltable *llt, struct llentry *lle) in in6_lltable_delete_entry() argument
2349 lle->la_flags |= LLE_DELETED; in in6_lltable_delete_entry()
2352 if ((lle->la_flags & LLE_PUB) != 0) in in6_lltable_delete_entry()
2353 in6_leave_proxy_ndp_mc(llt->llt_ifp, &lle->r_l3addr.addr6); in in6_lltable_delete_entry()
2354 EVENTHANDLER_INVOKE(lle_event, lle, LLENTRY_DELETED); in in6_lltable_delete_entry()
2356 log(LOG_INFO, "ifaddr cache = %p is deleted\n", lle); in in6_lltable_delete_entry()
2358 llentry_free(lle); in in6_lltable_delete_entry()
2367 struct llentry *lle; in in6_lltable_alloc() local
2384 lle = in6_lltable_new(&sin6->sin6_addr, flags); in in6_lltable_alloc()
2385 if (lle == NULL) { in in6_lltable_alloc()
2389 lle->la_flags = flags; in in6_lltable_alloc()
2394 in6_lltable_free_entry(llt, lle); in in6_lltable_alloc()
2397 lltable_set_entry_addr(ifp, lle, linkhdr, linkhdrsize, in in6_lltable_alloc()
2399 lle->la_flags |= LLE_STATIC; in in6_lltable_alloc()
2402 if ((lle->la_flags & LLE_STATIC) != 0) in in6_lltable_alloc()
2403 lle->ln_state = ND6_LLINFO_REACHABLE; in in6_lltable_alloc()
2405 return (lle); in in6_lltable_alloc()
2414 struct llentry *lle; in in6_lltable_lookup() local
2423 lle = in6_lltable_find_dst(llt, &sin6->sin6_addr); in in6_lltable_lookup()
2426 lle = llentry_lookup_family(lle, family); in in6_lltable_lookup()
2428 if (lle == NULL) in in6_lltable_lookup()
2432 return (lle); in in6_lltable_lookup()
2435 LLE_WLOCK(lle); in in6_lltable_lookup()
2437 LLE_RLOCK(lle); in in6_lltable_lookup()
2443 if (__predict_false((lle->la_flags & LLE_LINKED) == 0)) { in in6_lltable_lookup()
2445 LLE_WUNLOCK(lle); in in6_lltable_lookup()
2447 LLE_RUNLOCK(lle); in in6_lltable_lookup()
2450 return (lle); in in6_lltable_lookup()
2454 in6_lltable_dump_entry(struct lltable *llt, struct llentry *lle, in in6_lltable_dump_entry() argument
2475 if ((lle->la_flags & LLE_DELETED) == LLE_DELETED) in in6_lltable_dump_entry()
2478 lltable_fill_sa_entry(lle, (struct sockaddr *)&ndpc.sin6); in in6_lltable_dump_entry()
2495 if (lle->la_flags & LLE_PUB) in in6_lltable_dump_entry()
2503 if ((lle->la_flags & LLE_VALID) == LLE_VALID) { in in6_lltable_dump_entry()
2505 bcopy(lle->ll_addr, LLADDR(sdl), ifp->if_addrlen); in in6_lltable_dump_entry()
2510 if (lle->la_expire != 0) in in6_lltable_dump_entry()
2511 ndpc.rtm.rtm_rmx.rmx_expire = lle->la_expire + in in6_lltable_dump_entry()
2512 lle->lle_remtime / hz + time_second - time_uptime; in in6_lltable_dump_entry()
2514 if (lle->la_flags & LLE_STATIC) in in6_lltable_dump_entry()
2516 if (lle->la_flags & LLE_IFADDR) in in6_lltable_dump_entry()
2518 if (lle->ln_router != 0) in in6_lltable_dump_entry()
2520 ndpc.rtm.rtm_rmx.rmx_pksent = lle->la_asked; in in6_lltable_dump_entry()
2522 ndpc.rtm.rtm_rmx.rmx_state = lle->ln_state; in in6_lltable_dump_entry()
2530 in6_lltable_post_resolved(struct lltable *llt, struct llentry *lle) in in6_lltable_post_resolved() argument
2533 if ((lle->la_flags & LLE_PUB) == LLE_PUB) in in6_lltable_post_resolved()
2534 in6_join_proxy_ndp_mc(llt->llt_ifp, &lle->r_l3addr.addr6); in in6_lltable_post_resolved()
2724 in6_lle_match_pub(struct lltable *llt, struct llentry *lle, void *farg) in in6_lle_match_pub() argument
2726 return ((lle->la_flags & LLE_PUB) != 0); in in6_lle_match_pub()