All of lore.kernel.org
 help / color / mirror / Atom feed
* [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.