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



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