Laurent Vivier <lviv...@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 <lviv...@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 via email to