問題タブ [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 - BPF テール コールが呼び出されない
次のコードでは、BPF プログラムtail_prog
は末尾から呼び出されませんmain_prog
。
プリントインのみが印刷されていることmain_prog
がわかります。
Cilium の eBPF Go パッケージを使用して BPF プログラムをロードしています。プログラムとマップをロードするコードは次のとおりです。
thisによると、ジャンプテーブルはユーザー空間から初期化されています。これは、上記の最後の行が行うことになっていると思います。ただし、その行があるかどうかに違いはありません。
go - xdpoffload のアタッチに失敗しました: 引数が無効です
XDP オフロード モードで BPF プログラムをアタッチしようとすると、Invalid argument
. コードまたは を使用してアタッチすると、同じエラーが発生しますbpftool
。netlinkを使用してアタッチする方法は次のとおりです。
そして使用からbpftool
:
4
に渡されるドライバーモードでプログラムをロードしても問題はありませんLinkSetXdpFdWithFlags
。
私の NIC、Mellanox MT28800 ファミリ [ConnectX-5 Ex] は、ハードウェア オフロードをサポートする必要があります。
メインの XDP プログラムは、2 つの異なるテール プログラムを呼び出します。私は使用しますBPF_MAP_TYPE_RINGBUF, BPF_MAP_TYPE_PROG_ARRAY, and BPF_MAP_TYPE_ARRAY
。
linux - libxdp-devel をインストールできません
CentOS-8 に libxdp-devel パッケージをインストールしようとしていますが、「エラー: 一致が見つかりません: libxdp-devel」というエラー メッセージが引き続き表示されます。
また、/etc/yum.repos/CentOS-Linux-Devel.repo および /etc/yum.repos/CentOS-Linux-PowerTools.repo のファイルを変更して baseurl を許可し、また、enabled 変数を enabled= から変更しました。 0 ~有効 = 1。
それでも libxdp-devel をインストールできません。誰でも助けてください!
c - リング バッファーからの読み取り時に削除された BPF テール プログラム
テール プログラムでリング バッファーに書き込み、ユーザー空間からリング バッファーを読み取ると、テール プログラムが最終的に削除されることがわかりました。tail プログラムは に表示されなくなりましたbpftool prog
。bpftool map dump name jump_table
それを言うFound 0 elements
; 元々、tail プログラムという 1 つの要素がありました。
この BPF プログラムはmain_prog
、テール プログラムの呼び出しで構成されます。tail プログラムは0
、リング バッファーに書き込みます。
この Go プログラムは、プログラムとマップをロードし、リング バッファーから読み取ります。
インターフェイスにトラフィックを送信すると、問題が発生します。reader.Read()
は決してエラーを返さず、返されたRecord
オブジェクトには0
. ジャンプ テーブルが空であるため、テール コールが失敗bpf_printk
し、カーネル ログに出力が表示されます。
以下のコードをコメントアウトしてA
、 のような無限待機に置き換えれば、select {}
問題は発生しません。
参考までに、同等の C プログラムは問題なく動作します。私は libbpf 0.7 を使用しています: