forked from dariofad/river
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathMakefile
More file actions
72 lines (56 loc) · 2.18 KB
/
Copy pathMakefile
File metadata and controls
72 lines (56 loc) · 2.18 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
.phony: all build run generate vmlinux aslr_off redis start_redis stop_redis bench
EBPF_PROBE = probe
GO_MODULE = river
SIMULATOR_PATH := simulator
REDIS_PORT := 6379
ARCH:= $(shell go env GOARCH)
BPF_CFLAGS = -DDEBUG -O2 -Wall
BPF_CFLAGS_BENCH = -O2 -Wall
all: run
vmlinux:
mkdir -p $(SIMULATOR_PATH)/headers
bpftool btf dump file /sys/kernel/btf/vmlinux format c > $(SIMULATOR_PATH)/headers/vmlinux.h
generate: vmlinux
cd $(SIMULATOR_PATH); BPF2GO_CFLAGS="$(BPF_CFLAGS)" go generate
generate_bench: vmlinux
cd $(SIMULATOR_PATH); BPF2GO_CFLAGS="$(BPF_CFLAGS_BENCH)" go generate
pert_injector:
gcc -Wall -O2 -o $(SIMULATOR_PATH)/injector $(SIMULATOR_PATH)/injector.c -lbpf; \
sudo setcap cap_bpf,cap_perfmon+ep $(SIMULATOR_PATH)/injector
state_pert_injector:
gcc -Wall -O2 -o $(SIMULATOR_PATH)/state_injector $(SIMULATOR_PATH)/state_injector.c -lbpf; \
sudo setcap cap_bpf,cap_perfmon+ep $(SIMULATOR_PATH)/state_injector
build: generate pert_injector state_pert_injector
# with CGO_ENABLED=0 the build doesn't depend on libc
@CGO_ENABLED=0 GOARCH=$(ARCH) go build
build_bench: generate_bench pert_injector state_pert_injector
@CGO_ENABLED=0 GOARCH=$(ARCH) go build
redis:
docker create --name redis -p $(REDIS_PORT):$(REDIS_PORT) redis:latest
start_redis:
docker start redis
stop_redis:
docker stop redis
aslr_off:
echo 0 | sudo tee /proc/sys/kernel/randomize_va_space
_run: | aslr_off start_redis
sudo su -c 'rm -rf /sys/fs/bpf/inner*'
sudo su -c 'rm -rf /sys/fs/bpf/pertbuf*'
sudo su -c 'rm -rf /sys/fs/bpf/state_pertbuf*'
@if docker ps -a --filter "name=$(CONTAINER_NAME)" --format "{{.ID}}" | grep -q .; then \
echo "-> container $(CONTAINER_NAME) is already running or exists. Skipping creation."; \
else \
echo "-> creating and running container $(CONTAINER_NAME)..."; \
docker run -d --name $(CONTAINER_NAME) $(IMAGE_NAME); \
sleep 3; \
fi
_run_debug: | build _run
_run_bench: | build_bench _run
run: _run_debug
@sudo ./$(GO_MODULE)
bench: _run_bench
sudo sysctl -w kernel.bpf_stats_enabled=1
@sudo ./$(GO_MODULE) -b
clean:
@rm -rf $(SIMULATOR_PATH)/headers
@rm -rf $(GO_MODULE) $(SIMULATOR_PATH)/$(EBPF_PROBE)_bpf* $(SIMULATOR_PATH)/injector $(SIMULATOR_PATH)/state_injector