diff options
author | Stefano Brivio <sbrivio@redhat.com> | 2023-11-21 17:18:26 +0100 |
---|---|---|
committer | Stefano Brivio <sbrivio@redhat.com> | 2023-11-22 07:19:36 +0100 |
commit | 4117bd94f967709074ff1f310d7334ab1876ddae (patch) | |
tree | ea5c55cfa511a40df6b1b2a6deeaa14cb98820ee /tcp.c | |
parent | 4f1709db1b61c14729a6313d860323ec65772a37 (diff) | |
download | passt-4117bd94f967709074ff1f310d7334ab1876ddae.tar passt-4117bd94f967709074ff1f310d7334ab1876ddae.tar.gz passt-4117bd94f967709074ff1f310d7334ab1876ddae.tar.bz2 passt-4117bd94f967709074ff1f310d7334ab1876ddae.tar.lz passt-4117bd94f967709074ff1f310d7334ab1876ddae.tar.xz passt-4117bd94f967709074ff1f310d7334ab1876ddae.tar.zst passt-4117bd94f967709074ff1f310d7334ab1876ddae.zip |
port_fwd, util: Don't bind UDP ports with opposite-side bound TCP ports
When pasta periodically scans bound ports and binds them on the other
side in order to forward traffic, we bind UDP ports for corresponding
TCP port numbers, too, to support protocols and applications such as
iperf3 which use UDP port numbers matching the ones used by the TCP
data connection.
If we scan UDP ports in order to bind UDP ports, we skip detection of
the UDP ports we already bound ourselves, to avoid looping back our
own ports. Same with scanning and binding TCP ports.
But if we scan for TCP ports in order to bind UDP ports, we need to
skip bound TCP ports too, otherwise, as David pointed out:
- we find a bound TCP port on side A, and bind the corresponding TCP
and UDP ports on side B
- at the next periodic scan, we find that UDP port bound on side B,
and we bind the corresponding UDP port on side A
- at this point, we unbind that UDP port on side B: we would
otherwise loop back our own port.
To fix this, we need to avoid binding UDP ports that we already
bound, on the other side, as a consequence of finding a corresponding
bound TCP port.
Reproducing this issue is straightforward:
./pasta -- iperf3 -s
# Wait one second, then from another terminal:
iperf3 -c ::1 -u
Reported-by: Akihiro Suda <akihiro.suda.cz@hco.ntt.co.jp>
Analysed-by: David Gibson <david@gibson.dropbear.id.au>
Fixes: 457ff122e33c ("udp,pasta: Periodically scan for ports to automatically forward")
Signed-off-by: Stefano Brivio <sbrivio@redhat.com>
Diffstat (limited to 'tcp.c')
0 files changed, 0 insertions, 0 deletions