FreeBSD: адрес сетевого интерфейса: dhcp или статический - PullRequest
3 голосов
/ 29 февраля 2012

Как я могу программно (C) узнать, имеет ли данный интерфейс статический адрес или адрес, предоставленный dhcp ? Я могу посмотреть на /var/db/dhclient.leases.<interface_name>. Есть способ лучше / чище? любой ioctl я могу использовать?

Ответы [ 3 ]

2 голосов
/ 29 февраля 2012

Чтение /etc/rc.conf. Найдите строки, начинающиеся с ifconfig, и посмотрите, какие из них содержат текст DHCP.

Это не будет перехватывать интерфейсы, которые были переконфигурированы путем запуска dhclient вручную. Разбор файла аренды сработал бы лучше в этом отношении, при условии, что его разрешения позволяют вашей программе читать его.

2 голосов
/ 29 февраля 2012

Короткий ответ - нет, нет.Клиент dhcp устанавливает адрес интерфейса и т. Д., Используя те же механизмы, которые использует ifconfig.Нет специального флага или другого указания на то, что он сообщает вам, что интерфейс был динамически настроен.

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

0 голосов
/ 03 марта 2012

в дополнение к проницательному совету Роланда и Перри, я бы добавил следующее: если rc.conf НЕ настроен на использование dhcp, это не значит, что он не вызывался из командной строки.

если вы видите, что он работает, есть хороший шанс, что интерфейс получает адрес.

pgrep dhclient 
...