一尘不染

如何在不轮询内核的情况下在C程序中监视NIC状态(上/下)?

linux

现在,我需要实时获取NIC的状态(向上或向下)。这意味着当NIC在阻塞循环中上下时,我必须捕获内核中断。

我的第一个愚蠢的方法是检查 / sys / class / net / eth0 / operstate 或使用 ioctl
在循环中每隔100ms获取一次ifflag。但是100毫秒对于应用程序重新路由流量太长,而且每100毫秒轮询一次内核不是一个好主意。

一旦我注意到可以在块模式下监视文件的 inotify 函数。但是不幸的是,它不能监视/ sys / class / net / eth0 /
operstate文件,因为/ sys位于RAM中而不是磁盘中。

那么,除了编写内核模块以块模式在C程序中捕获NIC中断(上/下)之外,还有什么方法可用吗?


阅读 308

收藏
2020-06-02

共1个答案

一尘不染

是的,打开一个netlink套接字,并收听RTMGRP_LINK(网络接口创建/删除/上/下事件)多播组。

网络链路手册页这里有一个具体的例子来做到这一点。

2020-06-02