Есть ли способ запустить DHCP через код C - PullRequest
0 голосов
/ 04 октября 2018

Для установки статического IP у нас есть вызов Linux Ioctls, через который мы можем установить IP, шлюз, широковещательную рассылку.У нас есть аналогичные вызовы ioctl для DHCP?

1 Ответ

0 голосов
/ 04 октября 2018

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;");.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...