Netdev List
 help / color / mirror / Atom feed
From: Alexander Duyck <aduyck@mirantis.com>
To: talal@mellanox.com, netdev@vger.kernel.org, davem@davemloft.net,
	galp@mellanox.com, ogerlitz@mellanox.com, eranbe@mellanox.com
Subject: [net-next PATCH 4/8] vxlan: Add checksum check to the features check function
Date: Mon, 25 Apr 2016 11:31:20 -0700	[thread overview]
Message-ID: <20160425183120.11331.19865.stgit@ahduyck-xeon-server> (raw)
In-Reply-To: <20160425182442.11331.88349.stgit@ahduyck-xeon-server>

We need to perform an additional check on the inner headers to determine if
we can offload the checksum for them.  Previously this check didn't occur
so we would generate an invalid frame in the case of an IPv6 header
encapsulated inside of an IPv4 tunnel.  To fix this I added a secondary
check to vxlan_features_check so that we can verify that we can offload the
inner checksum.

Signed-off-by: Alexander Duyck <aduyck@mirantis.com>
---
 include/linux/if_ether.h |    5 +++++
 include/net/vxlan.h      |    4 +++-
 2 files changed, 8 insertions(+), 1 deletion(-)

diff --git a/include/linux/if_ether.h b/include/linux/if_ether.h
index d5569734f672..548fd535fd02 100644
--- a/include/linux/if_ether.h
+++ b/include/linux/if_ether.h
@@ -28,6 +28,11 @@ static inline struct ethhdr *eth_hdr(const struct sk_buff *skb)
 	return (struct ethhdr *)skb_mac_header(skb);
 }
 
+static inline struct ethhdr *inner_eth_hdr(const struct sk_buff *skb)
+{
+	return (struct ethhdr *)skb_inner_mac_header(skb);
+}
+
 int eth_header_parse(const struct sk_buff *skb, unsigned char *haddr);
 
 extern ssize_t sysfs_format_mac(char *buf, const unsigned char *addr, int len);
diff --git a/include/net/vxlan.h b/include/net/vxlan.h
index 673e9f9e6da7..b8803165df91 100644
--- a/include/net/vxlan.h
+++ b/include/net/vxlan.h
@@ -317,7 +317,9 @@ static inline netdev_features_t vxlan_features_check(struct sk_buff *skb,
 	    (skb->inner_protocol_type != ENCAP_TYPE_ETHER ||
 	     skb->inner_protocol != htons(ETH_P_TEB) ||
 	     (skb_inner_mac_header(skb) - skb_transport_header(skb) !=
-	      sizeof(struct udphdr) + sizeof(struct vxlanhdr))))
+	      sizeof(struct udphdr) + sizeof(struct vxlanhdr)) ||
+	     (skb->ip_summed != CHECKSUM_NONE &&
+	      !can_checksum_protocol(features, inner_eth_hdr(skb)->h_proto))))
 		return features & ~(NETIF_F_CSUM_MASK | NETIF_F_GSO_MASK);
 
 	return features;

  parent reply	other threads:[~2016-04-25 18:31 UTC|newest]

Thread overview: 18+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-04-25 18:30 [net-next PATCH 0/8] Fix Tunnel features and enable GSO partial for Mellanox adapters Alexander Duyck
2016-04-25 18:31 ` [net-next PATCH 1/8] net: Disable segmentation if checksumming is not supported Alexander Duyck
2016-04-25 18:31 ` [net-next PATCH 2/8] gso: Only allow GSO_PARTIAL if we can checksum the inner protocol Alexander Duyck
2016-04-25 18:31 ` [net-next PATCH 3/8] net: Fix netdev_fix_features so that TSO_MANGLEID is only available with TSO Alexander Duyck
2016-04-25 18:31 ` Alexander Duyck [this message]
2016-04-25 18:31 ` [net-next PATCH 5/8] mlx4: Add support for UDP tunnel segmentation with outer checksum offload Alexander Duyck
2016-04-25 18:31 ` [net-next PATCH 6/8] mlx4: Add support for inner IPv6 checksum offloads and TSO Alexander Duyck
2016-04-26 14:37   ` Saeed Mahameed
2016-04-26 15:50     ` Alex Duyck
2016-04-26 20:23       ` Saeed Mahameed
2016-04-26 21:01         ` Alexander Duyck
2016-04-27 15:39           ` Tariq Toukan
2016-04-27 18:05             ` Alexander Duyck
2016-04-28 13:26               ` Tariq Toukan
2016-04-25 18:31 ` [net-next PATCH 7/8] mlx5e: Add support for UDP tunnel segmentation with outer checksum offload Alexander Duyck
2016-04-25 18:31 ` [net-next PATCH 8/8] mlx5e: Fix IPv6 tunnel " Alexander Duyck
2016-04-29 17:31 ` [net-next PATCH 0/8] Fix Tunnel features and enable GSO partial for Mellanox adapters David Miller
2016-04-29 17:32   ` Alex Duyck

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20160425183120.11331.19865.stgit@ahduyck-xeon-server \
    --to=aduyck@mirantis.com \
    --cc=davem@davemloft.net \
    --cc=eranbe@mellanox.com \
    --cc=galp@mellanox.com \
    --cc=netdev@vger.kernel.org \
    --cc=ogerlitz@mellanox.com \
    --cc=talal@mellanox.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox