All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Daniel P. Berrangé" <berrange@redhat.com>
To: Gavin Li <gavin.li@samsara.com>
Cc: qemu-devel@nongnu.org, "Paolo Bonzini" <pbonzini@redhat.com>,
	"Marc-André Lureau" <marcandre.lureau@redhat.com>,
	"Pierrick Bouvier" <pierrick.bouvier@oss.qualcomm.com>,
	"Samuel Thibault" <samuel.thibault@ens-lyon.org>,
	"Jason Wang" <jasowangio@gmail.com>
Subject: Re: [PATCH v1] net: add per-connection guestfwd unix support
Date: Thu, 12 Nov 2026 15:21:20 +0000	[thread overview]
Message-ID: <avXZcIP3t8DExhse@redhat.com> (raw)
In-Reply-To: <20261107044225.2786-1-gavin.li@samsara.com>

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 :|



      parent reply	other threads:[~2026-11-12 15:22 UTC|newest]

Thread overview: 3+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
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 message]

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=avXZcIP3t8DExhse@redhat.com \
    --to=berrange@redhat.com \
    --cc=gavin.li@samsara.com \
    --cc=jasowangio@gmail.com \
    --cc=marcandre.lureau@redhat.com \
    --cc=pbonzini@redhat.com \
    --cc=pierrick.bouvier@oss.qualcomm.com \
    --cc=qemu-devel@nongnu.org \
    --cc=samuel.thibault@ens-lyon.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
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.