The FEC driver was having problems due to:
1 - Only 8 receive buffers (other stacks use as few as 2),,
2 - A POLLED driver called from a polling loop to unload/free the buffers,
3 - A large company network with lots of devices using Avahi/Bonjour/Zeroconfig,
4 - The presence of some very large Bonjour/MDNS packets,
5 - That were taking up to 300ms to process in our device,
6 - That were delaying the polling loop and the Ethernet unload by 300ms.
So it was losing a lot of Ethernet packets. UDP packets, proving that the "U" in "UDP" can mean "Unreliable".
We got the MDNS processing down to 30ms, changed the buffers from 8 * 2k to 64 * 256 byte and now unload the ring under an interrupt into a pool of 150 buffers in main RAM, and it can take almost anything we can throw at it.
Can your TCP/IP stack take a Flood Ping with a preload of 80 and a count of 3000 on a 100MHz full-duplex Ethernet and not drop a single one? Before this change it would drop with a preload of less than 8.
Tom