January 20, 2019

XDP のプログラムをビルドする方法

前置き

社内向けにコントロールプレーンが Go で、データプレーンが XDP な Network Function を作る方法をまとめていましたが、特に社内に閉じている必要のない情報なので、こちらに書いていきます。

Go で XDP/eBPF というと gobpfIO Visor 公式ということもあって有名ですが、いろいろあって使っていません。

使わなくなった理由は後で。。。

gobpf を使わない場合、自分で XDP のプログラムをビルドする必要があります。

そこで、とりあえずビルドする方法についてまとめておきます。

XDP のプログラムをビルドする方法

XDP のプログラムをビルドするときに参考になるのは Linux の samples/bpf や Facebook の Katran で、どちらもカーネルのソースツリー内でビルドする方法を取っています。

説明するのが面倒なので、 XDP のプログラムをビルドするためのテンプレートとして ebpf-template を作りました。

git clone した後に、 ./setup.sh して ./build.sh が通ったら XDP のプログラムを開発する環境がすでに整っていて、通らなかったら、何か足りないのでパッケージを入れるなりして解決してください。

Debian の場合 gcc clang llvm make linux-headers-amd64 bison flex libelf-dev bc libssl-dev 辺りは必要です。

このテンプレートでは tools/testing/selftests/bpf 配下の bpf_helpers.h などを使うことを前提にしています。

そのため、 #include "bpf_helpers.h" をして、 bpf_map_lookup_elem などの関数を使えて、 samples/bpf 配下のプログラムと同じ雰囲気で開発することができます。

また、ビルド環境は Docker コンテナにもしてあるので、こちらも参考にしてください。

higebu/ebpf-build

© Yuya Kusakabe 2011-2022

Powered by Hugo & Kiss.