From: Flavio Leitner <fbl@redhat.com>
To: Tobias Waldekranz <tobias@waldekranz.com>
Cc: netdev@vger.kernel.org
Subject: Re: Deliver skbs to intermediate interfaces, when using cascaded rx-handlers
Date: Wed, 26 Feb 2014 15:18:57 -0300 [thread overview]
Message-ID: <20140226181857.GA7943@t520> (raw)
In-Reply-To: <20140224072223.GA20295@gmail.com>
On Mon, Feb 24, 2014 at 08:22:23AM +0100, Tobias Waldekranz wrote:
> On Fri, Feb 21, 2014 at 02:10:35PM -0300, Flavio Leitner wrote:
> > On Fri, Feb 21, 2014 at 11:01:58AM +0100, Tobias Waldekranz wrote:
> > > I have a system with the following configuration:
> > >
> > > * eth0 is a regular Ethernet MAC, connected to a hardware switch.
> > > * port[1-4] are the in-kernel representation of the switch.
> > > * team0 is a regular team-interface which bonds port1 and port2.
> > >
> > > +-------+
> > > | team0 |
> > > +---+---+
> > > |
> > > +----+----+
> > > | |
> > > +---+---+ +---+---+ +-------+ +-------+
> > > | port1 | | port2 | | port3 | | port4 |
> > > +---+---+ +---+---+ +---+---+ +---+---+
> > > | | | |
> > > +---------+----+----+---------+
> > > |
> > > +---+---+
> > > | eth0 |
> > > +-------+
> > >
> > > Both the switch and the team driver attaches rx-handlers to their
> > > lower layers. The problem is that team expects LACP frames that
> > > are intercepted by team0, to also be delivered to the port interface
> > > by __netif_receive_skb_core (in the final iteration of the registered
> > > protocols). However in this case, when two rx-handlers are cascaded,
> > > the skb will be delivered to eth0, since that is the original device
> > > (orig_dev).
> >
> > Indeed. It is not possible to update orig_dev, so it is stuck
> > on eth0 regardless of all the stacked interfaces.
> >
> > > There are a few ways this can be solved as far as i can see:
> > >
> > > 1. Introduce a new rx-handler return code that specifies that
> > > skb->dev has been altered, like RX_HANDLER_ANOTHER, and that we
> > > also want to change orig_dev to this new device.
> >
> > But then you need to know which rx-handler will run next, because
> > the orig_dev might still be implicit wanted.
>
> The next rx-handler is resolved by looking at skb->dev->rx_handler, so
> that shouldn't be a problem. Or am I missing something?
Yes, but all rx_handlers assume that orig_dev is intact and will be
delivered at the end. That will change with this solution and I don't
know if it can break any rx-handler.
> > > 2. Change the switch driver to return RX_HANDLER_CONSUMED and then
> > > queue the skb all over again, though I am afraid that this will eat
> > > some cycles.
> >
> > Before queue again, you need to update skb->dev, right? This seems
> > similar to (1).
>
> Exactly. It is very similar. The difference is that I would have to
> call netif_rx and go through a lot of code again, instead of taking
> the fast path via the another_round-loop in __netif_receive_skb_core.
Right.
> > > 3. Keep track of all traversed interfaces and change the final
> > > protocol iteration to deliver the skb to all intermediate devices.
> >
> > That's what I thought too.
>
> Ok, so if I provide such a patch, you think it would have a good
> chance of getting accepted?
Well, the final word comes from David and certainly you will need
to justify why fixing DSA isn't enough.
> What are the performance implications of deliver_skb-ing the packet to
> each intermediate layer? Considering that most of those packets will
> probably not be of interest to anyone.
Good question.
fbl
prev parent reply other threads:[~2014-02-26 18:19 UTC|newest]
Thread overview: 14+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-02-21 10:01 Deliver skbs to intermediate interfaces, when using cascaded rx-handlers Tobias Waldekranz
2014-02-21 10:26 ` Jiri Pirko
2014-02-21 11:12 ` Tobias Waldekranz
2014-02-21 11:37 ` Jiri Pirko
2014-02-21 12:02 ` Tobias Waldekranz
2014-02-21 13:05 ` Jiri Pirko
2014-02-21 14:31 ` Tobias Waldekranz
2014-02-21 14:48 ` Jiri Pirko
2014-02-21 14:54 ` Tobias Waldekranz
2014-02-21 17:23 ` David Miller
2014-02-24 7:28 ` Tobias Waldekranz
2014-02-21 17:10 ` Flavio Leitner
2014-02-24 7:22 ` Tobias Waldekranz
2014-02-26 18:18 ` Flavio Leitner [this message]
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=20140226181857.GA7943@t520 \
--to=fbl@redhat.com \
--cc=netdev@vger.kernel.org \
--cc=tobias@waldekranz.com \
/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.