net/hns3: fix Tx checksum for UDP packets with special port
authorChengchang Tang <tangchengchang@huawei.com>
Tue, 23 Mar 2021 13:45:54 +0000 (21:45 +0800)
committerFerruh Yigit <ferruh.yigit@intel.com>
Tue, 30 Mar 2021 10:30:46 +0000 (12:30 +0200)
commit8f01e2f847569e8c21f0628389a6e6a8a1c44a31
tree3aeb4c7314b086c78049b9dd373329452e58a646
parenta1d0caa92c7fe43cef7a9f6ac4772e0eecd4a011
net/hns3: fix Tx checksum for UDP packets with special port

For Kunpeng920 network engine, UDP packets with destination port 6081,
4789 or 4790 will be identified as tunnel packets. If the UDP CKSUM
offload is set in the mbuf, and the TX tunnel mask is not set, the
CKSUM of these packets will be wrong. In this case, the upper layer
user may not identify the packet as a tunnel packet, and processes it
as non-tunnel packet, and expect to offload the outer UDP CKSUM, so
they may not fill the outer L2/L3 length to mbuf. However, the HW
identifies these packet as tunnel packets and therefore offload the
inner UDP CKSUM. As a result, the inner and outer UDP CKSUM are
incorrect. And for non-tunnel UDP packets with preceding special
destination port will also exist similar checksum error.

For the new generation Kunpeng930 network engine, the above errata
have been fixed. Therefore, the concept of udp_cksum_mode is
introduced. There are two udp_cksum_mode for hns3 PMD,
HNS3_SPECIAL_PORT_HW_CKSUM_MODE means HW could solve the above
problem. And in HNS3_SPECIAL_PORT_SW_CKSUM_MODE, hns3 PMD will check
packets in the Tx prepare and perform the UDP CKSUM for such packets
to avoid a checksum error.

Fixes: bba636698316 ("net/hns3: support Rx/Tx and related operations")
Cc: stable@dpdk.org
Signed-off-by: Chengchang Tang <tangchengchang@huawei.com>
Signed-off-by: Min Hu (Connor) <humin29@huawei.com>
drivers/net/hns3/hns3_ethdev.c
drivers/net/hns3/hns3_ethdev.h
drivers/net/hns3/hns3_rxtx.c
drivers/net/hns3/hns3_rxtx.h