【发布时间】:2018-02-14 16:57:44
【问题描述】:
我知道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 程序,我通常如何获取 BPF 程序的fd。我知道libbpf 允许从id 检索fd,但是如果我也没有id 怎么办?
【问题讨论】:
-
正如您已经猜到的,
bpf(BPF_OBJ_GET, …)(libbpf 中可能确实有一个包装器)就是答案。既然存在 ID,您还有其他可能性,例如需要程序 ID 的bpf(BPF_PROG_GET_FD_BY_ID, …)(如bpftool prog show所示)——当然,前提是您有 ID。
标签: filesystems file-descriptor bpf ebpf