eBPF程序类型与功能详解
1. eBPF程序基础
所有eBPF程序都接收一个作为指针的上下文参数,但其指向的结构取决于触发它的事件类型。eBPF程序员需要编写能接受适当上下文类型的程序。例如,如果事件是一个跟踪点(tracepoint),就不能假设上下文参数指向一个网络数据包。定义不同类型的程序可以让验证器确保上下文信息得到适当处理,并执行关于哪些辅助函数是允许使用的规则。
2. 辅助函数与返回码
- 辅助函数兼容性 :验证器会检查程序使用的所有辅助函数是否与其程序类型兼容。例如,
bpf_get_current_pid_tgid()辅助函数在XDP程序中是不允许使用的,因为在接收数据包并触发XDP钩子时,没有用户空间进程或线程参与,所以在这种上下文中调用该函数来获取当前进程和线程ID是没有意义的。 - 返回码含义 :程序类型也决定了程序返回码的含义。以XDP为例,返回码值告诉内核在eBPF程序处理完数据包后该如何处理它,可能包括将其传递给网络栈、丢弃它或重定向到不同的接口。但当eBPF程序由特定跟踪点触发时,这些返回码就没有意义了,因为此时没有网络数据包参与。
- 辅助函数信息获取 :有关于辅助函数的手册页,但由于BPF子系统的持续开发,手册页可能并不完整。可以使用
bpftool feature命令获取内核版本中每种程序类型可用的辅助函数列表,该命令会显示系统配置,列出所有可用的程序类型和映射类型,甚至列出每种程序类型支持的所有辅助函数。
超级会员免费看
订阅专栏 解锁全文
54

被折叠的 条评论
为什么被折叠?



