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 _______________________________________________ freebsd-stable@freebsd.org mailing list http://lists.freebsd.org/mailman/listinfo/freebsd-stable To unsubscribe, send any mail to "[EMAIL PROTECTED]"