我知道eBPF
程序可以固定到/sys/fs/bpf
(小bpffs
的默认位置。例如使用bpftool
:
$ bpftool prog load ./my_bpf.o /sys/fs/bpf/my_bpf
我期待open("/sys/fs/bpf/my_bpf")
会返回内核为my_bpf
分配的文件描述符的值。但open()
呼吁失败,我认为它返回-EINVAL
。
在这种情况下,钉扎的目的是什么?我如何正常获得BPF程序的fd
,因为它们当前可能有很多加载。我知道libbpf
允许从fd
检索id
,但如果我没有id
怎么办?
bpf(BPF_OBJ_GET, …)
包裹在libbpf中的bpf_obj_get()
中,由kernel提供返回固定对象的fd
。固定对象的路径是bpf_obj_get()
的参数。