Skip to content
API Documentation
BastionGuard™
NFQueue.hpp
Go to the documentation of this file.
1#pragma once
3#include <atomic>
4#include <cstdint>
5#include <functional>
6#include <memory>
7#include <optional>
8#include <string>
9
10namespace bsc::netfilter {
11
12enum class Verdict : std::uint32_t {
13 Drop = 0,
14 Accept = 1,
15 Queue = 3,
16 Repeat = 4,
17};
18
19struct PacketInfo {
20 std::uint32_t id{0};
21 std::uint32_t mark{0};
22 std::uint32_t uid{0xffffffffu}; // 0xffffffff = &quot;non disponibile&quot;, 0 = root valido
23 std::uint32_t in_dev{0};
24 std::uint32_t out_dev{0};
25 std::uint16_t queue_id{0};
27};
28
29struct Decision {
31 std::uint32_t mark{0};
32 bool set_mark{false};
33};
34
35class NFQueue {
36 public:
37 using Handler = std::function<Decision(const PacketInfo&)>;
38
39 NFQueue();
41
42 bool open(std::uint16_t queue_id, Handler handler);
43 void close();
44 bool running() const noexcept { return running_; }
45
46 private:
47 class Impl;
48 std::unique_ptr<Impl> impl_;
49 std::atomic_bool running_{false};
50};
51
52bool available();
53
54} // namespace bsc::netfilter
bool open(std::uint16_t queue_id, Handler handler)
Definition NFQueue.cpp:249
std::unique_ptr< Impl > impl_
Definition NFQueue.hpp:48
std::atomic_bool running_
Definition NFQueue.hpp:49
bool running() const noexcept
Definition NFQueue.hpp:44
std::function< Decision(const PacketInfo &)> Handler
Definition NFQueue.hpp:37
bool available()
Definition NFQueue.cpp:251
bsc::model::Connection connection
Definition NFQueue.hpp:26