1

我正在尝试编写一个基于事件的 c/c++ 程序,该程序检测网络电缆或物理链路(载波信号)中断的次数以及链路中有多少数据包丢失。对于丢包,我希望它每秒检查一次。理想情况下,伪代码应该是这样的;

 //C program for checking how many times physical link went down  
    if(event==physical_link_down)
    {
    link_down++;
    }

//separate C program for packet loss
    while(true)
    {
    check_packet_loss;
    sleep(1);
    }

如果我是正确的,我可以通过执行 ifconfig 获得以下信息,其中“RUNNING”一词表示我们有一个活动的物理链路,并且可以从丢弃/错误字段中计算数据包丢失。

顺便说一句,我正在使用 Ubuntu 操作系统。

我正在考虑通过我的 C 程序对 ifconfig 进行 grep 以获取所需的信息。我的方法正确吗?其次,我如何通过 C 程序 grep,因为我不知道该怎么做?已经提出了类似的问题,但大多数问题是针对 Windows 环境提出的。任何帮助将不胜感激!:)

4

2 回答 2

3

您可以通过getifaddrs获取链接状态。这是Linux中的C api,大致相当于从命令行调用ifconfig。

于 2012-05-29T07:24:19.387 回答
0

只要我知道getifaddrs,只允许知道RX或TX字节,丢包......,但不知道物理链路的状态。

用于知道链路是打开还是关闭的接口是 ETHTOOL 或 MII(使用 ethtool 和 mii-tool 用户空间应用程序实现),其中一个接口应该在您的网络驱动程序中实现。

我知道这个任务最好的代码是 debian-installer 的一部分,它决定了一个链接是否已经启动。它尝试使用 ethtool,如果使用 mii-tool 不成功。在这里你可以找到代码。

于 2012-05-29T10:05:17.953 回答