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

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.