[ovs-dev] FW: MPLS and VLAN QinQ patch

Jesse Gross jesse at nicira.com
Tue May 29 22:32:34 UTC 2012


On Tue, May 29, 2012 at 1:32 PM, ravi kerur <rkerur at gmail.com> wrote:
> Thanks Jesse. What I have tested is 2 Ubuntu 11.04 and 12.04 physical
> systems connected via a ethernet switch. I have tested scp downloads,
> iperf + netperf. Flows are setup such that MPLS tag is pushed for
> every outgoing TCP segments. I do see via tcpdump that a jumbo packet
> (~15K) is sent out by scp and NIC chops the jumbo packet based on the
> MTU of the NIC before sending out. On the receive side, I do see
> around 10 1500 byte packets being received(having same IPID). I don't
> think LRO/GRO is taking place on the receive side though. This I have
> tested successfully.
>
> The reason I mentioned about NIC was because I was seeing messages
> "checksum partial, protocol=0x8847/0x88a8..." from the driver. The
> driver complains about this when it is sending out a template about
> checksums offsets and other things to NIC and has to be modified to
> handle new eth_types.

Drivers need to report to the network stack what types of offloading
they support.  Since there's no current support for MPLS, no driver
reports this capability and should not receive MPLS packets that need
to be offloaded.  This means that even if it works the behavior is not
correct.

> I have looked at vport-netdev.c and tunnel.c files and modified code
> to handle MPLS and QinQ tags. Can you please point me which function
> to be specific for software offload emulation. I will modify if I have
> not already handled it.

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.



More information about the dev mailing list