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

Reply via email to