問題タブ [ebpf]

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 に答える
672 参照

python - eBPF: getaddrinfo の結果を読み取る

BPF Compiler Collection (bcc) のgethostlatency.pyツールと同様に、 への関数呼び出しをトレースしたいと考えていますgetaddrinfo。さらに、返された値 (IP アドレス、アドレス ファミリ) を収集したい

ただし、正しい結果を返すソリューションで BPF 検証を通過することはできないようです。

getaddrinfo 関数:

結果は に返されstruct addrinfo **resます。

gethostlatency.pyに直接基づいたこのコード サンプルは、少なくともエラーを返しませんが、間違った結果を返します。

間違っている可能性があること:

  • BCC ではアクセスできないように見えるため、addrinfo型定義をコピーしました。netdb.h
  • 結果を収集する方法:currres.update(&pid, &res);
  • 私が結果から読んだ方法:bpf_probe_read(&data.af, sizeof(data.af), &resx->ai_family);

このサンプルでは、​​プログラムはアドレス ファミリ(AF)を読み取ろうとしています。したがって、期待される値は 2 (AF_INET) または 10 (AF_INET6) のいずれかになり、代わりに 32xxx のような数値が表示されます。

出力をトリガーするには、DNS 要求を行う必要があります。

上記のこのプログラム バージョンでは、1 つの警告も表示されます。

警告を解決すると、BPF ベリファイアでより不可解なエラーが発生します。

カーネル バージョン 4.18 を使用して x64 でテスト済み。

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

kernel - カーネル ツリーの外部で ebpf _kern.c をコンパイルし、スタンドアロンの libbpf を _user.c にリンクします。

目標:スタンドアロンを使用して、カーネル ツリーの外部で ebpf プログラムをビルドしlibbpfclang

問題:次の手順に従いました

1) ビルドlibbpf

bpf_helpers.h2)カーネル src からコピー/tools/testing/selftests/bpf/bpf_helpers.h

3) でコンパイル

bpf_helpers.hしかし、その結果、コンテンツに関連する多くのエラーが発生しました。例えば

mine_kern.c

質問:

プロジェクト ツリーは次のとおりです。

どうすればエラーを修正できますか? _user.c修正後、コンパイルしgcc-L../libbpf/srcリンクするには十分libbpf.soですか?

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

bpf - BPF で XFRM 状態を取得する

bpf ヘルパー関数 bpf_skb_get_xfrm_state() は、トランスポート モードを使用する ipsec に対して、またはトンネル モードに対してのみ機能すると想定されていますか?

ESP パケットを受信したときに新しい SA/SP (トランスポート モード) をオンザフライで作成する可能性はありますが、対応する SPI に SA/SP が存在しません。 bpf プログラム?