Ваш Тезис #1 - Первый пакет - если [записи в таблице] нет, то не
шлем, но добавляем в ARP таблицу запись с флагом что надо бы
разрешить адрес ну и выходим. Ваш Тезис #2 - Ну и потом уже она будет обновляться входящими пакетами.
Я не понимаю, почему входящими пакетами оно будет обновляться (доверяем), а первому пакету - не доверяем, но в таблицу [безусловно] добавляем и запускаем процесс resolve?
Согласно спецификации, ARP-таблица заполняется/обновляется только на основании пакетов/данных ARP-протокола.
Но некоторые реализации реализованы без использования этой спецификации и заполняют свои структуры нужными данными "по косвенным данным".
Вы как хотите - спецификации полностью соответствовать, или реализовать "оптимизированно, как в старом uIP"?
Мне кажется VRRP не удачный пример, у него вообще всегда один фиксированный MAC 00:00:5e:00:01:XX, который просто переезжает со шлюза на шлюз, и во входящих пакетах должен быть именно он.
Но да, наверняка могут быть какие-то другие конфигурации, когда входящие пакеты могут идти с разных MAC, а отвечать надо на какой-то определенный. Но это мне кажется не настолько частый случай.
На то она и упрощенная реализация, что сознательно не покрывает 100% возможных сценариев.