ebpf_exporter
41 строка · 903.0 Байт
1#include <vmlinux.h>2#include <bpf/bpf_tracing.h>3#include <bpf/bpf_core_read.h>4#include "maps.bpf.h"5
6// 17 buckets, max range is 32k..64k
7#define MAX_BUCKET_SLOT 178
9struct key_t {10u64 bucket;11};12
13struct {14__uint(type, BPF_MAP_TYPE_HASH);15__uint(max_entries, MAX_BUCKET_SLOT + 2);16__type(key, struct key_t);17__type(value, u64);18} tcp_syn_backlog SEC(".maps");19
20static int do_count(u64 backlog)21{
22struct key_t key = {};23
24increment_exp2zero_histogram(&tcp_syn_backlog, key, backlog, MAX_BUCKET_SLOT);25
26return 0;27}
28
29SEC("kprobe/tcp_v4_syn_recv_sock")30int BPF_KPROBE(kprobe__tcp_v4_syn_recv_sock, struct sock *sk)31{
32return do_count(BPF_CORE_READ(sk, sk_ack_backlog));33}
34
35SEC("kprobe/tcp_v6_syn_recv_sock")36int BPF_KPROBE(kprobe__tcp_v6_syn_recv_sock, struct sock *sk)37{
38return do_count(BPF_CORE_READ(sk, sk_ack_backlog));39}
40
41char LICENSE[] SEC("license") = "GPL";42