X-Git-Url: https://repo.jachan.dev/qemu.git/blobdiff_plain/c9662023ab97cd163bb5525bf5007422fdff7983..c5c752af8cddad3e4e51acef40a46db998638144:/blockdev-nbd.c diff --git a/blockdev-nbd.c b/blockdev-nbd.c index ca41cc6fdd..28f551a7b0 100644 --- a/blockdev-nbd.c +++ b/blockdev-nbd.c @@ -16,7 +16,6 @@ #include "qapi/qmp/qerror.h" #include "sysemu/sysemu.h" #include "qmp-commands.h" -#include "trace.h" #include "block/nbd.h" #include "io/channel-socket.h" @@ -28,6 +27,10 @@ typedef struct NBDServerData { static NBDServerData *nbd_server; +static void nbd_blockdev_client_closed(NBDClient *client, bool ignored) +{ + nbd_client_put(client); +} static gboolean nbd_accept(QIOChannel *ioc, GIOCondition condition, gpointer opaque) @@ -44,9 +47,10 @@ static gboolean nbd_accept(QIOChannel *ioc, GIOCondition condition, return TRUE; } + qio_channel_set_name(QIO_CHANNEL(cioc), "nbd-server"); nbd_client_new(NULL, cioc, nbd_server->tlscreds, NULL, - nbd_client_put); + nbd_blockdev_client_closed); object_unref(OBJECT(cioc)); return TRUE; } @@ -99,9 +103,8 @@ static QCryptoTLSCreds *nbd_get_tls_creds(const char *id, Error **errp) } -void qmp_nbd_server_start(SocketAddress *addr, - bool has_tls_creds, const char *tls_creds, - Error **errp) +void nbd_server_start(SocketAddress *addr, const char *tls_creds, + Error **errp) { if (nbd_server) { error_setg(errp, "NBD server already running"); @@ -111,18 +114,21 @@ void qmp_nbd_server_start(SocketAddress *addr, nbd_server = g_new0(NBDServerData, 1); nbd_server->watch = -1; nbd_server->listen_ioc = qio_channel_socket_new(); + qio_channel_set_name(QIO_CHANNEL(nbd_server->listen_ioc), + "nbd-listener"); if (qio_channel_socket_listen_sync( nbd_server->listen_ioc, addr, errp) < 0) { goto error; } - if (has_tls_creds) { + if (tls_creds) { nbd_server->tlscreds = nbd_get_tls_creds(tls_creds, errp); if (!nbd_server->tlscreds) { goto error; } - if (addr->type != SOCKET_ADDRESS_KIND_INET) { + /* TODO SOCKET_ADDRESS_TYPE_FD where fd has AF_INET or AF_INET6 */ + if (addr->type != SOCKET_ADDRESS_TYPE_INET) { error_setg(errp, "TLS is only supported with IPv4/IPv6"); goto error; } @@ -142,6 +148,16 @@ void qmp_nbd_server_start(SocketAddress *addr, nbd_server = NULL; } +void qmp_nbd_server_start(SocketAddressLegacy *addr, + bool has_tls_creds, const char *tls_creds, + Error **errp) +{ + SocketAddress *addr_flat = socket_address_flatten(addr); + + nbd_server_start(addr_flat, tls_creds, errp); + qapi_free_SocketAddress(addr_flat); +} + void qmp_nbd_server_add(const char *device, bool has_writable, bool writable, Error **errp) {