> Another possible cause (I have seen this) is that after the ARP entry
expired,
> and the client sends the pbuf chained, got queued in ARP layer, an ARP
request
> is sent. As soon the polling thread gets the ARP REPLY, it then
updates the
> table and try to send the queued data (in the thread itself).
> The problem was, my low_level_output was not protected, hence the
chances are
> there that both tcpip thread (sending a TCP packet)and the polling
thread access
> low_level_output simulataneously and corrupted the index of my
Ethernet buffer
> descriptor. The TCP was retransmitted as it should, but the UDP data
was lost, hence the echo stopped.

I guess this is fixed with lwIP 1.3.0 (if you adopt your drivers):
The ARP layer is now called from within the tcpip_thread by setting
netif->input
to ethernet_input() instead of ip_input(). Resultingly, your driver
should not
call the ARP functions directly in your ethernetif_input function.

This was a design error in lwIP multithreading.

Simon.


_______________________________________________
lwip-users mailing list
lwip-users@nongnu.org
http://lists.nongnu.org/mailman/listinfo/lwip-users

Reply via email to