2

我从 XDP 和 BPF 映射开始。

我知道要从用户空间访问 BPF 映射,我们使用bpf_*系统调用。例如,bpf_map_lookup_elem()用于在用户空间程序中查找 BPF 映射的元素。但是,我注意到相同的系统调用也用于访问加载在内核上的 XDP 程序中的映射(参考此处)。

我假设这样的程序应该在内核空间中运行,因此是否有其他方法可以从内核空间访问这些 BPF 映射?还是 XDP 加载的程序也是用户空间的一部分,但只在内核中运行?

4

1 回答 1

2

要从用户空间查找地图元素,您应该使用syscallbpf(2)command BPF_MAP_LOOKUP_ELEM。BPF 的主要用户空间库确实将此系统调用命令公开为bpf_map_lookup_elem().

要从 BPF 程序中查找地图元素,您确实需要使用bpf_map_lookup_elemBPF 助手。简而言之,BPF 助手是内核函数,您可以使用指令从 BPF 字节码调用call

尽管名称相同,但它们是不同的东西:第一个是库函数,而第二个是 BPF 助手。

于 2022-01-14T09:41:48.720 回答