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
---
util.c | 3 +--
1 file changed, 1 insertion(+), 2 deletions(-)
I'm still waiting on confirmation from the reporter that this actually
fixes bug 174. However, I'm pretty sure this is _a_ correct fix,
whether or not it's a complete fix for the issue seen by the reporter.
diff --git a/util.c b/util.c
index 44c21a3e..ab23463b 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;
--
2.51.1