On Tue, Jun 19, 2012 at 11:55 AM, Jesse Gross <je...@nicira.com> wrote:
> On Thu, Jun 14, 2012 at 5:29 PM, ravi kerur <rke...@gmail.com> wrote:
>> On Thu, Jun 14, 2012 at 8:22 AM, Jesse Gross <je...@nicira.com> wrote:
>>> On Jun 14, 2012, at 10:13 PM, ravi kerur <rke...@gmail.com> wrote:
>>>
>>>> On Thu, Jun 14, 2012 at 3:58 AM, Jesse Gross <je...@nicira.com> wrote:
>>>>> On Thu, Jun 14, 2012 at 1:24 PM, ravi kerur <rke...@gmail.com> wrote:
>>>>>> On Wed, Jun 13, 2012 at 7:58 PM, Jesse Gross <je...@nicira.com> wrote:
>>>>>>> On Thu, Jun 14, 2012 at 4:51 AM, ravi kerur <rke...@gmail.com> wrote:
>>>>>>>> There are additional things that needs to be addressed as well
>>>>>>>>
>>>>>>>> 1. offload code review, it's currently generic enough and getting near
>>>>>>>> line rate performance numbers.
>>>>>>>
>>>>>>> You can't just take what is done for vlans and copy that.  There is
>>>>>>> far too much code that you're adding to OVS.  Did you read what I
>>>>>>> wrote earlier about where to start?:
>>>>>>
>>>>>> <rk> How is adding far too much code to ovs related to offload? It is
>>>>>> handled similar to what vlan is doing for older kernel + in addition
>>>>>> it takes care of handling copy + restore skb->protocol since
>>>>>> skb_gso_segment relies on it and handle cases for non-gso packets to
>>>>>> calculate checksum. I don't understand your comments, have you looked
>>>>>> at latest patch?
>>>>>
>>>>> The vlan code that's there is backporting and emulation for various
>>>>> quirks of vlans on different kernels.  Most of these don't apply to
>>>>> MPLS because no version of Linux supports MPLS.  You can't start from
>>>>> the backported version though, you need to begin with the correct way
>>>>> to do things assuming that you have freedom to modify the upstream
>>>>> kernel because OVS is upstream now and that's the future.  Once you
>>>>> have things working there, you can backport to older versions but if
>>>>> you do it in the opposite order you just end up with a mess.  Once
>>>>> again, did you read what I wrote below?  I know that your code isn't
>>>>> correct just by looking at the diff stat because you didn't modify the
>>>>> file that I told you is the place to start.
>>>>
>>>> <rk> comments below
>>>>>
>>>>>>> Generally speaking the emulation code is handled by skb_gso_segment()
>>>>>>> in dev.c in the kernel code outside of OVS.  This should mostly work
>>>>>>> except that it needs to be able to detect that MPLS requires
>>>>>>> emulation.  This will be the easiest part to get working and is the
>>>>>>> best place to start.  However, in order for this code to work on any
>>>>>>> kernel before your changes get integrated (i.e. Linux 3.6 at the
>>>>>>> earliest) you'll have to emulate it in OVS as well, like we do for
>>>>>>> vlans in vport-netdev.c.
>>>>
>>>> <rk> From the above paragraph, I deciphered it as emulate in ovs since
>>>> it needs to work with any kernel version(vport-netdev.c) and then in
>>>> dev.c and that's what I have done. Modified vport-netdev.c to support
>>>> mpls and qinq and for any kernel version. However, it looks like you
>>>> wanted me to work on dev.c first and later emulate in ovs via
>>>> vport-netdev.c?
>>>
>>> Yes.
>>
>> <rk> ok thanks, will work on it. Just thinking about this, why do you
>> want to modify upstream code dev.c first and not ovs? Atleast it makes
>> sense to work on ovs first since it covers older version + current
>> version and via macro LINUX_VERSION_CODE can be controlled on which
>> version it's enabled and later handle upstream code(so long as it's
>> made sure code gets in upstream on targeted version). Moreover,
>> changes in dev.c and vport-netdev.c are completely different and
>> cannot be treated as a backport, instead they should be treated as two
>> separate changes.
>
> You must treat it as a backport.  If you look at it as a completely
> separate path then you'll almost certainly end up with a different
> model for how to do things and it will make it more complicated than
> necessary because other parts of the code will need to support both.
> Furthermore, the upstream version is going to be simpler so that's
> where you want to be choosing the right model.
>
> Remember, we have to keep both versions in sync over time and the more
> deviation there is the harder this gets.

<rk> I am not sure I following your argument (first paragraph), but I
definitely agree with keeping both ovs emulation and upstream in sync.
Let me ask couple of questions to clarify things.

Please note code path is the same until netdev_send is called where
decision is made to use ovs emulation or kernel based on kernel
version.

ovs emulation supporting mpls and qinq

1. first clear hardware netif_* flags
2. get gso segments which is a list
3. skb_gso_segment relies on l3/l4 protocol information, save and restore
4. iterate through the loop of segments and transmit each one of them

since this is a proven method I have stuck with this in ovs emulation.
Are you suggesting to use different logic here, if yes, I don't
understand why but would like to know what the argument is before
making any changes?

upstream kernel
1. ovs clears hardware netif_* flags before calling dev_queue_xmit
2. in skb_gso_segment (upstream kernel code), handle mpls or qinq
eth_types such that correct l3 information is extracted
3.  change drivers to handle mpls or qinq eth_types to handle checksum offloads.

As I see that changes are different for both(agree upstream kernel
code changes are simpler), I was merely suggesting not to treat them
as backport and code review can happen in parallel.
_______________________________________________
dev mailing list
dev@openvswitch.org
http://openvswitch.org/mailman/listinfo/dev

Reply via email to