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

context for each type of ebpf program

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

Where are defined the contexts for each program type?

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

中定义

要找到每个程序期望的上下文,您可以查看内核中的 BPF 示例或尝试找到给定程序类型的 xxxx_convert_ctx_access。这些函数将对上下文对象的访问转换为对实际内核对象的访问(例如,__sk_buffsk_buff 的镜像)。例如,XDP programs expect a context of type struct xdp_md.

正如@Qeole 在评论中指出的那样,从 2019 年 1 月起,Oracle 有一篇博客 post,lists the expected context for each program type