From: Markus Armbruster <armbru@redhat.com>
To: Laurent Vivier <lvivier@redhat.com>
Cc: qemu-devel@nongnu.org,
"Marc-André Lureau" <marcandre.lureau@redhat.com>,
"Philippe Mathieu-Daudé" <philmd@linaro.org>,
"Daniel P. Berrangé" <berrange@redhat.com>,
"Stefan Weil" <sw@weilnetz.de>,
"Stefano Garzarella" <sgarzare@redhat.com>,
"Jason Wang" <jasowang@redhat.com>,
"Michael S. Tsirkin" <mst@redhat.com>,
"Dr. David Alan Gilbert" <dave@treblig.org>,
"Eric Blake" <eblake@redhat.com>,
"Paolo Bonzini" <pbonzini@redhat.com>
Subject: Re: [PATCH v2 09/10] net: Add passt network backend
Date: Tue, 24 Jun 2025 10:16:02 +0200 [thread overview]
Message-ID: <87pletlflp.fsf@pond.sub.org> (raw)
In-Reply-To: <20250618155718.550968-10-lvivier@redhat.com> (Laurent Vivier's message of "Wed, 18 Jun 2025 17:57:17 +0200")
Laurent Vivier <lvivier@redhat.com> writes:
> This commit introduces support for passt as a new network backend.
> passt is an unprivileged, user-mode networking solution that provides
> connectivity for virtual machines by launching an external helper process.
>
> The implementation reuses the generic stream data handling logic. It
> launches the passt binary using GSubprocess, passing it a file
> descriptor from a socketpair() for communication. QEMU connects to
> the other end of the socket pair to establish the network data stream.
>
> The PID of the passt daemon is tracked via a temporary file to
> ensure it is terminated when QEMU exits.
>
> Signed-off-by: Laurent Vivier <lvivier@redhat.com>
[...]
> diff --git a/qapi/net.json b/qapi/net.json
> index 97ea1839813b..76d7654414f7 100644
> --- a/qapi/net.json
> +++ b/qapi/net.json
> @@ -112,6 +112,125 @@
> 'data': {
> 'str': 'str' } }
>
> +##
> +# @NetDevPasstOptions:
> +#
> +# Unprivileged user-mode network connectivity using passt
> +#
> +# @path: path to passt binary
I'd prefer a more descriptive name.
Elsewhere in this file, we refer to programs like this:
# @script: script to initialize the interface
#
# @downscript: script to shut down the interface
passt isn't a script, of course.
I don't know, perhaps
# @passt-filename: the passt program to run.
or even
# @passt: Filename of the passt program to run.
> +#
> +# @quiet: don't print informational messages
What does the printing? A peek at the code I snipped suggests this flag
is passed to the passt binary as --quiet. Correct?
> +#
> +# @debug: be verbose
> +#
> +# @trace: extra verbose
Likewise for these two.
> +#
> +# @vhost-user: enable vhost-user
> +#
> +# @pcap-file: log traffic to pcap file
> +#
> +# @mtu: assign MTU via DHCP/NDP
> +#
> +# @address: IPv4 or IPv6 address
> +#
> +# @netmask: IPv4 mask
> +#
> +# @mac: source MAC address
> +#
> +# @gateway: IPv4 or IPv6 address as gateway
> +#
> +# @interface: interface for addresses and routes
> +#
> +# @outbound: bind to address as outbound source
> +#
> +# @outbound-if4: bind to outbound interface for IPv4
> +#
> +# @outbound-if6: bind to outbound interface for IPv6
> +#
> +# @dns: IPv4 or IPv6 address as DNS
> +#
> +# @search: search domains
> +#
> +# @fqdn: FQDN to configure client with
> +#
> +# @dhcp-dns: enable/disable DNS list in DHCP/DHCPv6/NDP
> +#
> +# @dhcp-search: enable/disable list in DHCP/DHCPv6/NDP
> +#
> +# @map-host-loopback: addresse to refer to host
> +#
> +# @map-guest-addr: addr to translate to guest's address
> +#
> +# @dns-forward: forward DNS queries sent to
> +#
> +# @dns-host: host nameserver to direct queries to
> +#
> +# @tcp: enable/disable TCP
> +#
> +# @udp: enable/disable UDP
> +#
> +# @icmp: enable/disable ICMP
> +#
> +# @dhcp: enable/disable DHCP
> +#
> +# @ndp: enable/disable NDP
> +#
> +# @dhcpv6: enable/disable DHCPv6
> +#
> +# @ra: enable/disable route advertisements
> +#
> +# @freebind: bind to any address for forwarding
> +#
> +# @ipv4: enable/disable IPv4
> +#
> +# @ipv6: enable/disable IPv6
> +#
> +# @tcp-ports: TCP ports to forward
> +#
> +# @udp-ports: UDP ports to forward
Is there anything in this struct that configures qemu-system-FOO itself,
i.e. isn't just passed to passt?
> +#
> +# Since: 10.1
> +##
> +{ 'struct': 'NetDevPasstOptions',
> + 'data': {
> + '*path': 'str',
> + '*quiet': 'bool',
> + '*debug': 'bool',
> + '*trace': 'bool',
> + '*vhost-user': 'bool',
> + '*pcap-file': 'str',
> + '*mtu': 'int',
> + '*address': 'str',
> + '*netmask': 'str',
> + '*mac': 'str',
> + '*gateway': 'str',
> + '*interface': 'str',
> + '*outbound': 'str',
> + '*outbound-if4': 'str',
> + '*outbound-if6': 'str',
> + '*dns': 'str',
> + '*search': ['String'],
> + '*fqdn': 'str',
> + '*dhcp-dns': 'bool',
> + '*dhcp-search': 'bool',
> + '*map-host-loopback': 'str',
> + '*map-guest-addr': 'str',
> + '*dns-forward': 'str',
> + '*dns-host': 'str',
> + '*tcp': 'bool',
> + '*udp': 'bool',
> + '*icmp': 'bool',
> + '*dhcp': 'bool',
> + '*ndp': 'bool',
> + '*dhcpv6': 'bool',
> + '*ra': 'bool',
> + '*freebind': 'bool',
> + '*ipv4': 'bool',
> + '*ipv6': 'bool',
> + '*tcp-ports': ['String'],
> + '*udp-ports': ['String'] },
> + 'if': 'CONFIG_PASST' }
> +
> ##
> # @NetdevUserOptions:
> #
> @@ -729,12 +848,15 @@
> #
> # @af-xdp: since 8.2
> #
> +# @passt: since 10.1
> +#
> # Since: 2.7
> ##
> { 'enum': 'NetClientDriver',
> 'data': [ 'none', 'nic', 'user', 'tap', 'l2tpv3', 'socket', 'stream',
> 'dgram', 'vde', 'bridge', 'hubport', 'netmap', 'vhost-user',
> 'vhost-vdpa',
> + { 'name': 'passt', 'if': 'CONFIG_PASST' },
> { 'name': 'af-xdp', 'if': 'CONFIG_AF_XDP' },
> { 'name': 'vmnet-host', 'if': 'CONFIG_VMNET' },
> { 'name': 'vmnet-shared', 'if': 'CONFIG_VMNET' },
> @@ -756,6 +878,8 @@
> 'discriminator': 'type',
> 'data': {
> 'nic': 'NetLegacyNicOptions',
> + 'passt': { 'type': 'NetDevPasstOptions',
> + 'if': 'CONFIG_PASST' },
> 'user': 'NetdevUserOptions',
> 'tap': 'NetdevTapOptions',
> 'l2tpv3': 'NetdevL2TPv3Options',
> diff --git a/qemu-options.hx b/qemu-options.hx
> index 1f862b19a676..4787f9309c69 100644
> --- a/qemu-options.hx
> +++ b/qemu-options.hx
> @@ -2796,6 +2796,18 @@ DEFHEADING()
> DEFHEADING(Network options:)
>
> DEF("netdev", HAS_ARG, QEMU_OPTION_netdev,
> +#ifdef CONFIG_PASST
> + "-netdev passt,id=str[,path=file][,quiet=on|off][,debug=on|off][,trace=on|off]\n"
> + " [,vhost-user=on|off][,pcap-file=file][,mtu=mtu]\n"
> + " [,address=addr][,netmask=mask][,mac=addr][,gateway=addr]\n"
> + " [,interface=name][,outbound=address][,outbound-if4=name]\n"
> + " [,outbound-if6=name][,dns=addr][,search=list][,fqdn=name]\n"
> + " [,dhcp-dns=on|off][,dhcp-search=on|off][,map-host-loopback=addr]\n"
> + " [,map-guest-addr=addr][,dns-forward=addr][,dns-host=addr]\n"
> + " [,tcp=on|off][,udp=on|off][,icmp=on|off][,dhcp=on|off]\n"
> + " [,ndp=on|off][,dhcpv6=on|off][,ra=on|off][,freebind=on|off]\n"
> + " [,ipv4=on|off][,ipv6=on|off][,tcp-ports=spec][,udp-ports=spec]\n"
No help here?
> +#endif
> #ifdef CONFIG_SLIRP
> "-netdev user,id=str[,ipv4=on|off][,net=addr[/mask]][,host=addr]\n"
> " [,ipv6=on|off][,ipv6-net=addr[/int]][,ipv6-host=addr]\n"
> @@ -2952,6 +2964,9 @@ DEF("netdev", HAS_ARG, QEMU_OPTION_netdev,
> " configure a hub port on the hub with ID 'n'\n", QEMU_ARCH_ALL)
> DEF("nic", HAS_ARG, QEMU_OPTION_nic,
> "-nic [tap|bridge|"
> +#ifdef CONFIG_PASST
> + "passt|"
> +#endif
> #ifdef CONFIG_SLIRP
> "user|"
> #endif
> @@ -2984,6 +2999,9 @@ DEF("net", HAS_ARG, QEMU_OPTION_net,
> " configure or create an on-board (or machine default) NIC and\n"
> " connect it to hub 0 (please use -nic unless you need a hub)\n"
> "-net ["
> +#ifdef CONFIG_PASST
> + "passt|"
> +#endif
> #ifdef CONFIG_SLIRP
> "user|"
> #endif
next prev parent reply other threads:[~2025-06-24 8:17 UTC|newest]
Thread overview: 23+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-06-18 15:57 [PATCH v2 00/10] net: Add passt netdev backend Laurent Vivier
2025-06-18 15:57 ` [PATCH v2 01/10] net: Refactor stream logic for reuse in '-net passt' Laurent Vivier
2025-06-18 15:57 ` [PATCH v2 02/10] net: Define net_client_set_link() Laurent Vivier
2025-06-18 15:57 ` [PATCH v2 03/10] net: Introduce helper to identify vhost-user clients Laurent Vivier
2025-07-01 1:36 ` Jason Wang
2025-06-18 15:57 ` [PATCH v2 04/10] net: Add get_vhost_net callback to NetClientInfo Laurent Vivier
2025-06-18 15:57 ` [PATCH v2 05/10] net: Consolidate vhost feature bits into NetClientInfo Laurent Vivier
2025-07-01 1:39 ` Jason Wang
2025-06-18 15:57 ` [PATCH v2 06/10] net: Add get_acked_features callback to NetClientInfo Laurent Vivier
2025-06-18 15:57 ` [PATCH v2 07/10] net: Add save_acked_features " Laurent Vivier
2025-06-18 15:57 ` [PATCH v2 08/10] net: Allow network backends to advertise max TX queue size Laurent Vivier
2025-06-18 15:57 ` [PATCH v2 09/10] net: Add passt network backend Laurent Vivier
2025-06-24 8:16 ` Markus Armbruster [this message]
2025-06-24 8:37 ` Laurent Vivier
2025-06-24 11:55 ` Markus Armbruster
2025-06-24 12:03 ` Daniel P. Berrangé
2025-06-24 12:47 ` Laurent Vivier
2025-06-25 6:57 ` Markus Armbruster
2025-06-30 14:22 ` Stefano Brivio
2025-07-01 1:46 ` Jason Wang
2025-07-01 13:00 ` Laurent Vivier
2025-07-03 10:27 ` Stefano Brivio
2025-06-18 15:57 ` [PATCH v2 10/10] net/passt: Implement vhost-user backend support Laurent Vivier
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=87pletlflp.fsf@pond.sub.org \
--to=armbru@redhat.com \
--cc=berrange@redhat.com \
--cc=dave@treblig.org \
--cc=eblake@redhat.com \
--cc=jasowang@redhat.com \
--cc=lvivier@redhat.com \
--cc=marcandre.lureau@redhat.com \
--cc=mst@redhat.com \
--cc=pbonzini@redhat.com \
--cc=philmd@linaro.org \
--cc=qemu-devel@nongnu.org \
--cc=sgarzare@redhat.com \
--cc=sw@weilnetz.de \
/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 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 NNTP newsgroup(s).