Date: Wed, 10 Jul 2013 10:35:58 GMT From: Meny Yossefi <menyy@mellanox.com> To: freebsd-gnats-submit@FreeBSD.org Subject: misc/180430: Bad UDP checksum calc for fragmented packets Message-ID: <201307101035.r6AAZwST095906@oldred.freebsd.org> Resent-Message-ID: <201307101040.r6AAe0PE068034@freefall.freebsd.org>
next in thread | raw e-mail | index | archive | help
>Number: 180430
>Category: misc
>Synopsis: Bad UDP checksum calc for fragmented packets
>Confidential: no
>Severity: non-critical
>Priority: low
>Responsible: freebsd-bugs
>State: open
>Quarter:
>Keywords:
>Date-Required:
>Class: sw-bug
>Submitter-Id: current-users
>Arrival-Date: Wed Jul 10 10:40:00 UTC 2013
>Closed-Date:
>Last-Modified:
>Originator: Meny Yossefi
>Release: 9.1.0
>Organization:
Mellanox
>Environment:
FreeBSD r-sw-freebsd01.mtr.labs.mlnx 9.1-RELEASE FreeBSD 9.1-RELEASE #0 r243825: Tue Dec 4 09:23:10 UTC 2012 root@farrell.cse.buffalo.edu:/usr/obj/usr/src/sys/GENERIC amd64
>Description:
HW performs UDP checksum calculation and runs over the SW (tcp/ip stack) calculation.
In case of fragmented packets, HW calculation (For UDP csum) is wrong and packets get dropped on receiver side.
Solution: remove HW UDP csum calculation on fragmented packets.
>How-To-Repeat:
Send packets over MLNX interface with msg size larger than MTU.
>Fix:
HW will calculate UDP checksum only for un-fragmented packets.
Patch attached with submission follows:
--- ../clean_9.1.0/sys/ofed/drivers/net/mlx4/en_tx.c 2013-07-09 09:41:01.349506000 +0300
+++ ../9.1.0/sys/ofed/drivers/net/mlx4/en_tx.c 2013-07-09 10:56:18.910829000 +0300
@@ -780,8 +780,9 @@ retry:
tx_desc->ctrl.srcrb_flags = cpu_to_be32(MLX4_WQE_CTRL_CQ_UPDATE |
MLX4_WQE_CTRL_SOLICITED);
if (mb->m_pkthdr.csum_flags & (CSUM_IP|CSUM_TCP|CSUM_UDP)) {
- tx_desc->ctrl.srcrb_flags |= cpu_to_be32(MLX4_WQE_CTRL_IP_CSUM |
- MLX4_WQE_CTRL_TCP_UDP_CSUM);
+ tx_desc->ctrl.srcrb_flags |= cpu_to_be32(MLX4_WQE_CTRL_IP_CSUM);
+ if ((mb->m_flags & M_FRAG) == 0)
+ tx_desc->ctrl.srcrb_flags |= cpu_to_be32(MLX4_WQE_CTRL_TCP_UDP_CSUM);
priv->port_stats.tx_chksum_offload++;
}
>Release-Note:
>Audit-Trail:
>Unformatted:
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201307101035.r6AAZwST095906>
