bridge: track last used time in forwarding table
authorstephen hemminger <shemminger@vyatta.com>
Mon, 4 Apr 2011 14:03:28 +0000 (14:03 +0000)
committerDavid S. Miller <davem@davemloft.net>
Tue, 5 Apr 2011 00:22:26 +0000 (17:22 -0700)
Adds tracking the last used time in forwarding table.
Rename ageing_timer to updated to better describe it.

Signed-off-by: Stephen Hemminger <shemminger@vyatta.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
net/bridge/br_fdb.c
net/bridge/br_input.c
net/bridge/br_private.h

index 70bd0bf04099bcbe8a5bb197f76bc8f8c26ad136..b39135285f83f7d6be8a6051581f1450a061f0ad 100644 (file)
@@ -62,7 +62,7 @@ static inline int has_expired(const struct net_bridge *br,
                                  const struct net_bridge_fdb_entry *fdb)
 {
        return !fdb->is_static &&
-               time_before_eq(fdb->ageing_timer + hold_time(br), jiffies);
+               time_before_eq(fdb->updated + hold_time(br), jiffies);
 }
 
 static inline int br_mac_hash(const unsigned char *mac)
@@ -140,7 +140,7 @@ void br_fdb_cleanup(unsigned long _data)
                        unsigned long this_timer;
                        if (f->is_static)
                                continue;
-                       this_timer = f->ageing_timer + delay;
+                       this_timer = f->updated + delay;
                        if (time_before_eq(this_timer, jiffies))
                                fdb_delete(f);
                        else if (time_before(this_timer, next_timer))
@@ -293,7 +293,7 @@ int br_fdb_fillbuf(struct net_bridge *br, void *buf,
 
                        fe->is_local = f->is_local;
                        if (!f->is_static)
-                               fe->ageing_timer_value = jiffies_to_clock_t(jiffies - f->ageing_timer);
+                               fe->ageing_timer_value = jiffies_to_clock_t(jiffies - f->updated);
                        ++fe;
                        ++num;
                }
@@ -330,7 +330,7 @@ static struct net_bridge_fdb_entry *fdb_create(struct hlist_head *head,
                fdb->dst = source;
                fdb->is_local = 0;
                fdb->is_static = 0;
-               fdb->ageing_timer = jiffies;
+               fdb->updated = fdb->used = jiffies;
                hlist_add_head_rcu(&fdb->hlist, head);
        }
        return fdb;
@@ -404,7 +404,7 @@ void br_fdb_update(struct net_bridge *br, struct net_bridge_port *source,
                } else {
                        /* fastpath: update of existing entry */
                        fdb->dst = source;
-                       fdb->ageing_timer = jiffies;
+                       fdb->updated = jiffies;
                }
        } else {
                spin_lock(&br->hash_lock);
index e2160792e1bce49869fb5137a73deeabed8e1135..785932d7ad32ca1b643f694b375ac2cff80ebfa6 100644 (file)
@@ -98,9 +98,10 @@ int br_handle_frame_finish(struct sk_buff *skb)
        }
 
        if (skb) {
-               if (dst)
+               if (dst) {
+                       dst->used = jiffies;
                        br_forward(dst->dst, skb, skb2);
-               else
+               else
                        br_flood_forward(br, skb, skb2);
        }
 
index 387013d337456a8112c7cfa89ce971eb000a5605..a0e6b94c515bee8be9eae42e591bd977f0d5e58d 100644 (file)
@@ -64,7 +64,8 @@ struct net_bridge_fdb_entry
        struct net_bridge_port          *dst;
 
        struct rcu_head                 rcu;
-       unsigned long                   ageing_timer;
+       unsigned long                   updated;
+       unsigned long                   used;
        mac_addr                        addr;
        unsigned char                   is_local;
        unsigned char                   is_static;