DHCP - это протокол, а не «действие».DHCP указывает, «как» хост должен перечислять ip.
Если вы хотите запустить перечисление ip, используя протокол DHCP (я имею в виду отправку DHCPDISCOVER или DHCPREQUEST в сеть и последующую обработку ответа), команды ioctl длятот.Для использования протокола DHCP и для перечисления и назначения IP ответьте приложения пользовательского пространства, называемые «клиенты dhcp», такие как dhcpcd или systemd-networkd или dhclient или NetworkManager .
ioctl
выполняет различные действия с потоками, обычно ioctl
реализуется как обращение к ядру.В ядре нет «клиента dhcp», т.е.клиенты реализованы на стороне пользователя.Ядро не несет ответственности за действия, связанные с DHCP.Нет никаких вызовов ioctl для действий, связанных с DHCP.Существует ioctl_list , доступный для проверки.
Если вы хотите инициировать перечисление DHCP с помощью C, вам необходимо определить клиент dhcp, используемый вашей системой, а затем уведомить его / заставить его выполнитьдействие, которое вы запрашиваете.Или вы можете написать свой собственный клиент DHCP.В моей системе я использую NetworkManager.Поскольку у меня нет времени, чтобы узнать, как связаться с NetworkManager с помощью DBUS, и у меня в системе установлен инструмент nmcli , я могу просто позвонить system из C, чтобы вызвать аренду DHCPобновление в моей системе: system("nmcli con down id MY_WIFI_NAME; nmcli con up id MY_WIFI_NAME;");
.