簡體   English   中英

如何列出所有已加載到內核的bpf程序? (例如tc-bpf)

[英]How to list all bpf program which is loaded into kernel ? (e.g. tc-bpf)

我知道bpf程序可以通過不同的方式(tc / kprobe / socket)加載到內核中。

我想知道是否有接口或某種東西可以通過它獲取我加載的所有bpf程序? 如果沒有,那么如果我留下一些可能會更改網絡數據的bpf程序,是否有危險?

另一個小問題,如何卸載tc-bpf程序,我真的必須每次都刪除qdisc嗎?

為了列出您系統上的所有BPF程序,並且從Linux內核4.13開始,您可以使用bpf()系統調用及其BPF_PROG_GET_NEXT_ID命令來獲取第一個程序的ID,然后再次BPF_PROG_GET_NEXT_ID進行該調用以獲取跟隨ID,直到獲得系統上已加載的所有BPF程序的ID列表。 然后,您可以使用同一系統調用及其BPF_PROG_GET_FD_BY_ID命令來檢索每個程序的文件描述符,並第三次使用BPF_OBJ_GET_INFO_BY_FD來獲取給定程序的信息(例如程序類型)。 我通常會將您重定向到bpf(2)手冊頁 ,但是現在它已經嚴重過時,並且沒有在我的系統上描述這些命令。

實際上,所有這些都已經實現。 您應該搜索bpftool程序:運行sudo bpftool prog將列出系統上的所有程序。

bpftool源在Linux內核樹中 ,可以輕松進行編譯。 它是為Fedora 28打包的,但在撰寫本文時,還沒有為Debian / Ubuntu或其他發行版打包。 (您也可以從此頁面上獲得帶有靜態鏈接的二進制文件的Debian .deb軟件包。它還提供了一個指南,其中包含有關構建bpftool的詳細說明。免責聲明:我在該公司工作。)

至於刪除附加為tc過濾器的程序,只需刪除過濾器,不必刪除整個qdisc,如下所示:

tc filter del dev eth0 ingress

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM