我是eBPF新手,我想将元素插入到BPF_ARRAY中,那么有什么方法可以像C++ push_back() size()函数那样做呢?
发布于 2022-06-27 20:20:07
是也不是。您可以更改数组映射中的元素(通过系统调用bpf(BPF_MAP_UPDATE_ELEM, ...)),但此时不能动态调整映射的大小(请参见这个答案),尽管这在将来可能是可能的,因为以前已经出现过一些工作。
因此,现在您有一个固定大小的数组,可以从BPF程序或从用户空间进行更新。对于用户空间方面,在C++中,您可能希望使用libbpf更新您的地图。您在bpf.h、bpf_map_update_elem()中有一个围绕syscall的低级别包装器,以及一个在libbpf.h:bpf_map__update_elem()中对由库管理的映射对象工作的高级函数。
要回答标题中的问题:是的,您可以通过bpf()系统调用获得地图大小。Libbpf提供了一个包装器:bpf_obj_get_info_by_fd(),它填充了一个struct bpf_map_info,您可以从中检索映射的大小。
https://stackoverflow.com/questions/72772724
复制相似问题