如果我最初理解得很好,那么 cBPF 验证器和解释器都在net/core/fiter.c
例如sk_run_filter
这里https://elixir.bootlin.com/linux/v3.2/source/net/core/filter.c#L112只需转换应用它们的 cBPF 指令在仿真寄存器上和直接在 sk_buff 上。同时sk_chk_filter
检查说明是否全部合法。
目前我已经看到 filter.c 中仍然有一个bpf_check_classic
函数可以替代旧的sk_chk_filter
. 检查后尝试 JIT 程序,如果不可能,下一步是将 cBPF 转换为 eBPF。
问题:
1)最后运行jitted/converted cbpf过滤器的实际调用在net/core/filter.c
哪里?
2) 将 cBPF 程序作为 eBPF 程序执行的函数调用序列是什么?