問題タブ [xdp-bpf]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c - AF_XDP: `SO_XDP` でサポートされていない `SO_TIMESTAMP` の設定: プロトコルが利用できません
ソケットの設定SO_TIMESTAMP
がサポートされていないのはなぜですか? AF_XDP
私のドライバーのユーザー マニュアル ( mlnx 5.0
) には、次のように記載されています。
着信パケットは、PCI バッファの輻輳に応じて、PCI に配信される前にタイムスタンプが付けられます。
私の知る限り、before distributed on the PCI
Linuxカーネルが(まだ)関与していないことを意味します-そうですか?
次のように設定してみました。
そして得る:
設定に失敗しました
SO_TIMESTAMP
: プロトコルが利用できません
SO_XDP
from xsk.c
( https://github.com/libbpf/libbpf/blob/master/src/xsk.c )の定義をコピーしました:
なぜサポートされていないのかわかりません...
c - AF_XDP: すべてのパケットがリダイレクトされているにもかかわらず、キュー ID 0 のソケットのパケットがありません
私はこのチュートリアルに基づいています: https://github.com/xdp-project/xdp-tutorial/tree/master/advanced03-AF_XDP
Queue-ID 0
ユーザー空間でソケットを作成します。私のカーネル af-xdp プログラムでは、UDP パケットをフィルタリングし、xskmap
.
明らかにユーザー空間プログラムにパケットを受信させたいので、カーネル プログラム内のパケットを index にリダイレクトします0
。
エラーメッセージは表示されませんが、ユーザー空間でもパケットを受信しません!Didn't find connected socket for index 0!
sudo cat /sys/kernel/debug/tracing/trace_pipe
プログラムを実行し続け、同時に次のような ethtool-rule を追加するとします。
ユーザー空間プログラムが突然パケットの受信を開始し、エラー メッセージが消えます。
カーネルプログラムはそのインターフェースに送信されたすべてのパケットを受信すると思っていましたが、どういうわけかそうではありません。私は何を間違えましたか?
c - AF-XDP: 共有 Umem ソケットの実装
XDP_SHARED_UMEM を実装したい: https://www.kernel.org/doc/html/latest/networking/af_xdp.html#xdp-shared-umem-bind-flag
libbpf
ライブラリ関数( https://github.com/libbpf/libbpf/blob/master/src/xsk.cxsk_socket__create
)が値をチェックします。1 より大きい場合、a のオプションが設定されます。xsk_umem->refcount
XDP_SHARED_UMEM
struct sockaddr_xdp
したがって、私が正しく理解している限り、umem を共有したいソケットの元の umem 構造体を「ただ」渡す必要があり、残りは によって行われlibbpf
ます。
私が試みた方法は、最初のプロセスがそのumem
構造体を共有メモリ領域にコピーし、そこから 2 番目のプロセスがロードできるようにすることでした。しかし、struct xsk_umem
で定義されxsk.c
ているため、ユーザーから隠されているため、次のようなことはできません。
memcpy(shdm_ptr, umem, sizeof(struct xsk_umem))
誰かが共有 umem 機能をどのように使用することを彼らが期待しているのかわかりませんか?