For the past several months, Syslinux has been trying to integrate
lwIP into PXELINUX. At the moment, there appears to be a bug of some
sort when using VMware platforms or some KVM platforms. Over the last
few weeks, I've been working with hpa and trying to add additional
debug checks to trace the program flow. I've noticed that it is able
to send a TCP segment but then switches to receive the incoming
segment before being added to unacked by the output thread. RTT from
SYN to SYN/ACK is 0.023 ms per Wireshark on the host. The output
thread does eventually return but doesn't do so in time before the
socket is reset.
Examining top-of-git, I don't see anything that would change this
behavior and I have attempted to integrate this version in my copy for
now to hopefully make it easier to work with lwIP. I see at least
three possible solutions:
1) Don't allow the interface driver to switch threads.
2) tcp_process() should handle the condition of the packet being in
unsent.
3) Allow the output thread to wrap up a packet, queuing it into
unacked, before tcp_process() searches unacked.
Any suggestions?