2.2 KiB
vmlinux.h — BTF kernel headers
Questo file NON è incluso nel repository perché dipende dalla versione esatta del kernel in esecuzione sulla macchina target.
Generazione automatica (preferita)
Il meson.build genera vmlinux.h automaticamente durante il build
se bpftool è installato:
sudo apt install linux-tools-$(uname -r) linux-tools-generic
meson setup build --prefix=/usr
meson compile -C build
Generazione manuale
bpftool btf dump file /sys/kernel/btf/vmlinux format c > daemon/ebpf/vmlinux.h
Versione pre-generata
In alternativa, usa il vmlinux.h fornito da libbpf-bootstrap:
https://github.com/libbpf/libbpf-bootstrap/blob/master/vmlinux/vmlinux.h
Copia il file corretto per la tua architettura (x86_64, arm64) in
questa directory prima di eseguire meson compile.
Compatibilità kernel
- Kernel >= 5.2: ring buffer disponibile (
BPF_MAP_TYPE_RINGBUF) - Kernel >= 5.8:
bpf_ringbuf_reserve/submitstabile,BPF_MAP_TYPE_LRU_HASHstabile - CONFIG_DEBUG_INFO_BTF=y richiesto (standard su tutte le distro moderne)
Probe attivi (v2)
bsc_ebpf.c aggancia tre punti distinti del kernel per massimizzare la
coverage di connessioni rilevate:
| Sezione SEC() | Cosa cattura |
|---|---|
tracepoint/sock/inet_sock_set_state |
transizioni TCP a ESTABLISHED (active+passive) |
kprobe/tcp_v4_connect, kprobe/tcp_v6_connect |
ogni connect() TCP, anche falliti |
kprobe/udp_sendmsg, kprobe/udpv6_sendmsg |
UDP sendto()/sendmsg() con destinazione esplicita |
La deduplicazione avviene nel kernel tramite una BPF_MAP_TYPE_LRU_HASH
con chiave <pid, dst_ip, dst_port> — senza dedup, un client QUIC
riempirebbe la ring buffer in millisecondi.
Se il caricamento di un singolo kprobe fallisce (simbolo non presente su kernel custom o stripped), il loader userspace prosegue comunque con i probe che ha attaccato con successo — meglio coverage parziale che niente.
Verificare con:
zgrep CONFIG_DEBUG_INFO_BTF /proc/config.gz 2>/dev/null || \
grep CONFIG_DEBUG_INFO_BTF /boot/config-$(uname -r)