Skip to content

Commit

Permalink
ipv6: sr: remove SKB_GSO_IPXIP6 on End.D* actions
Browse files Browse the repository at this point in the history
After LRO/GRO is applied, SRv6 encapsulated packets have
SKB_GSO_IPXIP6 feature flag, and this flag must be removed right after
decapulation procedure.

Currently, SKB_GSO_IPXIP6 flag is not removed on End.D* actions, which
creates inconsistent packet state, that is, a normal TCP/IP packets
have the SKB_GSO_IPXIP6 flag. This behavior can cause unexpected
fallback to GSO on routing to netdevices that do not support
SKB_GSO_IPXIP6. For example, on inter-VRF forwarding, decapsulated
packets separated into small packets by GSO because VRF devices do not
support TSO for packets with SKB_GSO_IPXIP6 flag, and this degrades
forwarding performance.

This patch removes encapsulation related GSO flags from the skb right
after the End.D* action is applied.

Fixes: d7a669d ("ipv6: sr: add helper functions for seg6local")
Signed-off-by: Yuki Taguchi <tagyounit@gmail.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
  • Loading branch information
Yuki Taguchi authored and David S. Miller committed Jan 21, 2020
1 parent 9c5ed2f commit 62ebaea
Showing 1 changed file with 3 additions and 1 deletion.
4 changes: 3 additions & 1 deletion net/ipv6/seg6_local.c
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@
#include <net/addrconf.h>
#include <net/ip6_route.h>
#include <net/dst_cache.h>
#include <net/ip_tunnels.h>
#ifdef CONFIG_IPV6_SEG6_HMAC
#include <net/seg6_hmac.h>
#endif
Expand Down Expand Up @@ -135,7 +136,8 @@ static bool decap_and_validate(struct sk_buff *skb, int proto)

skb_reset_network_header(skb);
skb_reset_transport_header(skb);
skb->encapsulation = 0;
if (iptunnel_pull_offloads(skb))
return false;

return true;
}
Expand Down

0 comments on commit 62ebaea

Please sign in to comment.