ebpf_exporter
33 строки · 972.0 Байт
1#include <vmlinux.h>
2#include <bpf/bpf_tracing.h>
3#include "maps.bpf.h"
4
5#define UPPER_PORT_BOUND 32768
6
7struct {
8__uint(type, BPF_MAP_TYPE_HASH);
9__uint(max_entries, UPPER_PORT_BOUND);
10__type(key, u16);
11__type(value, u64);
12} udp_fail_queue_rcv_skbs_total SEC(".maps");
13
14SEC("tp_btf/udp_fail_queue_rcv_skb")
15int BPF_PROG(udp_fail_queue_rcv_skb, int rc, struct sock *sk)
16{
17u16 lport = sk->__sk_common.skc_num;
18
19// We are not interested in ephemeral ports for outbound connections.
20// There's a ton of them and they don't easily correlate with services.
21// To still have some visibility, we put all of the ephemeral ports into
22// the same local_port="0" label and defer to debugging with tracepoints
23// to find what port and service are having issues.
24if (lport >= UPPER_PORT_BOUND) {
25lport = 0;
26}
27
28increment_map(&udp_fail_queue_rcv_skbs_total, &lport, 1);
29
30return 0;
31}
32
33char LICENSE[] SEC("license") = "GPL";
34