【问题标题】:What is the exact relationship between BPF filters in a single chain单链中 BPF 过滤器之间的确切关系是什么
【发布时间】:2021-08-14 03:09:46
【问题描述】:

我有一个网络接口 $dev,它已经有一个 BPF 过滤器连接到一个特殊的 qdisc ingress(带有 pref 1 和直接操作)。我添加了另一个(带有pref 2)。 tc filter show dev $dev ingress 报告以下内容:

filter protocol all pref 1 bpf chain 0 
filter protocol all pref 1 bpf chain 0 handle 0x1 some.o:[some-section] direct-action \
  not_in_hw id ... tag ... jited 
filter protocol all pref 2 bpf chain 1 
filter protocol all pref 2 bpf chain 1 handle 0x1 other.o:[other-section] \
  not_in_hw id ... tag ... jited

在这种情况下,链式过滤器之间的关系是什么:辅助过滤器(即我的)是否总是看到与第一个过滤器相同的流量,还是取决于第一个过滤器返回的内容,尤其是。鉴于它使用直接作用?我怀疑第二个是真的,但还不确定。

【问题讨论】:

  • 我猜想和你一样,但我也不是 100% 确定。做实验呢?您可以从程序中打印一些调试消息(例如使用bpf_trace_printk())或比较每个程序的运行次数(在bpftool-prog man page 中搜索stat)。我想知道ipftrace2 是否也有助于跟踪数据包的传输,我从未在这种情况下使用过它。
  • @Qeole 我做了一些实验,这也表明(但没有证明)第二个是真的。

标签: linux bpf ebpf trafficshaping


【解决方案1】:

链中的第二个 BPF 程序看到的取决于第一个返回的内容。您可以在 cls_bpf_classify() 中阅读该逻辑。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-12-28
    • 1970-01-01
    • 2012-04-12
    • 2023-04-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-10
    相关资源
    最近更新 更多