在 freebsd 中执行链接状态改变的命令

在 freebsd 中执行链接状态改变的命令

在 freebsd 中,当插入/拔出电缆时,以下几行会写入 dmesg 缓冲区:

em0:链路状态更改为 DOWN em0:链路状态更改为 UP

我想在发生任何一种情况时运行一个脚本,但找不到任何可以以编程方式公开这些状态变化的东西。甚至连 C API 也没有。

我看到 ifconfig 会根据电缆是否连接来打印“status: no carrier”和“status: active”。但我宁愿避免轮询,因为 1) 它会消耗 CPU 时间,而 CPU 时间对于笔记本电脑来说很重要;2) 如果轮询间隔太长,它可能会错过更改。

有没有什么方法可以在插入或拔出电缆时收到通知?

答案1

您可能想要查看/etc/devd.confdevd这是 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

相关内容