@@ -368,6 +368,7 @@ void br_dev_setup(struct net_device *dev)
br->bridge_id.prio[1] = 0x00;
ether_addr_copy(br->group_addr, eth_reserved_addr_base);
+ ether_addr_copy(br->random_init_addr, dev->dev_addr);
br->stp_enabled = BR_NO_STP;
br->group_fwd_mask = BR_GROUPFWD_DEFAULT;
@@ -240,6 +240,7 @@ struct net_bridge
unsigned long bridge_hello_time;
unsigned long bridge_forward_delay;
+ u8 random_init_addr[ETH_ALEN];
u8 group_addr[ETH_ALEN];
u16 root_port;
@@ -239,6 +239,9 @@ bool br_stp_recalculate_bridge_id(struct net_bridge *br)
if (ether_addr_equal(br->bridge_id.addr, addr))
return false; /* no change */
+ if (ether_addr_equal(addr, br_mac_zero))
+ addr = br->random_init_addr;
+
br_stp_change_bridge_id(br, addr);
return true;
}