В freebsd, когда кабель подключается / отключается, в буфер dmesg записываются следующие строки:
em0: состояние канала изменено на ВНИЗ em0: состояние канала изменено на ВВЕРХ
Я хотел бы запустить сценарий, когда это произойдет, но не могу найти ничего, что программно раскрывает эти изменения состояния. Даже C API.
Я вижу, что ifconfig печатает «status: no carrier» и «status: active» в зависимости от того, подключен ли кабель. Но я бы предпочел избежать опроса, так как 1) он сжигает процессорное время, что важно для ноутбука, и 2) он может пропустить изменения, если интервал опроса слишком длинный.
Есть ли способ получить уведомление о подключении и отключении кабеля?
Вы, вероятно, захотите проверить /etc/devd.conf
. devd
это основной способ реагирования на события ядра / оборудования во FreeBSD.
Там есть пример, который показывает, как сопоставить сетевое событие UP / DOWN и запустить задачу, как показано ниже, а на странице руководства есть полезная информация.
notify 0 {
match "system" "IFNET";
match "type" "LINK_UP";
media-type "ethernet";
action "/etc/rc.d/dhclient quietstart $subsystem";
};
http://www.freebsd.org/cgi/man.cgi?query=devd.conf&sektion=5