Wohin geht mein eBPF-Paket?

Wohin geht mein eBPF-Paket?

Ich habe einen Testfall mit eBPF, der einen „Ping“ zwischen zwei Namespaces einrichtet. Mein eBPF-Programm fängt das erste Paket eines Datenflusses ab, sendet es in den Benutzerbereich, wo es zum Erstellen einer Karte verwendet wird, sodass nachfolgende Pakete des Datenflusses direkt vom empfangenden ETH an den Kernel weitergeleitet werden, wo die Ping-Antwort generiert wird. Das erste Paket wird dann in eine eBPF-Übertragungswarteschlange eingespeist, wo ich erwarte, dass es an den Kernel geht und eine Ping-Antwort generiert, aber tatsächlich sehe ich keine weitere Spur dieses Pakets; nicht in „tcpdump“ auf den Schnittstellen und nicht in „pwru“. Kann mir jemand sagen, was ich falsch mache?

Mein Testfall ist hierhttps://github.com/tjcw/bpf-examples/tree/tjcw-send-first-packet-debug-20221210.1121/AF_XDP-filter; das Ausführungsskript dafür finden Sie hierhttps://github.com/tjcw/bpf-examples/blob/tjcw-send-first-packet-debug-20221210.1121/AF_XDP-filter/ping-namespace-direct-with-dummy/run.sh.

Das Protokoll des Laufs (einschließlich formatierter TCPdumps) finden Sie hierhttps://github.com/tjcw/bpf-examples/blob/tjcw-send-first-packet-debug-20221210.1121/AF_XDP-filter/ping-namespace-direct-with-dummy/runlog.txtund das Protokoll von pwruist hierhttps://github.com/tjcw/bpf-examples/blob/tjcw-send-first-packet-debug-20221210.1121/AF_XDP-filter/ping-namespace-direct-with-dummy/pwru.txt.

Ich verwende Ubuntu 22.04 in der komplett aktualisierten Version.

Entschuldigung, das obige Protokoll enthält keine TCPdump-Ausgabe. Hierhttps://github.com/tjcw/bpf-examples/blob/tjcw-send-first-packet-debug-20221210.1121/AF_XDP-filter/ping-namespace-direct-with-dummy/run2.txtist das, was ich mit tcpdumps posten wollte.

Ich habe einen UDP-Test im Verzeichnis hinzugefügthttps://github.com/tjcw/bpf-examples/tree/tjcw-send-first-packet-debug-20221212.1400/AF_XDP-filter(siehe Dateien udp-sender-count.c und udp-receiver.c, und führen Sie Skripte und Protokolldateien im Verzeichnis udp-namespace-direct-with-dummy aus.) Dieser Testfall zeigt, dass das erste Paket in den Benutzerbereich umgeleitet wird und dann verloren geht, und dass das zweite Paket zum UDP-Listener durchkommt.

Antwort1

verwandte Informationen