我基于本教程:https ://github.com/xdp-project/xdp-tutorial/tree/master/advanced03-AF_XDP
我在用户空间中创建了一个套接字Queue-ID 0
。在我的内核 af-xdp 程序中,我过滤 UDP 数据包并通过xskmap
.
因为我显然希望用户空间程序接收数据包,所以我将内核程序中的数据包重定向到 index 0
:
int index = 0;
if (bpf_map_lookup_elem(&xsks_map, &index)) {
return bpf_redirect_map(&xsks_map, index, 0);
} else {
bpf_printk("Didn't find connected socket for index %d!\n", index);
}
我没有收到错误消息Didn't find connected socket for index 0!
,sudo cat /sys/kernel/debug/tracing/trace_pipe
但我在用户空间也没有收到任何数据包!
如果我只是继续运行程序并同时添加这样的 ethtool-rule:
sudo ethtool -N <eth> flow-type udp4 dst-ip <ip> action 0
我的用户空间程序突然开始接收数据包并且错误消息消失了。
我认为内核程序会接收发送到该接口的每个数据包,但不知何故,情况并非如此。我做错什么了?