Linux kernel 获取网络抖动和带宽的内核模块?

Linux kernel 获取网络抖动和带宽的内核模块?,linux-kernel,statistics,bandwidth,kernel-module,Linux Kernel,Statistics,Bandwidth,Kernel Module,我需要获得本地机器上的接口列表,以及它们的IP地址、MAC和一组QoS测量值(延迟、抖动、错误率、丢失率、带宽) 我正在编写一个内核模块来从本地网络设备读取这些信息,到目前为止,我已经提取了上面提到的所有内容,除了抖动和带宽 我使用的是linux内核2.6.35 有人知道怎么做吗?这取决于你所说的带宽。在大多数情况下,您只能从物理层获得更好的比特率。我想您更需要一些关于更高层可用带宽的信息,如果不进行主动或被动测量,就无法获得这些信息,例如发送类似ICMP回声的探测数据包和调查回复。您还应该明确

我需要获得本地机器上的接口列表,以及它们的IP地址、MAC和一组QoS测量值(延迟、抖动、错误率、丢失率、带宽)

我正在编写一个内核模块来从本地网络设备读取这些信息,到目前为止,我已经提取了上面提到的所有内容,除了抖动和带宽

我使用的是linux内核2.6.35


有人知道怎么做吗?

这取决于你所说的带宽。在大多数情况下,您只能从物理层获得更好的比特率。我想您更需要一些关于更高层可用带宽的信息,如果不进行主动或被动测量,就无法获得这些信息,例如发送类似ICMP回声的探测数据包和调查回复。您还应该明确网络中要测量可用带宽的两点(实际端点和通信层)


至于抖动,您还需要进行一些测量,基本上与上面的方法相同。

我知道这是一篇老文章,但您至少可以通过检查RTCP数据包(如果可用)来获得抖动。就我所见,它们在RTP端口的+1上出现,并与任何RTP流一起出现。可以从RTCP获得很多信息,但出于您的目的,只需基本的源代码描述即可:

编辑:(未查看预览)

只需查看此协议的详细信息,但您可以很容易地从RTCP数据包中获得抖动

根据您使用RTP流的目的,还有很多其他资源,如扩展报告()中的VoIP度量报告块

编辑

根据Artem的要求,这里有一个基本流程,说明您可以如何操作:

1) RTP流在端口16400上启动(发生这种情况所需的驱动程序/机制很可能已经就位)

2) 告诉内核也开始监听端口16401(RTP流端口上方的1);这是RTCP PKT开始进入的地方

3) 当RTCP PKT进入时,将它们发送到您想处理它们的任何地方(即,如果您想在用户空间或其他地方解析它)

4) 解析pkt以获取所需的数据。我不知道有哪一个库可以做到这一点,但只需将一些struct指向它(在C中)并取消引用,就很容易了,注意endianness


我希望这有足够的道理。

你能为你的文章详细阐述一下,并给出一些代码/操作流程吗?