我很困惑是否bpf_object_pin_maps (bpf_obj, pin_dir)将固定映射类型为BPF_MAP_TYPE_HASH_OF_MAPS的内部映射。因为这个函数接受bpf_obj作为参数,所以在此之前我们不会创建内部映射。如果它不固定内部映射,那我们怎么做呢?
如果您的内部映射与您的程序和外部映射在同一个对象文件中定义,我希望libbpf同时创建并固定它们。
相反,如果它们还没有创建(因为您稍后在工作流中创建它们,例如使用bpftool或从另一个对象文件),那么您仍然有可能稍后将它们固定。
与libbpf,您可以通过检索映射的句柄来做到这一点,例如从具有bpf_object__find_map_by_name()
的struct bpf_object
或类似函数中检索句柄:
LIBBPF_API struct bpf_map *
bpf_object__find_map_by_name(const struct bpf_object *obj, const char *name);
然后你可以很容易地用bpf_map__pin()
固定它:
LIBBPF_API int bpf_map__pin(struct bpf_map *map, const char *path);
与bpftool,如果您已经加载了一个映射,但尚未固定(由用户空间应用程序中的文件描述符或eBPF程序引用),则可以使用以下命令来固定它:
# bpftool map pin <map> <pinned path>
请注意,使用bpftool创建映射会自动将其固定,并且需要您提供一个路径:
# bpftool map create <pinned path> type <type> key <key size> value <value size>
entries <max entries> name <name>