問題タブ [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.
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 でテスト済み。
kernel - カーネル ツリーの外部で ebpf _kern.c をコンパイルし、スタンドアロンの libbpf を _user.c にリンクします。
目標:スタンドアロンを使用して、カーネル ツリーの外部で ebpf プログラムをビルドしlibbpf
、clang
問題:次の手順に従いました
1) ビルドlibbpf
bpf_helpers.h
2)カーネル src からコピー/tools/testing/selftests/bpf/bpf_helpers.h
3) でコンパイル
bpf_helpers.h
しかし、その結果、コンテンツに関連する多くのエラーが発生しました。例えば
mine_kern.c
質問:
プロジェクト ツリーは次のとおりです。
どうすればエラーを修正できますか? _user.c
修正後、コンパイルしgcc
て-L../libbpf/src
リンクするには十分libbpf.so
ですか?
bpf - BPF で XFRM 状態を取得する
bpf ヘルパー関数 bpf_skb_get_xfrm_state() は、トランスポート モードを使用する ipsec に対して、またはトンネル モードに対してのみ機能すると想定されていますか?
ESP パケットを受信したときに新しい SA/SP (トランスポート モード) をオンザフライで作成する可能性はありますが、対応する SPI に SA/SP が存在しません。 bpf プログラム?