root / qga / commands.c @ 0834c9ea
History | View | Annotate | Download (2 kB)
1 |
/*
|
---|---|
2 |
* QEMU Guest Agent common/cross-platform command implementations
|
3 |
*
|
4 |
* Copyright IBM Corp. 2012
|
5 |
*
|
6 |
* Authors:
|
7 |
* Michael Roth <mdroth@linux.vnet.ibm.com>
|
8 |
*
|
9 |
* This work is licensed under the terms of the GNU GPL, version 2 or later.
|
10 |
* See the COPYING file in the top-level directory.
|
11 |
*/
|
12 |
|
13 |
#include <glib.h> |
14 |
#include "qga/guest-agent-core.h" |
15 |
#include "qga-qmp-commands.h" |
16 |
#include "qerror.h" |
17 |
|
18 |
/* Note: in some situations, like with the fsfreeze, logging may be
|
19 |
* temporarilly disabled. if it is necessary that a command be able
|
20 |
* to log for accounting purposes, check ga_logging_enabled() beforehand,
|
21 |
* and use the QERR_QGA_LOGGING_DISABLED to generate an error
|
22 |
*/
|
23 |
void slog(const gchar *fmt, ...) |
24 |
{ |
25 |
va_list ap; |
26 |
|
27 |
va_start(ap, fmt); |
28 |
g_logv("syslog", G_LOG_LEVEL_INFO, fmt, ap);
|
29 |
va_end(ap); |
30 |
} |
31 |
|
32 |
int64_t qmp_guest_sync_delimited(int64_t id, Error **errp) |
33 |
{ |
34 |
ga_set_response_delimited(ga_state); |
35 |
return id;
|
36 |
} |
37 |
|
38 |
int64_t qmp_guest_sync(int64_t id, Error **errp) |
39 |
{ |
40 |
return id;
|
41 |
} |
42 |
|
43 |
void qmp_guest_ping(Error **err)
|
44 |
{ |
45 |
slog("guest-ping called");
|
46 |
} |
47 |
|
48 |
struct GuestAgentInfo *qmp_guest_info(Error **err)
|
49 |
{ |
50 |
GuestAgentInfo *info = g_malloc0(sizeof(GuestAgentInfo));
|
51 |
GuestAgentCommandInfo *cmd_info; |
52 |
GuestAgentCommandInfoList *cmd_info_list; |
53 |
char **cmd_list_head, **cmd_list;
|
54 |
|
55 |
info->version = g_strdup(QEMU_VERSION); |
56 |
|
57 |
cmd_list_head = cmd_list = qmp_get_command_list(); |
58 |
if (*cmd_list_head == NULL) { |
59 |
goto out;
|
60 |
} |
61 |
|
62 |
while (*cmd_list) {
|
63 |
cmd_info = g_malloc0(sizeof(GuestAgentCommandInfo));
|
64 |
cmd_info->name = strdup(*cmd_list); |
65 |
cmd_info->enabled = qmp_command_is_enabled(cmd_info->name); |
66 |
|
67 |
cmd_info_list = g_malloc0(sizeof(GuestAgentCommandInfoList));
|
68 |
cmd_info_list->value = cmd_info; |
69 |
cmd_info_list->next = info->supported_commands; |
70 |
info->supported_commands = cmd_info_list; |
71 |
|
72 |
g_free(*cmd_list); |
73 |
cmd_list++; |
74 |
} |
75 |
|
76 |
out:
|
77 |
g_free(cmd_list_head); |
78 |
return info;
|
79 |
} |