Re: Question about using brctl and changing MAC addresses

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

 



On Thu, Mar 13, 2008 at 2:11 AM, Srinivas M.A. <srinivas.aji@xxxxxxxxx> wrote:
> 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)
>

Thanks, Srinivas!  There's the 'additional' patch I was referencing. :-)
_______________________________________________
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