I’ve instrumented my software to send UDP debugging packets to a remote computer to capture.
There are some file in FreeRTOS+TCP that does this too, and FreeRTOSprintf() and FreeRTOS
debugprintf() can be defined to use the UDP logging.
What I found by tracing thru the IP code is that your IP code checks the destination address with its ARP table. If it not found .. does not get sent.
Correct, if it is not in the ARP table it does not know where to send it, so there is no possibility to send the packet. Either an ARP will get sent in its place, or if an ARP is already outstanding for the IP address, the UDP packet will get dropped.
Does a capability exist to ask the IP stack to acquire an ARP response for an IP address and then a way to verify that the response has been acquired?
If you want to know that ARP has completed before sending your UDP data you can send a ping request to the remote address first. One of the UDP echo examples does just that (from memory).
The current behavior is terrible as packets are just being dropped.
It is valid behaviour for UDP – especially if the stack has no possibility to send data because an ARP reply is never received. If you don’t want packets to be dropped use TCP.
Question … I use buffer allocation #1. Does the stack automatically release THAT buffer?
There should be no difference in how the buffer is freed again (zero copy or non zero copy).