net: hns3: add UDP segmentation offload support
Add support for UDP segmentation offload to the HNS3 driver when the device can do it. Signed-off-by: Huazhong Tan <tanhuazhong@huawei.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
6ad595bc98
commit
0692cfe94a
|
@ -696,12 +696,19 @@ static int hns3_set_tso(struct sk_buff *skb, u32 *paylen,
|
||||||
|
|
||||||
/* normal or tunnel packet */
|
/* normal or tunnel packet */
|
||||||
l4_offset = l4.hdr - skb->data;
|
l4_offset = l4.hdr - skb->data;
|
||||||
hdr_len = (l4.tcp->doff << 2) + l4_offset;
|
|
||||||
|
|
||||||
/* remove payload length from inner pseudo checksum when tso */
|
/* remove payload length from inner pseudo checksum when tso */
|
||||||
l4_paylen = skb->len - l4_offset;
|
l4_paylen = skb->len - l4_offset;
|
||||||
csum_replace_by_diff(&l4.tcp->check,
|
|
||||||
(__force __wsum)htonl(l4_paylen));
|
if (skb_shinfo(skb)->gso_type & SKB_GSO_UDP_L4) {
|
||||||
|
hdr_len = sizeof(*l4.udp) + l4_offset;
|
||||||
|
csum_replace_by_diff(&l4.udp->check,
|
||||||
|
(__force __wsum)htonl(l4_paylen));
|
||||||
|
} else {
|
||||||
|
hdr_len = (l4.tcp->doff << 2) + l4_offset;
|
||||||
|
csum_replace_by_diff(&l4.tcp->check,
|
||||||
|
(__force __wsum)htonl(l4_paylen));
|
||||||
|
}
|
||||||
|
|
||||||
/* find the txbd field values */
|
/* find the txbd field values */
|
||||||
*paylen = skb->len - hdr_len;
|
*paylen = skb->len - hdr_len;
|
||||||
|
@ -2311,6 +2318,13 @@ static void hns3_set_default_feature(struct net_device *netdev)
|
||||||
netdev->features |= NETIF_F_NTUPLE;
|
netdev->features |= NETIF_F_NTUPLE;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (test_bit(HNAE3_DEV_SUPPORT_UDP_GSO_B, ae_dev->caps)) {
|
||||||
|
netdev->hw_features |= NETIF_F_GSO_UDP_L4;
|
||||||
|
netdev->features |= NETIF_F_GSO_UDP_L4;
|
||||||
|
netdev->vlan_features |= NETIF_F_GSO_UDP_L4;
|
||||||
|
netdev->hw_enc_features |= NETIF_F_GSO_UDP_L4;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static int hns3_alloc_buffer(struct hns3_enet_ring *ring,
|
static int hns3_alloc_buffer(struct hns3_enet_ring *ring,
|
||||||
|
|
Loading…
Reference in New Issue