mirror of
https://github.com/qemu/qemu.git
synced 2024-11-25 03:43:37 +08:00
2b54aa879e
There are three important remarks in relation to the non-qapi command: 1. This commit also fixes the behavior of the 'query-vnc' and 'info vnc' commands to return an error when qemu is built without VNC support (ie. --disable-vnc). The non-qapi command would return the OK response in QMP and no response in HMP 2. The qapi version explicitly marks the fields 'host', 'family', 'service' and 'auth' as optional. Their are not documented as optional in the non-qapi command doc, but they would not be returned if vnc support is disabled. The qapi version maintains the same semantics, but documents those fields correctly 3. The 'clients' field, which is a list, is marked as optional but is always returned. If there are no clients connected an empty list is returned. This is not the Right Way to this in the qapi but it's how the non-qapi command used to work Signed-off-by: Anthony Liguori <aliguori@us.ibm.com> Signed-off-by: Luiz Capitulino <lcapitulino@redhat.com>
108 lines
2.2 KiB
C
108 lines
2.2 KiB
C
/*
|
|
* QEMU Management Protocol
|
|
*
|
|
* Copyright IBM, Corp. 2011
|
|
*
|
|
* Authors:
|
|
* Anthony Liguori <aliguori@us.ibm.com>
|
|
*
|
|
* This work is licensed under the terms of the GNU GPL, version 2. See
|
|
* the COPYING file in the top-level directory.
|
|
*
|
|
*/
|
|
|
|
#include "qemu-common.h"
|
|
#include "sysemu.h"
|
|
#include "qmp-commands.h"
|
|
#include "kvm.h"
|
|
#include "arch_init.h"
|
|
|
|
NameInfo *qmp_query_name(Error **errp)
|
|
{
|
|
NameInfo *info = g_malloc0(sizeof(*info));
|
|
|
|
if (qemu_name) {
|
|
info->has_name = true;
|
|
info->name = g_strdup(qemu_name);
|
|
}
|
|
|
|
return info;
|
|
}
|
|
|
|
VersionInfo *qmp_query_version(Error **err)
|
|
{
|
|
VersionInfo *info = g_malloc0(sizeof(*info));
|
|
const char *version = QEMU_VERSION;
|
|
char *tmp;
|
|
|
|
info->qemu.major = strtol(version, &tmp, 10);
|
|
tmp++;
|
|
info->qemu.minor = strtol(tmp, &tmp, 10);
|
|
tmp++;
|
|
info->qemu.micro = strtol(tmp, &tmp, 10);
|
|
info->package = g_strdup(QEMU_PKGVERSION);
|
|
|
|
return info;
|
|
}
|
|
|
|
KvmInfo *qmp_query_kvm(Error **errp)
|
|
{
|
|
KvmInfo *info = g_malloc0(sizeof(*info));
|
|
|
|
info->enabled = kvm_enabled();
|
|
info->present = kvm_available();
|
|
|
|
return info;
|
|
}
|
|
|
|
UuidInfo *qmp_query_uuid(Error **errp)
|
|
{
|
|
UuidInfo *info = g_malloc0(sizeof(*info));
|
|
char uuid[64];
|
|
|
|
snprintf(uuid, sizeof(uuid), UUID_FMT, qemu_uuid[0], qemu_uuid[1],
|
|
qemu_uuid[2], qemu_uuid[3], qemu_uuid[4], qemu_uuid[5],
|
|
qemu_uuid[6], qemu_uuid[7], qemu_uuid[8], qemu_uuid[9],
|
|
qemu_uuid[10], qemu_uuid[11], qemu_uuid[12], qemu_uuid[13],
|
|
qemu_uuid[14], qemu_uuid[15]);
|
|
|
|
info->UUID = g_strdup(uuid);
|
|
return info;
|
|
}
|
|
|
|
void qmp_quit(Error **err)
|
|
{
|
|
no_shutdown = 0;
|
|
qemu_system_shutdown_request();
|
|
}
|
|
|
|
void qmp_stop(Error **errp)
|
|
{
|
|
vm_stop(RUN_STATE_PAUSED);
|
|
}
|
|
|
|
void qmp_system_reset(Error **errp)
|
|
{
|
|
qemu_system_reset_request();
|
|
}
|
|
|
|
void qmp_system_powerdown(Error **erp)
|
|
{
|
|
qemu_system_powerdown_request();
|
|
}
|
|
|
|
void qmp_cpu(int64_t index, Error **errp)
|
|
{
|
|
/* Just do nothing */
|
|
}
|
|
|
|
#ifndef CONFIG_VNC
|
|
/* If VNC support is enabled, the "true" query-vnc command is
|
|
defined in the VNC subsystem */
|
|
VncInfo *qmp_query_vnc(Error **errp)
|
|
{
|
|
error_set(errp, QERR_FEATURE_DISABLED, "vnc");
|
|
return NULL;
|
|
};
|
|
#endif
|