4

我正在考虑在内核中复制数据包并转发到 5 个主机(单播)的解决方案。计划为此使用 eBPF/XDP。

我尝试循环 5 次,在循环内我计划克隆数据包,修改 DST IP 地址,更新 cksum 并在接收到的同一 intf 上发送数据包。

我在某处读到不能在 XDP 中使用循环,所以不确定这是否可行?

请需要专家的建议。

4

2 回答 2

11
于 2019-05-13T07:52:55.860 回答
2

对于 Linux <5.3:

从技术上讲,BPF 字节码程序的控制流图中的后端是被禁止的,而不是循环。具体来说,这意味着您可以在 C 中编写有界循环,但您必须在编译时展开它们。

要展开循环,您可以使用Clang 的#pragma unroll指令。这应该适用于 5 次迭代循环,但不适用于很长的循环。

于 2019-05-13T07:50:28.670 回答