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