mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-08-11 03:24:58 -06:00
monitor/hmp: move hmp_nbd_server* to block-hmp-cmds.c
Signed-off-by: Maxim Levitsky <mlevitsk@redhat.com> Reviewed-by: Dr. David Alan Gilbert <dgilbert@redhat.com> Message-Id: <20200308092440.23564-9-mlevitsk@redhat.com> Signed-off-by: Dr. David Alan Gilbert <dgilbert@redhat.com>
This commit is contained in:
parent
fce2b91fdf
commit
e263120ecc
4 changed files with 106 additions and 104 deletions
|
@ -45,9 +45,11 @@
|
||||||
#include "qapi/qmp/qerror.h"
|
#include "qapi/qmp/qerror.h"
|
||||||
#include "qemu/config-file.h"
|
#include "qemu/config-file.h"
|
||||||
#include "qemu/option.h"
|
#include "qemu/option.h"
|
||||||
|
#include "qemu/sockets.h"
|
||||||
#include "sysemu/sysemu.h"
|
#include "sysemu/sysemu.h"
|
||||||
#include "monitor/monitor.h"
|
#include "monitor/monitor.h"
|
||||||
#include "monitor/hmp.h"
|
#include "monitor/hmp.h"
|
||||||
|
#include "block/nbd.h"
|
||||||
#include "block/block_int.h"
|
#include "block/block_int.h"
|
||||||
#include "block/block-hmp-cmds.h"
|
#include "block/block-hmp-cmds.h"
|
||||||
|
|
||||||
|
@ -353,3 +355,102 @@ void hmp_snapshot_delete_blkdev_internal(Monitor *mon, const QDict *qdict)
|
||||||
true, name, &err);
|
true, name, &err);
|
||||||
hmp_handle_error(mon, 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;
|
||||||
|
BlockExportNbd export;
|
||||||
|
|
||||||
|
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;
|
||||||
|
}
|
||||||
|
|
||||||
|
export = (BlockExportNbd) {
|
||||||
|
.device = info->value->device,
|
||||||
|
.has_writable = true,
|
||||||
|
.writable = writable,
|
||||||
|
};
|
||||||
|
|
||||||
|
qmp_nbd_server_add(&export, &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;
|
||||||
|
|
||||||
|
BlockExportNbd export = {
|
||||||
|
.device = (char *) device,
|
||||||
|
.has_name = !!name,
|
||||||
|
.name = (char *) name,
|
||||||
|
.has_writable = true,
|
||||||
|
.writable = writable,
|
||||||
|
};
|
||||||
|
|
||||||
|
qmp_nbd_server_add(&export, &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);
|
||||||
|
}
|
||||||
|
|
|
@ -33,4 +33,9 @@ void hmp_snapshot_blkdev(Monitor *mon, const QDict *qdict);
|
||||||
void hmp_snapshot_blkdev_internal(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_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
|
#endif
|
||||||
|
|
|
@ -94,10 +94,6 @@ void hmp_getfd(Monitor *mon, const QDict *qdict);
|
||||||
void hmp_closefd(Monitor *mon, const QDict *qdict);
|
void hmp_closefd(Monitor *mon, const QDict *qdict);
|
||||||
void hmp_sendkey(Monitor *mon, const QDict *qdict);
|
void hmp_sendkey(Monitor *mon, const QDict *qdict);
|
||||||
void hmp_screendump(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_add(Monitor *mon, const QDict *qdict);
|
||||||
void hmp_chardev_change(Monitor *mon, const QDict *qdict);
|
void hmp_chardev_change(Monitor *mon, const QDict *qdict);
|
||||||
void hmp_chardev_remove(Monitor *mon, const QDict *qdict);
|
void hmp_chardev_remove(Monitor *mon, const QDict *qdict);
|
||||||
|
|
|
@ -47,7 +47,6 @@
|
||||||
#include "qapi/string-output-visitor.h"
|
#include "qapi/string-output-visitor.h"
|
||||||
#include "qom/object_interfaces.h"
|
#include "qom/object_interfaces.h"
|
||||||
#include "ui/console.h"
|
#include "ui/console.h"
|
||||||
#include "block/nbd.h"
|
|
||||||
#include "block/qapi.h"
|
#include "block/qapi.h"
|
||||||
#include "qemu-io.h"
|
#include "qemu-io.h"
|
||||||
#include "qemu/cutils.h"
|
#include "qemu/cutils.h"
|
||||||
|
@ -2176,105 +2175,6 @@ void hmp_screendump(Monitor *mon, const QDict *qdict)
|
||||||
hmp_handle_error(mon, 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;
|
|
||||||
BlockExportNbd export;
|
|
||||||
|
|
||||||
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;
|
|
||||||
}
|
|
||||||
|
|
||||||
export = (BlockExportNbd) {
|
|
||||||
.device = info->value->device,
|
|
||||||
.has_writable = true,
|
|
||||||
.writable = writable,
|
|
||||||
};
|
|
||||||
|
|
||||||
qmp_nbd_server_add(&export, &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;
|
|
||||||
|
|
||||||
BlockExportNbd export = {
|
|
||||||
.device = (char *) device,
|
|
||||||
.has_name = !!name,
|
|
||||||
.name = (char *) name,
|
|
||||||
.has_writable = true,
|
|
||||||
.writable = writable,
|
|
||||||
};
|
|
||||||
|
|
||||||
qmp_nbd_server_add(&export, &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)
|
void hmp_chardev_add(Monitor *mon, const QDict *qdict)
|
||||||
{
|
{
|
||||||
const char *args = qdict_get_str(qdict, "args");
|
const char *args = qdict_get_str(qdict, "args");
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue