Gitweb:     
http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=ffe1d49cc300f3dff990093aa952a2fbb371c1b6
Commit:     ffe1d49cc300f3dff990093aa952a2fbb371c1b6
Parent:     b86c45035c439cfa6ef5b2e4bf080b24bd8765f1
Author:     Stephen Hemminger <[EMAIL PROTECTED]>
AuthorDate: Mon Apr 9 11:49:58 2007 -0700
Committer:  David S. Miller <[EMAIL PROTECTED]>
CommitDate: Wed Apr 25 22:28:50 2007 -0700

    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 <[EMAIL PROTECTED]>
---
 net/bridge/br_device.c |   19 +++++++------------
 1 files changed, 7 insertions(+), 12 deletions(-)

diff --git a/net/bridge/br_device.c b/net/bridge/br_device.c
index b22ada5..39b87da 100644
--- a/net/bridge/br_device.c
+++ b/net/bridge/br_device.c
@@ -83,27 +83,22 @@ static int br_change_mtu(struct net_device *dev, int 
new_mtu)
        return 0;
 }
 
-/* Allow setting mac address of pseudo-bridge to be same as
- * any of the bound interfaces
- */
+/* Allow setting mac address to any valid ethernet address. */
 static int br_set_mac_address(struct net_device *dev, void *p)
 {
        struct net_bridge *br = netdev_priv(dev);
        struct sockaddr *addr = p;
        struct net_bridge_port *port;
-       int err = -EADDRNOTAVAIL;
+
+       if (!is_valid_ether_addr(addr->sa_data))
+               return -EINVAL;
 
        spin_lock_bh(&br->lock);
-       list_for_each_entry(port, &br->port_list, list) {
-               if (!compare_ether_addr(port->dev->dev_addr, addr->sa_data)) {
-                       br_stp_change_bridge_id(br, addr->sa_data);
-                       err = 0;
-                       break;
-               }
-       }
+       memcpy(dev->dev_addr, addr->sa_data, ETH_ALEN);
+       br_stp_change_bridge_id(br, addr->sa_data);
        spin_unlock_bh(&br->lock);
 
-       return err;
+       return 0;
 }
 
 static void br_getinfo(struct net_device *dev, struct ethtool_drvinfo *info)
-
To unsubscribe from this list: send the line "unsubscribe git-commits-head" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to