qlcnic: fix mac learning
authoramit salecha <amit.salecha@qlogic.com>
Tue, 26 Oct 2010 17:53:07 +0000 (17:53 +0000)
committerDavid S. Miller <davem@davemloft.net>
Wed, 27 Oct 2010 19:21:53 +0000 (12:21 -0700)
In failover bonding case, same mac address can be programmed on other slave function.
Fw will delete old entry (original func) associated with that mac address.
Need to reporgram mac address, if failover again happen to original function.

Signed-off-by: Amit Kumar Salecha <amit.salecha@qlogic.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/qlcnic/qlcnic.h
drivers/net/qlcnic/qlcnic_main.c

index 26c37d3a5868ce2bf7e73ba98da5456006c02c53..a60ff17eafd8387d561fb4bdda43be1282adae19 100644 (file)
@@ -942,6 +942,7 @@ struct qlcnic_ipaddr {
 #define QLCNIC_LOOPBACK_TEST           2
 
 #define QLCNIC_FILTER_AGE      80
+#define QLCNIC_READD_AGE       20
 #define QLCNIC_LB_MAX_FILTERS  64
 
 struct qlcnic_filter {
index f047c7c48314ccd48c76df8d68babb5d24c796d5..5a3ce084c3914d0fcf764f3cce0785d1f59f3ca0 100644 (file)
@@ -1860,6 +1860,11 @@ qlcnic_send_filter(struct qlcnic_adapter *adapter,
        hlist_for_each_entry_safe(tmp_fil, tmp_hnode, n, head, fnode) {
                if (!memcmp(tmp_fil->faddr, &src_addr, ETH_ALEN) &&
                            tmp_fil->vlan_id == vlan_id) {
+
+                       if (jiffies >
+                           (QLCNIC_READD_AGE * HZ + tmp_fil->ftime))
+                               qlcnic_change_filter(adapter, src_addr, vlan_id,
+                                                               tx_ring);
                        tmp_fil->ftime = jiffies;
                        return;
                }