Skip to content
API Documentation
BastionGuard™
SocketSnapshot.hpp
Go to the documentation of this file.
1#pragma once
4#include <chrono>
5#include <mutex>
6#include <optional>
7#include <string>
8#include <unordered_map>
9#include <vector>
10
11namespace bsc::net {
12
14 public:
15 [[nodiscard]] std::vector<bsc::model::Connection> list_connections() const;
16 [[nodiscard]] std::optional<bsc::model::Connection> find_connection(const bsc::model::Connection& needle) const;
18 void invalidate_cache();
19
20 // Scarta eventi eBPF accumulati senza fare snapshot /proc.
21 // Usato quando il desktop è idle/bloccato: non vogliamo mostrare
22 // connessioni vecchie quando l'utente torna attivo.
23 void discard_pending_events() const;
24
25 /*
26 * Abilita il monitor eBPF. Chiamato da DaemonService::run() se
27 * proc_monitor_method == "ebpf". Se libbpf non è disponibile o
28 * il kernel non supporta BTF, start_ebpf() ritorna false e il
29 * daemon continua a funzionare senza eBPF (fallback /proc/net/tcp).
30 * obj_path: percorso del programma BPF compilato (.o).
31 */
32 bool start_ebpf(const std::string& obj_path =
33 "/usr/lib/bastionguard-sc/bsc_ebpf.o");
34 void stop_ebpf();
35
36 private:
38 std::vector<bsc::model::Connection> connections;
39 std::chrono::steady_clock::time_point updated_at{};
40 };
41
42 [[nodiscard]] std::vector<bsc::model::Connection> collect_connections() const;
43 [[nodiscard]] bool cache_valid(std::chrono::steady_clock::time_point now) const;
44
45 mutable std::mutex cache_mutex_;
47
48 // EBPFMon è mutable: drain() non è logicamente const ma non
49 // modifica lo stato osservabile di SocketSnapshot verso l'esterno.
51};
52
53} // namespace bsc::net
bool cache_valid(std::chrono::steady_clock::time_point now) const
std::vector< bsc::model::Connection > collect_connections() const
std::optional< bsc::model::Connection > find_connection(const bsc::model::Connection &needle) const
bsc::ebpf::EBPFMon ebpf_mon_
std::vector< bsc::model::Connection > list_connections() const
bool enrich_connection(bsc::model::Connection &conn) const
bool start_ebpf(const std::string &obj_path="/usr/lib/bastionguard-sc/bsc_ebpf.o")
std::chrono::steady_clock::time_point updated_at
std::vector< bsc::model::Connection > connections