Subject: Re: [patch net-next-2.6 6/8] bonding: move processing of recv handlers into handle_frame()

From: Nicolas de Pesloüan<[email-masked]>
Date: Sun, 06 Mar 2011 13:24:32 +0100

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, [email-masked] 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 <[email-masked]>

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.

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.

I think we need to fix this stacking issue in a more general way.

	Nicolas.