--- zzzz-none-000/linux-2.6.32.60/net/bridge/br_stp_if.c 2012-10-07 21:41:24.000000000 +0000 +++ ur8-7270-606/linux-2.6.32.60/net/bridge/br_stp_if.c 2011-07-20 07:23:51.000000000 +0000 @@ -203,6 +203,25 @@ br_become_root_bridge(br); } +/* AVM */ +void br_stp_set_bridge_id(struct net_bridge *br, void *addr) +{ + if (memcmp(br->bridge_id.addr, addr, ETH_ALEN)) { + /* + * alte mac aus der fdb loeschen, wenn sie nicht zu einem port + * der br. gehoert + */ + br_fdb_delete_by_mac_if_local_without_port(br, br->bridge_id.addr); + /* + * hier wird im fdb entry der port nicht ueberschrieben, + * wenn die mac zu einem port der bridge gehoert + */ + br_fdb_insert(br, 0/*no attached port*/, addr); + br_stp_change_bridge_id(br, addr); + } +} + + /* should be aligned on 2 bytes for compare_ether_addr() */ static const unsigned short br_mac_zero_aligned[ETH_ALEN >> 1]; @@ -225,8 +244,11 @@ } - if (compare_ether_addr(br->bridge_id.addr, addr)) + if (compare_ether_addr(br->bridge_id.addr, addr)) { + /* alte mac aus der fdb loeschen, wenn sie nicht zu einem port der br. gehört */ + br_fdb_delete_by_mac_if_local_without_port(br, br->bridge_id.addr); br_stp_change_bridge_id(br, addr); + } } /* called under bridge lock */