提交 ffe1d49c 编写于 作者: S Stephen Hemminger 提交者: David S. Miller

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: NStephen Hemminger <shemminger@linux-foundation.org>
上级 b86c4503
...@@ -83,27 +83,22 @@ static int br_change_mtu(struct net_device *dev, int new_mtu) ...@@ -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)
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册