我需要获取本地计算机上的接口列表,以及它们的 IP 地址、MAC 和一组 QoS 测量值(延迟、抖动、错误率、丢失率、带宽)......
我正在编写一个内核模块来从本地网络设备读取这些信息,到目前为止,我已经提取了上面提到的所有内容,除了抖动和带宽......
我正在使用 linux 内核 2.6.35
我需要获取本地计算机上的接口列表,以及它们的 IP 地址、MAC 和一组 QoS 测量值(延迟、抖动、错误率、丢失率、带宽)......
我正在编写一个内核模块来从本地网络设备读取这些信息,到目前为止,我已经提取了上面提到的所有内容,除了抖动和带宽......
我正在使用 linux 内核 2.6.35
这取决于您所说的带宽。在大多数情况下,您只能从 PHY 获得更好称为比特率的东西。我想你更需要一些关于更高层可用带宽的信息,如果没有完成主动或被动测量,你就无法获得这些信息,例如发送类似 ICMP 回声的探测数据包,并调查回复。您还应该明确网络中的两个点是什么(实际端点和通信层),您希望在它们之间测量可用带宽。
至于抖动,你还需要做一些测量,基本上和上面的方法一样。
我知道这是一篇旧帖子,但您至少可以通过检查 RTCP 数据包(如果它们可用)来实现抖动。据我所知,它们通过 RTP 端口的 +1 进入并与任何 RTP 流一起出现。可以从 RTCP 获得很多信息,但出于您的目的,只需基本的源描述即可:
编辑:(没看预览)
只需查看此链接以了解协议的详细信息,但您可以很容易地从 RTCP 数据包中获取抖动。
根据您使用 RTP 流的目的,还有很多其他资源,例如扩展报告中的 VoIP 指标报告块 ( https://www.rfc-editor.org/rfc/rfc3611#page-25)。
编辑:
根据 Artem 的要求,这里有一个基本流程,您可以这样做:
RTP 流在端口 16400 上启动(发生这种情况所需的驱动程序/机制很可能已经到位)。
告诉内核也开始监听端口 16401(RTP 流端口上方的 1);这就是 RTCP pkts 开始发挥作用的地方。
随着 RTCP pkts 的出现,将它们发送到您想要处理它们的任何地方(即,如果您想在用户空间或其他地方解析它)。
解析所需数据的 pkts。我不知道有一个特定的库可以做到这一点,但是很容易将一些结构指向它(在 C 中)并取消引用,注意 Endianess。