* [PATCH v1] net: add per-connection guestfwd unix support
@ 2026-11-07 4:42 Gavin Li
2026-11-07 22:07 ` Samuel Thibault
2026-11-12 15:21 ` Daniel P. Berrangé
0 siblings, 2 replies; 3+ messages in thread
From: Gavin Li @ 2026-11-07 4:42 UTC (permalink / raw)
To: qemu-devel
Cc: Gavin Li, Paolo Bonzini, Marc-André Lureau,
Daniel P. Berrangé, Pierrick Bouvier, Samuel Thibault,
Jason Wang
For -netdev user,guestfwd=..., add support for unix-per-connection: in
addition to the currently supported tcp: and cmd:. With
unix-per-connection:, a new connection is opened to the given unix
socket. This is an improvement over the current unix: support, which
does not support 1:1 guest:host connections.
Also update the minimum libslirp version to 4.2.0 (released in 2020) as
it adds support for the slirp_add_unix() function.
Signed-off-by: Gavin Li <gavin.li@samsara.com>
---
meson.build | 2 +-
net/slirp.c | 6 ++++++
qemu-options.hx | 9 +++++++++
3 files changed, 16 insertions(+), 1 deletion(-)
diff --git a/meson.build b/meson.build
index d7bcb581c1..6567ede5d9 100644
--- a/meson.build
+++ b/meson.build
@@ -1289,7 +1289,7 @@ endif
slirp = not_found
if not get_option('slirp').auto() or have_system
slirp = dependency('slirp', required: get_option('slirp'),
- method: 'pkg-config')
+ method: 'pkg-config', version: '>=4.2.0')
# slirp < 4.7 is incompatible with CFI support in QEMU. This is because
# it passes function pointers within libslirp as callbacks for timers.
# When using a system-wide shared libslirp, the type information for the
diff --git a/net/slirp.c b/net/slirp.c
index 451c0fd1ba..b0b03b2bf5 100644
--- a/net/slirp.c
+++ b/net/slirp.c
@@ -1159,6 +1159,12 @@ static int slirp_guestfwd(SlirpState *s, const char *config_str, Error **errp)
"forwarding rule '%s'", config_str);
return -1;
}
+ } else if (g_str_has_prefix(p, "unix-per-connection:")) {
+ if (slirp_add_unix(s->slirp, &p[20], &server, port) < 0) {
+ error_setg(errp, "Conflicting/invalid host:port in guest "
+ "forwarding rule '%s'", config_str);
+ return -1;
+ }
} else {
Error *err = NULL;
/*
diff --git a/qemu-options.hx b/qemu-options.hx
index 5fe9d73eaa..062cd39aa3 100644
--- a/qemu-options.hx
+++ b/qemu-options.hx
@@ -3553,6 +3553,15 @@ SRST
# and connect the TCP stream to its stdin/stdout
|qemu_system| -nic 'user,id=n1,guestfwd=tcp:10.0.2.100:1234-cmd:netcat 10.10.1.1 4321'
+ ``guestfwd=[tcp]:server:port-unix-per-connection:path``
+ With ``unix-per-connection:``, a new connection is opened to the
+ given unix socket per TCP connection made by the guest. The unix socket
+ need not exist at startup time.
+
+ .. parsed-literal::
+
+ |qemu_system| -nic user,guestfwd=tcp:10.0.2.100:1234-unix-per-connection:/tmp/socket
+
``-netdev tap,id=id[,fd=h][,ifname=name][,script=file][,downscript=dfile][,br=bridge][,helper=helper]``
Configure a host TAP network backend with ID id.
base-commit: 71f25c75417d31c214ba2cd26b273c114fc99987
--
2.55.0
^ permalink raw reply related [flat|nested] 3+ messages in thread
* Re: [PATCH v1] net: add per-connection guestfwd unix support
2026-11-07 4:42 [PATCH v1] net: add per-connection guestfwd unix support Gavin Li
@ 2026-11-07 22:07 ` Samuel Thibault
2026-11-12 15:21 ` Daniel P. Berrangé
1 sibling, 0 replies; 3+ messages in thread
From: Samuel Thibault @ 2026-11-07 22:07 UTC (permalink / raw)
To: Gavin Li
Cc: qemu-devel, Paolo Bonzini, Marc-André Lureau,
Daniel P. Berrangé, Pierrick Bouvier, Jason Wang
Gavin Li, le ven. 06 nov. 2026 23:42:25 -0500, a ecrit:
> For -netdev user,guestfwd=..., add support for unix-per-connection: in
> addition to the currently supported tcp: and cmd:. With
> unix-per-connection:, a new connection is opened to the given unix
> socket. This is an improvement over the current unix: support, which
> does not support 1:1 guest:host connections.
>
> Also update the minimum libslirp version to 4.2.0 (released in 2020) as
> it adds support for the slirp_add_unix() function.
>
> Signed-off-by: Gavin Li <gavin.li@samsara.com>
Acked-by: Samuel Thibault <samuel.thibault@ens-lyon.org>
Samuel
> ---
> meson.build | 2 +-
> net/slirp.c | 6 ++++++
> qemu-options.hx | 9 +++++++++
> 3 files changed, 16 insertions(+), 1 deletion(-)
>
> diff --git a/meson.build b/meson.build
> index d7bcb581c1..6567ede5d9 100644
> --- a/meson.build
> +++ b/meson.build
> @@ -1289,7 +1289,7 @@ endif
> slirp = not_found
> if not get_option('slirp').auto() or have_system
> slirp = dependency('slirp', required: get_option('slirp'),
> - method: 'pkg-config')
> + method: 'pkg-config', version: '>=4.2.0')
> # slirp < 4.7 is incompatible with CFI support in QEMU. This is because
> # it passes function pointers within libslirp as callbacks for timers.
> # When using a system-wide shared libslirp, the type information for the
> diff --git a/net/slirp.c b/net/slirp.c
> index 451c0fd1ba..b0b03b2bf5 100644
> --- a/net/slirp.c
> +++ b/net/slirp.c
> @@ -1159,6 +1159,12 @@ static int slirp_guestfwd(SlirpState *s, const char *config_str, Error **errp)
> "forwarding rule '%s'", config_str);
> return -1;
> }
> + } else if (g_str_has_prefix(p, "unix-per-connection:")) {
> + if (slirp_add_unix(s->slirp, &p[20], &server, port) < 0) {
> + error_setg(errp, "Conflicting/invalid host:port in guest "
> + "forwarding rule '%s'", config_str);
> + return -1;
> + }
> } else {
> Error *err = NULL;
> /*
> diff --git a/qemu-options.hx b/qemu-options.hx
> index 5fe9d73eaa..062cd39aa3 100644
> --- a/qemu-options.hx
> +++ b/qemu-options.hx
> @@ -3553,6 +3553,15 @@ SRST
> # and connect the TCP stream to its stdin/stdout
> |qemu_system| -nic 'user,id=n1,guestfwd=tcp:10.0.2.100:1234-cmd:netcat 10.10.1.1 4321'
>
> + ``guestfwd=[tcp]:server:port-unix-per-connection:path``
> + With ``unix-per-connection:``, a new connection is opened to the
> + given unix socket per TCP connection made by the guest. The unix socket
> + need not exist at startup time.
> +
> + .. parsed-literal::
> +
> + |qemu_system| -nic user,guestfwd=tcp:10.0.2.100:1234-unix-per-connection:/tmp/socket
> +
> ``-netdev tap,id=id[,fd=h][,ifname=name][,script=file][,downscript=dfile][,br=bridge][,helper=helper]``
> Configure a host TAP network backend with ID id.
>
>
> base-commit: 71f25c75417d31c214ba2cd26b273c114fc99987
> --
> 2.55.0
>
--
Samuel
PS> Salut ! J'ai un sujet de philo à vous soumettre : "Suffit-il
PS> d'observer pour connaître" Idées + plan Merçi
Oui, ya qu'a t'observer pour connaître le fait que tu es une feignasse.
-+- FF in: Guide du Neuneu d'Usenet - Neuneu fait de la philo -+-
^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: [PATCH v1] net: add per-connection guestfwd unix support
2026-11-07 4:42 [PATCH v1] net: add per-connection guestfwd unix support Gavin Li
2026-11-07 22:07 ` Samuel Thibault
@ 2026-11-12 15:21 ` Daniel P. Berrangé
1 sibling, 0 replies; 3+ messages in thread
From: Daniel P. Berrangé @ 2026-11-12 15:21 UTC (permalink / raw)
To: Gavin Li
Cc: qemu-devel, Paolo Bonzini, Marc-André Lureau,
Pierrick Bouvier, Samuel Thibault, Jason Wang
On Fri, Nov 06, 2026 at 11:42:25PM -0500, Gavin Li wrote:
> For -netdev user,guestfwd=..., add support for unix-per-connection: in
> addition to the currently supported tcp: and cmd:. With
> unix-per-connection:, a new connection is opened to the given unix
> socket. This is an improvement over the current unix: support, which
> does not support 1:1 guest:host connections.
I'm not familiar with guestfwd, but from the manpage, I would
rather assume that it always opens a new connection to the host
socket for each guest connection. What are its current semantics
when two guest connections are initiated on the same port, if
that's not happening ?
>
> Also update the minimum libslirp version to 4.2.0 (released in 2020) as
> it adds support for the slirp_add_unix() function.
>
> Signed-off-by: Gavin Li <gavin.li@samsara.com>
> ---
> meson.build | 2 +-
> net/slirp.c | 6 ++++++
> qemu-options.hx | 9 +++++++++
> 3 files changed, 16 insertions(+), 1 deletion(-)
>
> diff --git a/meson.build b/meson.build
> index d7bcb581c1..6567ede5d9 100644
> --- a/meson.build
> +++ b/meson.build
> @@ -1289,7 +1289,7 @@ endif
> slirp = not_found
> if not get_option('slirp').auto() or have_system
> slirp = dependency('slirp', required: get_option('slirp'),
> - method: 'pkg-config')
> + method: 'pkg-config', version: '>=4.2.0')
> # slirp < 4.7 is incompatible with CFI support in QEMU. This is because
> # it passes function pointers within libslirp as callbacks for timers.
> # When using a system-wide shared libslirp, the type information for the
> diff --git a/net/slirp.c b/net/slirp.c
> index 451c0fd1ba..b0b03b2bf5 100644
> --- a/net/slirp.c
> +++ b/net/slirp.c
> @@ -1159,6 +1159,12 @@ static int slirp_guestfwd(SlirpState *s, const char *config_str, Error **errp)
> "forwarding rule '%s'", config_str);
> return -1;
> }
> + } else if (g_str_has_prefix(p, "unix-per-connection:")) {
This is rather a mouthful as a parameter name, and including '-'
in the name is undesirable, since we're already using '-' as a
general separator. Could it be just 'unix' to match the use
of 'unix' in hostfwd ?
> + if (slirp_add_unix(s->slirp, &p[20], &server, port) < 0) {
> + error_setg(errp, "Conflicting/invalid host:port in guest "
> + "forwarding rule '%s'", config_str);
> + return -1;
> + }
> } else {
> Error *err = NULL;
> /*
> diff --git a/qemu-options.hx b/qemu-options.hx
> index 5fe9d73eaa..062cd39aa3 100644
> --- a/qemu-options.hx
> +++ b/qemu-options.hx
> @@ -3553,6 +3553,15 @@ SRST
> # and connect the TCP stream to its stdin/stdout
> |qemu_system| -nic 'user,id=n1,guestfwd=tcp:10.0.2.100:1234-cmd:netcat 10.10.1.1 4321'
>
> + ``guestfwd=[tcp]:server:port-unix-per-connection:path``
> + With ``unix-per-connection:``, a new connection is opened to the
> + given unix socket per TCP connection made by the guest. The unix socket
> + need not exist at startup time.
I think the existing docs probably benefit from an update to
better show how the new parmeter is different from what I
would think was already the semantics.
> +
> + .. parsed-literal::
> +
> + |qemu_system| -nic user,guestfwd=tcp:10.0.2.100:1234-unix-per-connection:/tmp/socket
> +
> ``-netdev tap,id=id[,fd=h][,ifname=name][,script=file][,downscript=dfile][,br=bridge][,helper=helper]``
> Configure a host TAP network backend with ID id.
>
>
> base-commit: 71f25c75417d31c214ba2cd26b273c114fc99987
> --
> 2.55.0
>
With regards,
Daniel
--
|: https://berrange.com ~~ https://hachyderm.io/@berrange :|
|: https://libvirt.org ~~ https://entangle-photo.org :|
|: https://pixelfed.art/berrange ~~ https://fstop138.berrange.com :|
^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2026-11-12 15:22 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-11-07 4:42 [PATCH v1] net: add per-connection guestfwd unix support Gavin Li
2026-11-07 22:07 ` Samuel Thibault
2026-11-12 15:21 ` Daniel P. Berrangé
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.