Ethernet Bridge development
 help / color / mirror / Atom feed
* [Bridge] [1/11] bridge - handle delete of multiple devices with same address
@ 2004-05-21 22:45 Stephen Hemminger
  2004-05-24  9:08 ` [Bridge] " Diego Liziero
  0 siblings, 1 reply; 2+ messages in thread
From: Stephen Hemminger @ 2004-05-21 22:45 UTC (permalink / raw)
  To: David S. Miller; +Cc: netdev, bridge, David Woodhouse, Diego Liziero

This fixes the issue discovered when removing bluetooth devices from a bridge.
Need to add special case code when forwarding table is being cleaned up to 
handle the case where several devices share the same hardware address.

(Could fix on 2.4 if there is demand for it)
 
diff -Nru a/net/bridge/br_fdb.c b/net/bridge/br_fdb.c
--- a/net/bridge/br_fdb.c	2004-05-20 08:43:46 -07:00
+++ b/net/bridge/br_fdb.c	2004-05-20 08:43:46 -07:00
@@ -157,9 +157,28 @@
 		hlist_for_each_safe(h, g, &br->hash[i]) {
 			struct net_bridge_fdb_entry *f
 				= hlist_entry(h, struct net_bridge_fdb_entry, hlist);
-			if (f->dst == p) {
-				fdb_delete(f);
+			if (f->dst != p) 
+				continue;
+
+			/*
+			 * if multiple ports all have the same device address
+			 * then when one port is deleted, assign
+			 * the local entry to other port
+			 */
+			if (f->is_local) {
+				struct net_bridge_port *op;
+				list_for_each_entry(op, &br->port_list, list) {
+					if (op != p && 
+					    !memcmp(op->dev->dev_addr,
+						    f->addr.addr, ETH_ALEN)) {
+						f->dst = op;
+						goto skip_delete;
+					}
+				}
 			}
+
+			fdb_delete(f);
+		skip_delete: ;
 		}
 	}
 	write_unlock_bh(&br->hash_lock);

^ permalink raw reply	[flat|nested] 2+ messages in thread

* [Bridge] Re: [1/11] bridge - handle delete of multiple devices with same address
  2004-05-21 22:45 [Bridge] [1/11] bridge - handle delete of multiple devices with same address Stephen Hemminger
@ 2004-05-24  9:08 ` Diego Liziero
  0 siblings, 0 replies; 2+ messages in thread
From: Diego Liziero @ 2004-05-24  9:08 UTC (permalink / raw)
  To: Stephen Hemminger; +Cc: bluez-devel, bridge, kishoreak

Great work Stephen, just tested with Bluetooth PAN
and everything works now.

For the bluetooth people, here is the bk link to the patch:
http://linux.bkbits.net:8080/linux-2.5/cset@40afb9c8_3WOgNFCBlahWsksS_5icQ?nav=index.html|ChangeSet@-3d

Thanks to all the people that helped me.
Regards,
Diego.

On Sat, 2004-05-22 at 00:45, Stephen Hemminger wrote:
> This fixes the issue discovered when removing bluetooth devices from a bridge.
> Need to add special case code when forwarding table is being cleaned up to 
> handle the case where several devices share the same hardware address.
> 
> (Could fix on 2.4 if there is demand for it)
>  
> diff -Nru a/net/bridge/br_fdb.c b/net/bridge/br_fdb.c
> --- a/net/bridge/br_fdb.c	2004-05-20 08:43:46 -07:00
> +++ b/net/bridge/br_fdb.c	2004-05-20 08:43:46 -07:00
> @@ -157,9 +157,28 @@
>  		hlist_for_each_safe(h, g, &br->hash[i]) {
>  			struct net_bridge_fdb_entry *f
>  				= hlist_entry(h, struct net_bridge_fdb_entry, hlist);
> -			if (f->dst == p) {
> -				fdb_delete(f);
> +			if (f->dst != p) 
> +				continue;
> +
> +			/*
> +			 * if multiple ports all have the same device address
> +			 * then when one port is deleted, assign
> +			 * the local entry to other port
> +			 */
> +			if (f->is_local) {
> +				struct net_bridge_port *op;
> +				list_for_each_entry(op, &br->port_list, list) {
> +					if (op != p && 
> +					    !memcmp(op->dev->dev_addr,
> +						    f->addr.addr, ETH_ALEN)) {
> +						f->dst = op;
> +						goto skip_delete;
> +					}
> +				}
>  			}
> +
> +			fdb_delete(f);
> +		skip_delete: ;
>  		}
>  	}
>  	write_unlock_bh(&br->hash_lock);


^ permalink raw reply	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2004-05-24  9:08 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2004-05-21 22:45 [Bridge] [1/11] bridge - handle delete of multiple devices with same address Stephen Hemminger
2004-05-24  9:08 ` [Bridge] " Diego Liziero

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox