每种ebpf程序的上下文

时间:2019-08-26 10:08:55

标签: c bpf ebpf

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

1 个答案:

答案 0 :(得分:2)

  

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

在内核中定义,通常在内核头文件中定义。确切的位置取决于程序类型。例如,__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月发布了一篇博客文章lists the expected context for each program type