目標:スタンドアロンを使用して、カーネル ツリーの外部で ebpf プログラムをビルドしlibbpf
、clang
問題:次の手順に従いました
1) ビルドlibbpf
git clone https://github.com/libbpf/libbpf.git
cd src
make
bpf_helpers.h
2)カーネル src からコピー/tools/testing/selftests/bpf/bpf_helpers.h
3) でコンパイル
clang -S -I. -O2 -Wall -Werror -emit-llvm -c mine_kern.c -o - | llc -march=bpf -filetype=obj -o mine_kern.o
bpf_helpers.h
しかし、その結果、コンテンツに関連する多くのエラーが発生しました。例えば
In file included from mine_kern.c:7:
./bpf_helpers.h:75:11: error: use of undeclared identifier
'BPF_FUNC_sock_ops_cb_flags_set'
(void *) BPF_FUNC_sock_ops_cb_flags_set;
^
mine_kern.c
#include <linux/bpf.h>
#include <linux/if_ether.h>
#include <linux/if_packet.h>
#include <linux/ip.h>
#include <linux/in.h>
#include "bpf_helpers.h"
SEC("socket")
int bpfrog1(struct __sk_buff *skb)
{
int proto = load_byte(skb, ETH_HLEN + offsetof(struct iphdr, protocol));
if (proto == IPPROTO_ICMP && skb->pkt_type == PACKET_OUTGOING)
return -1;
else
return 0;
}
char _license[] SEC("license") = "GPL";
質問:
プロジェクト ツリーは次のとおりです。
libbpf
|src
|libbpf.a
|libbpf.so
|...
libbpfebpf
|bpf_headers.h
|mine_kern.c
|mine_user.c
どうすればエラーを修正できますか? _user.c
修正後、コンパイルしgcc
て-L../libbpf/src
リンクするには十分libbpf.so
ですか?