代码之家  ›  专栏  ›  技术社区  ›  diviquery

从内核空间访问BPF映射

  •  0
  • diviquery  · 技术社区  · 4 年前

    我从XDP和BPF地图开始。

    我知道要从用户空间访问BPF映射,我们需要 bpf_* 系统调用。例如 bpf_map_lookup_elem() 用于在用户空间程序中查找BPF映射的元素。然而,我注意到,同样的系统调用也用于访问加载到内核上的XDP程序中的映射(参考。 here ).

    我假设这样的程序应该在内核空间中运行,因此有没有其他方法可以从内核空间访问这些BPF映射?或者XDP加载的程序也是用户空间的一部分,但只在内核中运行?

    0 回复  |  直到 4 年前
        1
  •  2
  •   pchaigno    4 年前

    要从用户空间中查找地图元素,应该使用 the bpf(2) syscall 带着命令 BPF_MAP_LOOKUP_ELEM 。BPF的主用户空间库将此syscall命令公开为 bpf_map_lookup_elem() .

    要从BPF程序中查找映射元素,确实需要使用 bpf_map_lookup_elem BPF助手。简而言之,BPF助手是可以通过指令从BPF字节码调用的内核函数 call .

    尽管名称相同,但它们是不同的:第一个是库函数,而第二个是BPF助手。

    推荐文章