1 /* SPDX-License-Identifier: LGPL-2.1-or-later */
2 #pragma once
3 
4 #include <stdbool.h>
5 #include <stdint.h>
6 
7 #include "sd-netlink.h"
8 
9 #include "in-addr-util.h"
10 
11 typedef enum FirewallBackend {
12         FW_BACKEND_NONE,
13 #if HAVE_LIBIPTC
14         FW_BACKEND_IPTABLES,
15 #endif
16         FW_BACKEND_NFTABLES,
17         _FW_BACKEND_MAX,
18         _FW_BACKEND_INVALID = -EINVAL,
19 } FirewallBackend;
20 
21 struct FirewallContext {
22         FirewallBackend backend;
23         sd_netlink *nfnl;
24 };
25 
26 const char *firewall_backend_to_string(FirewallBackend b) _const_;
27 
28 int fw_nftables_init(FirewallContext *ctx);
29 void fw_nftables_exit(FirewallContext *ctx);
30 
31 int fw_nftables_add_masquerade(
32                 FirewallContext *ctx,
33                 bool add,
34                 int af,
35                 const union in_addr_union *source,
36                 unsigned source_prefixlen);
37 
38 int fw_nftables_add_local_dnat(
39                 FirewallContext *ctx,
40                 bool add,
41                 int af,
42                 int protocol,
43                 uint16_t local_port,
44                 const union in_addr_union *remote,
45                 uint16_t remote_port,
46                 const union in_addr_union *previous_remote);
47 
48 #if HAVE_LIBIPTC
49 struct xtc_handle;
50 
51 int fw_iptables_add_masquerade(
52                 bool add,
53                 int af,
54                 const union in_addr_union *source,
55                 unsigned source_prefixlen);
56 
57 int fw_iptables_add_local_dnat(
58                 bool add,
59                 int af,
60                 int protocol,
61                 uint16_t local_port,
62                 const union in_addr_union *remote,
63                 uint16_t remote_port,
64                 const union in_addr_union *previous_remote);
65 
66 int fw_iptables_init_nat(struct xtc_handle **ret);
67 #endif
68