Как вывести список всех программ bpf, загруженных в ядро? (например, tc-bpf)

Я знаю, что программу bpf можно загрузить в ядро ​​разными способами, tc/kprobe/socket...

И я хочу знать, есть ли интерфейс или что-то вроде того, через который я могу получить всю загруженную мной программу bpf? Если нет, не опасно ли, если я оставлю какую-то программу bpf в покое, которая может изменить мои сетевые данные?

Еще маленький вопросик, как выгрузить программу tc-bpf, неужели каждый раз надо удалять qdisc?


person Pilo    schedule 01.08.2018    source источник
comment
Добро пожаловать в Stack Overflow! Такие вопросы являются слишком общими. Попробуйте задать минимум конкретных вопросов о проблемах программирования, разбив вашу проблему на более мелкие вопросы.   -  person sɐunıɔןɐqɐp    schedule 01.08.2018


Ответы (1)


Чтобы получить список всех программ BPF в вашей системе, начиная с ядра Linux 4.13, вы можете использовать системный вызов bpf() с его командой BPF_PROG_GET_NEXT_ID, чтобы получить идентификатор первой программы, а затем повторно вызывать ее снова, чтобы получить следующие идентификаторы. , пока у вас не будет списка идентификаторов всех программ BPF, загруженных в вашу систему. Затем вы можете использовать тот же системный вызов с его командой 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
person Qeole    schedule 01.08.2018