Home | History | Annotate | Download | only in net

Lines Matching defs:lle

75 static void htable_unlink_entry(struct llentry *lle);
76 static void htable_link_entry(struct lltable *llt, struct llentry *lle);
81 lltable_dump_entry(struct lltable *llt, struct llentry *lle,
96 a = (lle->la_flags & LLE_VALID) == LLE_VALID ? &lle->ll_addr : NULL;
102 if (sa->sa_family == AF_INET && lle->la_flags & LLE_PUB) {
115 rtm->rtm_rmx.rmx_expire = (lle->la_flags & LLE_STATIC) ? 0 :
116 time_mono_to_wall(lle->la_expire);
121 rtm->rtm_flags |= (lle->la_flags & LLE_STATIC) ? RTF_STATIC : 0;
122 if (lle->la_flags & LLE_PUB)
137 * Dump lle state for a specific address family.
192 struct llentry *lle, *next;
198 LIST_FOREACH_SAFE(lle, &llt->lle_head[i], lle_next, next) {
199 error = f(llt, lle, farg);
209 htable_link_entry(struct lltable *llt, struct llentry *lle)
214 if ((lle->la_flags & LLE_LINKED) != 0)
219 hashidx = llt->llt_hash(lle, llt->llt_hsize);
222 lle->lle_tbl = llt;
223 lle->lle_head = lleh;
224 lle->la_flags |= LLE_LINKED;
225 LIST_INSERT_HEAD(lleh, lle, lle_next);
231 htable_unlink_entry(struct llentry *lle)
234 if ((lle->la_flags & LLE_LINKED) != 0) {
235 IF_AFDATA_WLOCK_ASSERT(lle->lle_tbl->llt_ifp);
236 LIST_REMOVE(lle, lle_next);
237 lle->la_flags &= ~(LLE_VALID | LLE_LINKED);
239 lle->lle_tbl = NULL;
240 lle->lle_head = NULL;
242 KASSERTMSG(lle->lle_tbl->llt_lle_count != 0,
243 "llt_lle_count=%u", lle->lle_tbl->llt_lle_count);
244 lle->lle_tbl->llt_lle_count--;
256 htable_prefix_free_cb(struct lltable *llt, struct llentry *lle, void *farg)
262 if (llt->llt_match_prefix(pmd->prefix, pmd->mask, pmd->flags, lle)) {
263 LLE_WLOCK(lle);
264 LIST_INSERT_HEAD(&pmd->dchain, lle, lle_chain);
274 struct llentry *lle, *next;
290 LIST_FOREACH_SAFE(lle, &pmd.dchain, lle_chain, next)
291 llt->llt_free_entry(llt, lle);
305 struct llentry *lle, *next;
307 LIST_FOREACH_SAFE(lle, head, lle_chain, next)
308 llt->llt_unlink_entry(lle);
317 lltable_drop_entry_queue(struct llentry *lle)
322 LLE_WLOCK_ASSERT(lle);
325 while ((lle->la_numheld > 0) && (lle->la_hold != NULL)) {
326 next = lle->la_hold->m_nextpkt;
327 m_freem(lle->la_hold);
328 lle->la_hold = next;
329 lle->la_numheld--;
333 KASSERTMSG(lle->la_numheld == 0,
335 lle->la_numheld, pkts_dropped);
343 struct llentry *lle;
345 lle = pool_get(&llentry_pool, flags);
346 if (lle != NULL)
347 memset(lle, 0, sizeof(*lle));
348 return lle;
352 llentry_pool_put(struct llentry *lle)
355 pool_put(&llentry_pool, lle);
367 llentry_free(struct llentry *lle)
372 LLE_WLOCK_ASSERT(lle);
374 lle->la_flags |= LLE_DELETED;
376 if ((lle->la_flags & LLE_LINKED) != 0) {
377 llt = lle->lle_tbl;
380 llt->llt_unlink_entry(lle);
389 if (callout_pending(&lle->la_timer)) {
390 bool expired = callout_stop(&lle->la_timer);
392 LLE_REMREF(lle);
395 pkts_dropped = lltable_drop_entry_queue(lle);
397 LLE_FREE_LOCKED(lle);
435 lltable_free_cb(struct lltable *llt, struct llentry *lle, void *farg)
441 LLE_WLOCK(lle);
442 LIST_INSERT_HEAD(dchain, lle, lle_chain);
453 struct llentry *lle, *next;
465 LIST_FOREACH_SAFE(lle, &dchain, lle_chain, next)
466 (void)llentry_free(lle);
487 struct llentry *lle;
496 LIST_FOREACH(lle, &llt->lle_head[i], lle_next) {
497 LLE_WLOCK(lle);
498 lltable_drop_entry_queue(lle);
499 LLE_WUNLOCK(lle);
584 lltable_link_entry(struct lltable *llt, struct llentry *lle)
587 llt->llt_link_entry(llt, lle);
591 lltable_unlink_entry(struct lltable *llt, struct llentry *lle)
594 llt->llt_unlink_entry(lle);
598 lltable_free_entry(struct lltable *llt, struct llentry *lle)
601 llt->llt_free_entry(llt, lle);
605 lltable_fill_sa_entry(const struct llentry *lle, struct sockaddr *sa)
609 llt = lle->lle_tbl;
610 llt->llt_fill_sa_entry(lle, sa);
638 struct llentry *lle;
677 /* Add static LLE */
679 lle = lla_lookup(llt, LLE_EXCLUSIVE, dst);
682 if (lle != NULL &&
683 (lle->la_flags & LLE_STATIC || lle->la_expire == 0)) {
684 LLE_RUNLOCK(lle);
696 if (lle != NULL) {
698 size_t pkts_dropped = llentry_free(lle);
704 (void) llentry_free(lle);
708 lle = lla_create(llt, 0, dst, rt);
709 if (lle == NULL) {
717 KASSERT(ifp->if_addrlen <= sizeof(lle->ll_addr));
718 memcpy(&lle->ll_addr, CLLADDR(dl), ifp->if_addrlen);
720 lle->la_flags |= LLE_PUB;
721 lle->la_flags |= LLE_VALID;
725 lle->ln_state = ND_LLINFO_REACHABLE;
730 lle
740 lle->la_flags |= LLE_STATIC;
741 lle->la_expire = 0;
743 lle->la_expire = rtm_expire;
744 laflags = lle->la_flags;
745 LLE_WUNLOCK(lle);
808 struct llentry *lle;
811 lle = &la->base;
812 db_printf("lle=%p\n", lle);
813 db_printf(" lle_next=%p\n", lle->lle_next.le_next);
814 db_printf(" lle_lock=%p\n", &lle->lle_lock);
815 db_printf(" lle_tbl=%p\n", lle->lle_tbl);
816 db_printf(" lle_head=%p\n", lle->lle_head);
817 db_printf(" la_hold=%p\n", lle->la_hold);
818 db_printf(" la_numheld=%d\n", lle->la_numheld);
819 db_printf(" la_expire=%ju\n", (uintmax_t)lle->la_expire);
820 db_printf(" la_flags=0x%04x\n", lle->la_flags);
821 db_printf(" la_asked=%u\n", lle->la_asked);
822 db_printf(" la_preempt=%u\n", lle->la_preempt);
823 db_printf(" ln_byhint=%u\n", lle->ln_byhint);
824 db_printf(" ln_state=%d\n", lle->ln_state);
825 db_printf(" ln_router=%u\n", lle->ln_router);
826 db_printf(" ln_ntick=%ju\n", (uintmax_t)lle->ln_ntick);
827 db_printf(" lle_refcnt=%d\n", lle->lle_refcnt);
828 memcopy(octet, &lle->ll_addr.mac16, sizeof(octet));
831 db_printf(" lle_timer=%p\n", &lle->lle_timer);
879 struct llentry *lle;
885 LIST_FOREACH(lle, &llt->lle_head[i], lle_next) {
887 llatbl_lle_show((struct llentry_sa *)lle);