[En-Nut-Discussion] ARP request kills realtime UDP packet stream?
phip at hb9etc.ch
Tue Dec 17 08:30:11 CET 2013
I've got running a board with a Cortex-M3 running the (almost) latest
and greatest Ethernut version (right from SVN branch devnut_lm3s)
connected to a PC with LinuxCNC. The board controls the hardware of a
dispenser. The realtime-kernel on the PC regularly (at a rate of 500Hz)
sends UDP packets to the board to update motor position setpoints and
read back the current locations. So far so good, works like a charm.
Sometimes, however, it happens that the board fails to answer the PC's
requests for some time (100ms or so) but then becomes operational again.
It is not a crash, all threads run through this nicely, only the
software on the PC reports an error. The realtime capturing interface of
RTnet now allowed me to have Wireshark running for an extended period of
time (it took about 4h for the error to show up this time) with - uhm -
interesting results: Just before everything stops working, I can see the
usual ping-pong packets with response times <10us. But then, the board
suddenly does not respond to an incoming packet with a response, but
with an ARP request for the PC's IP. The PC eventually responds to that,
but in the meantime, no packets are sent from the board.
So I've got two questions:
1. Do entries in the ARP cache age even if there are regular incoming IP
packets from the respective address?
2. Are outgoing IP packets simply discarded/blocked if no ARP cache
entry is present, even if it was just removed because of the age?
Right now, I see two solutions/workarounds for the issue:
1. Use static entries in the ARP table.
2. Set the maximum ARP age to a very high value.
I'd probably prefer variant 2, as it is easier to do. It would only
help, however, if question 1 above can be confirmed.
Please comment, I'd like to fix this problem as soon as possible.
Thanks and best regards,
More information about the En-Nut-Discussion