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
---
fwd.c | 6 ++----
util.c | 1 +
2 files changed, 3 insertions(+), 4 deletions(-)
diff --git a/fwd.c b/fwd.c
index c7a880eb..c417e0f5 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 7944a495..ab23463b 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;
--
2.51.1