AFAIK, arpd
используется для разгрузки определенных заданий и объема памяти из ядра. Процесс arpd
может получать пакеты из двух сокетов:
- уведомления от ядра через NETLINK
- обычные пакеты ARP, такие как
ARP_REPLY
от соседей хоста, через PF_PACKET
socket
.
Мой вопрос: как пакеты ARP доставляются в сокет пространства пользователя? Когда сетевой стек получает пакет ARP, он передает его функциям ядра arp_rcv()
и arp_process()
, но мне не удалось найти какой-либо код, который отправляет пакет в PF_PACKET
socket
, которые arpd
зарегистрированы. Я уверен, что что-то здесь упустил ..