diff options
| author | David S. Miller <davem@davemloft.net> | 2015-02-03 23:06:49 -0800 |
|---|---|---|
| committer | David S. Miller <davem@davemloft.net> | 2015-02-03 23:06:49 -0800 |
| commit | 4c122f4cbf80fa35b7b8508b6e117f1e8cd1fddb (patch) | |
| tree | 5a26c4c9f88e8c070dfcc42385f98240925ec848 /include | |
| parent | 42b5212fee4f57907e9415b18fe19c13e65574bc (diff) | |
| parent | e3e3c423f82a415195a7bbbfa619bfa7b20d2db6 (diff) | |
| download | cachepc-linux-4c122f4cbf80fa35b7b8508b6e117f1e8cd1fddb.tar.gz cachepc-linux-4c122f4cbf80fa35b7b8508b6e117f1e8cd1fddb.zip | |
Merge branch 'virtio_net_ufo'
Vladislav Yasevich says:
====================
Restore UFO support to virtio_net devices
commit 3d0ad09412ffe00c9afa201d01effdb6023d09b4
Author: Ben Hutchings <ben@decadent.org.uk>
Date: Thu Oct 30 18:27:12 2014 +0000
drivers/net: Disable UFO through virtio
Turned off UFO support to virtio-net based devices due to issues
with IPv6 fragment id generation for UFO packets. The issue
was that IPv6 UFO/GSO implementation expects the fragment id
to be supplied in skb_shinfo(). However, for packets generated
by the VMs, the fragment id is not supplied which causes all
IPv6 fragments to have the id of 0.
The problem is that turning off UFO support on tap/macvtap
as well as virtio devices caused issues with migrations.
Migrations would fail when moving a vm from a kernel supporting
expecting UFO to work to the newer kernels that disabled UFO.
This series provides a partial solution to address the migration
issue. The series allows us to track whether skb_shinfo()->ip6_frag_id
has been set by treating value of 0 as unset.
This lets GSO code to generate fragment ids if they are necessary
(ex: packet was generated by VM or packet socket).
Since v3:
- Resolved build issue when IPv6 is a module.
- Removed trailing white space.
Since v2:
- Rebase and rebuild to make sure everything works. No changes
to the patches were done.
Since v1:
- Removed the skb bit and use value of 0 as tracker.
- Used Eric's suggestion to set fragment id as 0x80000000 if id
generation procedure yeilded a 0 result.
- Consolidated ipv6 id genration code.
====================
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'include')
| -rw-r--r-- | include/net/ipv6.h | 3 |
1 files changed, 3 insertions, 0 deletions
diff --git a/include/net/ipv6.h b/include/net/ipv6.h index 4292929392b0..9bf85d34c024 100644 --- a/include/net/ipv6.h +++ b/include/net/ipv6.h @@ -671,6 +671,9 @@ static inline int ipv6_addr_diff(const struct in6_addr *a1, const struct in6_add return __ipv6_addr_diff(a1, a2, sizeof(struct in6_addr)); } +u32 __ipv6_select_ident(u32 hashrnd, struct in6_addr *dst, + struct in6_addr *src); +void ipv6_select_ident(struct frag_hdr *fhdr, struct rt6_info *rt); void ipv6_proxy_select_ident(struct sk_buff *skb); int ip6_dst_hoplimit(struct dst_entry *dst); |
