]> git.ipfire.org Git - thirdparty/pdns.git/blob - pdns/dnsdist-dynbpf.hh
Merge pull request #3962 from Habbie/openbsd
[thirdparty/pdns.git] / pdns / dnsdist-dynbpf.hh
1 #pragma once
2 #include "config.h"
3
4 #include <mutex>
5
6 #include "bpf-filter.hh"
7 #include "iputils.hh"
8
9 #ifdef HAVE_EBPF
10
11 #include <boost/multi_index_container.hpp>
12 #include <boost/multi_index/ordered_index.hpp>
13
14 class DynBPFFilter
15 {
16 public:
17 DynBPFFilter(std::shared_ptr<BPFFilter> bpf): d_bpf(bpf)
18 {
19 }
20 ~DynBPFFilter()
21 {
22 }
23 void block(const ComboAddress& addr, const struct timespec& until);
24 void purgeExpired(const struct timespec& now);
25 private:
26 struct BlockEntry
27 {
28 BlockEntry(const ComboAddress& addr, const struct timespec until): d_addr(addr), d_until(until)
29 {
30 }
31 ComboAddress d_addr;
32 struct timespec d_until;
33 };
34 typedef multi_index_container<BlockEntry,
35 indexed_by <
36 ordered_unique< member<BlockEntry,ComboAddress,&BlockEntry::d_addr>, ComboAddress::addressOnlyLessThan >,
37 ordered_non_unique< member<BlockEntry,struct timespec,&BlockEntry::d_until> >
38 >
39 > container_t;
40 container_t d_entries;
41 std::mutex d_mutex;
42 std::shared_ptr<BPFFilter> d_bpf;
43 };
44
45 #endif /* HAVE_EBPF */