尝试在我的设备驱动程序上运行 XDP 时出错



我正在尝试弄清楚如何运行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

相关内容

  • 没有找到相关文章

最新更新