netdev.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: "Nicolas de Pesloüan" <nicolas.2p.debian@gmail.com>
To: Jiri Pirko <jpirko@redhat.com>
Cc: netdev@vger.kernel.org, davem@davemloft.net,
	shemminger@linux-foundation.org, kaber@trash.net,
	fubar@us.ibm.com, eric.dumazet@gmail.com, andy@greyhouse.net
Subject: Re: [patch net-next-2.6 6/8] bonding: move processing of recv handlers into handle_frame()
Date: Sun, 06 Mar 2011 15:25:11 +0100	[thread overview]
Message-ID: <4D739947.6040603@gmail.com> (raw)
In-Reply-To: <20110306133413.GB2795@psychotron.redhat.com>

Le 06/03/2011 14:34, Jiri Pirko a écrit :
> Sun, Mar 06, 2011 at 01:24:32PM CET, nicolas.2p.debian@gmail.com wrote:
>> Le 05/03/2011 15:50, Nicolas de Pesloüan a écrit :
>>> Le 05/03/2011 15:43, Jiri Pirko a écrit :
>>>> Sat, Mar 05, 2011 at 03:33:30PM CET, nicolas.2p.debian@gmail.com wrote:
>>>>> Le 05/03/2011 11:29, Jiri Pirko a écrit :
>>>>>> Since now when bonding uses rx_handler, all traffic going into bond
>>>>>> device goes thru bond_handle_frame. So there's no need to go back into
>>>>>> bonding code later via ptype handlers. This patch converts
>>>>>> original ptype handlers into "bonding receive probes". These functions
>>>>>> are called from bond_handle_frame and they are registered per-mode.
>>>>>
>>>>> Does this still support having the arp_ip_target on a vlan?
>>>>>
>>>>> (eth0 ->  bond0 ->  bond0.100, with arp_ip_target only reachable
>>>>> through bond0.100).
>>>>
>>>> This case is still covered with vlan_on_bond_hook
>>>> eth0->
>>>> bond_handle_frame
>>>> bond0->
>>>> vlan_hwaccel_do_receive
>>>> bond0.5->
>>>> vlan_on_bond_hook ->  reinject into bond0
>>>> ->  bond_handle_frame (here it is processed)
>>>
>>> Sound good to me.
>>>
>>> Reviewed-by: Nicolas de Pesloüan<nicolas.2p.debian@free.fr>
>>
>> After another review, I think it won't work.
>>
>> vlan_on_bond() will reinject into bond0, but bond_handle_frame() is
>> registered as the rx_handler for the slaves (eth0 in the above
>> setup), not as the rx_handler for the master (bond0 in the above
>> setup). So, bond_handlee_frame() will never see the untagged ARP
>> request/reply and bonding ARP monitoring will fail.
>
> Damn, you are right. I mislooked.

So do I :-D

>> That being said, the current vlan_on_bond_hook() hack already suffer
>> other troubles and for example won't support the following setup:
>>
>> eth0 ->  bond0 ->  br0 ->  br0.100.
>
> blah. Well correct me if my thinking is wrong but I cannot imagine
> a scenario where there's not other way how to do arp monitoring than
> over vlan.

If you are connected to a switch smart enough to allow non tagged delivery for one vlan and all you 
arp_ip_targets are reachable through that vlan, then, yes, this hack might been useless...

But...

In real life, you may be connected to any kind of switch, including the most stupid one... or you 
may have trouble explaining to the network team the reason why you need all packets to be tagged 
expect for one vlan... or simply, some of your arp_ip_targets will be reachable through a router in 
another vlan.

> So how about to just remove the vlan_on_bond_hook and forbid the
> possibility. IMHO it should have never been introduced in the first
> place.

If it was never introduced, we would have been able to simply forbid it, but the feature exist since 
December 14th 2009, so I'm afraid we must keep it... :-/

And as a more general rule, I think we should support "all possible" interface stacking setups, 
because this would force us to think generic, instead of adding special hacks for special stacking 
setups.

>> I think we need to fix this stacking issue in a more general way.
>
> Well this issue is more or less out of the concept and breaks layering.
> I cannot think of how to resolve this nicely atm.

The only way I can imagine atm is something I described a few days ago:

1/ Add a late_delivery property to packet_type:

	struct packet_type {
	        __be16                  type;   /* This is really htons(ether_type). */
	        struct net_device       *dev;   /* NULL is wildcarded here           */
	        int                     (*func) (struct sk_buff *,
	                                         struct net_device *,
	                                         struct packet_type *);
	        struct sk_buff          *(*gso_segment)(struct sk_buff *skb,
	                                                u32 features);
	        int                     (*gso_send_check)(struct sk_buff *skb);
	        struct sk_buff          **(*gro_receive)(struct sk_buff **head,
	                                               struct sk_buff *skb);
	        int                     (*gro_complete)(struct sk_buff *skb);
	        void                    *af_packet_priv;
+		bool			late_delivery;
	        struct list_head        list;
	};

2/ Use the late_delivery property inside the ptype_all and ptype_base loops in 
__netif_receive_skb(), to skip the protocol handlers whose late_delivery property is false, while we 
walk the rx_handler path.

3/ At the end of __netif_receive_skb(), deliver the final skb to those ptype_all and ptype_base 
handlers whose late_delivery property is true.

4/ And revert back the bonding ARP monitoring to a normal protocol handler, having late_delivery == 
true.

This would work with eth0 -> bond0 -> bond0.100 and eth0 -> bond0 -> br0 -> br0.100.

This would also be reasonably generic, from my point of view. No reference to vlan, bonding, bridge 
or whatever...

	Nicolas.

  reply	other threads:[~2011-03-06 14:25 UTC|newest]

Thread overview: 74+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2011-03-05 10:29 [patch net-next-2.6 0/8] mostly bonding rx path changes Jiri Pirko
2011-03-05 10:29 ` [patch net-next-2.6 1/8] af_packet: use skb->skb_iif instead of orig_dev->ifindex Jiri Pirko
2011-03-05 14:03   ` Nicolas de Pesloüan
2011-03-05 10:29 ` [patch net-next-2.6 2/8] bonding: register slave pointer for rx_handler Jiri Pirko
2011-03-05 14:06   ` Nicolas de Pesloüan
2011-03-05 14:27     ` Jiri Pirko
2011-03-05 14:38       ` Nicolas de Pesloüan
2011-03-05 10:29 ` [patch net-next-2.6 3/8] net: get rid of multiple bond-related netdevice->priv_flags Jiri Pirko
2011-03-05 14:14   ` Nicolas de Pesloüan
2011-03-05 14:37     ` Ben Hutchings
2011-03-05 14:46       ` Nicolas de Pesloüan
2011-03-05 10:29 ` [patch net-next-2.6 4/8] bonding: wrap slave state work Jiri Pirko
2011-03-05 15:21   ` Nicolas de Pesloüan
2011-03-07  9:58     ` Jiri Pirko
2011-03-07 19:55       ` Nicolas de Pesloüan
2011-03-08  7:18         ` Jiri Pirko
2011-03-08 21:23           ` Nicolas de Pesloüan
2011-03-05 10:29 ` [patch net-next-2.6 5/8] bonding: get rid of IFF_SLAVE_INACTIVE netdev->priv_flag Jiri Pirko
2011-03-05 14:18   ` Nicolas de Pesloüan
2011-03-05 10:29 ` [patch net-next-2.6 6/8] bonding: move processing of recv handlers into handle_frame() Jiri Pirko
2011-03-05 14:33   ` Nicolas de Pesloüan
2011-03-05 14:43     ` Jiri Pirko
2011-03-05 14:50       ` Nicolas de Pesloüan
2011-03-06 12:24         ` Nicolas de Pesloüan
2011-03-06 13:34           ` Jiri Pirko
2011-03-06 14:25             ` Nicolas de Pesloüan [this message]
2011-03-06 16:32               ` Michał Mirosław
2011-03-06 17:37                 ` Nicolas de Pesloüan
2011-03-07 12:51             ` [patch net-next-2.6] net: reinject arps into bonding slave instead of master Jiri Pirko
2011-03-07 14:32               ` Andy Gospodarek
2011-03-07 20:12                 ` Nicolas de Pesloüan
2011-03-07 21:19                   ` Jiri Pirko
2011-03-07 21:30                     ` Nicolas de Pesloüan
2011-03-07 22:43               ` Andy Gospodarek
2011-03-07 23:09                 ` Nicolas de Pesloüan
2011-03-08  2:43                   ` Andy Gospodarek
2011-03-08 21:34                     ` Nicolas de Pesloüan
2011-03-08  7:13                 ` Jiri Pirko
2011-03-08 13:42                   ` Andy Gospodarek
2011-03-08 21:44                     ` Nicolas de Pesloüan
2011-03-09  7:45                       ` Jiri Pirko
2011-03-09 14:49                         ` Nicolas de Pesloüan
2011-03-09 15:09                           ` Jiri Pirko
2011-03-09 15:28                             ` Nicolas de Pesloüan
2011-03-09 17:11                               ` Jiri Pirko
2011-03-09 22:18                                 ` Nicolas de Pesloüan
2011-03-10  6:48                                   ` Jiri Pirko
2011-03-10 20:44                                     ` Nicolas de Pesloüan
2011-03-10 20:52                                       ` Jiri Pirko
2011-03-10 21:05                                       ` Jiri Pirko
2011-03-09 20:51                         ` Jiri Pirko
2011-03-09 13:33                       ` Neil Horman
2011-03-05 10:29 ` [patch net-next-2.6 7/8] net: introduce rx_handler results and logic around that Jiri Pirko
2011-03-05 12:48   ` Ben Hutchings
2011-03-05 14:52     ` Nicolas de Pesloüan
2011-03-05 14:54       ` Jiri Pirko
2011-03-05 15:06         ` Nicolas de Pesloüan
2011-03-05 15:13     ` [patch net-next-2.6] net: comment rx_handler results Jiri Pirko
2011-03-05 15:27       ` Nicolas de Pesloüan
2011-03-05 15:37         ` Jiri Pirko
2011-03-05 15:50           ` Nicolas de Pesloüan
2011-03-06 20:00             ` [PATCH net-next-2.6] net: enhance the documentation for rx_handler Nicolas de Pesloüan
2011-03-07  9:54               ` Jiri Pirko
2011-03-07 16:36               ` Stephen Hemminger
2011-03-07 20:01                 ` [PATCH net-next-2.6 V2] " Nicolas de Pesloüan
2011-03-05 15:31   ` [patch net-next-2.6 7/8 v2] net: introduce rx_handler results and logic around that Jiri Pirko
2011-03-05 10:29 ` [patch net-next-2.6 8/8] net: get rid of orig_dev parameter of packet handlers Jiri Pirko
2011-03-05 15:05   ` Nicolas de Pesloüan
2011-03-05 15:15     ` Jiri Pirko
2011-03-05 15:32   ` [patch net-next-2.6 8/8 v2] " Jiri Pirko
2011-03-05 16:56     ` Nicolas de Pesloüan
2011-03-05 22:07       ` Jiri Pirko
2011-03-05 22:18         ` Nicolas de Pesloüan
  -- strict thread matches above, loose matches on Subject: below --
2011-03-05  8:29 [patch net-next-2.6 0/8] mostly bonding rx path changes Jiri Pirko
2011-03-05  8:29 ` [patch net-next-2.6 6/8] bonding: move processing of recv handlers into handle_frame() 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=4D739947.6040603@gmail.com \
    --to=nicolas.2p.debian@gmail.com \
    --cc=andy@greyhouse.net \
    --cc=davem@davemloft.net \
    --cc=eric.dumazet@gmail.com \
    --cc=fubar@us.ibm.com \
    --cc=jpirko@redhat.com \
    --cc=kaber@trash.net \
    --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 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).