Lines Matching refs:br
28 static int fdb_insert(struct net_bridge *br, struct net_bridge_port *source,
55 static inline unsigned long hold_time(const struct net_bridge *br) in hold_time() argument
57 return br->topology_change ? br->forward_delay : br->ageing_time; in hold_time()
60 static inline int has_expired(const struct net_bridge *br, in has_expired() argument
64 && time_before_eq(fdb->ageing_timer + hold_time(br), jiffies); in has_expired()
82 struct net_bridge *br = p->br; in br_fdb_changeaddr() local
85 spin_lock_bh(&br->hash_lock); in br_fdb_changeaddr()
90 hlist_for_each(h, &br->hash[i]) { in br_fdb_changeaddr()
97 list_for_each_entry(op, &br->port_list, list) { in br_fdb_changeaddr()
114 fdb_insert(br, p, newaddr); in br_fdb_changeaddr()
116 spin_unlock_bh(&br->hash_lock); in br_fdb_changeaddr()
121 struct net_bridge *br = (struct net_bridge *)_data; in br_fdb_cleanup() local
122 unsigned long delay = hold_time(br); in br_fdb_cleanup()
123 unsigned long next_timer = jiffies + br->forward_delay; in br_fdb_cleanup()
126 spin_lock_bh(&br->hash_lock); in br_fdb_cleanup()
131 hlist_for_each_entry_safe(f, h, n, &br->hash[i], hlist) { in br_fdb_cleanup()
142 spin_unlock_bh(&br->hash_lock); in br_fdb_cleanup()
146 mod_timer(&br->gc_timer, round_jiffies(next_timer + HZ/4)); in br_fdb_cleanup()
150 void br_fdb_flush(struct net_bridge *br) in br_fdb_flush() argument
154 spin_lock_bh(&br->hash_lock); in br_fdb_flush()
158 hlist_for_each_entry_safe(f, h, n, &br->hash[i], hlist) { in br_fdb_flush()
163 spin_unlock_bh(&br->hash_lock); in br_fdb_flush()
169 void br_fdb_delete_by_port(struct net_bridge *br, in br_fdb_delete_by_port() argument
175 spin_lock_bh(&br->hash_lock); in br_fdb_delete_by_port()
179 hlist_for_each_safe(h, g, &br->hash[i]) { in br_fdb_delete_by_port()
194 list_for_each_entry(op, &br->port_list, list) { in br_fdb_delete_by_port()
208 spin_unlock_bh(&br->hash_lock); in br_fdb_delete_by_port()
212 struct net_bridge_fdb_entry *__br_fdb_get(struct net_bridge *br, in __br_fdb_get() argument
218 hlist_for_each_entry_rcu(fdb, h, &br->hash[br_mac_hash(addr)], hlist) { in __br_fdb_get()
220 if (unlikely(has_expired(br, fdb))) in __br_fdb_get()
230 struct net_bridge_fdb_entry *br_fdb_get(struct net_bridge *br, in br_fdb_get() argument
236 fdb = __br_fdb_get(br, addr); in br_fdb_get()
261 int br_fdb_fillbuf(struct net_bridge *br, void *buf, in br_fdb_fillbuf() argument
273 hlist_for_each_entry_rcu(f, h, &br->hash[i], hlist) { in br_fdb_fillbuf()
277 if (has_expired(br, f)) in br_fdb_fillbuf()
340 static int fdb_insert(struct net_bridge *br, struct net_bridge_port *source, in fdb_insert() argument
343 struct hlist_head *head = &br->hash[br_mac_hash(addr)]; in fdb_insert()
369 int br_fdb_insert(struct net_bridge *br, struct net_bridge_port *source, in br_fdb_insert() argument
374 spin_lock_bh(&br->hash_lock); in br_fdb_insert()
375 ret = fdb_insert(br, source, addr); in br_fdb_insert()
376 spin_unlock_bh(&br->hash_lock); in br_fdb_insert()
380 void br_fdb_update(struct net_bridge *br, struct net_bridge_port *source, in br_fdb_update() argument
383 struct hlist_head *head = &br->hash[br_mac_hash(addr)]; in br_fdb_update()
387 if (hold_time(br) == 0) in br_fdb_update()
409 spin_lock(&br->hash_lock); in br_fdb_update()
415 spin_unlock(&br->hash_lock); in br_fdb_update()