This commit is in my 2.6.27-based kernel. It does not appear to be working. Can you show me what steps I should take to confirm that this sticky code is functioning properly, ie commands and expected results?
Thanks. -Daniel On Fri, May 8, 2009 at 4:54 PM, Stephen Hemminger <shemmin...@vyatta.com> wrote: > On Fri, 8 May 2009 15:31:43 -0600 > Daniel Robbins <drobb...@funtoo.org> wrote: > >> Hi All, >> >> I am trying to figure out how to get a persistent, non-changing MAC >> address assigned to a bridge. It looks like there is new functionality >> in 2.6.27 to allow this to happen, specifically, in: >> >> void br_stp_recalculate_bridge_id(struct net_bridge *br) >> [...] >> /* user has chosen a value so keep it */ >> if (br->flags & BR_SET_MAC_ADDR) >> return; >> >> and in.. >> >> static int br_set_mac_address(struct net_device *dev, void *p) >> [...] >> br->flags |= BR_SET_MAC_ADDR; >> >> However, I cannot get this functionality to work as it appears it >> should. If I manually set a bridge's MAC address to an arbitrary >> value, as follows: >> >> # ifconfig br0 hw ether "xx:xx:xx:xx:xx:xx" >> >> Then, subsequent calls such as the following seem to still change the >> bridge's MAC address: >> >> # brctl addif br0 veth100.0 >> # brctl delif br0 veth100.0 >> >> Am I doing something wrong? What is the proper way to take advantage >> of the new code in 2.6.27? >> >> The only mechanism that I have found that appears to achieve my >> desired result is application of Deitmar Maurer's 2.6.24 patch which, >> after being applied, seems to disable the dynamic nature of the >> bridge's MAC, so that br0 persistently uses the MAC of the first >> interface that was added to the bridge. Here is this patch that seems >> to be working for me: >> >> --- linux-2.6.24-openvz.org/net/bridge/br_stp_if.c.org 2008-06-11 >> 09:15:16.000000000 +0200 >> +++ linux-2.6.24-openvz.org/net/bridge/br_stp_if.c 2008-06-11 >> 09:44:53.000000000 +0200 >> @@ -217,10 +217,7 @@ >> struct net_bridge_port *p; >> >> list_for_each_entry(p, &br->port_list, list) { >> - if (addr == br_mac_zero || >> - memcmp(p->dev->dev_addr, addr, ETH_ALEN) < 0) >> - addr = p->dev->dev_addr; >> - >> + addr = p->dev->dev_addr; >> } >> >> if (compare_ether_addr(br->bridge_id.addr, addr)) >> -------------------------- >> >> However, when I look at the 2.6.27 source code, it seems like this >> patch should no longer be needed and an "ifconfig br0 hw ether >> "xx:xx:xx:xx:xx:xx" should be sufficient. Am I doing something wrong? >> >> Thanks for your time, >> >> Daniel Robbins > > It was fixed by: > > Author: Stephen Hemminger <shemmin...@vyatta.com> 2008-06-17 16:10:06 > Committer: David S. Miller <da...@davemloft.net> 2008-06-17 16:10:06 > Parent: 0b040829952d84bf2a62526f0e24b624e0699447 (net: remove CVS keywords) > Branches: master, remotes/origin/master > Follows: v2.6.26-rc6 > Precedes: v2.6.27-rc1 > > bridge: make bridge address settings sticky > > Normally, the bridge just chooses the smallest mac address as the > bridge id and mac address of bridge device. But if the administrator > has explictly set the interface address then don't change it. > > Signed-off-by: Stephen Hemminger <shemmin...@vyatta.com> > Signed-off-by: David S. Miller <da...@davemloft.net> > > _______________________________________________ Bridge mailing list Bridge@lists.linux-foundation.org https://lists.linux-foundation.org/mailman/listinfo/bridge