我已经看到,对于每种类型的 ebpf 程序,程序都有不同的输入(上下文)。例如,在 BPF_PROG_TYPE_SOCKET_FILTER 程序的情况下,指向 struct __sk_buff 的指针作为参数传递。每个程序类型的上下文在哪里定义?
问问题
653 次
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 回答