Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 7 Feb 2006 01:11:41 +0300
From:      Oleg Bulyzhin <oleg@FreeBSD.org>
To:        Alan Cox <alc@cs.rice.edu>
Cc:        cvs-src@FreeBSD.org, src-committers@FreeBSD.org, cvs-all@FreeBSD.org
Subject:   Re: cvs commit: src/sys/dev/bge if_bge.c
Message-ID:  <20060206221141.GA57775@lath.rinet.ru>
In-Reply-To: <20060205235817.GQ5499@cs.rice.edu>
References:  <200602020958.k129wWtc066930@repoman.freebsd.org> <20060202100637.GB24350@lath.rinet.ru> <20060205235817.GQ5499@cs.rice.edu>

next in thread | previous in thread | raw e-mail | index | archive | help

--LQksG6bCIzRHxTLp
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline

On Sun, Feb 05, 2006 at 05:58:17PM -0600, Alan Cox wrote:
> On Thu, Feb 02, 2006 at 01:06:37PM +0300, Oleg Bulyzhin wrote:
> > On Thu, Feb 02, 2006 at 09:58:32AM +0000, Oleg Bulyzhin wrote:
> > > oleg        2006-02-02 09:58:32 UTC
> > > 
> > >   FreeBSD src repository
> > > 
> > >   Modified files:
> > >     sys/dev/bge          if_bge.c 
> > >   Log:
> > >   Enable 'complete' rx checksum offloading (i.e. let chip calculate checksums
> > >   with pseudo header for tcp/udp packets). This could save one in_pseudo() call
> > >   per incoming tcp/udp packet.
> > >   
> > >   Approved by:    glebius (mentor)
> > >   MFC after:      3 weeks
> > >   
> > >   Revision  Changes    Path
> > >   1.123     +3 -2      src/sys/dev/bge/if_bge.c
> > 
> > Side effect is workaround for ipfilter bug:
> > http://lists.freebsd.org/pipermail/freebsd-stable/2006-January/021961.html
> > http://lists.freebsd.org/pipermail/freebsd-stable/2006-February/022149.html
> > 
> 
> Unfortunately, it also breaks NFS over UDP.  Let me know if you need
> details.
> 
> Alan

Fix attached. It's not bge problem it's five years old bug in ip_reass().

-- 
Oleg.


--LQksG6bCIzRHxTLp
Content-Type: text/plain; charset=us-ascii
Content-Disposition: attachment; filename="ip_reass.diff"

Index: ip_input.c
===================================================================
RCS file: /home/ncvs/src/sys/netinet/ip_input.c,v
retrieving revision 1.314
diff -u -r1.314 ip_input.c
--- ip_input.c	2 Feb 2006 03:13:15 -0000	1.314
+++ ip_input.c	6 Feb 2006 21:44:45 -0000
@@ -982,10 +982,12 @@
 	nq = q->m_nextpkt;
 	q->m_nextpkt = NULL;
 	for (q = nq; q != NULL; q = nq) {
+		int sum;
 		nq = q->m_nextpkt;
 		q->m_nextpkt = NULL;
 		m->m_pkthdr.csum_flags &= q->m_pkthdr.csum_flags;
-		m->m_pkthdr.csum_data += q->m_pkthdr.csum_data;
+		sum = m->m_pkthdr.csum_data + q->m_pkthdr.csum_data;
+		m->m_pkthdr.csum_data = (sum & 0xffff) + (sum >> 16);
 		m_cat(m, q);
 	}
 #ifdef MAC

--LQksG6bCIzRHxTLp--



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20060206221141.GA57775>