每种类型的 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_buff
是 sk_buff
的镜像)。例如,XDP programs expect a context of type struct xdp_md
.
正如@Qeole 在评论中指出的那样,从 2019 年 1 月起,Oracle 有一篇博客 post,lists the expected context for each program type。
我已经看到对于每种类型的 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_buff
是 sk_buff
的镜像)。例如,XDP programs expect a context of type struct xdp_md
.
正如@Qeole 在评论中指出的那样,从 2019 年 1 月起,Oracle 有一篇博客 post,lists the expected context for each program type。