Я разрабатываю драйвер устройства Linux, который, среди прочего, соединяет частную и публичную c сеть во встроенной системе реального времени, чтобы обеспечить путь от трафика управления c.
Я знаю, что можно запросить ядро из пользовательского пространства, используя вызов ioctl для IP-адреса сетевого устройства, но мне нужно иметь возможность сделать это из драйвера устройства , и в идеале получать уведомление о том, что IP-адрес изменился без необходимости опроса, или, что еще лучше, управлять процессом изменения адреса напрямую.
В настоящее время устройство уведомляется об изменении адреса путем отслеживания DHCP и ARP, которые драйвер передает, но не управляет каким-либо значимым образом. Однако это несколько неуклюжее решение.
Сторона publi c устройства доступна для операционной системы, а IP-адрес можно изменить с помощью вызовов ifconfig
, et c. Если устройству назначен статический c IP-адрес, который не имеет отношения к сети, он может в конечном итоге решить эту проблему при сбое связи, но это далеко не идеально.
Драйвер уже предоставляет несколько обработчиков ioctl, есть ли способ предоставить один для назначения IP-адреса непосредственно устройству, и если да, то какими интерфейсами ему нужно управлять?
Я просмотрел структуру net_device
, но не могу найти ничего, имеющего отношение к IP-адресам, и не могу найти в Интернете документацию по этому аспекту драйверов устройств ..