eBPF パケットはどこに送信されますか?

eBPF パケットはどこに送信されますか?

2 つの名前空間間で 'ping' を設定する eBPF を使用したテスト ケースがあります。私の eBPF プログラムは、フローの最初のパケットをインターセプトし、それをユーザー スペースに送信します。そこで、そのパケットはマップを作成するために使用されます。これにより、フローの後続のパケットは、受信側の eth からカーネルに直接渡され、そこで ping 応答が生成されます。その後、最初のパケットは eBPF 送信キューに送られ、カーネルに送信されて ping 応答が生成されると予想されますが、実際には、このパケットの痕跡はそれ以上表示されません。インターフェイスの 'tcpdump' でも 'pwru' でも表示されません。何が間違っているのか、誰か教えてもらえますか?

私のテストケースはこちらhttps://github.com/tjcw/bpf-examples/tree/tjcw-send-first-packet-debug-20221210.1121/AF_XDP-フィルター; 実行スクリプトはここにあります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-フィルター( udp-sender-count.c および udp-receiver.c ファイルを参照し、 udp-namespace-direct-with-dummy ディレクトリ内のスクリプトとログ ファイルを実行してください)。このテスト ケースでは、最初のパケットがユーザー スペースにリダイレクトされてから失われ、2 番目のパケットが udp リスナーに到達することが示されています。

答え1

関連情報