【问题标题】:Simple eBPF action not taking effect with tc简单的 eBPF 操作不与 tc 一起生效
【发布时间】:2018-05-15 10:16:45
【问题描述】:

我从samples/bpf/pare_simple.c(来自 Linux 内核树)编译了 BPF 示例,并进行了非常简单的更改:

SEC("simple")
int handle_ingress(struct __sk_buff *skb)
{
   return TC_ACT_SHOT;
}

所以我希望丢弃任何数据包。我安装如下:

这发生在 Ubuntu 16.04.3 LTS 上,内核 4.4.0-98、llvm 和从软件包安装的 3.8 版本的 clang,iproute2 是来自 github 的最新版本。

$ tc qdisc add dev eth0 clsact
$ tc filter add dev eth0 ingress bpf \
      object-file ./net-next.git/samples/bpf/parse_simple.o \
      section simple verbose

Prog section 'simple' loaded (5)!
 - Type:         3
 - Instructions: 2 (0 over limit)
 - License:      GPL

Verifier analysis:

0: (b7) r0 = 2
1: (95) exit
processed 2 insns, stack depth 0

所以它似乎安装成功,但是这个过滤器/ebpf 不会丢弃数据包,我在eth0 接口上生成入口流量,例如ICMP,它通过了。我做错了什么?

【问题讨论】:

  • 您可以尝试在命令行上使用direct-action tc 标志(我相信在verbose 之前)(see here
  • @Qeole,确实有帮助,谢谢!这个标志表示什么?
  • 好问题,我一直愿意写一篇博文来回答这个问题,但一直没有时间 :) 以下是正确答案中的一些解释

标签: linux-kernel bpf ebpf


【解决方案1】:

TL;DR:您应该在tc filter 命令中添加direct-action 标志,如

tc filter add dev eth0 ingress bpf \
    object-file ./net-next.git/samples/bpf/parse_simple.o \
    section simple direct-action verbose
                   ^^^^^^^^^^^^^

tc bpf filter bpf help 的简短帮助提到了这个标志,但如果我没记错的话,目前还没有进入 tc-bpf(8) 手册页。

那么,这个标志是干什么用的?

eBPF 程序可以通过两种方式附加到 tc:作为 actions 或作为 classifiers。带有tc filter add 的分类器应该用于过滤数据包,默认情况下不应用操作。这意味着它们的返回值具有以下含义(来自man tc-bpf):

0 ,表示不匹配

-1 ,表示从命令行配置的默认classid

否则,其他所有内容都将覆盖默认的 classid 以提供非线性匹配的工具

另一方面,带有tc action add 的操作可以丢弃、镜像或对数据包执行其他操作,但它们不应该实际过滤它们。

因为 eBPF 比 tc 的传统动作和过滤器更灵活,实际上您可以同时进行这两种操作,过滤数据包(即识别此数据包)并对其执行操作。为了体现这种灵活性,添加了direct-actionda 标志(对于内核4.4 或更高版本,具有匹配的iproute2 包)。它告诉内核将actionsTC_ACT_SHOTTC_ACT_OK 等)的返回值用于分类器。这就是您在这里需要以内核理解您想要丢弃数据包的方式返回TC_ACT_SHOT

如果我没记错的话,我们使用这个标志而不是仅仅为操作删除过滤器的原因是你需要一个带有 tc 的过滤器来附加你的操作? (待确认)。因此,使用direct-action 标志,您不必同时附加一个过滤器和一个操作,过滤器可以执行这两种操作。这应该是使用 tc 进行 eBPF 编程的首选方式。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-12-16
    • 1970-01-01
    • 2011-09-10
    • 2017-06-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-11
    相关资源
    最近更新 更多