From: Stephen Hemminger <shemminger@linux-foundation.org>
To: Jiri Bohac <jbohac@suse.cz>
Cc: Jiri Bohac <jbohac@suse.cz>,
netdev@vger.kernel.org, David Miller <davem@davemloft.net>,
Jay Vosburgh <fubar@us.ibm.com>
Subject: Re: PATCH: fix bridged 802.3ad bonding
Date: Tue, 3 Jun 2008 13:13:26 -0700 [thread overview]
Message-ID: <20080603131326.1f70915e@extreme> (raw)
In-Reply-To: <20080603193227.GA4050@midget.suse.cz>
On Tue, 3 Jun 2008 21:32:27 +0200
Jiri Bohac <jbohac@suse.cz> wrote:
> Hi,
>
> On Tue, Jun 03, 2008 at 09:46:04AM -0700, Stephen Hemminger wrote:
> > On Tue, 3 Jun 2008 15:21:06 +0200 Jiri Bohac <jbohac@suse.cz> wrote:
> >
> > > Bonding in 802.3ad mode breaks when the bond interface is added
> > > to a bridge (which makes 802.3ad unusable in XEN, for example).
> > >
> > > The problem is that br_pass_frame_up() will change the skb's dev
> > > pointer to point to the bridge interface. As a result, the LACP
> > > packets will not reach the bond_3ad_lacpdu_recv() protocol
> > > handler registered on the bonding device. Even if they did, the
> > > handler won't work with the changed skb->dev.
>
> ... actually, now I realized the above statement is wrong. The
> bridging code does not change the LACP frames, it just drops
> them, because the LACP frames always have the link-local
> destination MAC address.
>
> > The packets do arrive on the bridge
> > interface which is an aggregation of all the interfaces in the bridge.
> >
> > The LACPDU's are received via now on the bond device. If you moved
> > the packet type handler down to the physical interface, this problem
> > would go away because the packets would be handled to bond_3ad_lacpdu_recv
> > prior to being handled by the bridge.
>
> This wouldn't really work, because with bonding the packet only
> passes through netif_receive_skb() once, it just has the skb->dev
> modified by skb_bond() at the very beginning.
>
> But I think I found a much nicer fix for the problem:
>
> diff --git a/net/bridge/br_input.c b/net/bridge/br_input.c
> --- a/net/bridge/br_input.c
> +++ b/net/bridge/br_input.c
> @@ -136,6 +136,10 @@ struct sk_buff *br_handle_frame(struct net_bridge_port *p, struct sk_buff *skb)
> if (skb->protocol == htons(ETH_P_PAUSE))
> goto drop;
>
> + /* Don't touch SLOW frames (LACP, etc.) */
> + if (skb->protocol == htons(ETH_P_SLOW))
> + return skb;
> +
> /* Process STP BPDU's through normal netif_receive_skb() path */
> if (p->br->stp_enabled != BR_NO_STP) {
> if (NF_HOOK(PF_BRIDGE, NF_BR_LOCAL_IN, skb, skb->dev,
>
> The LACP frames always have the link-local destination MAC
> address and so they are not handled by the bridge anyway. They
> are only dropped, unless STP is turned on. So let's just not drop
> the SLOW packets. Does this look better?
>
Better, but still have a couple of questions:
1) Do you want to processing frames when bridge port is in blocking
state (because STP detected a loop)?
2) Do you want to process after netfilter processing to allow
some firewalling possiblity?
next prev parent reply other threads:[~2008-06-03 20:19 UTC|newest]
Thread overview: 14+ messages / expand[flat|nested] mbox.gz Atom feed top
2008-06-03 13:21 PATCH: fix bridged 802.3ad bonding Jiri Bohac
2008-06-03 14:13 ` Patrick McHardy
2008-06-03 16:46 ` Stephen Hemminger
2008-06-03 19:32 ` Jiri Bohac
2008-06-03 20:13 ` Stephen Hemminger [this message]
2008-06-03 21:20 ` Jiri Bohac
2008-06-03 21:22 ` Jay Vosburgh
2008-06-03 21:43 ` Stephen Hemminger
2008-06-04 4:55 ` Stephen Hemminger
2008-06-04 8:24 ` Jiri Bohac
2008-06-04 16:06 ` Stephen Hemminger
2008-06-05 10:13 ` Jiri Bohac
2008-06-10 22:42 ` David Miller
2008-06-17 15:33 ` Jiri Bohac
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=20080603131326.1f70915e@extreme \
--to=shemminger@linux-foundation.org \
--cc=davem@davemloft.net \
--cc=fubar@us.ibm.com \
--cc=jbohac@suse.cz \
--cc=netdev@vger.kernel.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).