Skip site navigation (1)Skip section navigation (2)
Date:      Sun, 26 Feb 2006 12:16:05 +0000
From:      Darren Reed <darrenr@hub.freebsd.org>
To:        Oleg Bulyzhin <oleg@freebsd.org>
Cc:        Koen Martens <fbsd@metro.cx>, darrenr@freebsd.org, glebius@freebsd.org, freebsd-stable@freebsd.org
Subject:   Re: ipfilter + bge strangeness
Message-ID:  <20060226121605.GB16016@hub.freebsd.org>
In-Reply-To: <20060131090912.GA88914@lath.rinet.ru>
References:  <43DB8EA6.7070503@metro.cx> <20060128211710.GA29790@lath.rinet.ru> <43DBED3F.3000408@metro.cx> <20060128230015.GC29790@lath.rinet.ru> <43DCCAA8.4050600@metro.cx> <20060131090912.GA88914@lath.rinet.ru>

next in thread | previous in thread | raw e-mail | index | archive | help
On Tue, Jan 31, 2006 at 12:09:13PM +0300, Oleg Bulyzhin wrote:
> > > Btw, until recent changes bge had txcsum (not rxcsum) only.
> > > 
> > > As i can see there is no problem with checksum's at all (at least inside
> > > bge driver). tcpdump reports bad checksum on outgoing packets due to
> > > nature of tx checksum offloading: packet will get it's checksum calculated
> > > right before it goes on wire (If you want to check tx checksum offloading
> > > you should look on incoming packets on other end of wire).
> > > 
> > > Looks like something is wrong inside ipfilter. Can you test with ipfilter
> > > turned off (ipf -D or, if you using module, kld_unload ipl.ko)?
> > 
> > With ipfilter disabled and rxcsum enabled all is well (also, with
> > ipfilter and rxcsum enabled but just two rules to allow anything
> > in/out it works fine too).
> > 
> > The tcpdump output looks the same (see below).
> > 
> > It is not a purely ipfilter thing i guess, since on an em interface
> > on another box with txcsum/rxcsum on, there is no problem. It is
> > something in the combination of bge and ipfilter, although that is
> > as far as my speculation goes right now..
> 
> Could you please test attached patch?
> 
> Root of the problem is inside ipfilter - if driver use 'partial' (i.e. without
> pseudo header) rx checksum offloading ipfilter fails to calculate checksum
> correctly (it's using ip packet length (ip_fil_freebsd.c:1561) instead of
> tcp/udp length).
> This patch enables 'full' rxcsum offloading so ipfilter's bug should not be
> triggered.

I think what you're saying is that this is wrong:
                        sum = in_pseudo(ip->ip_src.s_addr, ip->ip_dst.s_addr,
                                        htonl(m->m_pkthdr.csum_data +
                                        fin->fin_ip->ip_len + fin->fin_p));

And that "fin->fin_ip->ip_len" needs to be replaced by something
that is like "ip_len - ip_hl - tcp/icmp/udp_hl" ?

Just so that I understand the interactions here properly, is there
a way to tell when FreeBSD will use partial checksums like it was
before compare to now ?

Darren
Darren



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