From: Stephen Hemminger <[EMAIL PROTECTED]>
Date: Tue, 15 Nov 2005 16:29:40 -0800

> 161.30.105.72.ftp-data > 192.168.128.101.32792: . ack 1 win 64000
> 192.168.128.101.32792 > 161.30.105.72.ftp-data: . 1:1381(1380) ack 1 win 5840
> 192.168.128.101.32792 > 161.30.105.72.ftp-data: . 1381:2761(1380) ack 1 win 
> 5840
> 161.30.14.93 > 192.168.128.101: icmp 36: 161.30.105.72 unreachable - need to 
> frag (mtu 1400)
> 161.30.14.93 > 192.168.128.101: icmp 36: 161.30.105.72 unreachable - need to 
> frag (mtu 1400)
> 192.168.128.101.32792 > 161.30.105.72.ftp-data: . 1:1381(1380) ack 1 win 5840

1400 - 20 byte TCP header is 1380
but we're supposed to subtract out the IP etc. headers as well
(which is tp->af_specific->net_header_len).

Would be helpful to see some diagnostics from tcp_sync_mss()
when this event is triggered, something like:

diff --git a/net/ipv4/tcp_output.c b/net/ipv4/tcp_output.c
index 029c70d..06f1e56 100644
--- a/net/ipv4/tcp_output.c
+++ b/net/ipv4/tcp_output.c
@@ -646,6 +646,13 @@ unsigned int tcp_sync_mss(struct sock *s
        if (tp->max_window && mss_now > (tp->max_window>>1))
                mss_now = max((tp->max_window>>1), 68U - tp->tcp_header_len);
 
+#if 1
+       if (tp->pmtu_cookie != pmtu && net_ratelimit()) {
+               printk("TCP: Adjusting PMTU [%d --> %d] mss_cache [%d --> 
%d]\n",
+                      tp->pmtu_cookie, pmtu,
+                      tp->mss_cache, mss_now);
+       }
+#endif
        /* And store cached results */
        tp->pmtu_cookie = pmtu;
        tp->mss_cache = mss_now;

Alternatively, we're ignoring the PMTU message for one reason or
another.  Perhaps the quoted TCP packet in the ICMP pmtu message
has an incorrect sequence number or is truncated for some reason.
-
To unsubscribe from this list: send the line "unsubscribe netdev" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to