re(4) incorrect checksum

Pyun YongHyeon pyunyh at gmail.com
Fri Jan 12 02:00:14 UTC 2007


On Thu, Jan 11, 2007 at 04:37:05PM +0100, Rene Ladan wrote:
 > Pyun YongHyeon schreef:
 > > On Thu, Jan 11, 2007 at 12:14:34PM +0100, Rene Ladan wrote:
 > >  > Pietro Cerutti schreef:
 > >  > > Hi lists,
 > >  > > 
 > >  > > FreeBSD gahrtop.localhost 6.2-PRERELEASE FreeBSD 6.2-PRERELEASE #1:
 > >  > > Tue Jan  9 19:34:13 CET 2007
 > >  > > root at gahrtop:/usr/obj/usr/src/sys/GAHRTOP  i386
 > >  > > 
 > >  > > CPU: Intel(R) Core(TM)2 CPU         T7200  @ 2.00GHz (2000.15-MHz
 > >  > > 686-class CPU)
 > >  > >  Cores per package: 2
 > >  > > 
 > >  > > re0: <RealTek 8168B/8111B PCIe Gigabit Ethernet> port 0xc800-0xc8ff
 > >  > > mem 0xff2ff000-0xff2fffff irq 17 at device 0.0 on pci2
 > >  > > 
 > >  > > ($FreeBSD: src/sys/dev/re/if_re.c,v 1.46.2.20 2006/09/21 11:08:28
 > >  > > yongari Exp $)
 > >  > > 
 > >  > > I get checksum errors on every packet I send, example:
 > >  > > 
 > >  > > Checksum: 0x0bc5 [incorrect, should be 0x78fe (maybe caused by
 > >  > > checksum offloading?)]
 > >  > > 
 > >  > > I think this could be the cause of some web pages (e.g. Gmail in
 > >  > > standard view [html view works well]) not to be displayed.
 > >  > > 
 > >  > > I tracked down the problem to the re(4) driver just because wlan works
 > >  > > good...
 > >  > > 
 > >  > > Any ideas?
 > >  > > 
 > >  > I'm also seeing these www problems with my re(4) card (chipid
 > >  > 0x816810ec), see
 > >  > http://lists.freebsd.org/pipermail/freebsd-current/2006-December/068333.html
 > >  > 
 > > 
 > > Does your re(4) also work when you disable checksum offload?
 > > 
 > Yes, 'ifconfig re0 -txcsum' does the trick.
 > 
 > re0: <RealTek 8168/8111B PCIe Gigabit Ethernet> port 0xc800-0xc8ff mem
 > 0xfe0ff000-0xfe0fffff irq 16 at device 0.0 on pci2
 > 
 > if.re.c revision 1.80 2006/12/20 02:13:59 marius
 > 

I've never encountered checksum offload issue after wpaul's fix.
How about attached one? It's just vague guess but please give it
try and let me know the result.

-- 
Regards,
Pyun YongHyeon
-------------- next part --------------
Index: if_re.c
===================================================================
RCS file: /home/ncvs/src/sys/dev/re/if_re.c,v
retrieving revision 1.80
diff -u -r1.80 if_re.c
--- if_re.c	20 Dec 2006 02:13:59 -0000	1.80
+++ if_re.c	12 Jan 2007 01:42:59 -0000
@@ -2027,9 +2027,9 @@
 		arg.rl_flags = RL_TDESC_CMD_LGSEND |
 		    ((uint32_t)(*m_head)->m_pkthdr.tso_segsz <<
 		    RL_TDESC_CMD_MSSVAL_SHIFT);
-	else {
-		if ((*m_head)->m_pkthdr.csum_flags & CSUM_IP)
-			arg.rl_flags |= RL_TDESC_CMD_IPCSUM;
+	else if (((*m_head)->m_pkthdr.csum_flags &
+	    (CSUM_IP | CSUM_TCP | CSUM_UDP)) != 0) {
+		arg.rl_flags |= RL_TDESC_CMD_IPCSUM;
 		if ((*m_head)->m_pkthdr.csum_flags & CSUM_TCP)
 			arg.rl_flags |= RL_TDESC_CMD_TCPCSUM;
 		if ((*m_head)->m_pkthdr.csum_flags & CSUM_UDP)


More information about the freebsd-hackers mailing list