2

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

4

1 回答 1

4

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

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

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

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

于 2019-08-26T10:41:55.063 回答