我知道bpf程序可以以不同的方式加载到内核中,tc/k探头/套接字.
我想知道是否有一个接口什么的,通过它我可以得到我加载的所有的bpf程序吗?如果没有这样的事情,如果我留下一些可能改变我的网络数据的bpf程序是危险的吗?
一个不小的问题,如何卸载tc-bpf程序,我真的要删除qdisc每次吗?
发布于 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,如下所示:
tc filter del dev eth0 ingress编辑2022年1月如果您想避免下载整个内核存储库来编译工具,那么在GitHub上有一个bpftool的https://github.com/libbpf/bpftool镜像。现在,bpftool也被打包在主要的发行版中。
https://stackoverflow.com/questions/51627658
复制相似问题