【发布时间】:2020-02-15 17:33:13
【问题描述】:
是否可以在不同程序类型之间共享 ebpf 映射。我需要在 tc-bpf 程序和 cgroup bpf 程序之间共享一个映射。如果映射固定到充当全局命名空间的文件系统,这应该是可能的。但是,我还没有这个工作。
映射由 tc-bpf 程序创建并固定到全局命名空间。由于是 tc-bpf 程序,map 的类型为 struct bpf_elf_map。这个bpf程序是通过iproute2加载的。
现在,我有一个 cgroup bpf 程序应该访问此地图,但由于它是通过 user.c (libbpf) 或 bpftool 而不是 iproute 加载的,因此此处定义的地图不能是“bpf_elf_map”,而是它是结构 bpf_map_def。所以在cgroup bpf程序中,同样的map被定义为struct bpf_map_def而不是struct bpf_elf_map。
可能正因为如此,当我转储地图(并且不共享预期的地图)时,cgroup 程序会获得一个新的 map_id,理想情况下,当 bpf 程序共享相同的地图时,这些 bpf 程序将具有相同的关联 map_id带有他们独特的 prog_id。
【问题讨论】:
-
我可以通过各种可用的系统调用实用程序访问用户空间中的地图,但目的是从不同附加类型的不同 bpf 程序 (_kern.c) 访问地图。
标签: linux-kernel elf bpf ebpf iproute