107 lines
3.8 KiB
Meson
107 lines
3.8 KiB
Meson
nfqdep = dependency('libnetfilter_queue', required: false)
|
|
ssl = dependency('openssl', required: true) # MD5 per hash processo
|
|
jsondep = dependency('nlohmann_json', required: true)
|
|
threads = dependency('threads', required: true)
|
|
|
|
# ── libbpf (opzionale) ────────────────────────────────────────────────────────
|
|
# Se libbpf >= 0.7 è presente, compila con eBPF support.
|
|
# Se assente, EBPFMon.cpp compila in modalità stub no-op (BSC_HAS_EBPF non def).
|
|
libbpfdep = dependency('libbpf', required: false, version: '>= 0.7')
|
|
has_ebpf = libbpfdep.found()
|
|
ebpf_args = has_ebpf ? ['-DBSC_HAS_EBPF=1'] : []
|
|
|
|
if has_ebpf
|
|
message('eBPF support: ABILITATO (libbpf trovato)')
|
|
else
|
|
message('eBPF support: DISABILITATO (libbpf non trovato — installare libbpf-dev)')
|
|
endif
|
|
|
|
# ── Compilazione programma BPF kernel-side ────────────────────────────────────
|
|
# Richiede: clang, kernel headers con BTF (linux-headers-$(uname -r))
|
|
# Output: bsc_ebpf.o → installato in /usr/lib/bastionguard-sc/
|
|
if has_ebpf
|
|
clang = find_program('clang', required: false)
|
|
bpftool = find_program('bpftool', required: false)
|
|
|
|
if clang.found()
|
|
# Genera vmlinux.h dal BTF del kernel in esecuzione (richiede bpftool)
|
|
# Se bpftool non è disponibile usiamo il vmlinux.h precompilato nel sorgente.
|
|
vmlinux_h_dir = meson.current_source_dir() / 'ebpf'
|
|
|
|
if bpftool.found()
|
|
vmlinux_h = custom_target('vmlinux_h',
|
|
output : 'vmlinux.h',
|
|
command : [
|
|
'sh', '-c',
|
|
bpftool.full_path() + ' btf dump file /sys/kernel/btf/vmlinux format c > @OUTPUT@',
|
|
],
|
|
build_by_default : true,
|
|
)
|
|
vmlinux_dep = [vmlinux_h]
|
|
# Directory del build dove meson deposita vmlinux.h generato
|
|
vmlinux_inc = meson.current_build_dir()
|
|
else
|
|
# Fallback: il repo deve contenere un vmlinux.h precompilato in ebpf/
|
|
warning('bpftool non trovato — uso vmlinux.h precompilato in ebpf/')
|
|
vmlinux_h = []
|
|
vmlinux_dep = []
|
|
vmlinux_inc = vmlinux_h_dir
|
|
endif
|
|
|
|
bsc_ebpf_o = custom_target('bsc_ebpf_o',
|
|
input : 'ebpf/bsc_ebpf.c',
|
|
output : 'bsc_ebpf.o',
|
|
depends : vmlinux_dep,
|
|
command : [
|
|
clang,
|
|
'-O2',
|
|
'-target', 'bpf',
|
|
'-D__TARGET_ARCH_x86',
|
|
'-g',
|
|
'-Wno-missing-declarations', # forward decl interne di vmlinux.h
|
|
'-I' + vmlinux_inc,
|
|
'-I' + vmlinux_h_dir,
|
|
'-I/usr/include/bpf',
|
|
'-c', '@INPUT@',
|
|
'-o', '@OUTPUT@',
|
|
],
|
|
build_by_default : true,
|
|
install : true,
|
|
install_dir : get_option('prefix') / 'lib' / 'bastionguard-sc',
|
|
)
|
|
else
|
|
warning('clang non trovato — bsc_ebpf.o non compilato. '
|
|
+ 'eBPF attivo solo se bsc_ebpf.o precompilato è installato.')
|
|
endif
|
|
endif
|
|
|
|
cpp_sources = [
|
|
'src/main.cpp',
|
|
'src/model/Connection.cpp',
|
|
'src/logging/Logger.cpp',
|
|
'src/config/Config.cpp',
|
|
'src/rule/Rule.cpp',
|
|
'src/stats/Statistics.cpp',
|
|
'src/proc/ProcMon.cpp',
|
|
'src/net/SocketSnapshot.cpp',
|
|
'src/net/SockDiag.cpp',
|
|
'src/netlink/ProcEventMonitor.cpp',
|
|
'src/net/DnsResolver.cpp',
|
|
'src/netfilter/NFQueue.cpp',
|
|
'src/fw/Firewall.cpp',
|
|
'src/task/TaskRunner.cpp',
|
|
'src/ui/UIClient.cpp',
|
|
'src/ebpf/EBPFMon.cpp', # no-op stub se BSC_HAS_EBPF non definito
|
|
'src/service/DaemonService.cpp',
|
|
]
|
|
|
|
inc = include_directories('include')
|
|
|
|
executable('bsc-daemon',
|
|
cpp_sources,
|
|
include_directories : [inc, common_include_dir],
|
|
dependencies : [ssl, jsondep, threads, nfqdep, libbpfdep],
|
|
cpp_args : (nfqdep.found() ? ['-DBSC_HAS_NFQ=1'] : []) + ebpf_args,
|
|
install : true,
|
|
install_dir : get_option('sbindir'),
|
|
)
|