在 freebsd 中,当插入/拔出电缆时,以下几行会写入 dmesg 缓冲区:
em0:链路状态更改为 DOWN em0:链路状态更改为 UP
我想在发生任何一种情况时运行一个脚本,但找不到任何可以以编程方式公开这些状态变化的东西。甚至连 C API 也没有。
我看到 ifconfig 会根据电缆是否连接来打印“status: no carrier”和“status: active”。但我宁愿避免轮询,因为 1) 它会消耗 CPU 时间,而 CPU 时间对于笔记本电脑来说很重要;2) 如果轮询间隔太长,它可能会错过更改。
有没有什么方法可以在插入或拔出电缆时收到通知?
答案1
您可能想要查看/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