У меня так: Устройство получает IP маску и шлюз по DHCP ну или
руками задаем. Далее так. Допустим мы его начали пинговать с ПК в
одной подсети с ним, тогда при прилете ICMP запроса, мы сначала
проверяем в одной ли подсети с ним, если да то ищем запись в ARP
таблице и если она есть то шлем ответ, а если нет то не шлем, но
добавляем в ARP таблицу запись с флагом что надо бы разрешить адрес
ну и выходим. Затем другая задачка его разрешит. Ну и потом уже она
будет обновляться входящими пакетами, а если их не будет она протухнет и удалится. А вот если мы поняли что этот IP в другой подсети, то ищем ARP запись шлюза и используем его мак но IP из запроса. Далее, если мы поставим точку останова, и потом продолжим то все работает дальше - ничего не надо сбрасывать. Так же тестирую на большом трафике. Цель - не супер производительность а простой понятный и надежный стек.