問題タブ [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.

0 投票する
1 に答える
130 参照

gcc - ip コマンドを使用して XDP プログラムをインストールするとエラーが発生する

ネットワークドライバーに XDP プログラムをインストールしようとしていますが、セクション 4 を指しているエントリ 0 に、{map,call} 関連の relo データが含まれていない ELFというエラーが表示されます。コンパイラのバグ?! プログラム/マップのフェッチ中にエラーが発生しました!

私が実行しようとしているコード:

コンパイルコマンド: clang -O2 -g -Wall -target bpf -c filter.c -o filter.oでOK!

インストールに使用するコマンド: ip link set enp0s3 xdpgeneric obj filter.oその後、上記のエラーが発生します。

このメッセージが何を意味するのかわかりません。何か見逃していましたか?

0 投票する
1 に答える
130 参照

linux-kernel - bpf_xdp_adjust_meta() がエラーコード -13 を返します (許可が拒否されました)

問題:

bpf_xdp_adjust_meta(ctx, -delta);は、デルタ > 32 の場合にエラー コード -13 (許可が拒否されました) を返して
ます。 それで、私は何かを誤解しましたか、それともメタデータに 256 バイトを使用するにはどうすればよいですか?

プログラム:

設定:

カーネル:
uname -rv
5.8.0-63-generic #71-Ubuntu SMP Tue Jul 13 15:59:12 UTC 2021
デバイス: xdp-tutorial/testenv の
veth 。ハードウェア ドライバーがネイティブの xdp モードをサポートしていないためです。を搭載しました:

  • ip link set dev test xdp obj xdp_pass_kern.o sec xdpプログラムがxdpネイティブモードでアタッチされていることを確認しました。
  • bpf_set_link_xdp_fd()ユーザー空間プログラムから

また、さまざまなコンパイル環境を使用しようとしました(デフォルトでMakefile):

  1. Linux/サンプル/bpf
  2. xdp-チュートリアル/basic01

バックグラウンド:

フィールドを介してデータを渡してxdp_md->data_meta、テールコールされた eBPF プログラムがデータにアクセスできるようにしようとしています。data_meta ポインターを調整するために、eBPF ヘルパー関数を呼び出しますbpf_xdp_adjust_meta(ctx, -delta);。ここで、delta はメタデータを保持する構造体のサイズです。これは、デルタが <= 32 である限り、正常に機能しています。これよりも大きい場合、ヘルパー関数は -13 (許可が拒否されました) を返します。そのため、メタデータのヘッドルームは、 BPF および XDP リファレンス ガイドに記載されている 256 バイトではなく、私の場合は 32 バイトであると推測しています。

0 投票する
1 に答える
227 参照

c - エラーをデバッグするために bpf カーネル検証ツールの分析を読んで理解するにはどうすればよいですか?

XDP eBPF は初めてです。UDP パケットをドロップすることを目的とした BPF プログラムがありますが、カーネル検証ツールによって拒否されるため、ロードできません。以下はコードです:

プログラムをロードすると、次のように表示されます。

UDP チェック ステートメント if にエラーが表示されることがわかりました(ip->protocol == IPPROTO_UDP)。これは、チェックにコメントを付けると、エラーなしで読み込まれるためです。

そのため、カーネル検証ツールが (前述のように) UDP チェック ステートメントを拒否する理由と、それを解決してエラーを解決するために何ができるかを知る必要があります。

ありがとう。

0 投票する
0 に答える
217 参照

kernel - 2 つのカーネル空間 BPF プログラム間で BPF マップを共有する方法は?

私の問題を提示する前に。以前に質問されたさまざまな ebpf プログラム タイプ間のマップ共有を読みまし たが、私の質問には答えていないようです。

今、私がやっていることは、XDP 用と TC (No Userspace プログラム) 用の 2 つの BPF プログラムがあることです。TC プログラムでマップを作成し、グローバル名前空間に固定しました

ここで、XDP コードで同じマップにアクセスしたいと考えています。ドキュメントには、ピン留めされたオブジェクトは を使用して取得できると書かれていますがBPF_OBJ_GET、私が見つけたのはこれのユーザー空間バージョンだけです。

では、どうすれば 2 つのカーネル空間 BPF プログラムがマップを共有できるのでしょうか? BPF_OBJ_GETピン留めされたオブジェクト (私の場合はマップ) を取得できる場合は、どうすればよいでしょうか? または、それを行う他の方法はありますか?

私は XDP/BPF または tc/BPF を初めて使用するので、他のカーネル空間の BPF プログラムで固定されたオブジェクトにアクセスする方法のコード例は非常に高く評価されています。

ありがとう。