All of lore.kernel.org
 help / color / mirror / Atom feed
From: Stephen Hemminger <shemminger@vyatta.com>
To: Daniel Robbins <drobbins@funtoo.org>
Cc: bridge@lists.linux-foundation.org
Subject: Re: [Bridge] 2.6.27: persistent MAC assignment to bridge not working
Date: Fri, 8 May 2009 16:27:19 -0700	[thread overview]
Message-ID: <20090508162719.6cbc3022@nehalam> (raw)
In-Reply-To: <de7adc5e0905081620s69f3e874xa50636b0b6fc65d3@mail.gmail.com>

On Fri, 8 May 2009 17:20:08 -0600
Daniel Robbins <drobbins@funtoo.org> wrote:

> 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 <shemminger@vyatta.com> wrote:
> > On Fri, 8 May 2009 15:31:43 -0600
> > Daniel Robbins <drobbins@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 <shemminger@vyatta.com>  2008-06-17 16:10:06
> > Committer: David S. Miller <davem@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 <shemminger@vyatta.com>
> >    Signed-off-by: David S. Miller <davem@davemloft.net>
> >
> >

# brctl addbr brex0
# modprobe dummy

# ip li set dev brex0 addr 0c:01:02:03:04:05
# ip li show dev brex0
22: brex0: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN 
    link/ether 0c:01:02:03:04:05 brd ff:ff:ff:ff:ff:ff
# brctl addif brex0 dummy0
# ip li show dev brex0
22: brex0: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN 
    link/ether 0c:01:02:03:04:05 brd ff:ff:ff:ff:ff:ff

-- 

  reply	other threads:[~2009-05-08 23:27 UTC|newest]

Thread overview: 7+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2009-05-08 21:31 [Bridge] 2.6.27: persistent MAC assignment to bridge not working Daniel Robbins
2009-05-08 22:54 ` Stephen Hemminger
2009-05-08 23:20   ` Daniel Robbins
2009-05-08 23:27     ` Stephen Hemminger [this message]
2009-05-09  1:08       ` Daniel Robbins
2009-05-09  3:42         ` Stephen Hemminger
2009-05-09  6:34           ` Daniel Robbins

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20090508162719.6cbc3022@nehalam \
    --to=shemminger@vyatta.com \
    --cc=bridge@lists.linux-foundation.org \
    --cc=drobbins@funtoo.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.