* [PATCH] udp: Use IP_FREEBIND for flow sockets as well as listening sockets
@ 2025-11-13 1:34 David Gibson
2025-11-13 22:22 ` Stefano Brivio
0 siblings, 1 reply; 3+ messages in thread
From: David Gibson @ 2025-11-13 1:34 UTC (permalink / raw)
To: Stefano Brivio, passt-dev; +Cc: David Gibson
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>
---
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
^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: [PATCH] udp: Use IP_FREEBIND for flow sockets as well as listening sockets
2025-11-13 1:34 [PATCH] udp: Use IP_FREEBIND for flow sockets as well as listening sockets David Gibson
@ 2025-11-13 22:22 ` Stefano Brivio
2025-11-14 0:46 ` David Gibson
0 siblings, 1 reply; 3+ messages in thread
From: Stefano Brivio @ 2025-11-13 22:22 UTC (permalink / raw)
To: David Gibson; +Cc: passt-dev
On Thu, 13 Nov 2025 12:34:13 +1100
David Gibson <david@gibson.dropbear.id.au> wrote:
> 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>
Applied.
> ---
> 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.
From https://bugs.passt.top/show_bug.cgi?id=174#c0:
I can't downgrade passt/pasta to an earlier version or test patches in
my current setup
...so I guess we'll have to guess...
> 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;
--
Stefano
^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: [PATCH] udp: Use IP_FREEBIND for flow sockets as well as listening sockets
2025-11-13 22:22 ` Stefano Brivio
@ 2025-11-14 0:46 ` David Gibson
0 siblings, 0 replies; 3+ messages in thread
From: David Gibson @ 2025-11-14 0:46 UTC (permalink / raw)
To: Stefano Brivio; +Cc: passt-dev
[-- Attachment #1: Type: text/plain, Size: 1973 bytes --]
On Thu, Nov 13, 2025 at 11:22:23PM +0100, Stefano Brivio wrote:
> On Thu, 13 Nov 2025 12:34:13 +1100
> David Gibson <david@gibson.dropbear.id.au> wrote:
>
> > 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>
>
> Applied.
>
> > ---
> > 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.
>
> >From https://bugs.passt.top/show_bug.cgi?id=174#c0:
>
> I can't downgrade passt/pasta to an earlier version or test patches in
> my current setup
Ah, missed that.
> ...so I guess we'll have to guess...
I guess we will.
> > 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;
>
> --
> Stefano
>
--
David Gibson (he or they) | I'll have my music baroque, and my code
david AT gibson.dropbear.id.au | minimalist, thank you, not the other way
| around.
http://www.ozlabs.org/~dgibson
[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 833 bytes --]
^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2025-11-14 0:47 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2025-11-13 1:34 [PATCH] udp: Use IP_FREEBIND for flow sockets as well as listening sockets David Gibson
2025-11-13 22:22 ` Stefano Brivio
2025-11-14 0:46 ` David Gibson
Code repositories for project(s) associated with this public inbox
https://passt.top/passt
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for IMAP folder(s).