Re: Question about using brctl and changing MAC addresses

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Philip, sorry for the duplicate email. Forgot to CC the list the first time.

Perhaps the needed patch is the following, which allows setting the
bridge hardware address to anything rather than just one of the port
interface addresses. Seems to have got in after Linux  2.6.21, so
should be in 2.6.22.

[~/git/linux-2.6] git-describe ffe1d49cc300f3dff990093aa952a2fbb371c1b6
v2.6.21-324-gffe1d49

[~/git/linux-2.6] git-diff-tree -p --pretty=fuller
ffe1d49cc300f3dff990093aa952a2fbb371c1b6
commit ffe1d49cc300f3dff990093aa952a2fbb371c1b6
Author:     Stephen Hemminger <shemminger@xxxxxxxxxxxxxxxxxxxx>
AuthorDate: Mon Apr 9 11:49:58 2007 -0700
Commit:     David S. Miller <davem@xxxxxxxxxxxxxxxxxxxx>
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 <shemminger@xxxxxxxxxxxxxxxxxxxx>

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)


On Thu, Mar 13, 2008 at 10:09 AM, Philip Prindeville
<philipp_subx@xxxxxxxxxxxxxxxxxxxxx> wrote:
>
>  Well, I don't get it then.
>
>  I'm running Linux 2.6.20, with bridge-utils-1.2, and I'm still seeing it.
>
>  Can you send me the link to the patch, and I'll make sure it's in my
>  sources?
>
>  Thanks,
>
>  -Philip
_______________________________________________
Bridge mailing list
Bridge@xxxxxxxxxxxxxxxxxxxxxxxxxx
https://lists.linux-foundation.org/mailman/listinfo/bridge

[Index of Archives]     [Netdev]     [AoE Tools]     [Linux Wireless]     [Kernel Newbies]     [Security]     [Linux for Hams]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux RAID]     [Linux Admin]     [Samba]     [Video 4 Linux]

  Powered by Linux