aboutgitcodebugslistschat
path: root/fwd.h
diff options
context:
space:
mode:
authorDavid Gibson <david@gibson.dropbear.id.au>2024-02-28 22:25:20 +1100
committerStefano Brivio <sbrivio@redhat.com>2024-02-29 09:48:27 +0100
commit3b9098aa49bd083a7900dc6e0219bf76e389afd4 (patch)
tree6d80efa34cd6819d5e263bcd3dc5de7b3fb73875 /fwd.h
parent10376e7a2f3780a3591d70da2f7db9b3367e9222 (diff)
downloadpasst-3b9098aa49bd083a7900dc6e0219bf76e389afd4.tar
passt-3b9098aa49bd083a7900dc6e0219bf76e389afd4.tar.gz
passt-3b9098aa49bd083a7900dc6e0219bf76e389afd4.tar.bz2
passt-3b9098aa49bd083a7900dc6e0219bf76e389afd4.tar.lz
passt-3b9098aa49bd083a7900dc6e0219bf76e389afd4.tar.xz
passt-3b9098aa49bd083a7900dc6e0219bf76e389afd4.tar.zst
passt-3b9098aa49bd083a7900dc6e0219bf76e389afd4.zip
fwd: Rename port_fwd.[ch] and their contents
Currently port_fwd.[ch] contains helpers related to port forwarding, particular automatic port forwarding. We're planning to allow much more flexible sorts of forwarding, including both port translation and NAT based on the flow table. This will subsume the existing port forwarding logic, so rename port_fwd.[ch] to fwd.[ch] with matching updates to all the names within. Signed-off-by: David Gibson <david@gibson.dropbear.id.au> Signed-off-by: Stefano Brivio <sbrivio@redhat.com>
Diffstat (limited to 'fwd.h')
-rw-r--r--fwd.h44
1 files changed, 44 insertions, 0 deletions
diff --git a/fwd.h b/fwd.h
new file mode 100644
index 0000000..23281d9
--- /dev/null
+++ b/fwd.h
@@ -0,0 +1,44 @@
+/* SPDX-License-Identifier: GPL-2.0-or-later
+ * Copyright Red Hat
+ * Author: Stefano Brivio <sbrivio@redhat.com>
+ * Author: David Gibson <david@gibson.dropbear.id.au>
+ */
+
+#ifndef FWD_H
+#define FWD_H
+
+/* Number of ports for both TCP and UDP */
+#define NUM_PORTS (1U << 16)
+
+enum fwd_ports_mode {
+ FWD_SPEC = 1,
+ FWD_NONE,
+ FWD_AUTO,
+ FWD_ALL,
+};
+
+#define PORT_BITMAP_SIZE DIV_ROUND_UP(NUM_PORTS, 8)
+
+/**
+ * fwd_ports - Describes port forwarding for one protocol and direction
+ * @mode: Overall forwarding mode (all, none, auto, specific ports)
+ * @scan4: /proc/net fd to scan for IPv4 ports when in AUTO mode
+ * @scan6: /proc/net fd to scan for IPv6 ports when in AUTO mode
+ * @map: Bitmap describing which ports are forwarded
+ * @delta: Offset between the original destination and mapped port number
+ */
+struct fwd_ports {
+ enum fwd_ports_mode mode;
+ int scan4;
+ int scan6;
+ uint8_t map[PORT_BITMAP_SIZE];
+ in_port_t delta[NUM_PORTS];
+};
+
+void fwd_scan_ports_tcp(struct fwd_ports *fwd, const struct fwd_ports *rev);
+void fwd_scan_ports_udp(struct fwd_ports *fwd, const struct fwd_ports *rev,
+ const struct fwd_ports *tcp_fwd,
+ const struct fwd_ports *tcp_rev);
+void fwd_scan_ports_init(struct ctx *c);
+
+#endif /* FWD_H */