ebpf-blocker 1.0.0
XDP-based packet blocker using eBPF
Loading...
Searching...
No Matches
blocker_kern.c File Reference

XDP BPF-программа фильтрации пакетов по whitelist/blacklist. More...

#include <bpf/bpf_endian.h>
#include <bpf/bpf_helpers.h>
#include <linux/bpf.h>
#include <linux/if_ether.h>
#include <linux/ip.h>

Go to the source code of this file.

Data Structures

struct  lpm_key
 Ключ для LPM trie-карт: длина префикса + IP в network byte order. More...
 

Functions

struct { 
 
SEC (".maps") 
 LPM trie чёрного списка: IP-адреса источников для немедленного сброса.
 
 __uint (type, BPF_MAP_TYPE_LPM_TRIE)
 
 __uint (max_entries, 65536)
 
 __type (key, struct lpm_key)
 
 __type (value, __u32)
 
 __uint (map_flags, BPF_F_NO_PREALLOC)
 
 __uint (type, BPF_MAP_TYPE_HASH)
 
 __type (key, __u32)
 
 __type (value, __u64)
 
int xdp_blocker_func (struct xdp_md *ctx)
 
char _license[] SEC ("license")
 Лицензия BPF-программы (требуется верификатором ядра).
 

Detailed Description

XDP BPF-программа фильтрации пакетов по whitelist/blacklist.

Компилируется clang -target bpf и встраивается в userspace-бинарник в виде C-массива байткода (через xxd).

Обработка пакета:

  1. Парсинг Ethernet + IPv4 заголовков.
  2. Поиск source IP в whitelist_map (LPM trie) -> XDP_PASS если найден.
  3. Поиск source IP в blacklist_map (LPM trie) -> XDP_DROP если найден, атомарный инкремент drop_counter для source IP.
  4. Иначе -> XDP_PASS.

Definition in file blocker_kern.c.

Function Documentation

◆ __type() [1/4]

@2::__type ( key ,
__u32  )

◆ __type() [2/4]

__type ( key ,
struct lpm_key  )

◆ __type() [3/4]

__type ( value ,
__u32  )

◆ __type() [4/4]

@2::__type ( value ,
__u64  )

◆ __uint() [1/4]

__uint ( map_flags ,
BPF_F_NO_PREALLOC  )

◆ __uint() [2/4]

__uint ( max_entries ,
65536  )

◆ __uint() [3/4]

@2::__uint ( type ,
BPF_MAP_TYPE_HASH  )

◆ __uint() [4/4]

__uint ( type ,
BPF_MAP_TYPE_LPM_TRIE  )

◆ SEC() [1/2]

struct @2 SEC ( ".maps" )

LPM trie чёрного списка: IP-адреса источников для немедленного сброса.

Хэш-карта счётчиков дропов: количество отброшенных пакетов по source IP.

LPM trie белого списка: IP-адреса источников, пропускаемые без проверки чёрного списка.

◆ SEC() [2/2]

char _license[] SEC ( "license" )

Лицензия BPF-программы (требуется верификатором ядра).

◆ xdp_blocker_func()

int xdp_blocker_func ( struct xdp_md * ctx)

Точка входа XDP: фильтрует пакеты по картам whitelist и blacklist.

Parameters
[in]ctxМетаданные XDP (указатели на данные пакета).
Returns
XDP_PASS или XDP_DROP.

Definition at line 58 of file blocker_kern.c.

References lpm_key::ip, and lpm_key::prefixlen.