我已经看到,对于每种类型的ebpf程序,该程序都有不同的输入(上下文)。例如,在BPF_PROG_TYPE_SOCKET_FILTER程序的情况下,指向结构__sk_buff的指针作为参数传递。 每种程序类型的上下文在哪里定义?
答案 0 :(得分:2)
每种程序类型的上下文在哪里定义?
在内核中定义,通常在内核头文件中定义。确切的位置取决于程序类型。例如,__sk_buff
由几种程序类型使用,并且在linux/bpf.h
中定义。
要查找每个程序期望的上下文,可以查看内核中的BPF示例,或尝试为给定程序类型找到xxxx_convert_ctx_access
。这些函数将对上下文对象的访问转换为对实际内核对象的访问(例如,__sk_buff
是sk_buff
的镜像)。例如,XDP programs expect a context of type struct xdp_md
。
正如@Qeole在评论中指出的那样,甲骨文在2019年1月发布了一篇博客文章lists the expected context for each program type。