C程序检测物理链路状态和丢包

时间:2012-05-29 07:11:08

标签: c++ c linux

我正在尝试编写一个基于事件的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 OS btw。

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

2 个答案:

答案 0 :(得分:4)

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

答案 1 :(得分:0)

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

用于了解链接是启用还是关闭的接口是ETHTOOL或MII(使用ethtool和mii-tool用户态应用程序实现),其中一个接口应该在您的网络驱动程序中实现。

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