我正在尝试弄清楚如何运行XDP代码:
#include <linux/bpf.h>
int main() {
return XDP_PASS;
}
我正在尝试让 XDP 丢弃所有数据包。所以我把它编译为:
clang -target bpf -c xdp.c -o xdp.o
我的接口名称是 enp5s0。
所以我试图通过键入将代码附加到该接口:
ip -force link set dev enp5s0 xdpdrv obj xdp.o sec .text
然后我收到以下错误:
mkdir /sys/fs/bpf/tc/ failed: Permission denied
Continuing without mounted eBPF fs. Too old kernel?
Prog section '.text' rejected: Operation not permitted (1)!
- Type: 6
- Instructions: 2 (0 over limit)
- License :
Verifier analysis:
Error fetching program/map!
我不知道出了什么问题..我正在尝试掌握 XDP,并且我已经尝试解决此问题三天了,但没有结果......如果你们能帮助我,我将不胜感激!
你能检查内核版本吗? 它应该高于 4.8
您是否以超级用户身份运行ip
?您可以尝试运行ip -force link set dev enp5s0 xdp obj xdp.o sec .text
而不是ip -force link set dev enp5s0 xdpdrv obj xdp.o sec .text
吗?第一次在尽力而为模式下使用 xdp。也许您的设备驱动程序不支持 XDP 驱动程序。另一个提示:您可以使用SEC("name_section")
指定所需的代码段,然后使用 name_section
而不是.text
您需要在附加 XDP 程序之前挂载 bpffs。
mount bpffs /sys/fs/bpf -t bpf