I am having difficulty sending large amounts of data via TCP over
ethernet from a Sun SparcStation 5 to a Pentium running Linux.
The problem is quite strange:
- UDP messaging works correctly in both directions
regardless of message size (within the atomicity
limits) and regardless of delay between messages
- NFS transfers work correctly in both directions
(except that Linux can't export, but that's a
separate question). Linux can mount the Sun drives
and read/write them without difficulty
- TCP streaming works from Linux to the Sun regardless
of buffer size
- TCP streaming does not work (fails 90% of the time)
from Sun to Linux regardless of buffer size. It fails
unpredictably and always hangs Linux
- TCP fails 100% of the time when performing
simultaneous transfers in both directions.
This sounds like the classic too-slow adapter problem, but
no packet overruns or retransmissions are ever reported, the
Linux system merely goes away and never comes back (and once
managed to hang the Sun as well). This is occurring on a lightly
loaded network running my own software. The programs work
correctly between pairs of Suns (even slow ones), it is only when
Linux is involved that there is trouble.
The Sun system is a SparcStation 5 running Solaris 2.41/SunOS 5.
The Linux system consists of:
Gateway 2000 P5-60 w/ 16MB ram and 540MB IDE drive
Eagle NE2000+ 3 Ethernet adapter
PCI bus ET4000/W32p video
Sony 31a CDROM
Yggdrasil CDROM Linux version 1.1.0 April 23, 1994
The NE2000 is on IRQ 5 at port 0x320 using programmed I/O.
There are no device conflicts. I mention the PS/2 mouse and
PCI video board because they have proved troublesome to other
PC *nix implementations.
I have reviewed the relevant sections of "The Linux Bible" and
all the FAQs I could find. I know that there was a bug in early
NE2000 drivers that caused* when a retransmission occurred
during a timer tick. That bug is supposed to have been fixed
in my version of the kernel.
I have tried turning "trailers" on and off from ifconfig, and
tried reconfiguring the adapter for normal and late I/O timing
and early and normal I/O compatibility (Eagle's terms, not mine)
as recommended in a FAQ regarding errors reported by ifconfig.
Does anyone have an idea? Any help would be greatly appreciated.