eBPF:检索固定 bpf 程序的 `fd`

eBPF: retrieve `fd` of the pinned bpf program

我知道 eBPF 程序可以固定到 /sys/fs/bpf(小 bpffs 的默认位置)。例如使用 bpftool :

$ bpftool prog load ./my_bpf.o /sys/fs/bpf/my_bpf

我原以为 open("/sys/fs/bpf/my_bpf") 会 return 我得到内核为 my_bpf 分配的文件描述符的值。但是 open() 调用就失败了,我认为是 returns -EINVAL.

在这种情况下,固定的目的是什么?我通常如何获取 BPF 程序的 fd,因为当前可能加载了很多程序。我知道 libbpf 允许从 id 检索 fd,但是如果我也没有 id 怎么办?

bpf(BPF_OBJ_GET, …) 包裹在内核提供的 libbpf 中的 bpf_obj_get() returns fd 固定对象。固定对象的路径是 bpf_obj_get().

的参数