我正在尝试编写一个基于事件的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环境提出的。任何帮助将不胜感激! :)
答案 0 :(得分:4)
您可以通过getifaddrs获取链接状态。这是Linux中的C api,大致相当于从命令行调用ifconfig。
答案 1 :(得分:0)
只要我知道getifaddrs,只允许知道RX或TX字节,丢包...,但不知道物理链路的状态。
用于了解链接是启用还是关闭的接口是ETHTOOL或MII(使用ethtool和mii-tool用户态应用程序实现),其中一个接口应该在您的网络驱动程序中实现。
我知道这个任务的最佳代码是debian-installer的一部分,它决定了链接是否已启动。它尝试使用ethtool,如果使用mii-tool不成功。 Here您可以找到代码。