Signed-off-by: Maxim Levitsky <mlevitsk@redhat.com>
---
block/monitor/block-hmp-cmds.c | 88 ++++++++++++++++++++++++++++++
include/block/block-hmp-commands.h | 5 ++
include/monitor/hmp.h | 4 --
monitor/hmp-cmds.c | 87 -----------------------------
4 files changed, 93 insertions(+), 91 deletions(-)
diff --git a/block/monitor/block-hmp-cmds.c b/block/monitor/block-hmp-cmds.c
index 9aa94ea6e0..df0178d0f9 100644
--- a/block/monitor/block-hmp-cmds.c
+++ b/block/monitor/block-hmp-cmds.c
@@ -22,8 +22,10 @@
#include "qapi/qmp/qerror.h"
#include "qemu/config-file.h"
#include "qemu/option.h"
+#include "qemu/sockets.h"
#include "sysemu/sysemu.h"
#include "monitor/monitor.h"
+#include "block/nbd.h"
#include "block/block_int.h"
#include "block/block-hmp-commands.h"
#include "monitor/hmp.h"
@@ -327,3 +329,89 @@ void hmp_snapshot_delete_blkdev_internal(Monitor *mon, const QDict *qdict)
true, name, &err);
hmp_handle_error(mon, err);
}
+
+void hmp_nbd_server_start(Monitor *mon, const QDict *qdict)
+{
+ const char *uri = qdict_get_str(qdict, "uri");
+ bool writable = qdict_get_try_bool(qdict, "writable", false);
+ bool all = qdict_get_try_bool(qdict, "all", false);
+ Error *local_err = NULL;
+ BlockInfoList *block_list, *info;
+ SocketAddress *addr;
+
+ if (writable && !all) {
+ error_setg(&local_err, "-w only valid together with -a");
+ goto exit;
+ }
+
+ /* First check if the address is valid and start the server. */
+ addr = socket_parse(uri, &local_err);
+ if (local_err != NULL) {
+ goto exit;
+ }
+
+ nbd_server_start(addr, NULL, NULL, &local_err);
+ qapi_free_SocketAddress(addr);
+ if (local_err != NULL) {
+ goto exit;
+ }
+
+ if (!all) {
+ return;
+ }
+
+ /* Then try adding all block devices. If one fails, close all and
+ * exit.
+ */
+ block_list = qmp_query_block(NULL);
+
+ for (info = block_list; info; info = info->next) {
+ if (!info->value->has_inserted) {
+ continue;
+ }
+
+ qmp_nbd_server_add(info->value->device, false, NULL,
+ true, writable, false, NULL, &local_err);
+
+ if (local_err != NULL) {
+ qmp_nbd_server_stop(NULL);
+ break;
+ }
+ }
+
+ qapi_free_BlockInfoList(block_list);
+
+exit:
+ hmp_handle_error(mon, local_err);
+}
+
+void hmp_nbd_server_add(Monitor *mon, const QDict *qdict)
+{
+ const char *device = qdict_get_str(qdict, "device");
+ const char *name = qdict_get_try_str(qdict, "name");
+ bool writable = qdict_get_try_bool(qdict, "writable", false);
+ Error *local_err = NULL;
+
+ qmp_nbd_server_add(device, !!name, name, true, writable,
+ false, NULL, &local_err);
+ hmp_handle_error(mon, local_err);
+}
+
+void hmp_nbd_server_remove(Monitor *mon, const QDict *qdict)
+{
+ const char *name = qdict_get_str(qdict, "name");
+ bool force = qdict_get_try_bool(qdict, "force", false);
+ Error *err = NULL;
+
+ /* Rely on NBD_SERVER_REMOVE_MODE_SAFE being the default */
+ qmp_nbd_server_remove(name, force, NBD_SERVER_REMOVE_MODE_HARD, &err);
+ hmp_handle_error(mon, err);
+}
+
+void hmp_nbd_server_stop(Monitor *mon, const QDict *qdict)
+{
+ Error *err = NULL;
+
+ qmp_nbd_server_stop(&err);
+ hmp_handle_error(mon, err);
+}
diff --git a/include/block/block-hmp-commands.h b/include/block/block-hmp-commands.h
index 3fc2daf3a9..721b9a1978 100644
--- a/include/block/block-hmp-commands.h
+++ b/include/block/block-hmp-commands.h
@@ -21,4 +21,9 @@ void hmp_snapshot_blkdev(Monitor *mon, const QDict *qdict);
void hmp_snapshot_blkdev_internal(Monitor *mon, const QDict *qdict);
void hmp_snapshot_delete_blkdev_internal(Monitor *mon, const QDict *qdict);
+void hmp_nbd_server_start(Monitor *mon, const QDict *qdict);
+void hmp_nbd_server_add(Monitor *mon, const QDict *qdict);
+void hmp_nbd_server_remove(Monitor *mon, const QDict *qdict);
+void hmp_nbd_server_stop(Monitor *mon, const QDict *qdict);
+
#endif
diff --git a/include/monitor/hmp.h b/include/monitor/hmp.h
index 6d34e29bb6..736a969131 100644
--- a/include/monitor/hmp.h
+++ b/include/monitor/hmp.h
@@ -94,10 +94,6 @@ void hmp_getfd(Monitor *mon, const QDict *qdict);
void hmp_closefd(Monitor *mon, const QDict *qdict);
void hmp_sendkey(Monitor *mon, const QDict *qdict);
void hmp_screendump(Monitor *mon, const QDict *qdict);
-void hmp_nbd_server_start(Monitor *mon, const QDict *qdict);
-void hmp_nbd_server_add(Monitor *mon, const QDict *qdict);
-void hmp_nbd_server_remove(Monitor *mon, const QDict *qdict);
-void hmp_nbd_server_stop(Monitor *mon, const QDict *qdict);
void hmp_chardev_add(Monitor *mon, const QDict *qdict);
void hmp_chardev_change(Monitor *mon, const QDict *qdict);
void hmp_chardev_remove(Monitor *mon, const QDict *qdict);
diff --git a/monitor/hmp-cmds.c b/monitor/hmp-cmds.c
index 46b46b6dd7..67d2ca8a4c 100644
--- a/monitor/hmp-cmds.c
+++ b/monitor/hmp-cmds.c
@@ -45,7 +45,6 @@
#include "qapi/string-output-visitor.h"
#include "qom/object_interfaces.h"
#include "ui/console.h"
-#include "block/nbd.h"
#include "block/qapi.h"
#include "qemu-io.h"
#include "qemu/cutils.h"
@@ -2154,92 +2153,6 @@ void hmp_screendump(Monitor *mon, const QDict *qdict)
hmp_handle_error(mon, err);
}
-void hmp_nbd_server_start(Monitor *mon, const QDict *qdict)
-{
- const char *uri = qdict_get_str(qdict, "uri");
- bool writable = qdict_get_try_bool(qdict, "writable", false);
- bool all = qdict_get_try_bool(qdict, "all", false);
- Error *local_err = NULL;
- BlockInfoList *block_list, *info;
- SocketAddress *addr;
-
- if (writable && !all) {
- error_setg(&local_err, "-w only valid together with -a");
- goto exit;
- }
-
- /* First check if the address is valid and start the server. */
- addr = socket_parse(uri, &local_err);
- if (local_err != NULL) {
- goto exit;
- }
-
- nbd_server_start(addr, NULL, NULL, &local_err);
- qapi_free_SocketAddress(addr);
- if (local_err != NULL) {
- goto exit;
- }
-
- if (!all) {
- return;
- }
-
- /* Then try adding all block devices. If one fails, close all and
- * exit.
- */
- block_list = qmp_query_block(NULL);
-
- for (info = block_list; info; info = info->next) {
- if (!info->value->has_inserted) {
- continue;
- }
-
- qmp_nbd_server_add(info->value->device, false, NULL,
- true, writable, false, NULL, &local_err);
-
- if (local_err != NULL) {
- qmp_nbd_server_stop(NULL);
- break;
- }
- }
-
- qapi_free_BlockInfoList(block_list);
-
-exit:
- hmp_handle_error(mon, local_err);
-}
-
-void hmp_nbd_server_add(Monitor *mon, const QDict *qdict)
-{
- const char *device = qdict_get_str(qdict, "device");
- const char *name = qdict_get_try_str(qdict, "name");
- bool writable = qdict_get_try_bool(qdict, "writable", false);
- Error *local_err = NULL;
-
- qmp_nbd_server_add(device, !!name, name, true, writable,
- false, NULL, &local_err);
- hmp_handle_error(mon, local_err);
-}
-
-void hmp_nbd_server_remove(Monitor *mon, const QDict *qdict)
-{
- const char *name = qdict_get_str(qdict, "name");
- bool force = qdict_get_try_bool(qdict, "force", false);
- Error *err = NULL;
-
- /* Rely on NBD_SERVER_REMOVE_MODE_SAFE being the default */
- qmp_nbd_server_remove(name, force, NBD_SERVER_REMOVE_MODE_HARD, &err);
- hmp_handle_error(mon, err);
-}
-
-void hmp_nbd_server_stop(Monitor *mon, const QDict *qdict)
-{
- Error *err = NULL;
-
- qmp_nbd_server_stop(&err);
- hmp_handle_error(mon, err);
-}
-
void hmp_chardev_add(Monitor *mon, const QDict *qdict)
{
const char *args = qdict_get_str(qdict, "args");
--
2.17.2
* Maxim Levitsky (mlevitsk@redhat.com) wrote:
> Signed-off-by: Maxim Levitsky <mlevitsk@redhat.com>
Yes, I think that's OK; I can imagine nbd might want to move on it's own
somewhere since it's not really core block code; copying in Eric.
Reviewed-by: Dr. David Alan Gilbert <dgilbert@redhat.com>
> ---
> block/monitor/block-hmp-cmds.c | 88 ++++++++++++++++++++++++++++++
> include/block/block-hmp-commands.h | 5 ++
> include/monitor/hmp.h | 4 --
> monitor/hmp-cmds.c | 87 -----------------------------
> 4 files changed, 93 insertions(+), 91 deletions(-)
>
> diff --git a/block/monitor/block-hmp-cmds.c b/block/monitor/block-hmp-cmds.c
> index 9aa94ea6e0..df0178d0f9 100644
> --- a/block/monitor/block-hmp-cmds.c
> +++ b/block/monitor/block-hmp-cmds.c
> @@ -22,8 +22,10 @@
> #include "qapi/qmp/qerror.h"
> #include "qemu/config-file.h"
> #include "qemu/option.h"
> +#include "qemu/sockets.h"
> #include "sysemu/sysemu.h"
> #include "monitor/monitor.h"
> +#include "block/nbd.h"
> #include "block/block_int.h"
> #include "block/block-hmp-commands.h"
> #include "monitor/hmp.h"
> @@ -327,3 +329,89 @@ void hmp_snapshot_delete_blkdev_internal(Monitor *mon, const QDict *qdict)
> true, name, &err);
> hmp_handle_error(mon, err);
> }
> +
> +void hmp_nbd_server_start(Monitor *mon, const QDict *qdict)
> +{
> + const char *uri = qdict_get_str(qdict, "uri");
> + bool writable = qdict_get_try_bool(qdict, "writable", false);
> + bool all = qdict_get_try_bool(qdict, "all", false);
> + Error *local_err = NULL;
> + BlockInfoList *block_list, *info;
> + SocketAddress *addr;
> +
> + if (writable && !all) {
> + error_setg(&local_err, "-w only valid together with -a");
> + goto exit;
> + }
> +
> + /* First check if the address is valid and start the server. */
> + addr = socket_parse(uri, &local_err);
> + if (local_err != NULL) {
> + goto exit;
> + }
> +
> + nbd_server_start(addr, NULL, NULL, &local_err);
> + qapi_free_SocketAddress(addr);
> + if (local_err != NULL) {
> + goto exit;
> + }
> +
> + if (!all) {
> + return;
> + }
> +
> + /* Then try adding all block devices. If one fails, close all and
> + * exit.
> + */
> + block_list = qmp_query_block(NULL);
> +
> + for (info = block_list; info; info = info->next) {
> + if (!info->value->has_inserted) {
> + continue;
> + }
> +
> + qmp_nbd_server_add(info->value->device, false, NULL,
> + true, writable, false, NULL, &local_err);
> +
> + if (local_err != NULL) {
> + qmp_nbd_server_stop(NULL);
> + break;
> + }
> + }
> +
> + qapi_free_BlockInfoList(block_list);
> +
> +exit:
> + hmp_handle_error(mon, local_err);
> +}
> +
> +void hmp_nbd_server_add(Monitor *mon, const QDict *qdict)
> +{
> + const char *device = qdict_get_str(qdict, "device");
> + const char *name = qdict_get_try_str(qdict, "name");
> + bool writable = qdict_get_try_bool(qdict, "writable", false);
> + Error *local_err = NULL;
> +
> + qmp_nbd_server_add(device, !!name, name, true, writable,
> + false, NULL, &local_err);
> + hmp_handle_error(mon, local_err);
> +}
> +
> +void hmp_nbd_server_remove(Monitor *mon, const QDict *qdict)
> +{
> + const char *name = qdict_get_str(qdict, "name");
> + bool force = qdict_get_try_bool(qdict, "force", false);
> + Error *err = NULL;
> +
> + /* Rely on NBD_SERVER_REMOVE_MODE_SAFE being the default */
> + qmp_nbd_server_remove(name, force, NBD_SERVER_REMOVE_MODE_HARD, &err);
> + hmp_handle_error(mon, err);
> +}
> +
> +void hmp_nbd_server_stop(Monitor *mon, const QDict *qdict)
> +{
> + Error *err = NULL;
> +
> + qmp_nbd_server_stop(&err);
> + hmp_handle_error(mon, err);
> +}
> diff --git a/include/block/block-hmp-commands.h b/include/block/block-hmp-commands.h
> index 3fc2daf3a9..721b9a1978 100644
> --- a/include/block/block-hmp-commands.h
> +++ b/include/block/block-hmp-commands.h
> @@ -21,4 +21,9 @@ void hmp_snapshot_blkdev(Monitor *mon, const QDict *qdict);
> void hmp_snapshot_blkdev_internal(Monitor *mon, const QDict *qdict);
> void hmp_snapshot_delete_blkdev_internal(Monitor *mon, const QDict *qdict);
>
> +void hmp_nbd_server_start(Monitor *mon, const QDict *qdict);
> +void hmp_nbd_server_add(Monitor *mon, const QDict *qdict);
> +void hmp_nbd_server_remove(Monitor *mon, const QDict *qdict);
> +void hmp_nbd_server_stop(Monitor *mon, const QDict *qdict);
> +
> #endif
> diff --git a/include/monitor/hmp.h b/include/monitor/hmp.h
> index 6d34e29bb6..736a969131 100644
> --- a/include/monitor/hmp.h
> +++ b/include/monitor/hmp.h
> @@ -94,10 +94,6 @@ void hmp_getfd(Monitor *mon, const QDict *qdict);
> void hmp_closefd(Monitor *mon, const QDict *qdict);
> void hmp_sendkey(Monitor *mon, const QDict *qdict);
> void hmp_screendump(Monitor *mon, const QDict *qdict);
> -void hmp_nbd_server_start(Monitor *mon, const QDict *qdict);
> -void hmp_nbd_server_add(Monitor *mon, const QDict *qdict);
> -void hmp_nbd_server_remove(Monitor *mon, const QDict *qdict);
> -void hmp_nbd_server_stop(Monitor *mon, const QDict *qdict);
> void hmp_chardev_add(Monitor *mon, const QDict *qdict);
> void hmp_chardev_change(Monitor *mon, const QDict *qdict);
> void hmp_chardev_remove(Monitor *mon, const QDict *qdict);
> diff --git a/monitor/hmp-cmds.c b/monitor/hmp-cmds.c
> index 46b46b6dd7..67d2ca8a4c 100644
> --- a/monitor/hmp-cmds.c
> +++ b/monitor/hmp-cmds.c
> @@ -45,7 +45,6 @@
> #include "qapi/string-output-visitor.h"
> #include "qom/object_interfaces.h"
> #include "ui/console.h"
> -#include "block/nbd.h"
> #include "block/qapi.h"
> #include "qemu-io.h"
> #include "qemu/cutils.h"
> @@ -2154,92 +2153,6 @@ void hmp_screendump(Monitor *mon, const QDict *qdict)
> hmp_handle_error(mon, err);
> }
>
> -void hmp_nbd_server_start(Monitor *mon, const QDict *qdict)
> -{
> - const char *uri = qdict_get_str(qdict, "uri");
> - bool writable = qdict_get_try_bool(qdict, "writable", false);
> - bool all = qdict_get_try_bool(qdict, "all", false);
> - Error *local_err = NULL;
> - BlockInfoList *block_list, *info;
> - SocketAddress *addr;
> -
> - if (writable && !all) {
> - error_setg(&local_err, "-w only valid together with -a");
> - goto exit;
> - }
> -
> - /* First check if the address is valid and start the server. */
> - addr = socket_parse(uri, &local_err);
> - if (local_err != NULL) {
> - goto exit;
> - }
> -
> - nbd_server_start(addr, NULL, NULL, &local_err);
> - qapi_free_SocketAddress(addr);
> - if (local_err != NULL) {
> - goto exit;
> - }
> -
> - if (!all) {
> - return;
> - }
> -
> - /* Then try adding all block devices. If one fails, close all and
> - * exit.
> - */
> - block_list = qmp_query_block(NULL);
> -
> - for (info = block_list; info; info = info->next) {
> - if (!info->value->has_inserted) {
> - continue;
> - }
> -
> - qmp_nbd_server_add(info->value->device, false, NULL,
> - true, writable, false, NULL, &local_err);
> -
> - if (local_err != NULL) {
> - qmp_nbd_server_stop(NULL);
> - break;
> - }
> - }
> -
> - qapi_free_BlockInfoList(block_list);
> -
> -exit:
> - hmp_handle_error(mon, local_err);
> -}
> -
> -void hmp_nbd_server_add(Monitor *mon, const QDict *qdict)
> -{
> - const char *device = qdict_get_str(qdict, "device");
> - const char *name = qdict_get_try_str(qdict, "name");
> - bool writable = qdict_get_try_bool(qdict, "writable", false);
> - Error *local_err = NULL;
> -
> - qmp_nbd_server_add(device, !!name, name, true, writable,
> - false, NULL, &local_err);
> - hmp_handle_error(mon, local_err);
> -}
> -
> -void hmp_nbd_server_remove(Monitor *mon, const QDict *qdict)
> -{
> - const char *name = qdict_get_str(qdict, "name");
> - bool force = qdict_get_try_bool(qdict, "force", false);
> - Error *err = NULL;
> -
> - /* Rely on NBD_SERVER_REMOVE_MODE_SAFE being the default */
> - qmp_nbd_server_remove(name, force, NBD_SERVER_REMOVE_MODE_HARD, &err);
> - hmp_handle_error(mon, err);
> -}
> -
> -void hmp_nbd_server_stop(Monitor *mon, const QDict *qdict)
> -{
> - Error *err = NULL;
> -
> - qmp_nbd_server_stop(&err);
> - hmp_handle_error(mon, err);
> -}
> -
> void hmp_chardev_add(Monitor *mon, const QDict *qdict)
> {
> const char *args = qdict_get_str(qdict, "args");
> --
> 2.17.2
>
--
Dr. David Alan Gilbert / dgilbert@redhat.com / Manchester, UK
On 1/28/20 12:56 PM, Dr. David Alan Gilbert wrote: > * Maxim Levitsky (mlevitsk@redhat.com) wrote: >> Signed-off-by: Maxim Levitsky <mlevitsk@redhat.com> > > Yes, I think that's OK; I can imagine nbd might want to move on it's own > somewhere since it's not really core block code; copying in Eric. I think that nbd-server-start and friends ARE related to core block code; they do not work without a BDS node. It's not the same as a block driver, though, in that it is exposing the BDS to the outside world, rather than connecting an outside resource for use internally by the guest. At any rate, block-hmp-cmds.c seems reasonable enough as a new location for these HMP commands. > > > Reviewed-by: Dr. David Alan Gilbert <dgilbert@redhat.com> > >> --- >> block/monitor/block-hmp-cmds.c | 88 ++++++++++++++++++++++++++++++ >> include/block/block-hmp-commands.h | 5 ++ >> include/monitor/hmp.h | 4 -- >> monitor/hmp-cmds.c | 87 ----------------------------- >> 4 files changed, 93 insertions(+), 91 deletions(-) >> Reviewed-by: Eric Blake <eblake@redhat.com> -- Eric Blake, Principal Software Engineer Red Hat, Inc. +1-919-301-3226 Virtualization: qemu.org | libvirt.org
© 2016 - 2026 Red Hat, Inc.