diff options
author | Alexei Starovoitov <ast@plumgrid.com> | 2014-12-02 00:06:38 +0100 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2014-12-06 06:47:33 +0100 |
commit | a80857822b0c2ed608c93504bd3687b78f20c619 (patch) | |
tree | 8fb218a13a13a16d5083c7b831398f967137f152 /samples/bpf/Makefile | |
parent | samples: bpf: elf_bpf file loader (diff) | |
download | linux-a80857822b0c2ed608c93504bd3687b78f20c619.tar.xz linux-a80857822b0c2ed608c93504bd3687b78f20c619.zip |
samples: bpf: trivial eBPF program in C
this example does the same task as previous socket example
in assembler, but this one does it in C.
eBPF program in kernel does:
/* assume that packet is IPv4, load one byte of IP->proto */
int index = load_byte(skb, ETH_HLEN + offsetof(struct iphdr, protocol));
long *value;
value = bpf_map_lookup_elem(&my_map, &index);
if (value)
__sync_fetch_and_add(value, 1);
Corresponding user space reads map[tcp], map[udp], map[icmp]
and prints protocol stats every second
Signed-off-by: Alexei Starovoitov <ast@plumgrid.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'samples/bpf/Makefile')
-rw-r--r-- | samples/bpf/Makefile | 14 |
1 files changed, 14 insertions, 0 deletions
diff --git a/samples/bpf/Makefile b/samples/bpf/Makefile index f46d3492d032..770d145186c3 100644 --- a/samples/bpf/Makefile +++ b/samples/bpf/Makefile @@ -4,12 +4,26 @@ obj- := dummy.o # List of programs to build hostprogs-y := test_verifier test_maps hostprogs-y += sock_example +hostprogs-y += sockex1 test_verifier-objs := test_verifier.o libbpf.o test_maps-objs := test_maps.o libbpf.o sock_example-objs := sock_example.o libbpf.o +sockex1-objs := bpf_load.o libbpf.o sockex1_user.o # Tell kbuild to always build the programs always := $(hostprogs-y) +always += sockex1_kern.o HOSTCFLAGS += -I$(objtree)/usr/include + +HOSTCFLAGS_bpf_load.o += -I$(objtree)/usr/include -Wno-unused-variable +HOSTLOADLIBES_sockex1 += -lelf + +# point this to your LLVM backend with bpf support +LLC=$(srctree)/tools/bpf/llvm/bld/Debug+Asserts/bin/llc + +%.o: %.c + clang $(NOSTDINC_FLAGS) $(LINUXINCLUDE) $(EXTRA_CFLAGS) \ + -D__KERNEL__ -Wno-unused-value -Wno-pointer-sign \ + -O2 -emit-llvm -c $< -o -| $(LLC) -march=bpf -filetype=obj -o $@ |