FreeBSD: адрес сетевого интерфейса: dhcp или статический

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


person hari    schedule 28.02.2012    source источник
comment
Я не думаю, что сетевые интерфейсы записывают, как установлен их адрес.   -  person Roland Smith    schedule 29.02.2012


Ответы (3)


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

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

person Roland Smith    schedule 29.02.2012
comment
Спасибо, Рональд. взлом - это способ .. Я думаю. - person hari; 01.03.2012

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

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

person Perry    schedule 28.02.2012

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

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

pgrep dhclient 
person sonicpond    schedule 02.03.2012