首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何列出加载到内核中的所有bpf程序?(例如tc-bpf)

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

Stack Overflow用户
提问于 2018-08-01 07:29:28
回答 1查看 3.9K关注 0票数 4

我知道bpf程序可以以不同的方式加载到内核中,tc/k探头/套接字.

我想知道是否有一个接口什么的,通过它我可以得到我加载的所有的bpf程序吗?如果没有这样的事情,如果我留下一些可能改变我的网络数据的bpf程序是危险的吗?

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-08-01 07:42:43

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

在实践中,所有这些都已付诸实施。您应该搜索bpftool程序:运行sudo bpftool prog将列出系统上的所有程序。

bpftool源位于Linux内核树中。并且可以很容易地编译。它是为Fedora 28打包的,但在本文撰写之时,它不是为Debian/Ubuntu或其他发行版打包的。(您还可以从.deb获得一个带有静态链接的二进制文件的Debian .deb包。它还有一个指南,其中包括构建bpftool的详细说明。免责声明:我为那家公司工作。)

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

代码语言:javascript
复制
tc filter del dev eth0 ingress

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

票数 10
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51627658

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档