aboutgitcodebugslistschat
diff options
context:
space:
mode:
authorDavid Gibson <david@gibson.dropbear.id.au>2025-11-13 12:34:13 +1100
committerStefano Brivio <sbrivio@redhat.com>2025-11-13 22:33:55 +0100
commit2c6590d6a0883954f1f060ea8f2ce53179e12b27 (patch)
tree79e7d19280fb4937eab6972d5cc800c857beda14
parent75b8bb966b9508693f35df30fbbfbf37aff05b15 (diff)
downloadpasst-2c6590d6a0883954f1f060ea8f2ce53179e12b27.tar
passt-2c6590d6a0883954f1f060ea8f2ce53179e12b27.tar.gz
passt-2c6590d6a0883954f1f060ea8f2ce53179e12b27.tar.bz2
passt-2c6590d6a0883954f1f060ea8f2ce53179e12b27.tar.lz
passt-2c6590d6a0883954f1f060ea8f2ce53179e12b27.tar.xz
passt-2c6590d6a0883954f1f060ea8f2ce53179e12b27.tar.zst
passt-2c6590d6a0883954f1f060ea8f2ce53179e12b27.zip
udp: Use IP_FREEBIND for flow sockets as well as listening sockets
The --freebind option allows pasta to listen on addresses that aren't registered on the host, which has a number of use cases. However, we omitted this option for UDP "flow sockets" which are created once a flow is started, connect()ed specifically to the peer. Flow sockets are also bound, and if the peer has contacted a freebind address, we need IP_FREEBIND to do so. Link: https://bugs.passt.top/show_bug.cgi?id=174 Signed-off-by: David Gibson <david@gibson.dropbear.id.au> Signed-off-by: Stefano Brivio <sbrivio@redhat.com>
-rw-r--r--util.c3
1 files changed, 1 insertions, 2 deletions
diff --git a/util.c b/util.c
index 44c21a3..ab23463 100644
--- a/util.c
+++ b/util.c
@@ -67,9 +67,8 @@ int sock_l4_sa(const struct ctx *c, enum epoll_type type,
freebind = c->freebind;
break;
case EPOLL_TYPE_UDP_LISTEN:
- freebind = c->freebind;
- /* fallthrough */
case EPOLL_TYPE_UDP:
+ freebind = c->freebind;
proto = IPPROTO_UDP;
socktype = SOCK_DGRAM | SOCK_NONBLOCK;
break;