Lines Matching refs:entry
105 static inline void lec_arp_hold(struct lec_arp_table *entry) in lec_arp_hold() argument
107 atomic_inc(&entry->usage); in lec_arp_hold()
110 static inline void lec_arp_put(struct lec_arp_table *entry) in lec_arp_put() argument
112 if (atomic_dec_and_test(&entry->usage)) in lec_arp_put()
113 kfree(entry); in lec_arp_put()
211 struct lec_arp_table *entry; in lec_start_xmit() local
282 entry = NULL; in lec_start_xmit()
283 vcc = lec_arp_resolve(priv, dst, is_rdesc, &entry); in lec_start_xmit()
285 dev->name, vcc, vcc ? vcc->flags : 0, entry); in lec_start_xmit()
287 if (entry && (entry->tx_wait.qlen < LEC_UNRES_QUE_LEN)) { in lec_start_xmit()
290 skb_queue_tail(&entry->tx_wait, skb); in lec_start_xmit()
304 while (entry && (skb2 = skb_dequeue(&entry->tx_wait))) { in lec_start_xmit()
328 if (entry) in lec_start_xmit()
329 lec_arp_put(entry); in lec_start_xmit()
347 struct lec_arp_table *entry; in lec_atm_send() local
377 entry = lec_arp_find(priv, mesg->content.normal.mac_addr); in lec_atm_send()
378 lec_arp_remove(priv, entry); in lec_atm_send()
626 struct lec_arp_table *entry; in lec_push() local
649 entry = lec_arp_find(priv, src); in lec_push()
650 if (entry && entry->vcc != vcc) { in lec_push()
651 lec_arp_remove(priv, entry); in lec_push()
652 lec_arp_put(entry); in lec_push()
811 static void lec_info(struct seq_file *seq, struct lec_arp_table *entry) in lec_info() argument
816 seq_printf(seq, "%2.2x", entry->mac_addr[i] & 0xff); in lec_info()
819 seq_printf(seq, "%2.2x", entry->atm_addr[i] & 0xff); in lec_info()
820 seq_printf(seq, " %s %4.4x", lec_arp_get_status_string(entry->status), in lec_info()
821 entry->flags & 0xffff); in lec_info()
822 if (entry->vcc) in lec_info()
823 seq_printf(seq, "%3d %3d ", entry->vcc->vpi, entry->vcc->vci); in lec_info()
826 if (entry->recv_vcc) { in lec_info()
827 seq_printf(seq, " %3d %3d", entry->recv_vcc->vpi, in lec_info()
828 entry->recv_vcc->vci); in lec_info()
990 struct lec_arp_table *entry = hlist_entry(state->node, in lec_seq_show() local
995 lec_info(seq, entry); in lec_seq_show()
1198 struct lec_arp_table *entry = lec_arp_find(priv, mac_addr); in lane2_associate_ind()
1200 if (entry == NULL) in lane2_associate_ind()
1203 kfree(entry->tlvs); in lane2_associate_ind()
1205 entry->tlvs = kmemdup(tlvs, sizeoftlvs, GFP_KERNEL); in lane2_associate_ind()
1206 if (entry->tlvs == NULL) in lane2_associate_ind()
1208 entry->sizeoftlvs = sizeoftlvs; in lane2_associate_ind()
1276 static void lec_arp_clear_vccs(struct lec_arp_table *entry) in lec_arp_clear_vccs() argument
1278 if (entry->vcc) { in lec_arp_clear_vccs()
1279 struct atm_vcc *vcc = entry->vcc; in lec_arp_clear_vccs()
1288 vcc->push = entry->old_push; in lec_arp_clear_vccs()
1290 entry->vcc = NULL; in lec_arp_clear_vccs()
1292 if (entry->recv_vcc) { in lec_arp_clear_vccs()
1293 struct atm_vcc *vcc = entry->recv_vcc; in lec_arp_clear_vccs()
1299 entry->recv_vcc->push = entry->old_recv_push; in lec_arp_clear_vccs()
1300 vcc_release_async(entry->recv_vcc, -EPIPE); in lec_arp_clear_vccs()
1301 entry->recv_vcc = NULL; in lec_arp_clear_vccs()
1310 lec_arp_add(struct lec_priv *priv, struct lec_arp_table *entry) in lec_arp_add() argument
1314 tmp = &priv->lec_arp_tables[HASH(entry->mac_addr[ETH_ALEN - 1])]; in lec_arp_add()
1315 hlist_add_head(&entry->next, tmp); in lec_arp_add()
1317 pr_debug("Added entry:%pM\n", entry->mac_addr); in lec_arp_add()
1326 struct lec_arp_table *entry; in lec_arp_remove() local
1344 hlist_for_each_entry(entry, in lec_arp_remove()
1347 entry->atm_addr, ATM_ESA_LEN) == 0) { in lec_arp_remove()
1505 struct lec_arp_table *entry; in lec_arp_destroy() local
1516 hlist_for_each_entry_safe(entry, next, in lec_arp_destroy()
1518 lec_arp_remove(priv, entry); in lec_arp_destroy()
1519 lec_arp_put(entry); in lec_arp_destroy()
1524 hlist_for_each_entry_safe(entry, next, in lec_arp_destroy()
1526 del_timer_sync(&entry->timer); in lec_arp_destroy()
1527 lec_arp_clear_vccs(entry); in lec_arp_destroy()
1528 hlist_del(&entry->next); in lec_arp_destroy()
1529 lec_arp_put(entry); in lec_arp_destroy()
1533 hlist_for_each_entry_safe(entry, next, in lec_arp_destroy()
1535 del_timer_sync(&entry->timer); in lec_arp_destroy()
1536 lec_arp_clear_vccs(entry); in lec_arp_destroy()
1537 hlist_del(&entry->next); in lec_arp_destroy()
1538 lec_arp_put(entry); in lec_arp_destroy()
1542 hlist_for_each_entry_safe(entry, next, &priv->mcast_fwds, next) { in lec_arp_destroy()
1544 lec_arp_clear_vccs(entry); in lec_arp_destroy()
1545 hlist_del(&entry->next); in lec_arp_destroy()
1546 lec_arp_put(entry); in lec_arp_destroy()
1560 struct lec_arp_table *entry; in lec_arp_find() local
1565 hlist_for_each_entry(entry, head, next) { in lec_arp_find()
1566 if (ether_addr_equal(mac_addr, entry->mac_addr)) in lec_arp_find()
1567 return entry; in lec_arp_find()
1596 struct lec_arp_table *entry; in lec_arp_expire_arp() local
1598 entry = (struct lec_arp_table *)data; in lec_arp_expire_arp()
1601 if (entry->status == ESI_ARP_PENDING) { in lec_arp_expire_arp()
1602 if (entry->no_tries <= entry->priv->max_retry_count) { in lec_arp_expire_arp()
1603 if (entry->is_rdesc) in lec_arp_expire_arp()
1604 send_to_lecd(entry->priv, l_rdesc_arp_xmt, in lec_arp_expire_arp()
1605 entry->mac_addr, NULL, NULL); in lec_arp_expire_arp()
1607 send_to_lecd(entry->priv, l_arp_xmt, in lec_arp_expire_arp()
1608 entry->mac_addr, NULL, NULL); in lec_arp_expire_arp()
1609 entry->no_tries++; in lec_arp_expire_arp()
1611 mod_timer(&entry->timer, jiffies + (1 * HZ)); in lec_arp_expire_arp()
1637 static bool __lec_arp_check_expire(struct lec_arp_table *entry, in __lec_arp_check_expire() argument
1643 if ((entry->flags) & LEC_REMOTE_FLAG && priv->topology_change) in __lec_arp_check_expire()
1649 now, entry->last_used, time_to_check); in __lec_arp_check_expire()
1650 if (time_after(now, entry->last_used + time_to_check) && in __lec_arp_check_expire()
1651 !(entry->flags & LEC_PERMANENT_FLAG) && in __lec_arp_check_expire()
1652 !(entry->mac_addr[0] & 0x01)) { /* LANE2: 7.1.20 */ in __lec_arp_check_expire()
1655 lec_arp_remove(priv, entry); in __lec_arp_check_expire()
1656 lec_arp_put(entry); in __lec_arp_check_expire()
1659 if ((entry->status == ESI_VC_PENDING || in __lec_arp_check_expire()
1660 entry->status == ESI_ARP_PENDING) && in __lec_arp_check_expire()
1661 time_after_eq(now, entry->timestamp + in __lec_arp_check_expire()
1663 entry->timestamp = jiffies; in __lec_arp_check_expire()
1664 entry->packets_flooded = 0; in __lec_arp_check_expire()
1665 if (entry->status == ESI_VC_PENDING) in __lec_arp_check_expire()
1667 entry->mac_addr, in __lec_arp_check_expire()
1668 entry->atm_addr, in __lec_arp_check_expire()
1671 if (entry->status == ESI_FLUSH_PENDING && in __lec_arp_check_expire()
1672 time_after_eq(now, entry->timestamp + in __lec_arp_check_expire()
1674 lec_arp_hold(entry); in __lec_arp_check_expire()
1703 struct lec_arp_table *entry; in lec_arp_check_expire() local
1712 hlist_for_each_entry_safe(entry, next, in lec_arp_check_expire()
1714 if (__lec_arp_check_expire(entry, now, priv)) { in lec_arp_check_expire()
1716 struct atm_vcc *vcc = entry->vcc; in lec_arp_check_expire()
1720 while ((skb = skb_dequeue(&entry->tx_wait))) in lec_arp_check_expire()
1722 entry->last_used = jiffies; in lec_arp_check_expire()
1723 entry->status = ESI_FORWARD_DIRECT; in lec_arp_check_expire()
1724 lec_arp_put(entry); in lec_arp_check_expire()
1745 struct lec_arp_table *entry; in lec_arp_resolve() local
1762 entry = lec_arp_find(priv, mac_to_find); in lec_arp_resolve()
1764 if (entry) { in lec_arp_resolve()
1765 if (entry->status == ESI_FORWARD_DIRECT) { in lec_arp_resolve()
1767 entry->last_used = jiffies; in lec_arp_resolve()
1768 lec_arp_hold(entry); in lec_arp_resolve()
1769 *ret_entry = entry; in lec_arp_resolve()
1770 found = entry->vcc; in lec_arp_resolve()
1777 if (entry->status == ESI_ARP_PENDING) in lec_arp_resolve()
1778 entry->no_tries = 0; in lec_arp_resolve()
1785 if (entry->status != ESI_FLUSH_PENDING && in lec_arp_resolve()
1786 entry->packets_flooded < in lec_arp_resolve()
1788 entry->packets_flooded++; in lec_arp_resolve()
1798 lec_arp_hold(entry); in lec_arp_resolve()
1799 *ret_entry = entry; in lec_arp_resolve()
1800 pr_debug("entry->status %d entry->vcc %p\n", entry->status, in lec_arp_resolve()
1801 entry->vcc); in lec_arp_resolve()
1805 entry = make_entry(priv, mac_to_find); in lec_arp_resolve()
1807 if (!entry) { in lec_arp_resolve()
1811 lec_arp_add(priv, entry); in lec_arp_resolve()
1813 entry->packets_flooded = 1; in lec_arp_resolve()
1814 entry->status = ESI_ARP_PENDING; in lec_arp_resolve()
1815 entry->no_tries = 1; in lec_arp_resolve()
1816 entry->last_used = entry->timestamp = jiffies; in lec_arp_resolve()
1817 entry->is_rdesc = is_rdesc; in lec_arp_resolve()
1818 if (entry->is_rdesc) in lec_arp_resolve()
1823 entry->timer.expires = jiffies + (1 * HZ); in lec_arp_resolve()
1824 entry->timer.function = lec_arp_expire_arp; in lec_arp_resolve()
1825 add_timer(&entry->timer); in lec_arp_resolve()
1840 struct lec_arp_table *entry; in lec_addr_delete() local
1846 hlist_for_each_entry_safe(entry, next, in lec_addr_delete()
1848 if (!memcmp(atm_addr, entry->atm_addr, ATM_ESA_LEN) && in lec_addr_delete()
1850 !(entry->flags & LEC_PERMANENT_FLAG))) { in lec_addr_delete()
1851 lec_arp_remove(priv, entry); in lec_addr_delete()
1852 lec_arp_put(entry); in lec_addr_delete()
1872 struct lec_arp_table *entry, *tmp; in lec_arp_update() local
1879 entry = lec_arp_find(priv, mac_addr); in lec_arp_update()
1880 if (entry == NULL && targetless_le_arp) in lec_arp_update()
1886 hlist_for_each_entry_safe(entry, next, in lec_arp_update()
1888 if (memcmp(entry->atm_addr, atm_addr, ATM_ESA_LEN) == 0) { in lec_arp_update()
1889 hlist_del(&entry->next); in lec_arp_update()
1890 del_timer(&entry->timer); in lec_arp_update()
1896 tmp->vcc = entry->vcc; in lec_arp_update()
1897 tmp->old_push = entry->old_push; in lec_arp_update()
1899 del_timer(&entry->timer); in lec_arp_update()
1900 lec_arp_put(entry); in lec_arp_update()
1901 entry = tmp; in lec_arp_update()
1903 entry->status = ESI_FORWARD_DIRECT; in lec_arp_update()
1904 ether_addr_copy(entry->mac_addr, in lec_arp_update()
1906 entry->last_used = jiffies; in lec_arp_update()
1907 lec_arp_add(priv, entry); in lec_arp_update()
1910 entry->flags |= LEC_REMOTE_FLAG; in lec_arp_update()
1912 entry->flags &= ~LEC_REMOTE_FLAG; in lec_arp_update()
1920 entry = lec_arp_find(priv, mac_addr); in lec_arp_update()
1921 if (!entry) { in lec_arp_update()
1922 entry = make_entry(priv, mac_addr); in lec_arp_update()
1923 if (!entry) in lec_arp_update()
1925 entry->status = ESI_UNKNOWN; in lec_arp_update()
1926 lec_arp_add(priv, entry); in lec_arp_update()
1929 memcpy(entry->atm_addr, atm_addr, ATM_ESA_LEN); in lec_arp_update()
1930 del_timer(&entry->timer); in lec_arp_update()
1934 if (entry != tmp && in lec_arp_update()
1942 entry->vcc = tmp->vcc; in lec_arp_update()
1943 entry->old_push = tmp->old_push; in lec_arp_update()
1945 entry->status = tmp->status; in lec_arp_update()
1951 entry->flags |= LEC_REMOTE_FLAG; in lec_arp_update()
1953 entry->flags &= ~LEC_REMOTE_FLAG; in lec_arp_update()
1954 if (entry->status == ESI_ARP_PENDING || entry->status == ESI_UNKNOWN) { in lec_arp_update()
1955 entry->status = ESI_VC_PENDING; in lec_arp_update()
1956 send_to_lecd(priv, l_svc_setup, entry->mac_addr, atm_addr, NULL); in lec_arp_update()
1973 struct lec_arp_table *entry; in lec_vcc_added() local
1981 entry = lec_arp_find(priv, bus_mac); in lec_vcc_added()
1982 if (!entry) { in lec_vcc_added()
1986 memcpy(entry->atm_addr, ioc_data->atm_addr, ATM_ESA_LEN); in lec_vcc_added()
1987 entry->recv_vcc = vcc; in lec_vcc_added()
1988 entry->old_recv_push = old_push; in lec_vcc_added()
1990 entry = make_entry(priv, bus_mac); in lec_vcc_added()
1991 if (entry == NULL) in lec_vcc_added()
1993 del_timer(&entry->timer); in lec_vcc_added()
1994 memcpy(entry->atm_addr, ioc_data->atm_addr, ATM_ESA_LEN); in lec_vcc_added()
1995 entry->recv_vcc = vcc; in lec_vcc_added()
1996 entry->old_recv_push = old_push; in lec_vcc_added()
1997 hlist_add_head(&entry->next, &priv->mcast_fwds); in lec_vcc_added()
2015 entry = make_entry(priv, bus_mac); in lec_vcc_added()
2016 if (entry == NULL) in lec_vcc_added()
2018 memcpy(entry->atm_addr, ioc_data->atm_addr, ATM_ESA_LEN); in lec_vcc_added()
2019 eth_zero_addr(entry->mac_addr); in lec_vcc_added()
2020 entry->recv_vcc = vcc; in lec_vcc_added()
2021 entry->old_recv_push = old_push; in lec_vcc_added()
2022 entry->status = ESI_UNKNOWN; in lec_vcc_added()
2023 entry->timer.expires = jiffies + priv->vcc_timeout_period; in lec_vcc_added()
2024 entry->timer.function = lec_arp_expire_vcc; in lec_vcc_added()
2025 hlist_add_head(&entry->next, &priv->lec_no_forward); in lec_vcc_added()
2026 add_timer(&entry->timer); in lec_vcc_added()
2042 hlist_for_each_entry(entry, in lec_vcc_added()
2045 (ioc_data->atm_addr, entry->atm_addr, in lec_vcc_added()
2049 entry->vcc ? entry->vcc->vci : 0, in lec_vcc_added()
2050 entry->recv_vcc ? entry->recv_vcc-> in lec_vcc_added()
2053 del_timer(&entry->timer); in lec_vcc_added()
2054 entry->vcc = vcc; in lec_vcc_added()
2055 entry->old_push = old_push; in lec_vcc_added()
2056 if (entry->status == ESI_VC_PENDING) { in lec_vcc_added()
2059 entry->status = in lec_vcc_added()
2062 entry->timestamp = jiffies; in lec_vcc_added()
2063 entry->status = in lec_vcc_added()
2068 entry->atm_addr, in lec_vcc_added()
2098 entry = make_entry(priv, bus_mac); in lec_vcc_added()
2099 if (!entry) in lec_vcc_added()
2101 entry->vcc = vcc; in lec_vcc_added()
2102 entry->old_push = old_push; in lec_vcc_added()
2103 memcpy(entry->atm_addr, ioc_data->atm_addr, ATM_ESA_LEN); in lec_vcc_added()
2104 eth_zero_addr(entry->mac_addr); in lec_vcc_added()
2105 entry->status = ESI_UNKNOWN; in lec_vcc_added()
2106 hlist_add_head(&entry->next, &priv->lec_arp_empty_ones); in lec_vcc_added()
2107 entry->timer.expires = jiffies + priv->vcc_timeout_period; in lec_vcc_added()
2108 entry->timer.function = lec_arp_expire_vcc; in lec_vcc_added()
2109 add_timer(&entry->timer); in lec_vcc_added()
2119 struct lec_arp_table *entry; in lec_flush_complete() local
2126 hlist_for_each_entry(entry, in lec_flush_complete()
2128 if (entry->flush_tran_id == tran_id && in lec_flush_complete()
2129 entry->status == ESI_FLUSH_PENDING) { in lec_flush_complete()
2131 struct atm_vcc *vcc = entry->vcc; in lec_flush_complete()
2133 lec_arp_hold(entry); in lec_flush_complete()
2136 while ((skb = skb_dequeue(&entry->tx_wait))) in lec_flush_complete()
2138 entry->last_used = jiffies; in lec_flush_complete()
2139 entry->status = ESI_FORWARD_DIRECT; in lec_flush_complete()
2140 lec_arp_put(entry); in lec_flush_complete()
2155 struct lec_arp_table *entry; in lec_set_flush_tran_id() local
2160 hlist_for_each_entry(entry, in lec_set_flush_tran_id()
2162 if (!memcmp(atm_addr, entry->atm_addr, ATM_ESA_LEN)) { in lec_set_flush_tran_id()
2163 entry->flush_tran_id = tran_id; in lec_set_flush_tran_id()
2165 tran_id, entry); in lec_set_flush_tran_id()
2213 struct lec_arp_table *entry; in lec_vcc_close() local
2222 hlist_for_each_entry_safe(entry, next, in lec_vcc_close()
2224 if (vcc == entry->vcc) { in lec_vcc_close()
2225 lec_arp_remove(priv, entry); in lec_vcc_close()
2226 lec_arp_put(entry); in lec_vcc_close()
2233 hlist_for_each_entry_safe(entry, next, in lec_vcc_close()
2235 if (entry->vcc == vcc) { in lec_vcc_close()
2236 lec_arp_clear_vccs(entry); in lec_vcc_close()
2237 del_timer(&entry->timer); in lec_vcc_close()
2238 hlist_del(&entry->next); in lec_vcc_close()
2239 lec_arp_put(entry); in lec_vcc_close()
2243 hlist_for_each_entry_safe(entry, next, in lec_vcc_close()
2245 if (entry->recv_vcc == vcc) { in lec_vcc_close()
2246 lec_arp_clear_vccs(entry); in lec_vcc_close()
2247 del_timer(&entry->timer); in lec_vcc_close()
2248 hlist_del(&entry->next); in lec_vcc_close()
2249 lec_arp_put(entry); in lec_vcc_close()
2253 hlist_for_each_entry_safe(entry, next, &priv->mcast_fwds, next) { in lec_vcc_close()
2254 if (entry->recv_vcc == vcc) { in lec_vcc_close()
2255 lec_arp_clear_vccs(entry); in lec_vcc_close()
2257 hlist_del(&entry->next); in lec_vcc_close()
2258 lec_arp_put(entry); in lec_vcc_close()
2272 struct lec_arp_table *entry, *tmp; in lec_arp_check_empties() local
2277 hlist_for_each_entry_safe(entry, next, in lec_arp_check_empties()
2279 if (vcc == entry->vcc) { in lec_arp_check_empties()
2280 del_timer(&entry->timer); in lec_arp_check_empties()
2281 ether_addr_copy(entry->mac_addr, src); in lec_arp_check_empties()
2282 entry->status = ESI_FORWARD_DIRECT; in lec_arp_check_empties()
2283 entry->last_used = jiffies; in lec_arp_check_empties()
2290 hlist_del(&entry->next); in lec_arp_check_empties()
2291 lec_arp_add(priv, entry); in lec_arp_check_empties()