net: Rename NETIF_F_ALL_CSUM to NETIF_F_CSUM_MASK
authorTom Herbert <tom@herbertland.com>
Mon, 14 Dec 2015 19:19:43 +0000 (11:19 -0800)
committerDavid S. Miller <davem@davemloft.net>
Tue, 15 Dec 2015 21:50:08 +0000 (16:50 -0500)
The name NETIF_F_ALL_CSUM is a misnomer. This does not correspond to the
set of features for offloading all checksums. This is a mask of the
checksum offload related features bits. It is incorrect to set both
NETIF_F_HW_CSUM and NETIF_F_IP_CSUM or NETIF_F_IPV6 at the same time for
features of a device.

This patch:
  - Changes instances of NETIF_F_ALL_CSUM to NETIF_F_CSUM_MASK (where
    NETIF_F_ALL_CSUM is being used as a mask).
  - Changes bonding, sfc/efx, ipvlan, macvlan, vlan, and team drivers to
    use NEITF_F_HW_CSUM in features list instead of NETIF_F_ALL_CSUM.

Signed-off-by: Tom Herbert <tom@herbertland.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
25 files changed:
drivers/net/bonding/bond_main.c
drivers/net/ethernet/emulex/benet/be_main.c
drivers/net/ethernet/ibm/ibmveth.c
drivers/net/ethernet/intel/fm10k/fm10k_netdev.c
drivers/net/ethernet/intel/i40e/i40e_main.c
drivers/net/ethernet/intel/ixgbe/ixgbe_main.c
drivers/net/ethernet/jme.c
drivers/net/ethernet/marvell/sky2.c
drivers/net/ethernet/netronome/nfp/nfp_net_common.c
drivers/net/ethernet/oki-semi/pch_gbe/pch_gbe_param.c
drivers/net/ethernet/sfc/efx.c
drivers/net/ethernet/stmicro/stmmac/stmmac_main.c
drivers/net/ipvlan/ipvlan_main.c
drivers/net/macvlan.c
drivers/net/macvtap.c
drivers/net/team/team.c
drivers/net/usb/r8152.c
drivers/staging/lustre/lnet/klnds/socklnd/socklnd_lib.c
include/linux/netdev_features.h
include/linux/netdevice.h
include/net/vxlan.h
net/8021q/vlan_dev.c
net/core/dev.c
net/core/ethtool.c
net/ipv4/tcp.c

index fe0e7a6f4d726d9271ec8e849bf72ea9f22915df..cab99fd44c8ef8ea1b559b217f0cb2062d8d4edd 100644 (file)
@@ -1067,12 +1067,12 @@ static netdev_features_t bond_fix_features(struct net_device *dev,
        return features;
 }
 
-#define BOND_VLAN_FEATURES     (NETIF_F_ALL_CSUM | NETIF_F_SG | \
+#define BOND_VLAN_FEATURES     (NETIF_F_HW_CSUM | NETIF_F_SG | \
                                 NETIF_F_FRAGLIST | NETIF_F_ALL_TSO | \
                                 NETIF_F_HIGHDMA | NETIF_F_LRO)
 
-#define BOND_ENC_FEATURES      (NETIF_F_ALL_CSUM | NETIF_F_SG | NETIF_F_RXCSUM |\
-                                NETIF_F_ALL_TSO)
+#define BOND_ENC_FEATURES      (NETIF_F_HW_CSUM | NETIF_F_SG | \
+                                NETIF_F_RXCSUM | NETIF_F_ALL_TSO)
 
 static void bond_compute_features(struct bonding *bond)
 {
@@ -4182,7 +4182,6 @@ void bond_setup(struct net_device *bond_dev)
                                NETIF_F_HW_VLAN_CTAG_RX |
                                NETIF_F_HW_VLAN_CTAG_FILTER;
 
-       bond_dev->hw_features &= ~(NETIF_F_ALL_CSUM & ~NETIF_F_HW_CSUM);
        bond_dev->hw_features |= NETIF_F_GSO_ENCAP_ALL;
        bond_dev->features |= bond_dev->hw_features;
 }
index 4cab8879f5ae4f0b3f64c9f7eb03c217f8e2ad19..34e324f20d8047d987e7a93c9974f8c2482e3df4 100644 (file)
@@ -5289,7 +5289,7 @@ static netdev_features_t be_features_check(struct sk_buff *skb,
            skb->inner_protocol != htons(ETH_P_TEB) ||
            skb_inner_mac_header(skb) - skb_transport_header(skb) !=
            sizeof(struct udphdr) + sizeof(struct vxlanhdr))
-               return features & ~(NETIF_F_ALL_CSUM | NETIF_F_GSO_MASK);
+               return features & ~(NETIF_F_CSUM_MASK | NETIF_F_GSO_MASK);
 
        return features;
 }
index 7af870a3c549592803a55a5cfea89ea1b15044d3..6691b5a45b9d9be2ba99ec4d5ee15edac1148d5d 100644 (file)
@@ -763,7 +763,7 @@ static netdev_features_t ibmveth_fix_features(struct net_device *dev,
         */
 
        if (!(features & NETIF_F_RXCSUM))
-               features &= ~NETIF_F_ALL_CSUM;
+               features &= ~NETIF_F_CSUM_MASK;
 
        return features;
 }
@@ -928,7 +928,8 @@ static int ibmveth_set_features(struct net_device *dev,
                rc1 = ibmveth_set_csum_offload(dev, rx_csum);
                if (rc1 && !adapter->rx_csum)
                        dev->features =
-                               features & ~(NETIF_F_ALL_CSUM | NETIF_F_RXCSUM);
+                               features & ~(NETIF_F_CSUM_MASK |
+                                            NETIF_F_RXCSUM);
        }
 
        if (large_send != adapter->large_send) {
index d9854d39576d46281a8fa60f2584d7cad46f890e..83ddf362ea7762bde034e9048cd541e8bb537d9c 100644 (file)
@@ -1357,7 +1357,7 @@ static netdev_features_t fm10k_features_check(struct sk_buff *skb,
        if (!skb->encapsulation || fm10k_tx_encap_offload(skb))
                return features;
 
-       return features & ~(NETIF_F_ALL_CSUM | NETIF_F_GSO_MASK);
+       return features & ~(NETIF_F_CSUM_MASK | NETIF_F_GSO_MASK);
 }
 
 static const struct net_device_ops fm10k_netdev_ops = {
index a63d980f478e73c9fda05e54cfb730b7602892d9..c284e4341c7c2a9aaa0a1287553edb92ba921fb6 100644 (file)
@@ -8766,7 +8766,7 @@ static netdev_features_t i40e_features_check(struct sk_buff *skb,
        if (skb->encapsulation &&
            (skb_inner_mac_header(skb) - skb_transport_header(skb) >
             I40E_MAX_TUNNEL_HDR_LEN))
-               return features & ~(NETIF_F_ALL_CSUM | NETIF_F_GSO_MASK);
+               return features & ~(NETIF_F_CSUM_MASK | NETIF_F_GSO_MASK);
 
        return features;
 }
index 9f27001cac1fcc4bddcd630b1f072056b0b889a9..fca35aa90d0ff54c0ded4f751c82405f40ea6970 100644 (file)
@@ -8598,7 +8598,7 @@ ixgbe_features_check(struct sk_buff *skb, struct net_device *dev,
 
        if (unlikely(skb_inner_mac_header(skb) - skb_transport_header(skb) >
                     IXGBE_MAX_TUNNEL_HDR_LEN))
-               return features & ~NETIF_F_ALL_CSUM;
+               return features & ~NETIF_F_CSUM_MASK;
 
        return features;
 }
index 060dd39229747c4b1f43e4f9f374777bea4d95ec..b1de7afd41166cc9ef67ed7e43191aaff897ec4e 100644 (file)
@@ -2753,7 +2753,7 @@ static netdev_features_t
 jme_fix_features(struct net_device *netdev, netdev_features_t features)
 {
        if (netdev->mtu > 1900)
-               features &= ~(NETIF_F_ALL_TSO | NETIF_F_ALL_CSUM);
+               features &= ~(NETIF_F_ALL_TSO | NETIF_F_CSUM_MASK);
        return features;
 }
 
index 5606a043063e3a83c5532ea0ebccbaf6fca77259..ec0a22119e09e2a49b54c9a23995e200a2d780a9 100644 (file)
@@ -4380,7 +4380,7 @@ static netdev_features_t sky2_fix_features(struct net_device *dev,
         */
        if (dev->mtu > ETH_DATA_LEN && hw->chip_id == CHIP_ID_YUKON_EC_U) {
                netdev_info(dev, "checksum offload not possible with jumbo frames\n");
-               features &= ~(NETIF_F_TSO|NETIF_F_SG|NETIF_F_ALL_CSUM);
+               features &= ~(NETIF_F_TSO | NETIF_F_SG | NETIF_F_CSUM_MASK);
        }
 
        /* Some hardware requires receive checksum for RSS to work. */
index 038ac6b14a603994c69410d163d281448dccf2d6..7060539d276aa17a9538ebfec527d5d202645f7c 100644 (file)
@@ -2071,7 +2071,7 @@ nfp_net_features_check(struct sk_buff *skb, struct net_device *dev,
                l4_hdr = ipv6_hdr(skb)->nexthdr;
                break;
        default:
-               return features & ~(NETIF_F_ALL_CSUM | NETIF_F_GSO_MASK);
+               return features & ~(NETIF_F_CSUM_MASK | NETIF_F_GSO_MASK);
        }
 
        if (skb->inner_protocol_type != ENCAP_TYPE_ETHER ||
@@ -2080,7 +2080,7 @@ nfp_net_features_check(struct sk_buff *skb, struct net_device *dev,
            (l4_hdr == IPPROTO_UDP &&
             (skb_inner_mac_header(skb) - skb_transport_header(skb) !=
              sizeof(struct udphdr) + sizeof(struct vxlanhdr))))
-               return features & ~(NETIF_F_ALL_CSUM | NETIF_F_GSO_MASK);
+               return features & ~(NETIF_F_CSUM_MASK | NETIF_F_GSO_MASK);
 
        return features;
 }
index 08d4be61606480d645f5e772f998b335b508ed65..e097e6baaac431247981a5cce40989e86100a3fc 100644 (file)
@@ -500,7 +500,7 @@ void pch_gbe_check_options(struct pch_gbe_adapter *adapter)
                val = XsumTX;
                pch_gbe_validate_option(&val, &opt, adapter);
                if (!val)
-                       dev->features &= ~NETIF_F_ALL_CSUM;
+                       dev->features &= ~NETIF_F_CSUM_MASK;
        }
        { /* Flow Control */
                static const struct pch_gbe_option opt = {
index b405349a570c284226d98109927183274fbe0b31..1fe13c733c1e4515725f4639c1dbb62829ec5cd6 100644 (file)
@@ -3131,7 +3131,7 @@ static int efx_pci_probe(struct pci_dev *pci_dev,
        if (efx->type->offload_features & NETIF_F_V6_CSUM)
                net_dev->features |= NETIF_F_TSO6;
        /* Mask for features that also apply to VLAN devices */
-       net_dev->vlan_features |= (NETIF_F_ALL_CSUM | NETIF_F_SG |
+       net_dev->vlan_features |= (NETIF_F_HW_CSUM | NETIF_F_SG |
                                   NETIF_F_HIGHDMA | NETIF_F_ALL_TSO |
                                   NETIF_F_RXCSUM);
        /* All offloads can be toggled */
index 3c6549aee11dee5cf13c92c90c5b4b7a8618f375..0b0fea73a7a7d78d63b092925f10b9f9f92b80c6 100644 (file)
@@ -2402,7 +2402,7 @@ static netdev_features_t stmmac_fix_features(struct net_device *dev,
                features &= ~NETIF_F_RXCSUM;
 
        if (!priv->plat->tx_coe)
-               features &= ~NETIF_F_ALL_CSUM;
+               features &= ~NETIF_F_CSUM_MASK;
 
        /* Some GMAC devices have a bugged Jumbo frame support that
         * needs to have the Tx COE disabled for oversized frames
@@ -2410,7 +2410,7 @@ static netdev_features_t stmmac_fix_features(struct net_device *dev,
         * the TX csum insertionin the TDES and not use SF.
         */
        if (priv->plat->bugged_jumbo && (dev->mtu > ETH_DATA_LEN))
-               features &= ~NETIF_F_ALL_CSUM;
+               features &= ~NETIF_F_CSUM_MASK;
 
        return features;
 }
index a9268db4e349fc2e131be0010ecd67e8bb779939..f94392d07126c12fe7a60e0018b6214e9f72a4e2 100644 (file)
@@ -88,7 +88,7 @@ static struct lock_class_key ipvlan_netdev_xmit_lock_key;
 static struct lock_class_key ipvlan_netdev_addr_lock_key;
 
 #define IPVLAN_FEATURES \
-       (NETIF_F_SG | NETIF_F_ALL_CSUM | NETIF_F_HIGHDMA | NETIF_F_FRAGLIST | \
+       (NETIF_F_SG | NETIF_F_HW_CSUM | NETIF_F_HIGHDMA | NETIF_F_FRAGLIST | \
         NETIF_F_GSO | NETIF_F_TSO | NETIF_F_UFO | NETIF_F_GSO_ROBUST | \
         NETIF_F_TSO_ECN | NETIF_F_TSO6 | NETIF_F_GRO | NETIF_F_RXCSUM | \
         NETIF_F_HW_VLAN_CTAG_FILTER | NETIF_F_HW_VLAN_STAG_FILTER)
index 06c8bfeaccd6c11cf15a8f05d87ce23c0f1e4405..ae3b486fb663898409d669c03da62508eb6d517b 100644 (file)
@@ -762,7 +762,7 @@ static struct lock_class_key macvlan_netdev_addr_lock_key;
         NETIF_F_GSO_ROBUST)
 
 #define MACVLAN_FEATURES \
-       (NETIF_F_SG | NETIF_F_ALL_CSUM | NETIF_F_HIGHDMA | NETIF_F_FRAGLIST | \
+       (NETIF_F_SG | NETIF_F_HW_CSUM | NETIF_F_HIGHDMA | NETIF_F_FRAGLIST | \
         NETIF_F_GSO | NETIF_F_TSO | NETIF_F_UFO | NETIF_F_LRO | \
         NETIF_F_TSO_ECN | NETIF_F_TSO6 | NETIF_F_GRO | NETIF_F_RXCSUM | \
         NETIF_F_HW_VLAN_CTAG_FILTER | NETIF_F_HW_VLAN_STAG_FILTER)
index 0fc521941c718dbcdea487a18a900984ad176ea5..d636d051fac8317ca6d94dd1bdf9c34cac4a5b4b 100644 (file)
@@ -388,7 +388,7 @@ static rx_handler_result_t macvtap_handle_frame(struct sk_buff **pskb)
                 *        check, we either support them all or none.
                 */
                if (skb->ip_summed == CHECKSUM_PARTIAL &&
-                   !(features & NETIF_F_ALL_CSUM) &&
+                   !(features & NETIF_F_CSUM_MASK) &&
                    skb_checksum_help(skb))
                        goto drop;
                skb_queue_tail(&q->sk.sk_receive_queue, skb);
index 059c0f60a2b28f8447d78c8876aac29618551b0f..915f60fce186352c9253aca3763cc3bcdd5e15ef 100644 (file)
@@ -981,7 +981,7 @@ static void team_port_disable(struct team *team,
        team_lower_state_changed(port);
 }
 
-#define TEAM_VLAN_FEATURES (NETIF_F_ALL_CSUM | NETIF_F_SG | \
+#define TEAM_VLAN_FEATURES (NETIF_F_HW_CSUM | NETIF_F_SG | \
                            NETIF_F_FRAGLIST | NETIF_F_ALL_TSO | \
                            NETIF_F_HIGHDMA | NETIF_F_LRO)
 
@@ -2091,7 +2091,6 @@ static void team_setup(struct net_device *dev)
                           NETIF_F_HW_VLAN_CTAG_RX |
                           NETIF_F_HW_VLAN_CTAG_FILTER;
 
-       dev->hw_features &= ~(NETIF_F_ALL_CSUM & ~NETIF_F_HW_CSUM);
        dev->features |= dev->hw_features;
 }
 
index d9427ca3dba79628f402867b83e735bee78fac3b..34642a9583e0de11ac53df4223b445a5f12078e6 100644 (file)
@@ -1986,7 +1986,7 @@ rtl8152_features_check(struct sk_buff *skb, struct net_device *dev,
        int offset = skb_transport_offset(skb);
 
        if ((mss || skb->ip_summed == CHECKSUM_PARTIAL) && offset > max_offset)
-               features &= ~(NETIF_F_ALL_CSUM | NETIF_F_GSO_MASK);
+               features &= ~(NETIF_F_CSUM_MASK | NETIF_F_GSO_MASK);
        else if ((skb->len + sizeof(struct tx_desc)) > agg_buf_sz)
                features &= ~NETIF_F_GSO_MASK;
 
index 679785b0209cf6a5f9c40c58a10979a77cd3912f..9de4f23910d8bc2f447c1487a5f0622735173b34 100644 (file)
@@ -69,7 +69,7 @@ ksocknal_lib_zc_capable(ksock_conn_t *conn)
 
        /* ZC if the socket supports scatter/gather and doesn't need software
         * checksums */
-       return ((caps & NETIF_F_SG) != 0 && (caps & NETIF_F_ALL_CSUM) != 0);
+       return ((caps & NETIF_F_SG) != 0 && (caps & NETIF_F_CSUM_MASK) != 0);
 }
 
 int
index 6395f83093933bfe745e9aa1fa8a61c60fab358c..2c4e94ab88da515112cbe098350d6b813f52e862 100644 (file)
@@ -149,7 +149,12 @@ enum {
 #define NETIF_F_GEN_CSUM       NETIF_F_HW_CSUM
 #define NETIF_F_V4_CSUM                (NETIF_F_GEN_CSUM | NETIF_F_IP_CSUM)
 #define NETIF_F_V6_CSUM                (NETIF_F_GEN_CSUM | NETIF_F_IPV6_CSUM)
-#define NETIF_F_ALL_CSUM       (NETIF_F_V4_CSUM | NETIF_F_V6_CSUM)
+
+/* List of IP checksum features. Note that NETIF_HW_CSUM should not be
+ * set in features when NETIF_F_IP_CSUM or NETIF_F_IPV6_CSUM are set--
+ * this would be contradictory
+ */
+#define NETIF_F_CSUM_MASK      (NETIF_F_V4_CSUM | NETIF_F_V6_CSUM)
 
 #define NETIF_F_ALL_TSO        (NETIF_F_TSO | NETIF_F_TSO6 | NETIF_F_TSO_ECN)
 
index 1bb21ff0fa6414ae3a6def9ff4c66fa02217795b..a54223a113b14af92bb4ee3d266dc244036185da 100644 (file)
@@ -3763,12 +3763,12 @@ static inline netdev_features_t netdev_intersect_features(netdev_features_t f1,
                                                          netdev_features_t f2)
 {
        if (f1 & NETIF_F_GEN_CSUM)
-               f1 |= (NETIF_F_ALL_CSUM & ~NETIF_F_GEN_CSUM);
+               f1 |= (NETIF_F_CSUM_MASK & ~NETIF_F_GEN_CSUM);
        if (f2 & NETIF_F_GEN_CSUM)
-               f2 |= (NETIF_F_ALL_CSUM & ~NETIF_F_GEN_CSUM);
+               f2 |= (NETIF_F_CSUM_MASK & ~NETIF_F_GEN_CSUM);
        f1 &= f2;
        if (f1 & NETIF_F_GEN_CSUM)
-               f1 &= ~(NETIF_F_ALL_CSUM & ~NETIF_F_GEN_CSUM);
+               f1 &= ~(NETIF_F_CSUM_MASK & ~NETIF_F_GEN_CSUM);
 
        return f1;
 }
index c1c899c3a51be42f680fff5ce0f5c5e997652daa..b5a1aec1a167c26b593b33648cdeb7f14ef56cf4 100644 (file)
@@ -232,7 +232,7 @@ static inline netdev_features_t vxlan_features_check(struct sk_buff *skb,
             skb->inner_protocol != htons(ETH_P_TEB) ||
             (skb_inner_mac_header(skb) - skb_transport_header(skb) !=
              sizeof(struct udphdr) + sizeof(struct vxlanhdr))))
-               return features & ~(NETIF_F_ALL_CSUM | NETIF_F_GSO_MASK);
+               return features & ~(NETIF_F_CSUM_MASK | NETIF_F_GSO_MASK);
 
        return features;
 }
index 45b74e875381ff8b619bab05e32c8eb8261820e3..ad5e2fd1012c4c1fdfedf010055acfae003646e4 100644 (file)
@@ -543,7 +543,7 @@ static int vlan_dev_init(struct net_device *dev)
                                          (1<<__LINK_STATE_DORMANT))) |
                      (1<<__LINK_STATE_PRESENT);
 
-       dev->hw_features = NETIF_F_ALL_CSUM | NETIF_F_SG |
+       dev->hw_features = NETIF_F_HW_CSUM | NETIF_F_SG |
                           NETIF_F_FRAGLIST | NETIF_F_GSO_SOFTWARE |
                           NETIF_F_HIGHDMA | NETIF_F_SCTP_CRC |
                           NETIF_F_ALL_FCOE;
index 8f705fcedb94b0e4ef56cdf70b363fdd396a14ee..5a3b5a404642fd1e5768ac66994d5a566fcc2871 100644 (file)
@@ -2645,7 +2645,7 @@ static netdev_features_t harmonize_features(struct sk_buff *skb,
 
        if (skb->ip_summed != CHECKSUM_NONE &&
            !can_checksum_protocol(features, type)) {
-               features &= ~NETIF_F_ALL_CSUM;
+               features &= ~NETIF_F_CSUM_MASK;
        } else if (illegal_highdma(skb->dev, skb)) {
                features &= ~NETIF_F_SG;
        }
@@ -2792,7 +2792,7 @@ static struct sk_buff *validate_xmit_skb(struct sk_buff *skb, struct net_device
                        else
                                skb_set_transport_header(skb,
                                                         skb_checksum_start_offset(skb));
-                       if (!(features & NETIF_F_ALL_CSUM) &&
+                       if (!(features & NETIF_F_CSUM_MASK) &&
                            skb_checksum_help(skb))
                                goto out_kfree_skb;
                }
@@ -7572,15 +7572,15 @@ netdev_features_t netdev_increment_features(netdev_features_t all,
        netdev_features_t one, netdev_features_t mask)
 {
        if (mask & NETIF_F_GEN_CSUM)
-               mask |= NETIF_F_ALL_CSUM;
+               mask |= NETIF_F_CSUM_MASK;
        mask |= NETIF_F_VLAN_CHALLENGED;
 
-       all |= one & (NETIF_F_ONE_FOR_ALL|NETIF_F_ALL_CSUM) & mask;
+       all |= one & (NETIF_F_ONE_FOR_ALL | NETIF_F_CSUM_MASK) & mask;
        all &= one | ~NETIF_F_ALL_FOR_ALL;
 
        /* If one device supports hw checksumming, set for all. */
        if (all & NETIF_F_GEN_CSUM)
-               all &= ~(NETIF_F_ALL_CSUM & ~NETIF_F_GEN_CSUM);
+               all &= ~(NETIF_F_CSUM_MASK & ~NETIF_F_GEN_CSUM);
 
        return all;
 }
index 4a0cab85d67d3396f1b7698c1aca8cd2a5189670..09948a726347cf06b31565a8d85cca1cdee590cf 100644 (file)
@@ -235,7 +235,7 @@ static netdev_features_t ethtool_get_feature_mask(u32 eth_cmd)
        switch (eth_cmd) {
        case ETHTOOL_GTXCSUM:
        case ETHTOOL_STXCSUM:
-               return NETIF_F_ALL_CSUM | NETIF_F_SCTP_CRC;
+               return NETIF_F_CSUM_MASK | NETIF_F_SCTP_CRC;
        case ETHTOOL_GRXCSUM:
        case ETHTOOL_SRXCSUM:
                return NETIF_F_RXCSUM;
index c82cca18c90fbd67c2daf71c6769ee5fef21d2a9..cf7ef7be79f0de3618dd1156b1217cd515153c53 100644 (file)
@@ -1018,7 +1018,7 @@ int tcp_sendpage(struct sock *sk, struct page *page, int offset,
        ssize_t res;
 
        if (!(sk->sk_route_caps & NETIF_F_SG) ||
-           !(sk->sk_route_caps & NETIF_F_ALL_CSUM))
+           !(sk->sk_route_caps & NETIF_F_CSUM_MASK))
                return sock_no_sendpage(sk->sk_socket, page, offset, size,
                                        flags);
 
@@ -1175,7 +1175,7 @@ new_segment:
                        /*
                         * Check whether we can use HW checksum.
                         */
-                       if (sk->sk_route_caps & NETIF_F_ALL_CSUM)
+                       if (sk->sk_route_caps & NETIF_F_CSUM_MASK)
                                skb->ip_summed = CHECKSUM_PARTIAL;
 
                        skb_entail(sk, skb);