每种类型的 ebpf 程序的上下文

Mai*_*ake 2 c bpf ebpf

我已经看到,对于每种类型的 ebpf 程序,该程序都有不同的输入(上下文)。例如,在 BPF_PROG_TYPE_SOCKET_FILTER 程序中,指向 struct __sk_buff 的指针作为参数传递。每个程序类型的上下文在哪里定义?

pch*_*gno 5

每个程序类型的上下文在哪里定义?

内核中有定义,一般在内核头文件中。精确位置取决于程序类型。例如,__sk_buff由多种程序类型使用并在 中定义linux/bpf.h。

要查找每个程序所需的上下文,您可以查看内核中的 BPF 示例或尝试查找xxxx_convert_ctx_access给定程序类型的 BPF 示例。这些函数将对上下文对象的访问转换为对实际内核对象的访问(例如,__sk_buff是 的镜像sk_buff)。例如,XDP 程序期望类型为 的上下文struct xdp_md。

正如@Qeole 在评论中指出的那样,Oracle 从 2019 年 1 月开始发布了一篇博客文章,其中列出了每种程序类型的预期上下文。

  • 好答案。作为补充,[这篇博文](https://blogs.oracle.com/linux/notes-on-bpf-1) 列出了所有(当时存在的)程序类型的上下文,并且可能会引起兴趣。 (2认同)