[ovs-dev] [PATCH 5/5] datapath: Further mirror checksum offloading state on old kernels.
Jesse Gross
jesse at nicira.com
Thu Jun 16 21:17:07 UTC 2011
On Thu, Jun 16, 2011 at 1:38 PM, Ben Pfaff <blp at nicira.com> wrote:
> On Wed, Jun 15, 2011 at 11:00:09AM -0700, Jesse Gross wrote:
>> Older kernels (those before 2.6.22) rely on implicit assumptions
>> to determine checksum offloading status. These assumptions tend
>> to break down when doing switching because it sits in the middle
>> of the transmit and receive path. Newer kernels deal with this
>> problem by adding more explicit information about how to checksum.
>> This replicates that behavior by mirroring the state from newer
>> kernels in private OVS storage on the kernels that lack it. On
>> ingress and egress we then map that state onto the appropriate
>> location for the given kernel and can consistently manipulate it
>> within OVS. Some of this was already done for the checksum type
>> but this makes it more robust and expands it to the checksum start
>> and offset as well.
>>
>> Signed-off-by: Jesse Gross <jesse at nicira.com>
>
> I didn't see any problems, but I don't understand this code very well.
> I think that it would help my understanding if compute_ip_summed() and
> forward_ip_summed() had comments that explained why one would call
> them and what they do. compute_ip_summed() does have a large comment
> already, but it explains only the details, not the "big picture"
> rationale behind what it does.
I added the following comments:
/*
* compute_ip_summed - map external checksum state onto OVS representation
*
* @skb: Packet to manipulate.
* @xmit: Whether we were on transmit path of network stack. For example,
* this is true for the internal dev vport because it receives skbs
* that passed through dev_queue_xmit() but false for the netdev vport
* because its packets come from netif_receive_skb().
*
* Older kernels (and various versions of Xen) were not explicit enough about
* checksum offload parameters and rely on a combination of context and
* non standard fields. This deals with all those variations so that we
* can internally manipulate checksum offloads without worrying about kernel
* version.
*/
/*
* forward_ip_summed - map internal checksum state back onto
native kernel fields
*
* @skb: Packet to manipulate.
* @xmit: Whether we are about send on the transmit path the network
stack. This
* follows the same logic as the @xmit field in compute_ip_summed().
* Generally, a given vport will have opposite values for @xmit
passed to these
* two functions.
*
* When a packet is about to egress from OVS take our internal fields (including
* any modifications we have made) and recreate the correct representation for
* this kernel. This may do things like change the transport header offset.
*/
Does that help?
More information about the dev
mailing list