ebpf-blocker 1.0.0
XDP-based packet blocker using eBPF
Loading...
Searching...
No Matches
XdpBlocker Class Reference

#include <xdp_loader.h>

Public Member Functions

 XdpBlocker ()
 
 ~XdpBlocker ()
 
 XdpBlocker (const XdpBlocker &)=delete
 
XdpBlockeroperator= (const XdpBlocker &)=delete
 
 XdpBlocker (XdpBlocker &&)=delete
 
XdpBlockeroperator= (XdpBlocker &&)=delete
 
void Load (const std::string &iface)
 
void Unload ()
 Открепляет XDP и закрывает BPF-объект. Безопасен для многократного вызова.
 
void UpdateMap (const std::string &map_name, const std::vector< BlockEntry > &entries)
 Заменяет все записи в указанной BPF-карте.
 
void UpdateWhitelist (const std::vector< BlockEntry > &entries)
 
void UpdateBlacklist (const std::vector< BlockEntry > &entries)
 
std::vector< std::pair< uint32_t, uint64_t > > ReadAndClearDropCounters ()
 Читает все записи из карты drop_counter и атомарно очищает их.
 

Private Member Functions

void LoadBPFProgram ()
 Открывает и загружает BPF-объект из встроенного массива байткода.
 
void AttachToInterface ()
 Прикрепляет загруженную XDP-программу к iface_.
 
void DetachFromInterface ()
 Открепляет XDP-программу от iface_.
 
void ClearMap (bpf_map *map)
 Перебирает и удаляет все ключи из BPF-карты (итерация LPM trie).
 

Private Attributes

bpf_object * obj_
 Дескриптор BPF-объекта libbpf.
 
bpf_map * whitelist_map_
 LPM trie для записей белого списка.
 
bpf_map * blacklist_map_
 LPM trie для записей чёрного списка.
 
bpf_map * drop_counter_map_
 Хэш-карта для счётчиков дропов по IP.
 
std::string iface_
 Имя текущего прикреплённого интерфейса.
 

Detailed Description

Управляет жизненным циклом XDP BPF-программы.

Загружает скомпилированный BPF-объект из встроенного в бинарник массива байткода (xxd), прикрепляет к сетевому интерфейсу и предоставляет методы для обновления LPM-карт и чтения счётчиков дропов.

Definition at line 26 of file xdp_loader.h.

Constructor & Destructor Documentation

◆ XdpBlocker() [1/3]

XdpBlocker::XdpBlocker ( )

Definition at line 38 of file xdp_loader.cpp.

References PrintLibbpfLog().

◆ ~XdpBlocker()

XdpBlocker::~XdpBlocker ( )

Definition at line 44 of file xdp_loader.cpp.

References Unload().

◆ XdpBlocker() [2/3]

XdpBlocker::XdpBlocker ( const XdpBlocker & )
delete

◆ XdpBlocker() [3/3]

XdpBlocker::XdpBlocker ( XdpBlocker && )
delete

Member Function Documentation

◆ AttachToInterface()

void XdpBlocker::AttachToInterface ( )
private

Прикрепляет загруженную XDP-программу к iface_.

Прикрепляет XDP-программу к сетевому интерфейсу.

Definition at line 106 of file xdp_loader.cpp.

References iface_, and obj_.

Referenced by Load().

◆ ClearMap()

void XdpBlocker::ClearMap ( bpf_map * map)
private

Перебирает и удаляет все ключи из BPF-карты (итерация LPM trie).

Удаляет все записи из BPF-карты.

Parameters
[in]mapУказатель на BPF-карту.

Definition at line 145 of file xdp_loader.cpp.

Referenced by UpdateMap().

◆ DetachFromInterface()

void XdpBlocker::DetachFromInterface ( )
private

Открепляет XDP-программу от iface_.

Открепляет XDP-программу от сетевого интерфейса.

Definition at line 129 of file xdp_loader.cpp.

References iface_.

Referenced by Unload().

◆ Load()

void XdpBlocker::Load ( const std::string & iface)

Загружает BPF-объект и прикрепляет XDP-программу к интерфейсу.

Parameters
[in]ifaceИмя сетевого интерфейса (например "eth0").
Exceptions
std::runtime_errorпри любой ошибке.

Definition at line 50 of file xdp_loader.cpp.

References AttachToInterface(), iface_, and LoadBPFProgram().

Referenced by main().

◆ LoadBPFProgram()

void XdpBlocker::LoadBPFProgram ( )
private

Открывает и загружает BPF-объект из встроенного массива байткода.

Definition at line 75 of file xdp_loader.cpp.

References blacklist_map_, blocker_bpf, blocker_bpf_len, drop_counter_map_, obj_, and whitelist_map_.

Referenced by Load().

◆ operator=() [1/2]

XdpBlocker & XdpBlocker::operator= ( const XdpBlocker & )
delete

◆ operator=() [2/2]

XdpBlocker & XdpBlocker::operator= ( XdpBlocker && )
delete

◆ ReadAndClearDropCounters()

std::vector< std::pair< uint32_t, uint64_t > > XdpBlocker::ReadAndClearDropCounters ( )

Читает все записи из карты drop_counter и атомарно очищает их.

Читает и атомарно очищает BPF-карту drop_counter.

Returns
Вектор пар (source_ip, количество_дропов).

Definition at line 215 of file xdp_loader.cpp.

References drop_counter_map_.

Referenced by main().

◆ Unload()

void XdpBlocker::Unload ( )

Открепляет XDP и закрывает BPF-объект. Безопасен для многократного вызова.

Definition at line 56 of file xdp_loader.cpp.

References blacklist_map_, DetachFromInterface(), drop_counter_map_, iface_, obj_, and whitelist_map_.

Referenced by main(), and ~XdpBlocker().

◆ UpdateBlacklist()

void XdpBlocker::UpdateBlacklist ( const std::vector< BlockEntry > & entries)

Сокращение для UpdateMap("blacklist_map", entries).

Parameters
[in]entriesСписок записей чёрного списка.

Definition at line 205 of file xdp_loader.cpp.

References UpdateMap().

Referenced by main().

◆ UpdateMap()

void XdpBlocker::UpdateMap ( const std::string & map_name,
const std::vector< BlockEntry > & entries )

Заменяет все записи в указанной BPF-карте.

Заменяет все записи в указанной BPF-карте (whitelist_map / blacklist_map).

Сначала очищает карту, затем вставляет все корректные записи.

Parameters
[in]map_name"whitelist_map" или "blacklist_map".
[in]entriesСписок IP/CIDR-записей для вставки.

Сначала очищает карту, затем вставляет каждую корректную запись BlockEntry.

Definition at line 165 of file xdp_loader.cpp.

References blacklist_map_, ClearMap(), CIDR::ip, ParseCIDR(), CIDR::prefixlen, and whitelist_map_.

Referenced by UpdateBlacklist(), and UpdateWhitelist().

◆ UpdateWhitelist()

void XdpBlocker::UpdateWhitelist ( const std::vector< BlockEntry > & entries)

Сокращение для UpdateMap("whitelist_map", entries).

Parameters
[in]entriesСписок записей белого списка.

Definition at line 201 of file xdp_loader.cpp.

References UpdateMap().

Referenced by main().

Field Documentation

◆ blacklist_map_

bpf_map* XdpBlocker::blacklist_map_
private

LPM trie для записей чёрного списка.

Definition at line 66 of file xdp_loader.h.

Referenced by LoadBPFProgram(), Unload(), and UpdateMap().

◆ drop_counter_map_

bpf_map* XdpBlocker::drop_counter_map_
private

Хэш-карта для счётчиков дропов по IP.

Definition at line 67 of file xdp_loader.h.

Referenced by LoadBPFProgram(), ReadAndClearDropCounters(), and Unload().

◆ iface_

std::string XdpBlocker::iface_
private

Имя текущего прикреплённого интерфейса.

Definition at line 68 of file xdp_loader.h.

Referenced by AttachToInterface(), DetachFromInterface(), Load(), and Unload().

◆ obj_

bpf_object* XdpBlocker::obj_
private

Дескриптор BPF-объекта libbpf.

Definition at line 64 of file xdp_loader.h.

Referenced by AttachToInterface(), LoadBPFProgram(), and Unload().

◆ whitelist_map_

bpf_map* XdpBlocker::whitelist_map_
private

LPM trie для записей белого списка.

Definition at line 65 of file xdp_loader.h.

Referenced by LoadBPFProgram(), Unload(), and UpdateMap().


The documentation for this class was generated from the following files: