On Thu, Oct 6, 2022 at 7:21 PM Michael S. Tsirkin <m...@redhat.com> wrote: > > On Wed, Oct 05, 2022 at 06:20:34PM +0200, Laurent Vivier wrote: > > "-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. > > Looks good. > > Acked-by: Michael S. Tsirkin <m...@redhat.com> > > Belongs in Jason's tree.
I've queued this series. Thanks > > > As discussed in: > > > > "socket.c added support for unix domain socket datagram transport" > > > > https://lore.kernel.org/qemu-devel/1c0e1bc5-904f-46b0-8044-68e43e67b...@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 > > > > v10: > > - add Red Hat copyright > > - initialize dgram_dst to NULL in SOCKET_ADDRESS_TYPE_FD > > - remove redundente _stream / _dgram in functions name > > - move net_dgram_init() into net_init_dgram() > > - address Thomas' comments on qtest > > - add a function qemu_set_info_str() to set info string > > - tested stream netdev with fd type using qrap/passt and > > "-netdev stream,addr.type=fd,server=off,addr.str=5,id=netdev0" > > > > v9: > > - add events to report stream connection/disconnection > > - remove from net/dgram.c send_fn, listen_fd, net_dgram_accept() > > net_dgram_connect() and net_dgram_send() that are only > > needed by net/stream.c > > - remove from net/stream.c send_fn > > - add Red Hat copyright > > - add original net/socket.c Stefano's patch (EINVAL) > > > > v8: > > - test ipv4 and ipv6 parameters (stream inet) > > - test abstract parameter (stream unix) > > - add SocketAddressInet supported parameters in qemu-options.hx > > (only stream, supported by the move to QIO) > > - with qio_channel_writev() replace (ret == -1 && errno == EAGAIN) > > by (ret == QIO_CHANNEL_ERR_BLOCK) > > > > v7: > > - add qtests > > - update parameters table in net.json > > - update socket_uri() and socket_parse() > > > > v6: > > - s/netdev option/-netdev option/ PATCH 4 > > - s/ / / > > - update @NetdevStreamOptions and @NetdevDgramOptions comments > > - update PATCH 4 description message > > - add missing return in error case for unix stream socket > > - split socket_uri() patch: move and rename, then change content > > > > v5: > > - remove RFC prefix > > - put the change of net_client_parse() into its own patch (exit() in the > > function) > > - update comments regarding netdev_is_modern() and netdev_parse_modern() > > - update error case in net_stream_server_init() > > - update qemu-options.hx with unix type > > - fix HMP "info network" with unix protocol/server side. > > > > 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.schmie...@gmail.com> > > CC: Stefano Brivio <sbri...@redhat.com> > > CC: Daniel P. Berrangé <berra...@redhat.com> > > CC: Markus Armbruster <arm...@redhat.com> > > > > Laurent Vivier (15): > > net: introduce convert_host_port() > > net: remove the @errp argument of net_client_inits() > > net: simplify net_client_parse() error management > > qapi: net: introduce a way to bypass qemu_opts_parse_noisily() > > net: introduce qemu_set_info_str() function > > 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: move and rename SocketAddress_to_str() > > qemu-sockets: update socket_uri() and socket_parse() to be consistent > > net: stream: move to QIO to enable additional parameters > > tests/qtest: netdev: test stream and dgram backends > > net: stream: add QAPI events to report connection state > > > > Stefano Brivio (2): > > net: socket: Don't ignore EINVAL on netdev socket connection > > net: stream: Don't ignore EINVAL on netdev socket connection > > > > hmp-commands.hx | 2 +- > > include/net/net.h | 7 +- > > include/qemu/sockets.h | 4 +- > > monitor/hmp-cmds.c | 23 +- > > net/clients.h | 6 + > > net/dgram.c | 622 ++++++++++++++++++++++++++++++++++++ > > net/hub.c | 2 + > > net/l2tpv3.c | 3 +- > > net/meson.build | 2 + > > net/net.c | 186 ++++++++--- > > net/slirp.c | 5 +- > > net/socket.c | 36 +-- > > net/stream.c | 382 ++++++++++++++++++++++ > > net/tap-win32.c | 3 +- > > net/tap.c | 13 +- > > net/vde.c | 3 +- > > net/vhost-user.c | 3 +- > > net/vhost-vdpa.c | 2 +- > > qapi/net.json | 108 ++++++- > > qemu-options.hx | 14 + > > softmmu/vl.c | 16 +- > > tests/qtest/meson.build | 1 + > > tests/qtest/netdev-socket.c | 417 ++++++++++++++++++++++++ > > util/qemu-sockets.c | 25 ++ > > 24 files changed, 1757 insertions(+), 128 deletions(-) > > create mode 100644 net/dgram.c > > create mode 100644 net/stream.c > > create mode 100644 tests/qtest/netdev-socket.c > > > > -- > > 2.37.3 > > >