(Apologies if you see this twice; I didn't see it show up in the list archives so am trying again without the attachment)
I have an lwip-based FTP server built on a nearly stock 1.3.1 lwIP. When I do a GET on a large file (resulting in a high-speed unidirectional transfer), I'm seeing about every 256th TCP packet getting dropped (often the first drop doesn't happen until about 512 packets into the transfer but then it seems very regular). TCP eventually recovers from this but it takes about a second each time. Then a drop happens again 256 packets later. Now 256 happens to correlate to the size of the Tx and Rx ring buffers in my driver so that was the obvious place to look. I notice that sometimes my driver's linkoutput function is being called when its Tx queue is full. I'm thinking that's the proximate cause of the problem. However, shouldn't the TCP_SND_QUEUELEN (32) and TCP_SND_BUF (8 * MSS) values be a limit to the maximum number of "outstanding" pbufs? I did turn on TCP_QLEN_DEBUG and according to that info, I never get a queue len > 8. So why do I end up with so many packets "in flight"? And if I'm misunderstanding, what is the intended feedback mechanism from the driver? tcp_output always seems to ignore the return value of ip_output. Hence, if I understand it correctly, that means an attempt to send while the Tx queue is full is treated exactly the same as if the packet was dropped on the wire: i.e. it will rely on the retransmission process to recover. I'm running with these values in my opt.h: #define TCP_MSS 1460 #define TCP_SND_BUF (8 * TCP_MSS) #define TCP_SND_QUEUELEN (4 * (TCP_SND_BUF/TCP_MSS)) Any ideas on debugging or understanding this would be appreciated. Thanks, Jeff _______________________________________________ lwip-users mailing list lwip-users@nongnu.org http://lists.nongnu.org/mailman/listinfo/lwip-users