现在我需要实时获取NIC的状态(向上或向下).这意味着当NIC在阻塞循环中上升或下降时,我必须捕获内核中断.
我的第一个愚蠢的方法是检查/ sys/class/net/eth0/operstate或使用ioctl在循环中每100ms获取一次ifflag.但是100ms太长了,应用程序无法重新路由流量,并且每隔100ms轮询内核也不是一个好主意.
一旦我注意到inotify函数可以在块模式下监视文件.但不幸的是,它无法监视/ sys/class/net/eth0/operstate文件,因为/ sys位于RAM而非磁盘中.
那么,除了编写内核模块以使用块模式捕获C程序中的NIC中断(向上/向下)之外,是否有任何方法?
linux networking network-programming linux-device-driver linux-kernel