现在,我需要实时获取NIC的状态(向上或向下)。这意味着当NIC在阻塞循环中上下时,我必须捕获内核中断。
我的第一个愚蠢的方法是检查 / sys / class / net / eth0 / operstate 或使用 ioctl 在循环中每隔100ms获取一次ifflag。但是100毫秒对于应用程序重新路由流量太长,而且每100毫秒轮询一次内核不是一个好主意。
一旦我注意到可以在块模式下监视文件的 inotify 函数。但是不幸的是,它不能监视/ sys / class / net / eth0 / operstate文件,因为/ sys位于RAM中而不是磁盘中。
那么,除了编写内核模块以块模式在C程序中捕获NIC中断(上/下)之外,还有什么方法可用吗?
是的,打开一个netlink套接字,并收听RTMGRP_LINK(网络接口创建/删除/上/下事件)多播组。
网络链路手册页这里有一个具体的例子来做到这一点。