Получать уведомления при изменении IP-адреса в драйвере устройства - PullRequest
1 голос
/ 27 мая 2020

Я разрабатываю драйвер устройства Linux, который, среди прочего, соединяет частную и публичную c сеть во встроенной системе реального времени, чтобы обеспечить путь от трафика управления c.

Я знаю, что можно запросить ядро ​​из пользовательского пространства, используя вызов ioctl для IP-адреса сетевого устройства, но мне нужно иметь возможность сделать это из драйвера устройства , и в идеале получать уведомление о том, что IP-адрес изменился без необходимости опроса, или, что еще лучше, управлять процессом изменения адреса напрямую.

В настоящее время устройство уведомляется об изменении адреса путем отслеживания DHCP и ARP, которые драйвер передает, но не управляет каким-либо значимым образом. Однако это несколько неуклюжее решение.

Сторона publi c устройства доступна для операционной системы, а IP-адрес можно изменить с помощью вызовов ifconfig, et c. Если устройству назначен статический c IP-адрес, который не имеет отношения к сети, он может в конечном итоге решить эту проблему при сбое связи, но это далеко не идеально.

Драйвер уже предоставляет несколько обработчиков ioctl, есть ли способ предоставить один для назначения IP-адреса непосредственно устройству, и если да, то какими интерфейсами ему нужно управлять?

Я просмотрел структуру net_device, но не могу найти ничего, имеющего отношение к IP-адресам, и не могу найти в Интернете документацию по этому аспекту драйверов устройств ..

1 Ответ

0 голосов
/ 27 мая 2020

Существует уведомление netdev, в котором вы можете зарегистрироваться в . В вашем случае вы должны отфильтровать событие NETDEV_CHANGEADDR (или NETDEV_PRE_CHANGEADDR, в зависимости от вашего варианта использования).

...