【问题标题】:eBPF: retrieve `fd` of the pinned bpf programeBPF:检索固定 bpf 程序的“fd”
【发布时间】: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


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-02-08
    • 2021-09-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-22
    相关资源
    最近更新 更多