On Thu, Mar 13, 2008 at 2:11 AM, Srinivas M.A. <[EMAIL PROTECTED]> 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 <[EMAIL PROTECTED]>
> AuthorDate: Mon Apr 9 11:49:58 2007 -0700
> Commit: 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]>
>
> 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
[email protected]
https://lists.linux-foundation.org/mailman/listinfo/bridge