从内核访问 BPF 映射 space

Accessing BPF maps from kernel space

我从 XDP 和 BPF 映射开始。

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

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

要从用户空间查找地图元素,您应该使用the bpf(2) syscall, with command BPF_MAP_LOOKUP_ELEM. The main userspace library for BPF does expose this syscall command as bpf_map_lookup_elem()

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

从 BPF 字节码调用

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