All of lore.kernel.org
 help / color / mirror / Atom feed
From: Tobias Waldekranz <tobias@waldekranz.com>
To: netdev@vger.kernel.org
Subject: Re: Deliver skbs to intermediate interfaces, when using cascaded rx-handlers
Date: Mon, 24 Feb 2014 08:22:23 +0100	[thread overview]
Message-ID: <20140224072223.GA20295@gmail.com> (raw)
In-Reply-To: <20140221171034.GA2488@localhost.localdomain>

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?

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

> 
> >    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?

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.

> 
> fbl

-- 
Thanks
 - wkz

  reply	other threads:[~2014-02-24  7:22 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 [this message]
2014-02-26 18:18     ` Flavio Leitner

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=20140224072223.GA20295@gmail.com \
    --to=tobias@waldekranz.com \
    --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 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.