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,它会继续。我究竟做错了什么?