mirror of
https://github.com/openvswitch/ovs
synced 2025-10-19 14:37:21 +00:00
We currently always pull 64 bytes of data (if it exists) into the skb linear data area when parsing flows. The theory behind this is that the data should always be there and it's enough to parse common flows. However, this causes a number of problems in different situations. The first is that it is not enough to handle IPv6 so we must pull additional data anyways. However, the main problem is that GRO typically allocates a new skb and puts just the headers in there. For a typical TCP/IPv4 packet there are 54 bytes of headers, which means that we must possibly reallocate and copy on every packet. In addition, GRO creates frag_lists with this specific geometry in order to allow later segmentation if the packet is forwarded to a device that does not support frag_lists. When we pull additional data it changes the geometry and causes later problems for the device. This patch instead incrementally pulls data, which avoids these problems. Signed-off-by: Jesse Gross <jesse@nicira.com> CC: Ian Campbell <Ian.Campbell@citrix.com>