1

私はこのチュートリアルに基づいています: https://github.com/xdp-project/xdp-tutorial/tree/master/advanced03-AF_XDP

Queue-ID 0ユーザー空間でソケットを作成します。私のカーネル af-xdp プログラムでは、UDP パケットをフィルタリングし、xskmap.

明らかにユーザー空間プログラムにパケットを受信させたいので、カーネル プログラム内のパケットを index にリダイレクトします0

int index = 0;
if (bpf_map_lookup_elem(&xsks_map, &index)) {
    return bpf_redirect_map(&xsks_map, index, 0);
} else {
    bpf_printk("Didn't find connected socket for index %d!\n", index);
}

エラーメッセージは表示されませんが、ユーザー空間でもパケットを受信しません!Didn't find connected socket for index 0!sudo cat /sys/kernel/debug/tracing/trace_pipe

プログラムを実行し続け、同時に次のような ethtool-rule を追加するとします。

sudo ethtool -N <eth> flow-type udp4 dst-ip <ip> action 0

ユーザー空間プログラムが突然パケットの受信を開始し、エラー メッセージが消えます。

カーネルプログラムはそのインターフェースに送信されたすべてのパケットを受信すると思っていましたが、どういうわけかそうではありません。私は何を間違えましたか?

4

1 に答える 1