TCP bug?

Paul LeMahieu (lemahieu@vigeland.paradise.caltech.edu)
Mon, 26 Oct 1998 19:06:23 -0800


First: this is a question about a potential bug in the TCP implementation
in the Linux kernel. Is this the right place to address my question?
If this isn't the best forum, could someone please refer me to the correct
place?

My problem (kernel 2.0.34, standard one with RedHat 5.1):

I've got a very active TCP connection coming out of a Linux box (sending
lot's of stuff). The Ethernet address of its gateway machine changes (new gateway
machine) while this is going on. A gratuitous arp is sent out by the new gateway
machine. The Linux box shows this change in it's arp cache. The TCP connection
freezes up. A look at the network with tcpdump shows me the Linux server is
still sending things to the old Ethernet address. Any new TCP connections
are fine. Any UDP activity is fine. It also seems any _newly_composed_ TCP
packets are fine (i.e., a low-activity telnet session continues without a problem).
This is not simply a timeout thing since the TCP connection typically never
recovers.

My suspicion:

The transmit queue contains packets with the old Ethernet address. The sliding
window grinds to a halt because none of those packets get through. Those packets
are never updated with the new Ethernet address and this TCP connection is stopped.
I would have assumed the link layer and transport layer were quite separate, so this
wouldn't happen, but I know nothing about the TCP/IP implementation in Linux.

To summarize:

1) TCP connection exists
2) arp cache changes
3) arp cache is correct
4) TCP packets for that existing connection are still sent to the old Ethernet address

The problem is very repeatable. I've only been able to test this on one other
operating system (NT) and we were never able to get the same problem with the
change of gateway and subsequent new Ethernet address.

Any help would be appreciated.

Thanks,

Paul LeMahieu
lemahieu@paradise.caltech.edu

-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.rutgers.edu
Please read the FAQ at http://www.tux.org/lkml/