| From fb36cacba5d067ff045c7a6735161b23691b0c4f Mon Sep 17 00:00:00 2001 |
| From: Yuki Taguchi <tagyounit@gmail.com> |
| Date: Mon, 20 Jan 2020 13:48:37 +0900 |
| Subject: [PATCH] ipv6: sr: remove SKB_GSO_IPXIP6 on End.D* actions |
| |
| commit 62ebaeaedee7591c257543d040677a60e35c7aec upstream. |
| |
| 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: d7a669dd2f8b ("ipv6: sr: add helper functions for seg6local") |
| Signed-off-by: Yuki Taguchi <tagyounit@gmail.com> |
| Signed-off-by: David S. Miller <davem@davemloft.net> |
| Signed-off-by: Paul Gortmaker <paul.gortmaker@windriver.com> |
| |
| diff --git a/net/ipv6/seg6_local.c b/net/ipv6/seg6_local.c |
| index 9d4f75e0d33a..af1091451316 100644 |
| --- a/net/ipv6/seg6_local.c |
| +++ b/net/ipv6/seg6_local.c |
| @@ -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 |
| @@ -130,7 +131,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; |
| } |
| -- |
| 2.7.4 |
| |