Hi all,

I have an embedded application that is a NTP server (UDP based). Due to the timing sensitivity of the application I want to avoid doing an ARP lookup just to reply to a single query packet. I see there is an ETHARP_TRUST_IP_MAC option that will automatically save the MAC from incoming packets into the ARP table, however there are two things that keep it from helping much. Firstly it calls etharp_update_arp_entry with the ETHARP_FLAG_FIND_ONLY option which gives up if there isn't already a free entry. This means that if there are more clients than ARP table slots, the table fills up and it starts making ARP queries again. Secondly, even if I change that to ETHARP_FLAG_TRY_HARD which will displace the oldest entry, it only works for on-subnet clients. Distant clients will force a lookup of the gateway's IP each time. Of course a bigger ARP table will help, but I can only increase it so much and I want to be able to support subnets with arbitrarily many hosts on them, so relying on that is not practical.

Ideally I think I would simply like to take the original packet and flip it around so both layer 2 and layer 3 source and destination addresses are exchanged, and no lookup is needed. Is there any existing facility that can help with this? I can figure out how to manually munge the IP headers and send the reply as a raw layer 2 frame but it would be great if a function already existed to do this. Maybe a udp_reply() function that takes a pbuf as input.

Also this optimization needs to eventually happen for IPv6 as well. I haven't looked yet to see whether IPv6 has the same issue but I assume it has to, but in ND rather than ARP of course.

Misc details: using NO_SYS=1 (so raw API only), 32KB RAM total, hardware checksumming is on.

_______________________________________________
lwip-users mailing list
[email protected]
https://lists.nongnu.org/mailman/listinfo/lwip-users

Reply via email to