[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: further reply-to strangeness



On Mon, Mar 31, 2003 at 05:57:36PM -0500, David Powers wrote:
> As I mentioned on the list a few days ago I have been having some 
> trouble with reply-to.  In particular it seems to be generating a bad tc 
> checksum for the return packet.  Since then I have rebuilt kernel and 
> world to source checked out this morning (3/31) and it seems to properly 
> return route pings, but still fails on the TCP with bad checksums.  I 
> have put a more full TCP packet trace from the client machine below in 
> case it sparks something in anyone.
I can't reproduce this. One possible explanation is that your network
interface is expected to do hardware TCP checksumming, but actually
doesn't. In that case, you should see bad checksums for outgoing TCP
packets even if reply-to is not used. Maybe you can test with adjusted
routing table entries so reply-to is not needed for outgoing packets to
get sent through that interface.
What output does the following command produce?
  $ netstat -p tcp | grep check
Can you try the patch below and tell us whether it changes anything?
Daniel
Index: pf.c
===================================================================
RCS file: /cvs/src/sys/net/pf.c,v
retrieving revision 1.329
diff -u -r1.329 pf.c
--- pf.c	31 Mar 2003 13:15:27 -0000	1.329
+++ pf.c	31 Mar 2003 23:23:59 -0000
@@ -3963,14 +3963,18 @@
 	if (ip->ip_len <= ifp->if_mtu) {
 		ip->ip_len = htons((u_int16_t)ip->ip_len);
 		ip->ip_off = htons((u_int16_t)ip->ip_off);
+/*
 		if ((ifp->if_capabilities & IFCAP_CSUM_IPv4) &&
 		    ifp->if_bridge == NULL) {
 			m0->m_pkthdr.csum |= M_IPV4_CSUM_OUT;
 			ipstat.ips_outhwcsum++;
 		} else {
+*/
 			ip->ip_sum = 0;
 			ip->ip_sum = in_cksum(m0, ip->ip_hl << 2);
+/*
 		}
+*/
 		/* Update relevant hardware checksum stats for TCP/UDP */
 		if (m0->m_pkthdr.csum & M_TCPV4_CSUM_OUT)
 			tcpstat.tcps_outhwcsum++;