On Wed, Oct 12, 2022 at 4:05 AM Laurent Vivier <lviv...@redhat.com> wrote: > > On 10/9/22 07:52, Jason Wang wrote: > > 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. > > I've found some minor problems. Could you queue incoming v11 instead?
Yes. Done. Thanks > > Thanks, > Laurent > > > > > 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 > >>> > >> > > >