0

我有一个关于 bpf 重定向工作 BPF_MAP_TYPE_CPUMAP 数组究竟是如何工作的问题,我看到它是xdp-project repo 上的一个新功能,并且读取正在增加在 XDP 数据包被重定向到的远程 CPU 上运行另一个(第二个)XDP-prog 的能力,我阅读了用户空间代码,我很困惑,因为我看到重定向接口是必需的,所以在这种情况下,这个新功能使接口 A 上的 xdp 能够在接口 B 上执行另一个 xdp,它接收来自接口 A 的“重定向”数据包, 正确的?如果我不对,请提前感谢您让图片清晰。

4

1 回答 1

1

这有点令人困惑,最初的 CPUMAP 功能只是为了在将数据包交给内核进行 SKB 分配时将数据包重定向到不同的 CPU:https ://lwn.net/Articles/735193/ 。

此补丁中,添加了允许您在目标 CPU 上执行第二个 XDP 程序的功能,适用于不支持RSS的硬件。

所以你根本不需要第二个程序来使用 CPUMAP,如果你这样做了,你也不需要接口。

内核中的“样本”经过了多次修改,并且有很多标志,这很好地展示了所有不同的用例,但也使得它很难理解。在这一点上,它更像是内核开发人员的测试命令,而不是一个简洁的示例。添加这些接口选项可能是为了证明您仍然可以从第二个 XDP 程序重定向到接口。

该示例的原始版本要容易得多:

这是具有接口重定向的示例的第一个版本,在这个版本中更容易看到程序和重定向接口都是可选的:

于 2021-12-11T10:44:57.193 回答