mirror of
https://github.com/qemu/qemu.git
synced 2024-11-24 11:23:43 +08:00
qga: Disable unsupported commands by default
Currently management softwares cannot know whether a qemu-ga command is supported or not on the running platform until they actually execute it. This patch disables unsupported commands at launch time of qemu-ga, so that management softwares can check whether they are supported from 'enabled' property of the result from 'guest-info' command. Signed-off-by: Tomoki Sekiyama <tomoki.sekiyama@hds.com> Signed-off-by: Michael Roth <mdroth@linux.vnet.ibm.com>
This commit is contained in:
parent
46d4c5723e
commit
1281c08a46
@ -1955,6 +1955,44 @@ void qmp_guest_fstrim(bool has_minimum, int64_t minimum, Error **errp)
|
||||
}
|
||||
#endif
|
||||
|
||||
/* add unsupported commands to the blacklist */
|
||||
GList *ga_command_blacklist_init(GList *blacklist)
|
||||
{
|
||||
#if !defined(__linux__)
|
||||
{
|
||||
const char *list[] = {
|
||||
"guest-suspend-disk", "guest-suspend-ram",
|
||||
"guest-suspend-hybrid", "guest-network-get-interfaces",
|
||||
"guest-get-vcpus", "guest-set-vcpus", NULL};
|
||||
char **p = (char **)list;
|
||||
|
||||
while (*p) {
|
||||
blacklist = g_list_append(blacklist, *p++);
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
#if !defined(CONFIG_FSFREEZE)
|
||||
{
|
||||
const char *list[] = {
|
||||
"guest-get-fsinfo", "guest-fsfreeze-status",
|
||||
"guest-fsfreeze-freeze", "guest-fsfreeze-freeze-list",
|
||||
"guest-fsfreeze-thaw", "guest-get-fsinfo", NULL};
|
||||
char **p = (char **)list;
|
||||
|
||||
while (*p) {
|
||||
blacklist = g_list_append(blacklist, *p++);
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
#if !defined(CONFIG_FSTRIM)
|
||||
blacklist = g_list_append(blacklist, (char *)"guest-fstrim");
|
||||
#endif
|
||||
|
||||
return blacklist;
|
||||
}
|
||||
|
||||
/* register init/cleanup routines for stateful command groups */
|
||||
void ga_command_state_init(GAState *s, GACommandState *cs)
|
||||
{
|
||||
|
@ -446,10 +446,40 @@ int64_t qmp_guest_set_vcpus(GuestLogicalProcessorList *vcpus, Error **errp)
|
||||
return -1;
|
||||
}
|
||||
|
||||
/* add unsupported commands to the blacklist */
|
||||
GList *ga_command_blacklist_init(GList *blacklist)
|
||||
{
|
||||
const char *list_unsupported[] = {
|
||||
"guest-file-open", "guest-file-close", "guest-file-read",
|
||||
"guest-file-write", "guest-file-seek", "guest-file-flush",
|
||||
"guest-suspend-hybrid", "guest-network-get-interfaces",
|
||||
"guest-get-vcpus", "guest-set-vcpus",
|
||||
"guest-fsfreeze-freeze-list", "guest-get-fsinfo",
|
||||
"guest-fstrim", NULL};
|
||||
char **p = (char **)list_unsupported;
|
||||
|
||||
while (*p) {
|
||||
blacklist = g_list_append(blacklist, *p++);
|
||||
}
|
||||
|
||||
if (!vss_init(true)) {
|
||||
const char *list[] = {
|
||||
"guest-get-fsinfo", "guest-fsfreeze-status",
|
||||
"guest-fsfreeze-freeze", "guest-fsfreeze-thaw", NULL};
|
||||
p = (char **)list;
|
||||
|
||||
while (*p) {
|
||||
blacklist = g_list_append(blacklist, *p++);
|
||||
}
|
||||
}
|
||||
|
||||
return blacklist;
|
||||
}
|
||||
|
||||
/* register init/cleanup routines for stateful command groups */
|
||||
void ga_command_state_init(GAState *s, GACommandState *cs)
|
||||
{
|
||||
if (vss_init(true)) {
|
||||
if (!vss_initialized()) {
|
||||
ga_command_state_add(cs, NULL, guest_fsfreeze_cleanup);
|
||||
}
|
||||
}
|
||||
|
@ -19,6 +19,7 @@ typedef struct GAState GAState;
|
||||
typedef struct GACommandState GACommandState;
|
||||
extern GAState *ga_state;
|
||||
|
||||
GList *ga_command_blacklist_init(GList *blacklist);
|
||||
void ga_command_state_init(GAState *s, GACommandState *cs);
|
||||
void ga_command_state_add(GACommandState *cs,
|
||||
void (*init)(void),
|
||||
|
@ -1144,6 +1144,7 @@ int main(int argc, char **argv)
|
||||
goto out_bad;
|
||||
}
|
||||
|
||||
blacklist = ga_command_blacklist_init(blacklist);
|
||||
if (blacklist) {
|
||||
s->blacklist = blacklist;
|
||||
do {
|
||||
|
Loading…
Reference in New Issue
Block a user