我需要获取本地计算机上的接口列表,以及它们的IP地址,MAC和一组QoS测量(延迟,抖动,错误率,丢失率,带宽)......
我正在编写一个内核模块来从本地网络设备读取这些信息,到目前为止,我已经提取了上面提到的所有内容,除了抖动和带宽......
我正在使用linux内核2.6.35
有谁知道怎么做?
答案 0 :(得分:2)
这取决于带宽的含义。在大多数情况下,您只能从PHY获得更好的称为 bitrate 的内容。我想你更需要关于更高层可用带宽的某种信息,如果没有完成主动或被动测量,你就无法获得这些信息。发送ICMP类回声探测包,并调查回复。您还应该明确网络中的两个点(实际端点和通信层),您希望测量可用带宽。
对于 jitter ,您还需要进行某种测量,基本上与上述方法相同。
答案 1 :(得分:1)
我知道这是一篇过时的文章,但是您可以通过检查RTCP数据包(如果可用)至少完成抖动。据我所知,它们进入RTP端口的+1,并与所有RTP流一起出现。从RTCP可以获取很多信息,但是出于您的目的,只需基本的源描述即可做到:
编辑 :(未查看预览)
只需检查一下link即可了解协议的详细信息,但是您可以从RTCP数据包中轻松获得抖动。
取决于您使用RTP流的内容,还有很多其他资源,例如扩展报告(https://tools.ietf.org/html/rfc3611#page-25)中的VoIP指标报告块。
编辑:
根据Artem的要求,这是如何执行操作的基本流程:
1)RTP流在端口16400上启动(发生这种情况所需的驱动程序/机制很可能已经存在)。
2)告诉内核也开始监听端口16401(RTP流端口上方的1);这是RTCP pkts将开始进入的地方。
3)随着RTCP pkts的出现,将它们发送到您想处理它们的任何位置(即,如果您想在用户空间或其他内容中对其进行解析)。
4)解析pkts以获取所需数据。我不知道有哪个特定的lib可以做到这一点,但是很容易在它上面指向一些结构(用C语言编写)并取消引用,提防Endianess。
我希望这有足够的道理。