Re: strange RST packets sent by Linux

Hans-Joachim Zimmer (hazi@stud.uni-sb.de)
Fri, 12 Dec 1997 10:17:26 +0100 (CET)


Hi again,

OK, now I understand the purpose of the code sequence that I have
commented out. But I do not understand , how a bug in tcp_send_fin
could cause Linux to send a RST in the given situation. There is
no reason to call tcp_send_fin because there is still a lot of data
to be transferred (some 100kB) and according to the strace the
application thinks those data are sent. It keeps on doing write calls
that return without error conditions. So why should linux try to close
the connection?

Greetings, Hansi

///////////////////////////////////////////////////////////////////////

's isch kuul, Maenn!!!

Hansi-Joachim Zimmer
E-Mail : hazi@stud.uni-sb.de
WWW : http://stud.uni-sb.de/~hazi

///////////////////////////////////////////////////////////////////////

On 12 Dec 1997, Andi Kleen wrote:

> Hans-Joachim Zimmer <hazi@stud.uni-sb.de> writes:
>
> > Hello,
> >
> > about a week ago I posted a question about a TCP Problem that arises
> > when I try to print some documents using a Linux (2.0.28 or 2.0.30)
> > spool server and a HP Laserjet 5SiMX equiped with a JetDirect ether-
> > net adapter (Newsgroups: comp.os.linux.networking, comp.os.linux.
> > development.system, de.comp.os.linux.networking). Linux sends RST-
> > packets that cancel the connection. I could not find any reason for
> > this behaviour.
> > Now I have been able to locate the line in the kernel source that
> > generates the reset. It is line nr.2082 in the file net/ipv4/tcp_input.c.
> > It is possible to eliminate this function call by defining the pre-
> > processor macro TCP_DONT_RST_SHUTDOWN (c.f. line nr.2045). With this
> > small change in the kernel source printing seems to work fine now.
> > Unfortunately I dont know all the implications that arise if I eliminate
> > this piece of code (lines 2045-2096 in tcp_input.c).
> >
> > Does anybody know the meaning of these lines and is there a bug in
> > this code?
>
> This code is OK, there is just a bug in the Linux tcp_send_fin()
> function (it doesn't work correctly when the remote window is zero).
> A solution is worked on (2.1 suffers from the same problem)
>
> -A.
>