Куда направляется мой пакет eBPF?

Куда направляется мой пакет eBPF?

У меня есть тестовый случай с использованием eBPF, который устанавливает «ping» между двумя пространствами имен. Моя программа eBPF перехватывает первый пакет потока, отправляет его в пространство пользователя, где он используется для построения карты, так что последующие пакеты потока проходят напрямую от принимающего eth к ядру, где генерируется ответ ping. Затем первый пакет подается в очередь передачи eBPF, где я ожидаю, что он пойдет в ядро ​​и сгенерирует ответ ping, но на самом деле я не вижу никаких дальнейших следов этого пакета; ни в «tcpdump» на интерфейсах, ни в «pwru». Может кто-нибудь сказать мне, что я делаю неправильно?

Мой тестовый пример здесьhttps://github.com/tjcw/bpf-examples/tree/tjcw-send-first-packet-debug-20221210.1121/AF_XDP-filter; скрипт запуска для него здесьhttps://github.com/tjcw/bpf-examples/blob/tjcw-send-first-packet-debug-20221210.1121/AF_XDP-filter/ping-namespace-direct-with-dummy/run.sh.

Журнал запуска (включая отформатированные tcpdumps) находится здесьhttps://github.com/tjcw/bpf-examples/blob/tjcw-send-first-packet-debug-20221210.1121/AF_XDP-filter/ping-namespace-direct-with-dummy/runlog.txtи журнал pwruотсюдаhttps://github.com/tjcw/bpf-examples/blob/tjcw-send-first-packet-debug-20221210.1121/AF_XDP-filter/ping-namespace-direct-with-dummy/pwru.txt.

Я работаю под управлением полностью обновленной Ubuntu 22.04.

Извините, в журнале запуска выше нет вывода tcpdump. Здесьhttps://github.com/tjcw/bpf-examples/blob/tjcw-send-first-packet-debug-20221210.1121/AF_XDP-filter/ping-namespace-direct-with-dummy/run2.txtэто то, что я намеревался опубликовать, с помощью tcpdumps.

Я добавил тест UDP в каталогhttps://github.com/tjcw/bpf-examples/tree/tjcw-send-first-packet-debug-20221212.1400/AF_XDP-filter( см. файлы udp-sender-count.c и udp-receiver.c , а также запустите скрипты и файлы журнала в каталоге udp-namespace-direct-with-dummy ). Этот тестовый случай показывает, что первый пакет перенаправляется в пространство пользователя и затем теряется, а второй пакет доходит до прослушивателя udp.

решение1

Моя ошибка была в том, что я не правильно настраивал буфер передачи. С кодом вhttps://github.com/tjcw/bpf-examples/blob/tjcw-send-first-packet-debug-20221212.1612/AF_XDP-filter/af_xdp_user.cэто исправлено, и журнал выполненияhttps://github.com/tjcw/bpf-examples/blob/tjcw-send-first-packet-debug-20221212.1612/AF_XDP-filter/ping-namespace-direct-with-dummy/runlog2.txtи pwruжурналhttps://github.com/tjcw/bpf-examples/blob/tjcw-send-first-packet-debug-20221212.1612/AF_XDP-filter/ping-namespace-direct-with-dummy/pwru.log.2теперь показывают, что пакеты обрабатываются правильно.

Связанный контент