【发布时间】:2021-10-12 17:41:45
【问题描述】:
问题:
bpf_xdp_adjust_meta(ctx, -delta); 在 delta > 32 时返回错误代码 -13(权限被拒绝)。
但是BPF and XDP Reference Guide 声明元数据有 256 字节的空间。
那么我是否误解了某些内容,或者我如何将 256 字节用于元数据?
程序:
int xdp_prog_simple(struct xdp_md *ctx)
{
bpf_printk("---BPF DEBUG--- adjust_meta: %d\n", bpf_xdp_adjust_meta(ctx, -36));
return XDP_PASS;
}
设置:
内核:uname -rv5.8.0-63-generic #71-Ubuntu SMP Tue Jul 13 15:59:12 UTC 2021
设备:
veth 来自 xdp-tutorial/testenv,因为我的硬件驱动程序不支持原生 xdp 模式。
加载:
-
ip link set dev test xdp obj xdp_pass_kern.o sec xdp并检查该程序是否以 xdp 原生模式附加。 -
bpf_set_link_xdp_fd()来自用户空间程序
我也尝试过使用不同的编译环境(默认为Makefile):
背景:
我正在尝试通过 xdp_md->data_meta 字段传递数据,以使尾调用 eBPF 程序可以访问数据。为了调整 data_meta 指针,我调用了 eBPF 辅助函数bpf_xdp_adjust_meta(ctx, -delta);,其中 delta 是保存元数据的结构的大小。
这工作正常,只要 delta BPF and XDP Reference Guide 中所述的 256 字节。
【问题讨论】:
标签: linux-kernel linux-device-driver bpf ebpf xdp-bpf