gpt4 book ai didi

linux - 如何列出所有加载到内核中的 bpf 程序? (例如 tc-bpf)

转载 作者:太空宇宙 更新时间:2023-11-04 10:07:10 25 4
gpt4 key购买 nike

我知道 bpf 程序可以通过不同的方式加载到内核中,tc/kprobe/socket ...

而且我想知道有没有一个接口(interface)之类的东西,通过它我可以得到我加载的所有bpf程序?如果没有这样的事情,如果我单独留下一些可能会改变我的网络数据的 bpf 程序是否危险?

一个小问题,如何卸载 tc-bpf 程序,我真的必须每次都删除 qdisc 吗?

最佳答案

为了列出您系统上的所有 BPF 程序,从 Linux 内核 4.13 开始,您可以使用 bpf() 系统调用及其 BPF_PROG_GET_NEXT_ID 命令,以获取第一个程序的 id,然后再次重复调用它以获取以下 id,直到您拥有系统上加载的所有 BPF 程序的 id 列表。然后,您可以使用相同的系统调用及其 BPF_PROG_GET_FD_BY_ID 命令检索每个程序的文件描述符,第三次使用 BPF_OBJ_GET_INFO_BY_FD 获取信息(例如程序类型) 对于给定的程序。我通常会将您重定向到 bpf(2) manual page ,但现在它已经严重过时了,并且没有描述我系统上的那些命令。

实际上,所有这些都已经实现了。您应该搜索 bpftool 程序:运行 sudo bpftool prog 将列出您系统上的所有程序。

bpftool sources are within the Linux kernel tree并且可以很容易地编译。它是为 Fedora 28 打包的,但在撰写本文时还没有为 Debian/Ubuntu 或其他发行版打包。 (您还可以从 this page 获得带有静态链接二进制文件的 Debian .deb 软件包。它还有一个指南,其中包含有关构建 bpftool 等内容的详细说明。免责声明:我为那家公司工作。)

至于删除附加为 tc 过滤器的程序,您可以简单地删除过滤器,不一定要删除整个 qdisc,如下所示:

tc filter del dev eth0 ingress

[编辑 2022 年 1 月] bpftool 在 https://github.com/libbpf/bpftool 有一个 GitHub 镜像,如果您想避免下载整个内核存储库来编译该工具。如今,bpftool 也被打包在主要发行版中。

关于linux - 如何列出所有加载到内核中的 bpf 程序? (例如 tc-bpf),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51627658/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com