Lines Matching refs:priv
63 static struct lec_arp_table *lec_arp_find(struct lec_priv *priv,
65 static int lec_arp_remove(struct lec_priv *priv,
75 static int lec_addr_delete(struct lec_priv *priv, const unsigned char *atm_addr,
77 static void lec_arp_check_empties(struct lec_priv *priv,
79 static void lec_arp_destroy(struct lec_priv *priv);
80 static void lec_arp_init(struct lec_priv *priv);
81 static struct atm_vcc *lec_arp_resolve(struct lec_priv *priv,
85 static void lec_arp_update(struct lec_priv *priv, const unsigned char *mac_addr,
89 static void lec_flush_complete(struct lec_priv *priv, unsigned long tran_id);
90 static int lec_mcast_make(struct lec_priv *priv, struct atm_vcc *vcc);
91 static void lec_set_flush_tran_id(struct lec_priv *priv,
94 static void lec_vcc_added(struct lec_priv *priv,
99 static void lec_vcc_close(struct lec_priv *priv, struct atm_vcc *vcc);
128 struct lec_priv *priv; in lec_handle_bridge() local
151 priv = netdev_priv(dev); in lec_handle_bridge()
152 atm_force_charge(priv->lecd, skb2->truesize); in lec_handle_bridge()
153 sk = sk_atm(priv->lecd); in lec_handle_bridge()
205 struct lec_priv *priv = netdev_priv(dev); in lec_start_xmit() local
214 if (!priv->lecd) { in lec_start_xmit()
245 lec_h->le_header = htons(priv->lecid); in lec_start_xmit()
254 dev->name, skb->len, priv->lecid); in lec_start_xmit()
280 vcc = lec_arp_resolve(priv, dst, is_rdesc, &entry); in lec_start_xmit()
342 struct lec_priv *priv = netdev_priv(dev); in lec_atm_send() local
363 lec_addr_delete(priv, mesg->content.normal.atm_addr, in lec_atm_send()
367 priv->topology_change = mesg->content.normal.flag; in lec_atm_send()
370 lec_flush_complete(priv, mesg->content.normal.flag); in lec_atm_send()
373 spin_lock_irqsave(&priv->lec_arp_lock, flags); in lec_atm_send()
374 entry = lec_arp_find(priv, mesg->content.normal.mac_addr); in lec_atm_send()
375 lec_arp_remove(priv, entry); in lec_atm_send()
376 spin_unlock_irqrestore(&priv->lec_arp_lock, flags); in lec_atm_send()
382 lec_arp_update(priv, mesg->content.normal.mac_addr, in lec_atm_send()
395 priv->maximum_unknown_frame_count = in lec_atm_send()
397 priv->max_unknown_frame_time = in lec_atm_send()
399 priv->max_retry_count = mesg->content.config.max_retry_count; in lec_atm_send()
400 priv->aging_time = (mesg->content.config.aging_time * HZ); in lec_atm_send()
401 priv->forward_delay_time = in lec_atm_send()
403 priv->arp_response_time = in lec_atm_send()
405 priv->flush_timeout = (mesg->content.config.flush_timeout * HZ); in lec_atm_send()
406 priv->path_switching_delay = in lec_atm_send()
408 priv->lane_version = mesg->content.config.lane_version; in lec_atm_send()
410 priv->lane2_ops = NULL; in lec_atm_send()
411 if (priv->lane_version > 1) in lec_atm_send()
412 priv->lane2_ops = &lane2_ops; in lec_atm_send()
416 priv->is_proxy = mesg->content.config.is_proxy; in lec_atm_send()
419 lec_set_flush_tran_id(priv, mesg->content.normal.atm_addr, in lec_atm_send()
423 priv->lecid = in lec_atm_send()
447 atm_force_charge(priv->lecd, skb2->truesize); in lec_atm_send()
448 sk = sk_atm(priv->lecd); in lec_atm_send()
468 struct lec_priv *priv = netdev_priv(dev); in lec_atm_close() local
470 priv->lecd = NULL; in lec_atm_close()
474 lec_arp_destroy(priv); in lec_atm_close()
504 send_to_lecd(struct lec_priv *priv, atmlec_msg_type type, in send_to_lecd() argument
512 if (!priv || !priv->lecd) in send_to_lecd()
530 atm_force_charge(priv->lecd, skb->truesize); in send_to_lecd()
531 sk = sk_atm(priv->lecd); in send_to_lecd()
537 atm_force_charge(priv->lecd, data->truesize); in send_to_lecd()
591 struct lec_priv *priv = netdev_priv(dev); in lec_push() local
599 lec_vcc_close(priv, vcc); in lec_push()
609 dev->name, skb->len, priv->lecid); in lec_push()
625 if (*(__be16 *) skb->data == htons(priv->lecid) || in lec_push()
626 !priv->lecd || !(dev->flags & IFF_UP)) { in lec_push()
641 spin_lock_irqsave(&priv->lec_arp_lock, flags); in lec_push()
644 entry = lec_arp_find(priv, src); in lec_push()
646 lec_arp_remove(priv, entry); in lec_push()
650 spin_unlock_irqrestore(&priv->lec_arp_lock, flags); in lec_push()
653 !priv->is_proxy && /* Proxy wants all the packets */ in lec_push()
658 if (!hlist_empty(&priv->lec_arp_empty_ones)) in lec_push()
659 lec_arp_check_empties(priv, vcc, skb); in lec_push()
727 struct lec_priv *priv; in lecd_attach() local
749 priv = netdev_priv(dev_lec[i]); in lecd_attach()
751 priv = netdev_priv(dev_lec[i]); in lecd_attach()
752 if (priv->lecd) in lecd_attach()
755 lec_arp_init(priv); in lecd_attach()
756 priv->itfnum = i; /* LANE2 addition */ in lecd_attach()
757 priv->lecd = vcc; in lecd_attach()
766 priv->maximum_unknown_frame_count = 1; in lecd_attach()
767 priv->max_unknown_frame_time = (1 * HZ); in lecd_attach()
768 priv->vcc_timeout_period = (1200 * HZ); in lecd_attach()
769 priv->max_retry_count = 1; in lecd_attach()
770 priv->aging_time = (300 * HZ); in lecd_attach()
771 priv->forward_delay_time = (15 * HZ); in lecd_attach()
772 priv->topology_change = 0; in lecd_attach()
773 priv->arp_response_time = (1 * HZ); in lecd_attach()
774 priv->flush_timeout = (4 * HZ); in lecd_attach()
775 priv->path_switching_delay = (6 * HZ); in lecd_attach()
857 struct lec_priv *priv) in lec_arp_walk() argument
863 v = lec_tbl_walk(state, &priv->lec_arp_tables[p], l); in lec_arp_walk()
872 struct lec_priv *priv) in lec_misc_walk() argument
875 &priv->lec_arp_empty_ones, in lec_misc_walk()
876 &priv->lec_no_forward, in lec_misc_walk()
877 &priv->mcast_fwds in lec_misc_walk()
892 struct lec_priv *priv) in lec_priv_walk() argument
895 state->locked = priv; in lec_priv_walk()
896 spin_lock_irqsave(&priv->lec_arp_lock, state->flags); in lec_priv_walk()
898 if (!lec_arp_walk(state, l, priv) && !lec_misc_walk(state, l, priv)) { in lec_priv_walk()
899 spin_unlock_irqrestore(&priv->lec_arp_lock, state->flags); in lec_priv_walk()
1099 struct lec_priv *priv = netdev_priv(dev); in lane2_resolve() local
1105 spin_lock_irqsave(&priv->lec_arp_lock, flags); in lane2_resolve()
1106 table = lec_arp_find(priv, dst_mac); in lane2_resolve()
1107 spin_unlock_irqrestore(&priv->lec_arp_lock, flags); in lane2_resolve()
1121 retval = send_to_lecd(priv, l_arp_xmt, dst_mac, NULL, NULL); in lane2_resolve()
1129 retval = send_to_lecd(priv, l_arp_xmt, dst_mac, NULL, skb); in lane2_resolve()
1146 struct lec_priv *priv = netdev_priv(dev); in lane2_associate_req() local
1151 kfree(priv->tlvs); /* NULL if there was no previous association */ in lane2_associate_req()
1153 priv->tlvs = kmemdup(tlvs, sizeoftlvs, GFP_KERNEL); in lane2_associate_req()
1154 if (priv->tlvs == NULL) in lane2_associate_req()
1156 priv->sizeoftlvs = sizeoftlvs; in lane2_associate_req()
1163 retval = send_to_lecd(priv, l_associate_req, NULL, NULL, skb); in lane2_associate_req()
1183 struct lec_priv *priv = netdev_priv(dev); in lane2_associate_ind() local
1190 struct lec_arp_table *entry = lec_arp_find(priv, mac_addr); in lane2_associate_ind()
1212 if (priv->lane2_ops && priv->lane2_ops->associate_indicator) { in lane2_associate_ind()
1213 priv->lane2_ops->associate_indicator(dev, mac_addr, in lane2_associate_ind()
1254 static void lec_arp_init(struct lec_priv *priv) in lec_arp_init() argument
1259 INIT_HLIST_HEAD(&priv->lec_arp_tables[i]); in lec_arp_init()
1260 INIT_HLIST_HEAD(&priv->lec_arp_empty_ones); in lec_arp_init()
1261 INIT_HLIST_HEAD(&priv->lec_no_forward); in lec_arp_init()
1262 INIT_HLIST_HEAD(&priv->mcast_fwds); in lec_arp_init()
1263 spin_lock_init(&priv->lec_arp_lock); in lec_arp_init()
1264 INIT_DELAYED_WORK(&priv->lec_arp_work, lec_arp_check_expire); in lec_arp_init()
1265 schedule_delayed_work(&priv->lec_arp_work, LEC_ARP_REFRESH_INTERVAL); in lec_arp_init()
1296 lec_arp_add(struct lec_priv *priv, struct lec_arp_table *entry) in lec_arp_add() argument
1300 tmp = &priv->lec_arp_tables[HASH(entry->mac_addr[ETH_ALEN - 1])]; in lec_arp_add()
1310 lec_arp_remove(struct lec_priv *priv, struct lec_arp_table *to_remove) in lec_arp_remove() argument
1331 &priv->lec_arp_tables[i], next) { in lec_arp_remove()
1366 static void dump_arp_table(struct lec_priv *priv) in dump_arp_table() argument
1372 pr_info("Dump %p:\n", priv); in dump_arp_table()
1375 &priv->lec_arp_tables[i], next) { in dump_arp_table()
1404 if (!hlist_empty(&priv->lec_no_forward)) in dump_arp_table()
1406 hlist_for_each_entry(rulla, &priv->lec_no_forward, next) { in dump_arp_table()
1429 if (!hlist_empty(&priv->lec_arp_empty_ones)) in dump_arp_table()
1431 hlist_for_each_entry(rulla, &priv->lec_arp_empty_ones, next) { in dump_arp_table()
1454 if (!hlist_empty(&priv->mcast_fwds)) in dump_arp_table()
1456 hlist_for_each_entry(rulla, &priv->mcast_fwds, next) { in dump_arp_table()
1481 #define dump_arp_table(priv) do { } while (0) argument
1487 static void lec_arp_destroy(struct lec_priv *priv) in lec_arp_destroy() argument
1494 cancel_delayed_work_sync(&priv->lec_arp_work); in lec_arp_destroy()
1500 spin_lock_irqsave(&priv->lec_arp_lock, flags); in lec_arp_destroy()
1503 &priv->lec_arp_tables[i], next) { in lec_arp_destroy()
1504 lec_arp_remove(priv, entry); in lec_arp_destroy()
1507 INIT_HLIST_HEAD(&priv->lec_arp_tables[i]); in lec_arp_destroy()
1511 &priv->lec_arp_empty_ones, next) { in lec_arp_destroy()
1517 INIT_HLIST_HEAD(&priv->lec_arp_empty_ones); in lec_arp_destroy()
1520 &priv->lec_no_forward, next) { in lec_arp_destroy()
1526 INIT_HLIST_HEAD(&priv->lec_no_forward); in lec_arp_destroy()
1528 hlist_for_each_entry_safe(entry, next, &priv->mcast_fwds, next) { in lec_arp_destroy()
1534 INIT_HLIST_HEAD(&priv->mcast_fwds); in lec_arp_destroy()
1535 priv->mcast_vcc = NULL; in lec_arp_destroy()
1536 spin_unlock_irqrestore(&priv->lec_arp_lock, flags); in lec_arp_destroy()
1542 static struct lec_arp_table *lec_arp_find(struct lec_priv *priv, in lec_arp_find() argument
1550 head = &priv->lec_arp_tables[HASH(mac_addr[ETH_ALEN - 1])]; in lec_arp_find()
1558 static struct lec_arp_table *make_entry(struct lec_priv *priv, in make_entry() argument
1573 to_return->priv = priv; in make_entry()
1588 if (entry->no_tries <= entry->priv->max_retry_count) { in lec_arp_expire_arp()
1590 send_to_lecd(entry->priv, l_rdesc_arp_xmt, in lec_arp_expire_arp()
1593 send_to_lecd(entry->priv, l_arp_xmt, in lec_arp_expire_arp()
1606 struct lec_priv *priv = to_remove->priv; in lec_arp_expire_vcc() local
1611 to_remove, priv, in lec_arp_expire_vcc()
1615 spin_lock_irqsave(&priv->lec_arp_lock, flags); in lec_arp_expire_vcc()
1617 spin_unlock_irqrestore(&priv->lec_arp_lock, flags); in lec_arp_expire_vcc()
1625 struct lec_priv *priv) in __lec_arp_check_expire() argument
1629 if ((entry->flags) & LEC_REMOTE_FLAG && priv->topology_change) in __lec_arp_check_expire()
1630 time_to_check = priv->forward_delay_time; in __lec_arp_check_expire()
1632 time_to_check = priv->aging_time; in __lec_arp_check_expire()
1641 lec_arp_remove(priv, entry); in __lec_arp_check_expire()
1648 priv->max_unknown_frame_time)) { in __lec_arp_check_expire()
1652 send_to_lecd(priv, l_svc_setup, in __lec_arp_check_expire()
1659 priv->path_switching_delay)) { in __lec_arp_check_expire()
1686 struct lec_priv *priv = in lec_arp_check_expire() local
1693 pr_debug("%p\n", priv); in lec_arp_check_expire()
1696 spin_lock_irqsave(&priv->lec_arp_lock, flags); in lec_arp_check_expire()
1699 &priv->lec_arp_tables[i], next) { in lec_arp_check_expire()
1700 if (__lec_arp_check_expire(entry, now, priv)) { in lec_arp_check_expire()
1704 spin_unlock_irqrestore(&priv->lec_arp_lock, in lec_arp_check_expire()
1716 spin_unlock_irqrestore(&priv->lec_arp_lock, flags); in lec_arp_check_expire()
1718 schedule_delayed_work(&priv->lec_arp_work, LEC_ARP_REFRESH_INTERVAL); in lec_arp_check_expire()
1725 static struct atm_vcc *lec_arp_resolve(struct lec_priv *priv, in lec_arp_resolve() argument
1735 switch (priv->lane_version) { in lec_arp_resolve()
1737 return priv->mcast_vcc; in lec_arp_resolve()
1740 return priv->mcast_vcc; in lec_arp_resolve()
1747 spin_lock_irqsave(&priv->lec_arp_lock, flags); in lec_arp_resolve()
1748 entry = lec_arp_find(priv, mac_to_find); in lec_arp_resolve()
1773 priv->maximum_unknown_frame_count) { in lec_arp_resolve()
1776 found = priv->mcast_vcc; in lec_arp_resolve()
1791 entry = make_entry(priv, mac_to_find); in lec_arp_resolve()
1794 found = priv->mcast_vcc; in lec_arp_resolve()
1797 lec_arp_add(priv, entry); in lec_arp_resolve()
1805 send_to_lecd(priv, l_rdesc_arp_xmt, mac_to_find, NULL, in lec_arp_resolve()
1808 send_to_lecd(priv, l_arp_xmt, mac_to_find, NULL, NULL); in lec_arp_resolve()
1812 found = priv->mcast_vcc; in lec_arp_resolve()
1816 spin_unlock_irqrestore(&priv->lec_arp_lock, flags); in lec_arp_resolve()
1821 lec_addr_delete(struct lec_priv *priv, const unsigned char *atm_addr, in lec_addr_delete() argument
1830 spin_lock_irqsave(&priv->lec_arp_lock, flags); in lec_addr_delete()
1833 &priv->lec_arp_tables[i], next) { in lec_addr_delete()
1837 lec_arp_remove(priv, entry); in lec_addr_delete()
1840 spin_unlock_irqrestore(&priv->lec_arp_lock, flags); in lec_addr_delete()
1844 spin_unlock_irqrestore(&priv->lec_arp_lock, flags); in lec_addr_delete()
1852 lec_arp_update(struct lec_priv *priv, const unsigned char *mac_addr, in lec_arp_update() argument
1864 spin_lock_irqsave(&priv->lec_arp_lock, flags); in lec_arp_update()
1865 entry = lec_arp_find(priv, mac_addr); in lec_arp_update()
1871 if (!hlist_empty(&priv->lec_arp_empty_ones)) { in lec_arp_update()
1873 &priv->lec_arp_empty_ones, next) { in lec_arp_update()
1877 tmp = lec_arp_find(priv, mac_addr); in lec_arp_update()
1892 lec_arp_add(priv, entry); in lec_arp_update()
1899 dump_arp_table(priv); in lec_arp_update()
1905 entry = lec_arp_find(priv, mac_addr); in lec_arp_update()
1907 entry = make_entry(priv, mac_addr); in lec_arp_update()
1911 lec_arp_add(priv, entry); in lec_arp_update()
1918 &priv->lec_arp_tables[i], next) { in lec_arp_update()
1941 send_to_lecd(priv, l_svc_setup, entry->mac_addr, atm_addr, NULL); in lec_arp_update()
1944 dump_arp_table(priv); in lec_arp_update()
1946 spin_unlock_irqrestore(&priv->lec_arp_lock, flags); in lec_arp_update()
1953 lec_vcc_added(struct lec_priv *priv, const struct atmlec_ioc *ioc_data, in lec_vcc_added() argument
1961 spin_lock_irqsave(&priv->lec_arp_lock, flags); in lec_vcc_added()
1966 entry = lec_arp_find(priv, bus_mac); in lec_vcc_added()
1975 entry = make_entry(priv, bus_mac); in lec_vcc_added()
1982 hlist_add_head(&entry->next, &priv->mcast_fwds); in lec_vcc_added()
2000 entry = make_entry(priv, bus_mac); in lec_vcc_added()
2008 entry->timer.expires = jiffies + priv->vcc_timeout_period; in lec_vcc_added()
2010 hlist_add_head(&entry->next, &priv->lec_no_forward); in lec_vcc_added()
2012 dump_arp_table(priv); in lec_vcc_added()
2028 &priv->lec_arp_tables[i], next) { in lec_vcc_added()
2042 if (priv->maximum_unknown_frame_count in lec_vcc_added()
2051 send_to_lecd(priv, l_flush_xmt, in lec_vcc_added()
2076 dump_arp_table(priv); in lec_vcc_added()
2083 entry = make_entry(priv, bus_mac); in lec_vcc_added()
2091 hlist_add_head(&entry->next, &priv->lec_arp_empty_ones); in lec_vcc_added()
2092 entry->timer.expires = jiffies + priv->vcc_timeout_period; in lec_vcc_added()
2096 dump_arp_table(priv); in lec_vcc_added()
2098 spin_unlock_irqrestore(&priv->lec_arp_lock, flags); in lec_vcc_added()
2101 static void lec_flush_complete(struct lec_priv *priv, unsigned long tran_id) in lec_flush_complete() argument
2109 spin_lock_irqsave(&priv->lec_arp_lock, flags); in lec_flush_complete()
2112 &priv->lec_arp_tables[i], next) { in lec_flush_complete()
2119 spin_unlock_irqrestore(&priv->lec_arp_lock, in lec_flush_complete()
2131 spin_unlock_irqrestore(&priv->lec_arp_lock, flags); in lec_flush_complete()
2132 dump_arp_table(priv); in lec_flush_complete()
2136 lec_set_flush_tran_id(struct lec_priv *priv, in lec_set_flush_tran_id() argument
2143 spin_lock_irqsave(&priv->lec_arp_lock, flags); in lec_set_flush_tran_id()
2146 &priv->lec_arp_tables[i], next) { in lec_set_flush_tran_id()
2153 spin_unlock_irqrestore(&priv->lec_arp_lock, flags); in lec_set_flush_tran_id()
2156 static int lec_mcast_make(struct lec_priv *priv, struct atm_vcc *vcc) in lec_mcast_make() argument
2173 spin_lock_irqsave(&priv->lec_arp_lock, flags); in lec_mcast_make()
2174 to_add = make_entry(priv, mac_addr); in lec_mcast_make()
2187 priv->mcast_vcc = vcc; in lec_mcast_make()
2188 lec_arp_add(priv, to_add); in lec_mcast_make()
2190 spin_unlock_irqrestore(&priv->lec_arp_lock, flags); in lec_mcast_make()
2194 static void lec_vcc_close(struct lec_priv *priv, struct atm_vcc *vcc) in lec_vcc_close() argument
2202 dump_arp_table(priv); in lec_vcc_close()
2204 spin_lock_irqsave(&priv->lec_arp_lock, flags); in lec_vcc_close()
2208 &priv->lec_arp_tables[i], next) { in lec_vcc_close()
2210 lec_arp_remove(priv, entry); in lec_vcc_close()
2212 if (priv->mcast_vcc == vcc) in lec_vcc_close()
2213 priv->mcast_vcc = NULL; in lec_vcc_close()
2219 &priv->lec_arp_empty_ones, next) { in lec_vcc_close()
2229 &priv->lec_no_forward, next) { in lec_vcc_close()
2238 hlist_for_each_entry_safe(entry, next, &priv->mcast_fwds, next) { in lec_vcc_close()
2247 spin_unlock_irqrestore(&priv->lec_arp_lock, flags); in lec_vcc_close()
2248 dump_arp_table(priv); in lec_vcc_close()
2252 lec_arp_check_empties(struct lec_priv *priv, in lec_arp_check_empties() argument
2261 spin_lock_irqsave(&priv->lec_arp_lock, flags); in lec_arp_check_empties()
2263 &priv->lec_arp_empty_ones, next) { in lec_arp_check_empties()
2270 tmp = lec_arp_find(priv, src); in lec_arp_check_empties()
2272 lec_arp_remove(priv, tmp); in lec_arp_check_empties()
2276 lec_arp_add(priv, entry); in lec_arp_check_empties()
2282 spin_unlock_irqrestore(&priv->lec_arp_lock, flags); in lec_arp_check_empties()