Merge branch 'GREoIPV6-followups'
authorDavid S. Miller <davem@davemloft.net>
Fri, 20 May 2016 23:25:58 +0000 (19:25 -0400)
committerDavid S. Miller <davem@davemloft.net>
Fri, 20 May 2016 23:25:58 +0000 (19:25 -0400)
Alexander Duyck says:

====================
Follow-ups for GUEoIPv6 patches

This patch series is meant to be applied after:
[PATCH v7 net-next 00/16] ipv6: Enable GUEoIPv6 and more fixes for v6 tunneling

The first patch addresses an issue we already resolved in the GREv4 and is
now present in GREv6 with the introduction of FOU/GUE for IPv6 based GRE
tunnels.

The second patch goes through and enables IPv6 tunnel offloads for the Intel
NICs that already support the IPv4 based IP-in-IP tunnel offloads.  I have
only done a bit of touch testing but have seen ~20 Gb/s over an i40e
interface using a v4-in-v6 tunnel, and I have verified IPv6 GRE is still
passing traffic at around the same rate.  I plan to do further testing but
with these patches present it should enable a wider audience to be able to
test the new features introduced in Tom's patchset with hardware offloads.
====================

Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/ethernet/intel/i40e/i40e_main.c
drivers/net/ethernet/intel/i40e/i40e_txrx.c
drivers/net/ethernet/intel/i40evf/i40e_txrx.c
drivers/net/ethernet/intel/i40evf/i40evf_main.c
drivers/net/ethernet/intel/igb/igb_main.c
drivers/net/ethernet/intel/igbvf/netdev.c
drivers/net/ethernet/intel/ixgbe/ixgbe_main.c
drivers/net/ethernet/intel/ixgbevf/ixgbevf_main.c
net/ipv6/ip6_gre.c

index 242a1ff344e63ca18d5efd565ff47d1167d2d4df..5ea22008d721d0a0ad769f32b7ee74ef8b19249d 100644 (file)
@@ -9084,6 +9084,7 @@ static int i40e_config_netdev(struct i40e_vsi *vsi)
                                   NETIF_F_GSO_GRE              |
                                   NETIF_F_GSO_GRE_CSUM         |
                                   NETIF_F_GSO_IPXIP4           |
+                                  NETIF_F_GSO_IPXIP6           |
                                   NETIF_F_GSO_UDP_TUNNEL       |
                                   NETIF_F_GSO_UDP_TUNNEL_CSUM  |
                                   NETIF_F_GSO_PARTIAL          |
index 0a8122c00ae213508a381bb7b70d0869bdb9e74b..55f151fca1dcb785089511105920755fef9397b1 100644 (file)
@@ -2285,6 +2285,7 @@ static int i40e_tso(struct sk_buff *skb, u8 *hdr_len, u64 *cd_type_cmd_tso_mss)
        if (skb_shinfo(skb)->gso_type & (SKB_GSO_GRE |
                                         SKB_GSO_GRE_CSUM |
                                         SKB_GSO_IPXIP4 |
+                                        SKB_GSO_IPXIP6 |
                                         SKB_GSO_UDP_TUNNEL |
                                         SKB_GSO_UDP_TUNNEL_CSUM)) {
                if (!(skb_shinfo(skb)->gso_type & SKB_GSO_PARTIAL) &&
index 2bbbbd0f9f15d9a4382f03d9a700ce252336a4ce..be99189da925fc5862e9c318489694341a3a68f9 100644 (file)
@@ -1560,6 +1560,7 @@ static int i40e_tso(struct sk_buff *skb, u8 *hdr_len, u64 *cd_type_cmd_tso_mss)
        if (skb_shinfo(skb)->gso_type & (SKB_GSO_GRE |
                                         SKB_GSO_GRE_CSUM |
                                         SKB_GSO_IPXIP4 |
+                                        SKB_GSO_IPXIP6 |
                                         SKB_GSO_UDP_TUNNEL |
                                         SKB_GSO_UDP_TUNNEL_CSUM)) {
                if (!(skb_shinfo(skb)->gso_type & SKB_GSO_PARTIAL) &&
index 02d0a1ca696038cd2ca5351e0988bb88ebd4adbf..16c5529528600324a1f3116ac7023d7b57b3d6c9 100644 (file)
@@ -2231,6 +2231,7 @@ int i40evf_process_config(struct i40evf_adapter *adapter)
                                   NETIF_F_GSO_GRE              |
                                   NETIF_F_GSO_GRE_CSUM         |
                                   NETIF_F_GSO_IPXIP4           |
+                                  NETIF_F_GSO_IPXIP6           |
                                   NETIF_F_GSO_UDP_TUNNEL       |
                                   NETIF_F_GSO_UDP_TUNNEL_CSUM  |
                                   NETIF_F_GSO_PARTIAL          |
index b1a5cdb77088789e76a332873ecb17c987632275..ef3d642f5ff203234383d2b07403c209cd5d37d3 100644 (file)
@@ -2419,6 +2419,7 @@ static int igb_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
 #define IGB_GSO_PARTIAL_FEATURES (NETIF_F_GSO_GRE | \
                                  NETIF_F_GSO_GRE_CSUM | \
                                  NETIF_F_GSO_IPXIP4 | \
+                                 NETIF_F_GSO_IPXIP6 | \
                                  NETIF_F_GSO_UDP_TUNNEL | \
                                  NETIF_F_GSO_UDP_TUNNEL_CSUM)
 
index 79b907f1a5201b72982ebce0f4b0dc931039685c..b0778ba650836c0d50970690f88a1fb30a9a85fb 100644 (file)
@@ -2764,6 +2764,7 @@ static int igbvf_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
 #define IGBVF_GSO_PARTIAL_FEATURES (NETIF_F_GSO_GRE | \
                                    NETIF_F_GSO_GRE_CSUM | \
                                    NETIF_F_GSO_IPXIP4 | \
+                                   NETIF_F_GSO_IPXIP6 | \
                                    NETIF_F_GSO_UDP_TUNNEL | \
                                    NETIF_F_GSO_UDP_TUNNEL_CSUM)
 
index 69452c379cbcbb76bbf37eb37f6c5efd82875d03..088c47cf27d97d0f5a8a40992c95ec7c7a761947 100644 (file)
@@ -9483,6 +9483,7 @@ skip_sriov:
 #define IXGBE_GSO_PARTIAL_FEATURES (NETIF_F_GSO_GRE | \
                                    NETIF_F_GSO_GRE_CSUM | \
                                    NETIF_F_GSO_IPXIP4 | \
+                                   NETIF_F_GSO_IPXIP6 | \
                                    NETIF_F_GSO_UDP_TUNNEL | \
                                    NETIF_F_GSO_UDP_TUNNEL_CSUM)
 
index d86e51116384c46905264d874cc62b4f7deb6c62..acc24010cfe0c6c5c10ea048b583a7522bbd2f34 100644 (file)
@@ -4063,6 +4063,7 @@ static int ixgbevf_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
 #define IXGBEVF_GSO_PARTIAL_FEATURES (NETIF_F_GSO_GRE | \
                                      NETIF_F_GSO_GRE_CSUM | \
                                      NETIF_F_GSO_IPXIP4 | \
+                                     NETIF_F_GSO_IPXIP6 | \
                                      NETIF_F_GSO_UDP_TUNNEL | \
                                      NETIF_F_GSO_UDP_TUNNEL_CSUM)
 
index 6fb1b89d01787b1884625930940194cc304a7438..af503f518278b21f274afe355acbe6815492d15b 100644 (file)
@@ -1355,11 +1355,15 @@ static int ip6gre_newlink(struct net *src_net, struct net_device *dev,
        dev->hw_features        |= GRE6_FEATURES;
 
        if (!(nt->parms.o_flags & TUNNEL_SEQ)) {
-               /* TCP segmentation offload is not supported when we
-                * generate output sequences.
+               /* TCP offload with GRE SEQ is not supported, nor
+                * can we support 2 levels of outer headers requiring
+                * an update.
                 */
-               dev->features    |= NETIF_F_GSO_SOFTWARE;
-               dev->hw_features |= NETIF_F_GSO_SOFTWARE;
+               if (!(nt->parms.o_flags & TUNNEL_CSUM) ||
+                   (nt->encap.type == TUNNEL_ENCAP_NONE)) {
+                       dev->features    |= NETIF_F_GSO_SOFTWARE;
+                       dev->hw_features |= NETIF_F_GSO_SOFTWARE;
+               }
 
                /* Can use a lockless transmit, unless we generate
                 * output sequences
This page took 0.03664 seconds and 5 git commands to generate.