bpf 究竟如何使用 BPF_MAP_TYPE_CPUMAP 数组进行重定向?

how exactly bpf redirect with BPF_MAP_TYPE_CPUMAP array?

我有一个关于 bpf 重定向如何精确工作 BPF_MAP_TYPE_CPUMAP 数组的问题,我看到它是 xdp-project repo and read are adding ability to run another (2nd) XDP-prog on the remote CPU the XDP packets is getting redirected to, i read the userspace code 上的一个新功能,我很困惑,因为我看到需要一个重定向接口,所以在这种情况下,这个新功能使接口 A 上的 xdp 能够在接口 B 上执行另一个 xdp,它从接口 A 接收“重定向”数据包,对吧?如果我说得不对,请提前致谢。

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

this patch, the ability was added to allow you to execute a second XDP program on the target CPU, for hardware without RSS支持。

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

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

原版样例简单多了:

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