# ───────────────────────────────────────────────────────── # Makefile — Compila o programa eBPF sockmap # # Comandos: # make → Compila tudo # make vmlinux → Gera vmlinux.h do kernel atual # make bpf → Compila o programa BPF # make clean → Limpa arquivos compilados # make docker-up → Sobe os containers Docker # make docker-down→ Para os containers # make load → Carrega o eBPF sockmap # make unload → Remove o eBPF sockmap # make status → Mostra status do sockmap # make benchmark → Roda benchmark de latência # ───────────────────────────────────────────────────────── # Compilador e flags CLANG ?= clang BPFTOOL ?= bpftool ARCH := $(shell uname -m | sed 's/x86_64/x86/' | sed 's/aarch64/arm64/') # Diretórios BPF_SRC := bpf BUILD_DIR := build LIBBPF_INC := /usr/include # Arquivos BPF_PROG := $(BPF_SRC)/sockmap.bpf.c BPF_OBJ := $(BUILD_DIR)/sockmap.bpf.o VMLINUX_H := $(BPF_SRC)/vmlinux.h # Flags de compilação BPF BPF_CFLAGS := -O2 -g \ -target bpf \ -D__TARGET_ARCH_$(ARCH) \ -I$(BPF_SRC) \ -I$(LIBBPF_INC) \ -Wall \ -Wno-unused-value \ -Wno-pointer-sign \ -Wno-compare-distinct-pointer-types \ -Wno-missing-declarations # ─── Alvos principais ─── .PHONY: all vmlinux bpf clean docker-up docker-down load unload status benchmark help all: vmlinux bpf @echo "" @echo "✅ Compilação concluída! Objeto BPF em: $(BPF_OBJ)" @echo "" @echo "Próximos passos:" @echo " 1. make docker-up → Subir os containers" @echo " 2. make load → Ativar o eBPF sockmap" @echo " 3. make benchmark → Testar a latência" # ─── Gerar vmlinux.h ─── vmlinux: $(VMLINUX_H) $(VMLINUX_H): @echo "🔧 Gerando vmlinux.h a partir do kernel $(shell uname -r)..." @mkdir -p $(BPF_SRC) $(BPFTOOL) btf dump file /sys/kernel/btf/vmlinux format c > $(VMLINUX_H) @echo "✅ vmlinux.h gerado com sucesso!" # ─── Compilar programa BPF ─── bpf: $(BPF_OBJ) $(BPF_OBJ): $(BPF_PROG) $(VMLINUX_H) @echo "🔧 Compilando programa eBPF..." @mkdir -p $(BUILD_DIR) $(CLANG) $(BPF_CFLAGS) -c $(BPF_PROG) -o $(BPF_OBJ) @echo "✅ Programa BPF compilado: $(BPF_OBJ)" @echo "" @echo "📋 Programas e mapas no objeto:" @$(BPFTOOL) prog show --bpffs 2>/dev/null || true @echo "" # ─── Docker ─── docker-up: @echo "🐳 Subindo containers Docker..." cd docker && docker compose up -d --build @echo "" @echo "✅ Containers rodando! Acesse http://localhost:8080" docker-down: @echo "🐳 Parando containers Docker..." cd docker && docker compose down -v @echo "✅ Containers parados." docker-logs: cd docker && docker compose logs -f # ─── eBPF Sockmap ─── load: @echo "⚡ Carregando eBPF sockmap..." sudo bash scripts/loader.sh load unload: @echo "⚡ Removendo eBPF sockmap..." sudo bash scripts/loader.sh unload status: @sudo bash scripts/loader.sh status # ─── Benchmark ─── benchmark: @echo "📊 Rodando benchmark de latência..." @echo " Acesse: http://localhost:8080/benchmark" @curl -s http://localhost:8080/benchmark | python3 -m json.tool 2>/dev/null || \ curl -s http://localhost:8080/benchmark @echo "" # ─── Limpeza ─── clean: rm -rf $(BUILD_DIR) rm -f $(VMLINUX_H) @echo "🧹 Limpeza concluída." # ─── Ajuda ─── help: @echo "eBPF Sockmap — Acelerador de comunicação entre containers Docker" @echo "" @echo "Comandos disponíveis:" @echo " make Compila o programa eBPF (vmlinux.h + .o)" @echo " make vmlinux Gera apenas o vmlinux.h" @echo " make bpf Compila apenas o programa BPF" @echo " make docker-up Sobe os containers (nginx + node + mysql + postgres)" @echo " make docker-down Para e remove os containers" @echo " make docker-logs Mostra logs dos containers" @echo " make load Carrega e ativa o eBPF sockmap" @echo " make unload Remove o eBPF sockmap" @echo " make status Mostra status e estatísticas" @echo " make benchmark Roda teste de latência" @echo " make clean Limpa arquivos compilados" @echo ""