|
ebpf-blocker 1.0.0
XDP-based packet blocker using eBPF
|
Точка входа: event loop, обработка сигналов, метрики Prometheus. More...
#include "main.h"#include "db.h"#include "xdp_loader.h"#include <arpa/inet.h>#include <csignal>#include <cstring>#include <ctime>#include <fstream>#include <getopt.h>#include <iostream>#include <map>#include <shared_mutex>#include <sstream>#include <thread>#include <unistd.h>#include "httplib.h"#include <algorithm>Go to the source code of this file.
Data Structures | |
| struct | MetricsStore |
| Потокобезопасный аккумулятор метрик Prometheus. More... | |
Typedefs | |
| using | DropMap = std::map<uint32_t, uint64_t> |
| Удобный алиас для карты соответствия IP (uint32) количеству дропов. | |
Functions | |
| static void | HandleSignal (int sig) |
| static Config | ParseArgs (int argc, char *argv[]) |
| static std::vector< BlockEntry > | ReadWhitelistFile (const std::string &path) |
| static void | PrintStats (const std::vector< BlockEntry > &whitelist, const std::vector< BlockEntry > &blacklist) |
| static void | PrintIntervalDrops (const std::vector< std::pair< uint32_t, uint64_t > > &drops) |
| static void | PrintTopDrops (const std::string &label, const DropMap &drops, const char *timestamp) |
| int | main (int argc, char *argv[]) |
Variables | |
| std::atomic< bool > | g_running {true} |
| Глобальный флаг: false запускает graceful shutdown. | |
| std::atomic< bool > | g_xdp_attached {false} |
| Глобальный флаг: true когда XDP-программа прикреплена к интерфейсу. | |
| std::atomic< bool > | g_detach_requested {false} |
| Глобальный флаг: true когда SIGUSR1 запросил detach XDP. | |
| static XdpBlocker * | g_blocker = nullptr |
Точка входа: event loop, обработка сигналов, метрики Prometheus.
Содержит главный цикл приложения: загрузка конфигурации, инициализация БД и XDP, периодический опрос списков и обслуживание HTTP-эндпоинта /metrics.
Definition in file main.cpp.
| using DropMap = std::map<uint32_t, uint64_t> |
|
static |
Обрабатывает сигналы ОС для управления жизненным циклом.
| [in] | sig | Номер сигнала. |
Definition at line 59 of file main.cpp.
References g_detach_requested, and g_running.
Referenced by main().
| int main | ( | int | argc, |
| char * | argv[] ) |
Точка входа.
Инициализирует БД, загружает XDP-программу, запускает event loop с периодическим опросом списков и HTTP-сервером метрик Prometheus.
Definition at line 246 of file main.cpp.
References Config::db_path, g_blocker, g_detach_requested, g_running, g_xdp_attached, BlockerDB::GetBlacklist(), BlockerDB::GetWhitelist(), HandleSignal(), Config::iface, Config::interval_sec, XdpBlocker::Load(), Config::metrics_listen, BlockerDB::Migrate(), ParseArgs(), PrintIntervalDrops(), PrintStats(), PrintTopDrops(), XdpBlocker::ReadAndClearDropCounters(), ReadWhitelistFile(), XdpBlocker::Unload(), XdpBlocker::UpdateBlacklist(), BlockerDB::UpdateLastBlockedAt(), XdpBlocker::UpdateWhitelist(), and Config::whitelist_conf.
|
static |
Парсит аргументы командной строки через getopt_long.
Definition at line 80 of file main.cpp.
References Config::db_path, Config::iface, Config::interval_sec, Config::metrics_listen, and Config::whitelist_conf.
Referenced by main().
|
static |
|
static |
|
static |
|
static |
Читает записи белого списка из конфигурационного файла.
Формат: одна IP/CIDR на строку, опционально '# комментарий' в конце. Пустые строки и строки, начинающиеся с '#', игнорируются.
| [in] | path | Путь к файлу конфигурации белого списка. |
Definition at line 136 of file main.cpp.
Referenced by main().
|
static |
| std::atomic<bool> g_detach_requested {false} |
Глобальный флаг: true когда SIGUSR1 запросил detach XDP.
Definition at line 32 of file main.cpp.
Referenced by HandleSignal(), and main().
| std::atomic<bool> g_running {true} |
Глобальный флаг: false запускает graceful shutdown.
Definition at line 30 of file main.cpp.
Referenced by HandleSignal(), and main().