sysfs,ifreq,IOCTL或???以编程方式监视网络状态

时间:2014-05-27 17:08:05

标签: c linux networking sysfs

我们有一个运行BusyBox Linux(内核2.6.x)的嵌入式SoC,我们需要监视或至少及时通知网络连接断开或出现(捕获其他事件会很好但是不是必要的。)

我花了很长时间用Google搜索和阅读SO线程,似乎有很多不同的答案,具体取决于特定操作系统和月亮等阶段的确切任务。

我们的具体标准是:

  • 我们正在从C程序内部查找,因此C代码优于命令行调用。
  • 虽然接口始终存在,但我们不能保证它已经存在或者一直存在(我已经看到一些示例的注释仅在接口为up时才起作用,即使链接为{{1} }})
  • 最好不要进行轮询,而是发送/捕获状态更改消息,以及它们何时发生。我相信内核可能已经从驱动程序那里得到了这样的消息,但我不确定我们是否可以加入任何内容?

我已经将可能的看似答案缩小到几个候选人但是无法解决哪个是最好的(最少开销,最可靠,最不可能在未来版本中打破):

  • down
  • cat sys/class/net/eth0/operstate (我对这两者之间的差异没有很好的解释)
  • 根据answers herehere使用ifreq或各种ioctl调用序列来读取套接字状态(看起来有点混乱)。(看起来更整洁)。
  • 以某种方式捕获状态更改消息???

1 个答案:

答案 0 :(得分:0)

您可以使用inotify来检查/ sys / class / net / eth0 / operstate。 Inotify允许在指定的文件或目录上监视不同的事件,例如创作,修改,写作等。

您可以看到工作示例here