# 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: ```bash sudo apt install linux-tools-$(uname -r) linux-tools-generic meson setup build --prefix=/usr meson compile -C build ``` ## Generazione manuale ```bash 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/submit` stabile, `BPF_MAP_TYPE_LRU_HASH` stabile - 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 `` — 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: ```bash zgrep CONFIG_DEBUG_INFO_BTF /proc/config.gz 2>/dev/null || \ grep CONFIG_DEBUG_INFO_BTF /boot/config-$(uname -r) ```