问题:
bpf_xdp_adjust_meta(ctx, -delta);
当 delta > 32 时返回错误代码 -13(权限被拒绝)。
但是BPF 和 XDP 参考指南指出元数据有 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 -rv
5.8.0-63-generic #71-Ubuntu SMP Tue Jul 13 15:59:12 UTC 2021
设备:
来自xdp-tutorial/testenv 的 veth,因为我的硬件驱动程序不支持原生 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 <= 32。如果它更大,帮助函数返回 -13(权限被拒绝)。这就是为什么我猜测元数据的空间是 32 字节,而不是BPF 和 XDP 参考指南中所述的 256 字节。