forked from mirrors/linux
		
	net: Rename NETIF_F_ALL_CSUM to NETIF_F_CSUM_MASK
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>
			
			
This commit is contained in:
		
							parent
							
								
									253aab0597
								
							
						
					
					
						commit
						a188222b6e
					
				
					 25 changed files with 43 additions and 39 deletions
				
			
		|  | @ -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; | ||||
| } | ||||
|  |  | |||
|  | @ -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; | ||||
| } | ||||
|  |  | |||
|  | @ -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) { | ||||
|  |  | |||
|  | @ -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 = { | ||||
|  |  | |||
|  | @ -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; | ||||
| } | ||||
|  |  | |||
|  | @ -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; | ||||
| } | ||||
|  |  | |||
|  | @ -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; | ||||
| } | ||||
| 
 | ||||
|  |  | |||
|  | @ -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. */ | ||||
|  |  | |||
|  | @ -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; | ||||
| } | ||||
|  |  | |||
|  | @ -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 = { | ||||
|  |  | |||
|  | @ -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 */ | ||||
|  |  | |||
|  | @ -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; | ||||
| } | ||||
|  |  | |||
|  | @ -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) | ||||
|  |  | |||
|  | @ -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) | ||||
|  |  | |||
|  | @ -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); | ||||
|  |  | |||
|  | @ -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; | ||||
| } | ||||
| 
 | ||||
|  |  | |||
|  | @ -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; | ||||
| 
 | ||||
|  |  | |||
|  | @ -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 | ||||
|  |  | |||
|  | @ -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) | ||||
| 
 | ||||
|  |  | |||
|  | @ -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; | ||||
| } | ||||
|  |  | |||
|  | @ -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; | ||||
| } | ||||
|  |  | |||
|  | @ -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; | ||||
|  |  | |||
|  | @ -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; | ||||
| } | ||||
|  |  | |||
|  | @ -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; | ||||
|  |  | |||
|  | @ -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 @@ int tcp_sendmsg(struct sock *sk, struct msghdr *msg, size_t size) | |||
| 			/*
 | ||||
| 			 * 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); | ||||
|  |  | |||
		Loading…
	
		Reference in a new issue
	
	 Tom Herbert
						Tom Herbert