aboutgitcodebugslistschat
diff options
context:
space:
mode:
authorDavid Gibson <david@gibson.dropbear.id.au>2025-11-19 15:26:34 +1100
committerStefano Brivio <sbrivio@redhat.com>2025-11-21 04:17:22 +0100
commitbe1583f6ea608ed4f7b1409e7ed35237c79a14df (patch)
tree8deb281ee0a28bed73758c28fb5707c59624ae78
parentfd3fc8d33d6c4344c59a60af16b074515b3da739 (diff)
downloadpasst-be1583f6ea608ed4f7b1409e7ed35237c79a14df.tar
passt-be1583f6ea608ed4f7b1409e7ed35237c79a14df.tar.gz
passt-be1583f6ea608ed4f7b1409e7ed35237c79a14df.tar.bz2
passt-be1583f6ea608ed4f7b1409e7ed35237c79a14df.tar.lz
passt-be1583f6ea608ed4f7b1409e7ed35237c79a14df.tar.xz
passt-be1583f6ea608ed4f7b1409e7ed35237c79a14df.tar.zst
passt-be1583f6ea608ed4f7b1409e7ed35237c79a14df.zip
fwd: Don't explicitly exclude reverse-direction TCP ports for UDP
In auto-forwarding mode, we forward UDP ports for which there isn't (yet) a listening UDP port on the other side, but where there is a listening TCP socket for the same port number. This is useful for certain protocols such as iperf3. Correspondinly, when excluding ports from forwarding, we also exclude TCP ports from the other direction. That sounds like it makes sense, but is unnecessary: for the purposes of exclusion, we don't care why we have a listening UDP socket for that port, just whether we have one. That is already incorporated into the UDP bitmap alone. Signed-off-by: David Gibson <david@gibson.dropbear.id.au> Signed-off-by: Stefano Brivio <sbrivio@redhat.com>
-rw-r--r--fwd.c6
-rw-r--r--util.c1
2 files changed, 3 insertions, 4 deletions
diff --git a/fwd.c b/fwd.c
index c7a880e..c417e0f 100644
--- a/fwd.c
+++ b/fwd.c
@@ -410,10 +410,8 @@ static void fwd_scan_ports(struct ctx *c)
memcpy(excl_tcp_out, c->tcp.fwd_in.map, sizeof(excl_tcp_out));
memcpy(excl_tcp_in, c->tcp.fwd_out.map, sizeof(excl_tcp_in));
- bitmap_or(excl_udp_out, PORT_BITMAP_SIZE,
- c->udp.fwd_in.map, c->tcp.fwd_in.map);
- bitmap_or(excl_udp_in, PORT_BITMAP_SIZE,
- c->udp.fwd_out.map, c->tcp.fwd_out.map);
+ memcpy(excl_udp_out, c->udp.fwd_in.map, sizeof(excl_udp_out));
+ memcpy(excl_udp_in, c->udp.fwd_out.map, sizeof(excl_udp_in));
fwd_scan_ports_tcp(&c->tcp.fwd_out, excl_tcp_out);
fwd_scan_ports_tcp(&c->tcp.fwd_in, excl_tcp_in);
diff --git a/util.c b/util.c
index 7944a49..ab23463 100644
--- a/util.c
+++ b/util.c
@@ -338,6 +338,7 @@ bool bitmap_isset(const uint8_t *map, unsigned bit)
* @a: First operand
* @b: Second operand
*/
+/* cppcheck-suppress unusedFunction */
void bitmap_or(uint8_t *dst, size_t size, const uint8_t *a, const uint8_t *b)
{
unsigned long *dw = (unsigned long *)dst;