さまざまな種類のBPFプログラムを調べていたところ、プログラムの種類ごとにコンテキストが異なる方法で渡されていることに気付きました。
例:
program type
BPF_PROG_TYPE_SOCK_OPSの場合、 type のオブジェクトstruct bpf_sock_ops_kernが渡されます。ただし、このタイプの BPF プログラムは への参照を取りますstruct bpf_sock_ops。なぜこのように行われるのですか? からbpf_sock_ops_kernへの「翻訳」はどこにありbpf_sock_opsますか?プログラム type
BPF_PROG_TYPE_CGROUP_SKBの場合、 type のオブジェクトstruct sk_buffが渡されますが (たとえば in__cgroup_bpf_run_filter_skb)、BPF プログラムは最小化されたバージョンstruct __sk_buff.
そこで、struct bpf_verifier_ops関数 callbacksを調べましたが、BPF ベリファイアによって呼び出されるため、BPF 命令のオフセットのみを調整しているようです。
誰かが BPF コンテキストがどのように定義されているかを明らかにできれば幸いです。ありがとう。