ipfilter + bge strangeness

Gleb Smirnoff glebius at FreeBSD.org
Sun Feb 26 04:28:53 PST 2006


  Darren,

On Sun, Feb 26, 2006 at 12:16:05PM +0000, Darren Reed wrote:
D> > Root of the problem is inside ipfilter - if driver use 'partial' (i.e. without
D> > pseudo header) rx checksum offloading ipfilter fails to calculate checksum
D> > correctly (it's using ip packet length (ip_fil_freebsd.c:1561) instead of
D> > tcp/udp length).
D> > This patch enables 'full' rxcsum offloading so ipfilter's bug should not be
D> > triggered.
D> 
D> I think what you're saying is that this is wrong:
D>                         sum = in_pseudo(ip->ip_src.s_addr, ip->ip_dst.s_addr,
D>                                         htonl(m->m_pkthdr.csum_data +
D>                                         fin->fin_ip->ip_len + fin->fin_p));
D> 
D> And that "fin->fin_ip->ip_len" needs to be replaced by something
D> that is like "ip_len - ip_hl - tcp/icmp/udp_hl" ?
D> 
D> Just so that I understand the interactions here properly, is there
D> a way to tell when FreeBSD will use partial checksums like it was
D> before compare to now ?

If the m->m_pkthdr.csum_flags field doesn't have the CSUM_PSEUDO_HDR flag,
then the m->m_pkthdr.csum_data field contains partial checksum.

-- 
Totus tuus, Glebius.
GLEBIUS-RIPN GLEB-RIPE


More information about the freebsd-stable mailing list