eBPF で sk_skb (BPF_PROG_TYPE_SK_SKB
) を使うとき、 parser と verdict どちらも attach する必要がある。一方だけを attach しても上手く動かない。
環境は ArchLinux で Kernel release は 5.7.10-arch1-1。
$ bpftool prog attach pinned /sys/fs/bpf/sk_skb stream_parser pinned /sys/fs/bpf/sk_skb_map $ bpftool prog attach pinned /sys/fs/bpf/sk_skb stream_verdict pinned /sys/fs/bpf/sk_skb_map
detatch 時も同様。
(補足: /sys/fs/bpf/sk_skb
に pin したプログラムには verdict しか書いていなかった。それでも parser としても attach しないと動かなかった)
bpftool がおかしいのかと思って自分で attach するコードを書いてみて気づいた。今回も bpftool はおかしくなかった。
2020/08/04 追記
どうやら stream_parser
はちゃんと書かないとダメらしい(そうじゃないと stream_verdict
が複数回呼ばれてしまう)。別々のファイルに書いてそれぞれ attach することにした。