我正在考虑在内核中复制数据包并转发到 5 个主机(单播)的解决方案。计划为此使用 eBPF/XDP。
我尝试循环 5 次,在循环内我计划克隆数据包,修改 DST IP 地址,更新 cksum 并在接收到的同一 intf 上发送数据包。
我在某处读到不能在 XDP 中使用循环,所以不确定这是否可行?
请需要专家的建议。
我正在考虑在内核中复制数据包并转发到 5 个主机(单播)的解决方案。计划为此使用 eBPF/XDP。
我尝试循环 5 次,在循环内我计划克隆数据包,修改 DST IP 地址,更新 cksum 并在接收到的同一 intf 上发送数据包。
我在某处读到不能在 XDP 中使用循环,所以不确定这是否可行?
请需要专家的建议。
对于 Linux <5.3:
从技术上讲,BPF 字节码程序的控制流图中的后端是被禁止的,而不是循环。具体来说,这意味着您可以在 C 中编写有界循环,但您必须在编译时展开它们。
要展开循环,您可以使用Clang 的#pragma unroll
指令。这应该适用于 5 次迭代循环,但不适用于很长的循环。