bridge: allow changing hardware address to any valid address
For case of bridging pseudo devices, the get created/destroyed (Xen) need to allow setting address to any valid value. Signed-off-by: Stephen Hemminger <shemminger@linux-foundation.org>
This commit is contained in:
committed by
David S. Miller
parent
b86c45035c
commit
ffe1d49cc3
@@ -83,27 +83,22 @@ static int br_change_mtu(struct net_device *dev, int new_mtu)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Allow setting mac address of pseudo-bridge to be same as
|
/* Allow setting mac address to any valid ethernet address. */
|
||||||
* any of the bound interfaces
|
|
||||||
*/
|
|
||||||
static int br_set_mac_address(struct net_device *dev, void *p)
|
static int br_set_mac_address(struct net_device *dev, void *p)
|
||||||
{
|
{
|
||||||
struct net_bridge *br = netdev_priv(dev);
|
struct net_bridge *br = netdev_priv(dev);
|
||||||
struct sockaddr *addr = p;
|
struct sockaddr *addr = p;
|
||||||
struct net_bridge_port *port;
|
struct net_bridge_port *port;
|
||||||
int err = -EADDRNOTAVAIL;
|
|
||||||
|
if (!is_valid_ether_addr(addr->sa_data))
|
||||||
|
return -EINVAL;
|
||||||
|
|
||||||
spin_lock_bh(&br->lock);
|
spin_lock_bh(&br->lock);
|
||||||
list_for_each_entry(port, &br->port_list, list) {
|
memcpy(dev->dev_addr, addr->sa_data, ETH_ALEN);
|
||||||
if (!compare_ether_addr(port->dev->dev_addr, addr->sa_data)) {
|
|
||||||
br_stp_change_bridge_id(br, addr->sa_data);
|
br_stp_change_bridge_id(br, addr->sa_data);
|
||||||
err = 0;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
spin_unlock_bh(&br->lock);
|
spin_unlock_bh(&br->lock);
|
||||||
|
|
||||||
return err;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void br_getinfo(struct net_device *dev, struct ethtool_drvinfo *info)
|
static void br_getinfo(struct net_device *dev, struct ethtool_drvinfo *info)
|
||||||
|
Reference in New Issue
Block a user