From: Andy Gospodarek <andy@greyhouse.net> To: Jiri Pirko <jpirko@redhat.com> Cc: netdev@vger.kernel.org, jgarzik@pobox.com, davem@davemloft.net, shemminger@linux-foundation.org, bridge@lists.linux-foundation.org, fubar@us.ibm.com, bonding-devel@lists.sourceforge.net, kaber@trash.net, mschmidt@redhat.com, dada1@cosmosbay.com Subject: Re: [PATCH net-next] bonding: allow bond in mode balance-alb to work properly in bridge -try4.1 Date: Tue, 26 May 2009 12:32:42 -0400 [thread overview] Message-ID: <20090526163242.GE6608@gospo.rdu.redhat.com> (raw) In-Reply-To: <20090526151717.GB11147@psychotron.englab.brq.redhat.com> On Tue, May 26, 2009 at 05:17:17PM +0200, Jiri Pirko wrote: > [PATCH net-next] bonding: allow bond in mode balance-alb to work properly in bridge -try4.1 > > Hi all. > > The problem is described in following bugzilla: > https://bugzilla.redhat.com/show_bug.cgi?id=487763 > > Basically here's what's going on. In every mode, bonding interface uses the same > mac address for all enslaved devices (except fail_over_mac). Only balance-alb > will simultaneously use multiple MAC addresses across different slaves. When you > put this kind of bond device into a bridge it will only add one of mac adresses > into a hash list of mac addresses, say X. This mac address is marked as local. > But this bonding interface also has mac address Y. Now then packet arrives with > destination address Y, this address is not marked as local and the packed looks > like it needs to be forwarded. This packet is then lost which is wrong. > > Notice that interfaces can be added and removed from bond while it is in bridge. > > *** > When the multiple addresses for bridge port approach failed to solve this issue > due to STP I started to think other way to solve this. I returned to previous > solution but tweaked one. > > This patch solves the situation in the bonding without touching bridge code. > For every incoming frame to bonding the destination address is compared to > current address of the slave device from which tha packet came. If these two > match destination address is replaced by mac address of the master. This address > is known by bridge so it is delivered properly. Did you test this with a bond with more than 2 ports? I ask because I might also expect a check against all the members of the bond (rather than simply the receiving device). That check would be quite expensive for every frame and I think the scenario is quite unlikely based on the frequency of 'learning frames' sent by the alb code (so the switch connected to the host should have it's forwarding database correct), but it might be something to think about in the future. > I experimentally tried that this works as good as searching through the slave > list (v4 of this patch). > > I was forced to create a new header because I need to use > compare_ether_addr_64bits() (defined in linux/etherdevice.h) in > linux/netdevice.h. I've hit some cross include issues. I think that it's good > to have skb_bond_should_drop() in a separate file anyway. > > Jirka > > > Signed-off-by: Jiri Pirko <jpirko@redhat.com> > This certainly won't cure all of the problems that arise with bonding and bridging interactions, but it's a step in the right direction. Acked-by: Andy Gospodarek <andy@greyhouse.net>
WARNING: multiple messages have this Message-ID (diff)
From: Andy Gospodarek <andy@greyhouse.net> To: Jiri Pirko <jpirko@redhat.com> Cc: fubar@us.ibm.com, netdev@vger.kernel.org, bridge@lists.linux-foundation.org, mschmidt@redhat.com, bonding-devel@lists.sourceforge.net, jgarzik@pobox.com, dada1@cosmosbay.com, davem@davemloft.net Subject: Re: [Bridge] [PATCH net-next] bonding: allow bond in mode balance-alb to work properly in bridge -try4.1 Date: Tue, 26 May 2009 12:32:42 -0400 [thread overview] Message-ID: <20090526163242.GE6608@gospo.rdu.redhat.com> (raw) In-Reply-To: <20090526151717.GB11147@psychotron.englab.brq.redhat.com> On Tue, May 26, 2009 at 05:17:17PM +0200, Jiri Pirko wrote: > [PATCH net-next] bonding: allow bond in mode balance-alb to work properly in bridge -try4.1 > > Hi all. > > The problem is described in following bugzilla: > https://bugzilla.redhat.com/show_bug.cgi?id=487763 > > Basically here's what's going on. In every mode, bonding interface uses the same > mac address for all enslaved devices (except fail_over_mac). Only balance-alb > will simultaneously use multiple MAC addresses across different slaves. When you > put this kind of bond device into a bridge it will only add one of mac adresses > into a hash list of mac addresses, say X. This mac address is marked as local. > But this bonding interface also has mac address Y. Now then packet arrives with > destination address Y, this address is not marked as local and the packed looks > like it needs to be forwarded. This packet is then lost which is wrong. > > Notice that interfaces can be added and removed from bond while it is in bridge. > > *** > When the multiple addresses for bridge port approach failed to solve this issue > due to STP I started to think other way to solve this. I returned to previous > solution but tweaked one. > > This patch solves the situation in the bonding without touching bridge code. > For every incoming frame to bonding the destination address is compared to > current address of the slave device from which tha packet came. If these two > match destination address is replaced by mac address of the master. This address > is known by bridge so it is delivered properly. Did you test this with a bond with more than 2 ports? I ask because I might also expect a check against all the members of the bond (rather than simply the receiving device). That check would be quite expensive for every frame and I think the scenario is quite unlikely based on the frequency of 'learning frames' sent by the alb code (so the switch connected to the host should have it's forwarding database correct), but it might be something to think about in the future. > I experimentally tried that this works as good as searching through the slave > list (v4 of this patch). > > I was forced to create a new header because I need to use > compare_ether_addr_64bits() (defined in linux/etherdevice.h) in > linux/netdevice.h. I've hit some cross include issues. I think that it's good > to have skb_bond_should_drop() in a separate file anyway. > > Jirka > > > Signed-off-by: Jiri Pirko <jpirko@redhat.com> > This certainly won't cure all of the problems that arise with bonding and bridging interactions, but it's a step in the right direction. Acked-by: Andy Gospodarek <andy@greyhouse.net>
next prev parent reply other threads:[~2009-05-26 16:33 UTC|newest] Thread overview: 213+ messages / expand[flat|nested] mbox.gz Atom feed top 2009-03-13 18:33 [PATCH] bonding: allow bond in mode balance-alb to work properly in bridge Jiri Pirko 2009-03-13 18:33 ` [Bridge] " Jiri Pirko 2009-03-14 5:39 ` Stephen Hemminger 2009-03-14 5:39 ` [Bridge] " Stephen Hemminger 2009-03-14 9:49 ` Jiri Pirko 2009-03-14 9:49 ` [Bridge] " Jiri Pirko 2009-03-15 23:12 ` Stephen Hemminger 2009-03-15 23:12 ` [Bridge] " Stephen Hemminger 2009-03-16 11:11 ` Jiri Pirko 2009-03-16 11:11 ` [Bridge] " Jiri Pirko 2009-03-19 6:20 ` David Miller 2009-03-19 6:20 ` [Bridge] " David Miller 2009-03-19 8:44 ` Jiri Pirko 2009-03-19 8:44 ` [Bridge] " Jiri Pirko 2009-03-19 10:21 ` David Miller 2009-03-19 10:21 ` [Bridge] " David Miller 2009-03-19 11:19 ` Jiri Pirko 2009-03-19 11:19 ` [Bridge] " Jiri Pirko 2009-03-19 8:50 ` Patrick McHardy 2009-03-19 8:50 ` [Bridge] " Patrick McHardy 2009-03-19 16:31 ` Jiri Pirko 2009-03-19 16:31 ` [Bridge] " Jiri Pirko 2009-03-25 13:04 ` [PATCH] bonding: allow bond in mode balance-alb to work properly in bridge -try2 Jiri Pirko 2009-03-25 13:04 ` [Bridge] " Jiri Pirko 2009-03-25 13:40 ` Eric Dumazet 2009-03-25 13:40 ` [Bridge] " Eric Dumazet 2009-03-25 14:39 ` Jiri Pirko 2009-03-25 14:39 ` [Bridge] " Jiri Pirko 2009-03-25 15:19 ` [PATCH] bonding: allow bond in mode balance-alb to work properly in bridge -try3 Jiri Pirko 2009-03-25 15:19 ` [Bridge] " Jiri Pirko 2009-03-25 16:31 ` Jay Vosburgh 2009-03-25 16:31 ` [Bridge] " Jay Vosburgh 2009-03-25 17:44 ` Jiri Pirko 2009-03-25 17:44 ` [Bridge] " Jiri Pirko 2009-03-26 0:24 ` David Miller 2009-03-26 0:24 ` [Bridge] " David Miller 2009-03-26 0:34 ` Jay Vosburgh 2009-03-26 0:34 ` [Bridge] " Jay Vosburgh 2009-03-26 11:12 ` Jiri Pirko 2009-03-26 11:12 ` [Bridge] " Jiri Pirko 2009-03-26 15:52 ` [PATCH] bonding: allow bond in mode balance-alb to work properly in bridge -try4 Jiri Pirko 2009-03-26 15:52 ` [Bridge] " Jiri Pirko 2009-03-27 7:38 ` David Miller 2009-03-27 7:38 ` [Bridge] " David Miller 2009-03-27 7:46 ` Jiri Pirko 2009-03-27 7:46 ` [Bridge] " Jiri Pirko 2009-03-27 7:53 ` Patrick McHardy 2009-03-27 7:53 ` [Bridge] " Patrick McHardy 2009-03-27 8:41 ` Jiri Pirko 2009-03-27 8:41 ` [Bridge] " Jiri Pirko 2009-03-27 8:55 ` Patrick McHardy 2009-03-27 8:55 ` [Bridge] " Patrick McHardy 2009-03-27 9:47 ` Jiri Pirko 2009-03-27 9:47 ` [Bridge] " Jiri Pirko 2009-03-29 20:53 ` David Miller 2009-03-29 20:53 ` [Bridge] " David Miller 2009-03-30 12:04 ` Patrick McHardy 2009-03-30 12:04 ` [Bridge] " Patrick McHardy 2009-03-30 12:40 ` Jiri Pirko 2009-03-30 12:40 ` [Bridge] " Jiri Pirko 2009-03-30 12:47 ` Patrick McHardy 2009-03-30 12:47 ` [Bridge] " Patrick McHardy 2009-03-30 12:52 ` Jiri Pirko 2009-03-30 12:52 ` [Bridge] " Jiri Pirko 2009-03-30 12:58 ` Patrick McHardy 2009-03-30 12:58 ` [Bridge] " Patrick McHardy 2009-05-26 15:17 ` [PATCH net-next] bonding: allow bond in mode balance-alb to work properly in bridge -try4.1 Jiri Pirko 2009-05-26 15:17 ` [Bridge] " Jiri Pirko 2009-05-26 16:32 ` Andy Gospodarek [this message] 2009-05-26 16:32 ` Andy Gospodarek 2009-05-27 8:25 ` Jiri Pirko 2009-05-27 8:25 ` [Bridge] " Jiri Pirko 2009-05-26 16:59 ` Eric Dumazet 2009-05-26 16:59 ` [Bridge] " Eric Dumazet 2009-05-27 8:42 ` Jiri Pirko 2009-05-27 8:42 ` [Bridge] " Jiri Pirko 2009-05-27 13:53 ` [PATCH net-next] bonding: allow bond in mode balance-alb to work properly in bridge -try4.2 Jiri Pirko 2009-05-27 13:53 ` [Bridge] " Jiri Pirko 2009-05-27 14:39 ` Eric Dumazet 2009-05-27 14:39 ` [Bridge] " Eric Dumazet 2009-05-28 9:57 ` Jiri Pirko 2009-05-28 9:57 ` [Bridge] " Jiri Pirko 2009-05-28 11:05 ` [PATCH net-next] bonding: allow bond in mode balance-alb to work properly in bridge -try4.3 Jiri Pirko 2009-05-28 11:05 ` [Bridge] " Jiri Pirko 2009-05-28 11:41 ` Eric Dumazet 2009-05-28 11:41 ` [Bridge] " Eric Dumazet 2009-05-29 8:52 ` David Miller 2009-05-29 8:52 ` [Bridge] " David Miller 2009-05-28 12:11 ` Andy Gospodarek 2009-05-28 12:11 ` [Bridge] " Andy Gospodarek 2009-04-13 8:37 ` [PATCH 0/4] bonding: allow bond in mode balance-alb to work properly in bridge -try5 Jiri Pirko 2009-04-13 8:37 ` [Bridge] " Jiri Pirko 2009-04-13 8:38 ` [PATCH 1/4] net: introduce dev_mac_address_changed Jiri Pirko 2009-04-13 8:38 ` [Bridge] " Jiri Pirko 2009-04-13 14:58 ` Stephen Hemminger 2009-04-13 14:58 ` [Bridge] " Stephen Hemminger 2009-04-13 8:42 ` [PATCH 2/4] net: introduce a list of device addresses dev_addr_list Jiri Pirko 2009-04-13 8:42 ` [Bridge] " Jiri Pirko 2009-04-13 14:49 ` Stephen Hemminger 2009-04-13 14:49 ` [Bridge] " Stephen Hemminger 2009-04-13 22:54 ` David Miller 2009-04-13 22:54 ` [Bridge] " David Miller 2009-04-13 22:53 ` David Miller 2009-04-13 22:53 ` [Bridge] " David Miller 2009-04-13 8:44 ` [PATCH 3/4] net: bridge: use device address list instead of dev_addr Jiri Pirko 2009-04-13 8:44 ` [Bridge] " Jiri Pirko 2009-04-13 14:54 ` Stephen Hemminger 2009-04-13 14:54 ` [Bridge] " Stephen Hemminger 2009-04-14 10:15 ` Jiri Pirko 2009-04-14 10:15 ` [Bridge] " Jiri Pirko 2009-04-13 22:54 ` David Miller 2009-04-13 22:54 ` [Bridge] " David Miller 2009-04-13 8:46 ` [PATCH 4/4] net: bonding: add slave device addresses in mode alb Jiri Pirko 2009-04-13 8:46 ` [Bridge] " Jiri Pirko 2009-04-13 14:56 ` Stephen Hemminger 2009-04-13 14:56 ` [Bridge] " Stephen Hemminger 2009-04-15 8:17 ` [PATCH 0/3] bonding: allow bond in mode balance-alb to work properly in bridge -try6 Jiri Pirko 2009-04-15 8:17 ` [Bridge] " Jiri Pirko 2009-04-15 8:18 ` [PATCH 1/3] net: introduce a list of device addresses dev_addr_list Jiri Pirko 2009-04-15 8:18 ` [Bridge] " Jiri Pirko 2009-04-15 8:26 ` Li Zefan 2009-04-15 8:26 ` [Bridge] " Li Zefan 2009-04-15 8:29 ` Jiri Pirko 2009-04-15 8:29 ` [Bridge] " Jiri Pirko 2009-04-15 8:32 ` Jiri Pirko 2009-04-15 8:32 ` [Bridge] " Jiri Pirko 2009-04-15 9:21 ` David Miller 2009-04-15 9:21 ` [Bridge] " David Miller 2009-04-15 9:27 ` Eric Dumazet 2009-04-15 9:27 ` [Bridge] " Eric Dumazet 2009-04-15 9:31 ` David Miller 2009-04-15 9:31 ` [Bridge] " David Miller 2009-04-15 10:13 ` Patrick McHardy 2009-04-15 10:13 ` [Bridge] " Patrick McHardy 2009-04-15 10:15 ` David Miller 2009-04-15 10:15 ` [Bridge] " David Miller 2009-04-15 10:41 ` Patrick McHardy 2009-04-15 10:41 ` [Bridge] " Patrick McHardy 2009-04-15 10:45 ` David Miller 2009-04-15 10:45 ` [Bridge] " David Miller 2009-04-15 10:47 ` Patrick McHardy 2009-04-15 10:47 ` [Bridge] " Patrick McHardy 2009-04-15 14:42 ` Jiri Pirko 2009-04-15 14:42 ` [Bridge] " Jiri Pirko 2009-04-15 11:17 ` Jiri Pirko 2009-04-15 11:17 ` [Bridge] " Jiri Pirko 2009-04-15 11:22 ` Patrick McHardy 2009-04-15 11:22 ` [Bridge] " Patrick McHardy 2009-04-15 11:28 ` Jiri Pirko 2009-04-15 11:28 ` [Bridge] " Jiri Pirko 2009-04-15 12:28 ` Eric Dumazet 2009-04-15 12:28 ` [Bridge] " Eric Dumazet 2009-04-15 18:02 ` [PATCH 1/3] net: introduce a list of device addresses dev_addr_list (v2) Jiri Pirko 2009-04-15 18:02 ` [Bridge] " Jiri Pirko 2009-04-15 18:54 ` Eric Dumazet 2009-04-15 18:54 ` [Bridge] " Eric Dumazet 2009-04-16 8:46 ` Jiri Pirko 2009-04-16 8:46 ` [Bridge] " Jiri Pirko 2009-04-17 11:57 ` [PATCH 1/3] net: introduce a list of device addresses dev_addr_list (v3) Jiri Pirko 2009-04-17 11:57 ` [Bridge] " Jiri Pirko 2009-04-17 15:33 ` Stephen Hemminger 2009-04-17 15:33 ` [Bridge] " Stephen Hemminger 2009-04-18 7:01 ` Jiri Pirko 2009-04-18 7:01 ` [Bridge] " Jiri Pirko 2009-04-18 7:35 ` Eric Dumazet 2009-04-18 7:35 ` [Bridge] " Eric Dumazet 2009-04-18 7:44 ` Jiri Pirko 2009-04-18 7:44 ` [Bridge] " Jiri Pirko 2009-04-18 8:06 ` Eric Dumazet 2009-04-18 8:06 ` [Bridge] " Eric Dumazet 2009-04-18 8:58 ` [PATCH 1/3] net: introduce a list of device addresses dev_addr_list (v4) Jiri Pirko 2009-04-18 8:58 ` [Bridge] " Jiri Pirko 2009-04-20 16:11 ` Jiri Pirko 2009-04-20 16:11 ` [Bridge] " Jiri Pirko 2009-04-23 8:09 ` Jiri Pirko 2009-04-23 8:09 ` [Bridge] " Jiri Pirko 2009-04-23 8:09 ` Jiri Pirko 2009-04-23 15:58 ` [Bonding-devel] " Stephen Hemminger 2009-04-23 15:58 ` [Bridge] " Stephen Hemminger 2009-04-24 21:26 ` Jiri Pirko 2009-04-24 21:26 ` [Bridge] " Jiri Pirko 2009-05-04 11:14 ` [PATCH] net: introduce a list of device addresses dev_addr_list (v5) Jiri Pirko 2009-05-04 11:14 ` [Bridge] " Jiri Pirko 2009-05-05 4:37 ` David Miller 2009-05-05 4:37 ` [Bridge] " David Miller 2009-05-05 6:37 ` Jiri Pirko 2009-05-05 6:37 ` [Bridge] " Jiri Pirko 2009-05-05 12:48 ` [PATCH] net: introduce a list of device addresses dev_addr_list (v6) Jiri Pirko 2009-05-05 12:48 ` [Bridge] " Jiri Pirko 2009-05-05 19:27 ` David Miller 2009-05-05 19:27 ` [Bridge] " David Miller 2009-05-08 22:38 ` Stephen Hemminger 2009-05-08 22:38 ` [Bridge] " Stephen Hemminger 2009-05-08 23:00 ` David Miller 2009-05-08 23:00 ` [Bridge] " David Miller 2009-05-08 23:12 ` Stephen Hemminger 2009-05-08 23:12 ` [Bridge] " Stephen Hemminger 2009-05-08 23:25 ` David Miller 2009-05-08 23:25 ` [Bridge] " David Miller 2009-05-08 23:29 ` Stephen Hemminger 2009-05-08 23:29 ` [Bridge] " Stephen Hemminger 2009-04-15 8:21 ` [PATCH 2/3] net: bridge: use device address list instead of dev_addr Jiri Pirko 2009-04-15 8:21 ` [Bridge] " Jiri Pirko 2009-05-06 14:46 ` [PATCH net-next] net: bridge: use device address list instead of dev_addr (repost) Jiri Pirko 2009-05-06 14:46 ` [Bridge] " Jiri Pirko 2009-05-06 15:08 ` Eric Dumazet 2009-05-06 15:08 ` [Bridge] " Eric Dumazet 2009-05-06 19:26 ` Stephen Hemminger 2009-05-06 19:26 ` [Bridge] " Stephen Hemminger 2009-05-07 22:03 ` David Miller 2009-05-07 22:03 ` [Bridge] " David Miller 2009-04-15 8:22 ` [PATCH 3/3] net: bonding: add slave device addresses in mode alb Jiri Pirko 2009-04-15 8:22 ` [Bridge] " Jiri Pirko
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=20090526163242.GE6608@gospo.rdu.redhat.com \ --to=andy@greyhouse.net \ --cc=bonding-devel@lists.sourceforge.net \ --cc=bridge@lists.linux-foundation.org \ --cc=dada1@cosmosbay.com \ --cc=davem@davemloft.net \ --cc=fubar@us.ibm.com \ --cc=jgarzik@pobox.com \ --cc=jpirko@redhat.com \ --cc=kaber@trash.net \ --cc=mschmidt@redhat.com \ --cc=netdev@vger.kernel.org \ --cc=shemminger@linux-foundation.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: linkBe 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.