git: d5f5193e2db9 - main - rtwn: don't treat UDP/TCP checksum failure as permanent failure
Date: Wed, 23 Apr 2025 02:04:09 UTC
The branch main has been updated by adrian:
URL: https://cgit.FreeBSD.org/src/commit/?id=d5f5193e2db974576120b5e5f559970a6c15247d
commit d5f5193e2db974576120b5e5f559970a6c15247d
Author: Adrian Chadd <adrian@FreeBSD.org>
AuthorDate: 2025-04-01 23:57:41 +0000
Commit: Adrian Chadd <adrian@FreeBSD.org>
CommitDate: 2025-04-23 02:02:47 +0000
rtwn: don't treat UDP/TCP checksum failure as permanent failure
jrtc27@freebsd.org reported that DHCP wasn't working on some
networks. She dug into it and found that the RTL8812AU/RTL8812AU
NICs seem to be failing UDP frames w/ a zero checksum, which is
a valid "there's no checksum" checksum.
So, just pass those frames up the stack and let the IP stack
deal with it. If the hardware claims the frames did pass TCP/UDP
checksum then still mark those frames with the checksum offload
bits.
PR: kern/285387
Differential Revision: https://reviews.freebsd.org/D49628
---
sys/dev/rtwn/rtl8812a/r12a_rx.c | 10 +++++++++-
1 file changed, 9 insertions(+), 1 deletion(-)
diff --git a/sys/dev/rtwn/rtl8812a/r12a_rx.c b/sys/dev/rtwn/rtl8812a/r12a_rx.c
index 805775033fd1..b2e02998de49 100644
--- a/sys/dev/rtwn/rtl8812a/r12a_rx.c
+++ b/sys/dev/rtwn/rtl8812a/r12a_rx.c
@@ -190,8 +190,16 @@ r12a_check_frame_checksum(struct rtwn_softc *sc, struct mbuf *m)
(rxdw1 & R12A_RXDW1_IPV6) ? "IPv6" : "IP",
(rxdw1 & R12A_RXDW1_CKSUM_ERR) ? "invalid" : "valid");
+ /*
+ * There seems to be a problem with UDP checksum processing
+ * with the checksum value = 0 (ie, no checksum.)
+ * So, don't treat it as a permament failure; just let
+ * the IP stack take a crack at validating frames.
+ *
+ * See kern/285837 for more details.
+ */
if (rxdw1 & R12A_RXDW1_CKSUM_ERR)
- return (-1);
+ return (0);
if ((rxdw1 & R12A_RXDW1_IPV6) ?
(rs->rs_flags & R12A_RXCKSUM6_EN) :