From: Jes Sorensen <[EMAIL PROTECTED]>
   Date:        02 Mar 1999 09:51:51 +0100

   Well you are likely to hit Solaris 2.5.1 boxes on the Internet and
   if disabling window scaling solves the problem then I think I know
   who to blame.

Just to clarify, the solaris tcp bug has not much to do with window
scaling :-)  It has to do with retransmission of FIN's with data
attached.

   Did the problem go away with the TCP patch DaveM posted the other
   day?  There was a workaround for another Solaris brokeness.

For convenience I've included the patch below, against 2.2.2:

--- net/ipv4/tcp_output.c.~1~   Mon Feb 22 10:17:22 1999
+++ net/ipv4/tcp_output.c       Fri Feb 26 13:19:42 1999
@@ -580,6 +580,19 @@
        if(tp->af_specific->rebuild_header(sk))
                return 1; /* Routing failure or similar. */
 
+       /* Solaris sucks. */
+       if(skb->len > 0 &&
+          (TCP_SKB_CB(skb)->flags & TCPCB_FLAG_FIN) &&
+          tp->snd_una == (TCP_SKB_CB(skb)->end_seq - 1)) {
+#if 1
+               printk("TCP: Doing Solaris hack for [%p:%08x:%04x:%08x]\n",
+                      skb, sk->daddr, sk->dport, tp->snd_una);
+#endif
+               TCP_SKB_CB(skb)->seq = TCP_SKB_CB(skb)->end_seq - 1;
+               skb_trim(skb, 0);
+               skb->csum = 0;
+       }
+
        /* Ok, we're gonna send it out, update state. */
        TCP_SKB_CB(skb)->sacked |= TCPCB_SACKED_RETRANS;
        tp->retrans_out++;
@@ -592,6 +605,7 @@
                skb = skb_copy(skb, GFP_ATOMIC);
        else
                skb = skb_clone(skb, GFP_ATOMIC);
+
        tcp_transmit_skb(sk, skb);
 
        /* Update global TCP statistics and return success. */
-
To unsubscribe from this list: send the line "unsubscribe linux-net" in
the body of a message to [EMAIL PROTECTED]

Reply via email to