[130] in linux-net channel archive

home help back first fref pref prev next nref lref last post

Possible Bug in tcp.c

daemon@ATHENA.MIT.EDU (Mike McCabe)
Wed Mar 15 14:57:10 1995

From: Mike McCabe <mccabe@nscgld.com>
To: linux-net@vger.rutgers.edu
Date: Wed, 15 Mar 1995 11:58:48 -0500 (EST)

Hi Everybody...

I think we have found a possible bug in the code for tcp.  In the file
/usr/src/linux/net/inet/tcp.c in the routine tcp_data there is a line
that reads.

if ( skb->len == 0 && !th->fin && !th->urg && !th->psh )

and then inside this if statement is a check to see if the message was
an ack.  If it was then it does not send it because tcp_ack() already did.

The problem we have run into is with a machine that uses MSDOS and a netbios
to tcp/ip driver from Wollogong.  This system has a very small buffer for
packets (on the order of 190 bytes).  It also pushes every ack it sends.
But since it pushes the ack both tcp_ack and tcp_data send an ack and the
two systems get into an ack war.  By removing the !th->psh from this if
statement our problem was solved.

A question is however, is this fix messing with the tcp standard or is this
a bug in the Linux tcp driver?  The problem only occurred when the MSDOS
machine shrunk its window to zero.

Mike McCabe
National Steel - Great Lakes Division
mccabe@nscgld.com


home help back first fref pref prev next nref lref last post