qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
* [RFC PATCH v4 00/11] qapi: net: add unix socket type support to netdev backend
@ 2022-06-23 15:53 Laurent Vivier
  2022-06-23 15:53 ` [RFC PATCH v4 01/11] net: introduce convert_host_port() Laurent Vivier
                   ` (10 more replies)
  0 siblings, 11 replies; 20+ messages in thread
From: Laurent Vivier @ 2022-06-23 15:53 UTC (permalink / raw)
  To: qemu-devel
  Cc: Markus Armbruster, Dr. David Alan Gilbert, Jason Wang,
	Paolo Bonzini, Eric Blake, Daniel P. Berrangé,
	Laurent Vivier, Ralph Schmieder, Stefano Brivio

"-netdev socket" only supports inet sockets.

It's not a complex task to add support for unix sockets, but
the socket netdev parameters are not defined to manage well unix
socket parameters.

As discussed in:

  "socket.c added support for unix domain socket datagram transport"
  https://lore.kernel.org/qemu-devel/1C0E1BC5-904F-46B0-8044-68E43E67BE60@gmail.com/

This series adds support of unix socket type using SocketAddress QAPI structure.

Two new netdev backends, "stream" and "dgram" are added, that are barely a copy of "socket"
backend but they use the SocketAddress QAPI to provide socket parameters.
And then they also implement unix sockets (TCP and UDP).

Some examples of CLI syntax:

  for TCP:

  -netdev stream,id=socket0,addr.type=inet,addr.host=localhost,addr.port=1234
  -netdev stream,id=socket0,server=off,addr.type=inet,addr.host=localhost,addr.port=1234

  -netdev dgram,id=socket0,\
          local.type=inet,local.host=localhost,local.port=1234,\
          remote.type=inet,remote.host=localhost,remote.port=1235

  for UNIX:

  -netdev stream,id=socket0,addr.type=unix,addr.path=/tmp/qemu0
  -netdev stream,id=socket0,server=off,addr.type=unix,addr.path=/tmp/qemu0

  -netdev dgram,id=socket0,\
          local.type=unix,local.path=/tmp/qemu0,\
          remote.type=unix,remote.path=/tmp/qemu1

  for FD:

  -netdev stream,id=socket0,addr.type=fd,addr.str=4
  -netdev stream,id=socket0,server=off,addr.type=fd,addr.str=5

  -netdev dgram,id=socket0,local.type=fd,addr.str=4

v4:
  - net_client_parse() fails with exit() rather than with return.
  - keep "{ 'name': 'vmnet-host', 'if': 'CONFIG_VMNET' }" on its
    own line in qapi/net.json
  - add a comment in qapi/net.json about parameters usage
  - move netdev_is_modern() check to qemu_init()
  - in netdev_is_modern(), check for JSON and use qemu_opts_do_parse()
    to parse parameters and detect type value.
  - add a blank line after copyright comment

v3:
  - remove support of "-net" for dgram and stream. They are only
    supported with "-netdev" option.
  - use &error_fatal directly in net_client_inits()
  - update qemu-options.hx
  - move to QIO for stream socket

v2:
  - use "stream" and "dgram" rather than "socket-ng,mode=stream"
    and ""socket-ng,mode=dgram"
  - extract code to bypass qemu_opts_parse_noisily() to
    a new patch
  - do not ignore EINVAL (Stefano)
  - fix "-net" option

CC: Ralph Schmieder <ralph.schmieder@gmail.com>
CC: Stefano Brivio <sbrivio@redhat.com>
CC: Daniel P. Berrangé <berrange@redhat.com>
CC: Markus Armbruster <armbru@redhat.com>

Laurent Vivier (10):
  net: introduce convert_host_port()
  net: remove the @errp argument of net_client_inits()
  qapi: net: introduce a way to bypass qemu_opts_parse_noisily()
  qapi: net: add stream and dgram netdevs
  net: stream: add unix socket
  net: dgram: make dgram_dst generic
  net: dgram: move mcast specific code from net_socket_fd_init_dgram()
  net: dgram: add unix socket
  qemu-sockets: introduce socket_uri()
  net: stream: move to QIO

Stefano Brivio (1):
  net: stream: Don't ignore EINVAL on netdev socket connection

 hmp-commands.hx        |   2 +-
 include/net/net.h      |   6 +-
 include/qemu/sockets.h |   4 +-
 monitor/hmp-cmds.c     |  23 +-
 net/clients.h          |   6 +
 net/dgram.c            | 707 +++++++++++++++++++++++++++++++++++++++++
 net/hub.c              |   2 +
 net/meson.build        |   2 +
 net/net.c              | 170 +++++++---
 net/stream.c           | 372 ++++++++++++++++++++++
 qapi/net.json          |  44 ++-
 qemu-options.hx        |  12 +
 softmmu/vl.c           |  16 +-
 util/qemu-sockets.c    |  20 ++
 14 files changed, 1304 insertions(+), 82 deletions(-)
 create mode 100644 net/dgram.c
 create mode 100644 net/stream.c

-- 
2.36.1



^ permalink raw reply	[flat|nested] 20+ messages in thread

end of thread, other threads:[~2022-07-04  5:10 UTC | newest]

Thread overview: 20+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2022-06-23 15:53 [RFC PATCH v4 00/11] qapi: net: add unix socket type support to netdev backend Laurent Vivier
2022-06-23 15:53 ` [RFC PATCH v4 01/11] net: introduce convert_host_port() Laurent Vivier
2022-06-23 15:53 ` [RFC PATCH v4 02/11] net: remove the @errp argument of net_client_inits() Laurent Vivier
2022-06-23 15:53 ` [RFC PATCH v4 03/11] qapi: net: introduce a way to bypass qemu_opts_parse_noisily() Laurent Vivier
2022-06-24  8:45   ` Markus Armbruster
2022-06-23 15:53 ` [RFC PATCH v4 04/11] qapi: net: add stream and dgram netdevs Laurent Vivier
2022-06-24  9:41   ` Markus Armbruster
2022-06-27 14:36     ` Laurent Vivier
2022-06-29 11:13       ` Markus Armbruster
2022-06-24  9:53   ` Markus Armbruster
2022-06-23 15:53 ` [RFC PATCH v4 05/11] net: stream: Don't ignore EINVAL on netdev socket connection Laurent Vivier
2022-06-23 15:53 ` [RFC PATCH v4 06/11] net: stream: add unix socket Laurent Vivier
2022-06-23 15:53 ` [RFC PATCH v4 07/11] net: dgram: make dgram_dst generic Laurent Vivier
2022-06-23 15:53 ` [RFC PATCH v4 08/11] net: dgram: move mcast specific code from net_socket_fd_init_dgram() Laurent Vivier
2022-06-23 15:53 ` [RFC PATCH v4 09/11] net: dgram: add unix socket Laurent Vivier
2022-06-23 15:53 ` [RFC PATCH v4 10/11] qemu-sockets: introduce socket_uri() Laurent Vivier
2022-06-29 11:26   ` Markus Armbruster
2022-07-01  9:36     ` Laurent Vivier
2022-07-04  5:08       ` Markus Armbruster
2022-06-23 15:53 ` [RFC PATCH v4 11/11] net: stream: move to QIO Laurent Vivier

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