|
@@ -2357,8 +2357,10 @@ out:
|
|
}
|
|
}
|
|
|
|
|
|
/* set offloads */
|
|
/* set offloads */
|
|
- priv->dev->hw_enc_features |= NETIF_F_IP_CSUM | NETIF_F_RXCSUM |
|
|
|
|
- NETIF_F_TSO | NETIF_F_GSO_UDP_TUNNEL |
|
|
|
|
|
|
+ priv->dev->hw_enc_features |= NETIF_F_IP_CSUM | NETIF_F_IPV6_CSUM |
|
|
|
|
+ NETIF_F_RXCSUM |
|
|
|
|
+ NETIF_F_TSO | NETIF_F_TSO6 |
|
|
|
|
+ NETIF_F_GSO_UDP_TUNNEL |
|
|
NETIF_F_GSO_UDP_TUNNEL_CSUM |
|
|
NETIF_F_GSO_UDP_TUNNEL_CSUM |
|
|
NETIF_F_GSO_PARTIAL;
|
|
NETIF_F_GSO_PARTIAL;
|
|
}
|
|
}
|
|
@@ -2369,8 +2371,10 @@ static void mlx4_en_del_vxlan_offloads(struct work_struct *work)
|
|
struct mlx4_en_priv *priv = container_of(work, struct mlx4_en_priv,
|
|
struct mlx4_en_priv *priv = container_of(work, struct mlx4_en_priv,
|
|
vxlan_del_task);
|
|
vxlan_del_task);
|
|
/* unset offloads */
|
|
/* unset offloads */
|
|
- priv->dev->hw_enc_features &= ~(NETIF_F_IP_CSUM | NETIF_F_RXCSUM |
|
|
|
|
- NETIF_F_TSO | NETIF_F_GSO_UDP_TUNNEL |
|
|
|
|
|
|
+ priv->dev->hw_enc_features &= ~(NETIF_F_IP_CSUM | NETIF_F_IPV6_CSUM |
|
|
|
|
+ NETIF_F_RXCSUM |
|
|
|
|
+ NETIF_F_TSO | NETIF_F_TSO6 |
|
|
|
|
+ NETIF_F_GSO_UDP_TUNNEL |
|
|
NETIF_F_GSO_UDP_TUNNEL_CSUM |
|
|
NETIF_F_GSO_UDP_TUNNEL_CSUM |
|
|
NETIF_F_GSO_PARTIAL);
|
|
NETIF_F_GSO_PARTIAL);
|
|
|
|
|
|
@@ -2431,7 +2435,18 @@ static netdev_features_t mlx4_en_features_check(struct sk_buff *skb,
|
|
netdev_features_t features)
|
|
netdev_features_t features)
|
|
{
|
|
{
|
|
features = vlan_features_check(skb, features);
|
|
features = vlan_features_check(skb, features);
|
|
- return vxlan_features_check(skb, features);
|
|
|
|
|
|
+ features = vxlan_features_check(skb, features);
|
|
|
|
+
|
|
|
|
+ /* The ConnectX-3 doesn't support outer IPv6 checksums but it does
|
|
|
|
+ * support inner IPv6 checksums and segmentation so we need to
|
|
|
|
+ * strip that feature if this is an IPv6 encapsulated frame.
|
|
|
|
+ */
|
|
|
|
+ if (skb->encapsulation &&
|
|
|
|
+ (skb->ip_summed == CHECKSUM_PARTIAL) &&
|
|
|
|
+ (ip_hdr(skb)->version != 4))
|
|
|
|
+ features &= ~(NETIF_F_CSUM_MASK | NETIF_F_GSO_MASK);
|
|
|
|
+
|
|
|
|
+ return features;
|
|
}
|
|
}
|
|
#endif
|
|
#endif
|
|
|
|
|