Lines Matching defs:lle

1101  * Removes either all lle entries for given @ia, or lle
1446 * Do actual deallocation of @lle.
1451 struct llentry *lle;
1453 lle = __containerof(ctx, struct llentry, lle_epoch_ctx);
1454 LLE_LOCK_DESTROY(lle);
1455 LLE_REQ_DESTROY(lle);
1456 free(lle, M_LLTABLE);
1464 in_lltable_destroy_lle(struct llentry *lle)
1467 LLE_WUNLOCK(lle);
1468 NET_EPOCH_CALL(in_lltable_destroy_lle_unlocked, &lle->lle_epoch_ctx);
1474 struct in_llentry *lle;
1476 lle = malloc(sizeof(struct in_llentry), M_LLTABLE, M_NOWAIT | M_ZERO);
1477 if (lle == NULL) /* NB: caller generates msg */
1484 lle->base.la_expire = time_uptime; /* mark expired */
1485 lle->base.r_l3addr.addr4 = addr4;
1486 lle->base.lle_refcnt = 1;
1487 lle->base.lle_free = in_lltable_destroy_lle;
1488 LLE_LOCK_INIT(&lle->base);
1489 LLE_REQ_INIT(&lle->base);
1490 callout_init(&lle->base.lle_timer, 1);
1492 return (&lle->base);
1497 const struct sockaddr *smask, u_int flags, struct llentry *lle)
1503 lle_addr.s_addr = ntohl(lle->r_l3addr.addr4.s_addr);
1508 if (lle->la_flags & LLE_IFADDR) {
1522 if ((flags & LLE_STATIC) || !(lle->la_flags & LLE_STATIC))
1529 in_lltable_free_entry(struct lltable *llt, struct llentry *lle)
1533 LLE_WLOCK_ASSERT(lle);
1537 if ((lle->la_flags & LLE_LINKED) != 0) {
1539 lltable_unlink_entry(llt, lle);
1543 pkts_dropped = llentry_free(lle);
1614 in_lltable_hash(const struct llentry *lle, uint32_t hsize)
1617 return (in_lltable_hash_dst(lle->r_l3addr.addr4, hsize));
1621 in_lltable_fill_sa_entry(const struct llentry *lle, struct sockaddr *sa)
1629 sin->sin_addr = lle->r_l3addr.addr4;
1635 struct llentry *lle;
1641 CK_LIST_FOREACH(lle, lleh, lle_next) {
1642 if (lle->la_flags & LLE_DELETED)
1644 if (lle->r_l3addr.addr4.s_addr == dst.s_addr)
1648 return (lle);
1652 in_lltable_delete_entry(struct lltable *llt, struct llentry *lle)
1655 lle->la_flags |= LLE_DELETED;
1656 EVENTHANDLER_INVOKE(lle_event, lle, LLENTRY_DELETED);
1658 log(LOG_INFO, "ifaddr cache = %p is deleted\n", lle);
1660 llentry_free(lle);
1668 struct llentry *lle;
1685 lle = in_lltable_new(sin->sin_addr, flags);
1686 if (lle == NULL) {
1687 log(LOG_INFO, "lla_lookup: new lle malloc failed\n");
1690 lle->la_flags = flags;
1692 lle->r_flags |= RLLE_VALID;
1697 in_lltable_free_entry(llt, lle);
1700 lltable_set_entry_addr(ifp, lle, linkhdr, linkhdrsize,
1702 lle->la_flags |= LLE_STATIC;
1703 lle->r_flags |= (RLLE_VALID | RLLE_IFADDR);
1704 lle->la_expire = 0;
1707 return (lle);
1712 * If found return lle read locked.
1718 struct llentry *lle;
1725 ("wrong lle request flags: %#x", flags));
1727 lle = in_lltable_find_dst(llt, sin->sin_addr);
1728 if (lle == NULL)
1731 return (lle);
1734 LLE_WLOCK(lle);
1736 LLE_RLOCK(lle);
1742 if (__predict_false((lle->la_flags & LLE_LINKED) == 0)) {
1744 LLE_WUNLOCK(lle);
1746 LLE_RUNLOCK(lle);
1749 return (lle);
1753 in_lltable_dump_entry(struct lltable *llt, struct llentry *lle,
1768 if ((lle->la_flags & LLE_DELETED) == LLE_DELETED)
1771 lltable_fill_sa_entry(lle,(struct sockaddr *)&arpc.sin);
1787 if (lle->la_flags & LLE_PUB)
1795 if ((lle->la_flags & LLE_VALID) == LLE_VALID) {
1797 bcopy(lle->ll_addr, LLADDR(sdl), ifp->if_addrlen);
1804 lle->la_flags & LLE_STATIC ? 0 : lle->la_expire;
1806 if (lle->la_flags & LLE_STATIC)
1808 if (lle->la_flags & LLE_IFADDR)
1817 in_lltable_post_resolved(struct lltable *llt, struct llentry *lle)
1822 if ((lle->la_flags & LLE_PUB) != 0)
1823 arprequest(ifp, &lle->r_l3addr.addr4, &lle->r_l3addr.addr4,
1824 lle->ll_addr);