如何获得eBPF地图的大小



我是eBPF的新手,我想向BPF_ARRAY插入元素,那么有什么方法可以像C++push_back()size()函数一样执行吗?

是和否。您可以更改数组映射中的元素(通过系统调用bpf(BPF_MAP_UPDATE_ELEM, ...)),但此时无法动态调整映射的大小(另请参阅此答案),尽管这在未来可能是可能的,因为以前已经在这个方向上做了一些工作。

因此,现在您有一个固定大小的数组,可以从BPF程序或用户空间进行更新。对于用户空间方面,在C++中,您可能希望使用libbpf来更新映射。您在bpf.h、bpf_map_update_elem()中有一个围绕系统调用的低级包装器,在libbpf.h:bpf_map__update_elem()中还有一个对库管理的映射对象进行操作的高级函数。

要回答标题中的问题:是的,您可以再次通过bpf()系统调用获取地图大小。Libbpf提供了一个包装器:bpf_obj_get_info_by_fd(),它填充一个struct bpf_map_info,您可以从中检索映射的大小。

相关内容

  • 没有找到相关文章

最新更新