All of lore.kernel.org
 help / color / mirror / Atom feed
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>


  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: 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.