Statistics
| Branch: | Revision:

root / hmp.c @ 19bf7c87

History | View | Annotate | Download (19.7 kB)

1 48a32bed Anthony Liguori
/*
2 48a32bed Anthony Liguori
 * Human Monitor Interface
3 48a32bed Anthony Liguori
 *
4 48a32bed Anthony Liguori
 * Copyright IBM, Corp. 2011
5 48a32bed Anthony Liguori
 *
6 48a32bed Anthony Liguori
 * Authors:
7 48a32bed Anthony Liguori
 *  Anthony Liguori   <aliguori@us.ibm.com>
8 48a32bed Anthony Liguori
 *
9 48a32bed Anthony Liguori
 * This work is licensed under the terms of the GNU GPL, version 2.  See
10 48a32bed Anthony Liguori
 * the COPYING file in the top-level directory.
11 48a32bed Anthony Liguori
 *
12 48a32bed Anthony Liguori
 */
13 48a32bed Anthony Liguori
14 48a32bed Anthony Liguori
#include "hmp.h"
15 48a32bed Anthony Liguori
#include "qmp-commands.h"
16 48a32bed Anthony Liguori
17 0cfd6a9a Luiz Capitulino
static void hmp_handle_error(Monitor *mon, Error **errp)
18 0cfd6a9a Luiz Capitulino
{
19 0cfd6a9a Luiz Capitulino
    if (error_is_set(errp)) {
20 0cfd6a9a Luiz Capitulino
        monitor_printf(mon, "%s\n", error_get_pretty(*errp));
21 0cfd6a9a Luiz Capitulino
        error_free(*errp);
22 0cfd6a9a Luiz Capitulino
    }
23 0cfd6a9a Luiz Capitulino
}
24 0cfd6a9a Luiz Capitulino
25 48a32bed Anthony Liguori
void hmp_info_name(Monitor *mon)
26 48a32bed Anthony Liguori
{
27 48a32bed Anthony Liguori
    NameInfo *info;
28 48a32bed Anthony Liguori
29 48a32bed Anthony Liguori
    info = qmp_query_name(NULL);
30 48a32bed Anthony Liguori
    if (info->has_name) {
31 48a32bed Anthony Liguori
        monitor_printf(mon, "%s\n", info->name);
32 48a32bed Anthony Liguori
    }
33 48a32bed Anthony Liguori
    qapi_free_NameInfo(info);
34 48a32bed Anthony Liguori
}
35 b9c15f16 Luiz Capitulino
36 b9c15f16 Luiz Capitulino
void hmp_info_version(Monitor *mon)
37 b9c15f16 Luiz Capitulino
{
38 b9c15f16 Luiz Capitulino
    VersionInfo *info;
39 b9c15f16 Luiz Capitulino
40 b9c15f16 Luiz Capitulino
    info = qmp_query_version(NULL);
41 b9c15f16 Luiz Capitulino
42 b9c15f16 Luiz Capitulino
    monitor_printf(mon, "%" PRId64 ".%" PRId64 ".%" PRId64 "%s\n",
43 b9c15f16 Luiz Capitulino
                   info->qemu.major, info->qemu.minor, info->qemu.micro,
44 b9c15f16 Luiz Capitulino
                   info->package);
45 b9c15f16 Luiz Capitulino
46 b9c15f16 Luiz Capitulino
    qapi_free_VersionInfo(info);
47 b9c15f16 Luiz Capitulino
}
48 292a2602 Luiz Capitulino
49 292a2602 Luiz Capitulino
void hmp_info_kvm(Monitor *mon)
50 292a2602 Luiz Capitulino
{
51 292a2602 Luiz Capitulino
    KvmInfo *info;
52 292a2602 Luiz Capitulino
53 292a2602 Luiz Capitulino
    info = qmp_query_kvm(NULL);
54 292a2602 Luiz Capitulino
    monitor_printf(mon, "kvm support: ");
55 292a2602 Luiz Capitulino
    if (info->present) {
56 292a2602 Luiz Capitulino
        monitor_printf(mon, "%s\n", info->enabled ? "enabled" : "disabled");
57 292a2602 Luiz Capitulino
    } else {
58 292a2602 Luiz Capitulino
        monitor_printf(mon, "not compiled\n");
59 292a2602 Luiz Capitulino
    }
60 292a2602 Luiz Capitulino
61 292a2602 Luiz Capitulino
    qapi_free_KvmInfo(info);
62 292a2602 Luiz Capitulino
}
63 292a2602 Luiz Capitulino
64 1fa9a5e4 Luiz Capitulino
void hmp_info_status(Monitor *mon)
65 1fa9a5e4 Luiz Capitulino
{
66 1fa9a5e4 Luiz Capitulino
    StatusInfo *info;
67 1fa9a5e4 Luiz Capitulino
68 1fa9a5e4 Luiz Capitulino
    info = qmp_query_status(NULL);
69 1fa9a5e4 Luiz Capitulino
70 1fa9a5e4 Luiz Capitulino
    monitor_printf(mon, "VM status: %s%s",
71 1fa9a5e4 Luiz Capitulino
                   info->running ? "running" : "paused",
72 1fa9a5e4 Luiz Capitulino
                   info->singlestep ? " (single step mode)" : "");
73 1fa9a5e4 Luiz Capitulino
74 1fa9a5e4 Luiz Capitulino
    if (!info->running && info->status != RUN_STATE_PAUSED) {
75 1fa9a5e4 Luiz Capitulino
        monitor_printf(mon, " (%s)", RunState_lookup[info->status]);
76 1fa9a5e4 Luiz Capitulino
    }
77 1fa9a5e4 Luiz Capitulino
78 1fa9a5e4 Luiz Capitulino
    monitor_printf(mon, "\n");
79 1fa9a5e4 Luiz Capitulino
80 1fa9a5e4 Luiz Capitulino
    qapi_free_StatusInfo(info);
81 1fa9a5e4 Luiz Capitulino
}
82 1fa9a5e4 Luiz Capitulino
83 efab767e Luiz Capitulino
void hmp_info_uuid(Monitor *mon)
84 efab767e Luiz Capitulino
{
85 efab767e Luiz Capitulino
    UuidInfo *info;
86 efab767e Luiz Capitulino
87 efab767e Luiz Capitulino
    info = qmp_query_uuid(NULL);
88 efab767e Luiz Capitulino
    monitor_printf(mon, "%s\n", info->UUID);
89 efab767e Luiz Capitulino
    qapi_free_UuidInfo(info);
90 efab767e Luiz Capitulino
}
91 c5a415a0 Luiz Capitulino
92 c5a415a0 Luiz Capitulino
void hmp_info_chardev(Monitor *mon)
93 c5a415a0 Luiz Capitulino
{
94 c5a415a0 Luiz Capitulino
    ChardevInfoList *char_info, *info;
95 c5a415a0 Luiz Capitulino
96 c5a415a0 Luiz Capitulino
    char_info = qmp_query_chardev(NULL);
97 c5a415a0 Luiz Capitulino
    for (info = char_info; info; info = info->next) {
98 c5a415a0 Luiz Capitulino
        monitor_printf(mon, "%s: filename=%s\n", info->value->label,
99 c5a415a0 Luiz Capitulino
                                                 info->value->filename);
100 c5a415a0 Luiz Capitulino
    }
101 c5a415a0 Luiz Capitulino
102 c5a415a0 Luiz Capitulino
    qapi_free_ChardevInfoList(char_info);
103 c5a415a0 Luiz Capitulino
}
104 7a7f325e Luiz Capitulino
105 e235cec3 Luiz Capitulino
void hmp_info_mice(Monitor *mon)
106 e235cec3 Luiz Capitulino
{
107 e235cec3 Luiz Capitulino
    MouseInfoList *mice_list, *mouse;
108 e235cec3 Luiz Capitulino
109 e235cec3 Luiz Capitulino
    mice_list = qmp_query_mice(NULL);
110 e235cec3 Luiz Capitulino
    if (!mice_list) {
111 e235cec3 Luiz Capitulino
        monitor_printf(mon, "No mouse devices connected\n");
112 e235cec3 Luiz Capitulino
        return;
113 e235cec3 Luiz Capitulino
    }
114 e235cec3 Luiz Capitulino
115 e235cec3 Luiz Capitulino
    for (mouse = mice_list; mouse; mouse = mouse->next) {
116 e235cec3 Luiz Capitulino
        monitor_printf(mon, "%c Mouse #%" PRId64 ": %s%s\n",
117 e235cec3 Luiz Capitulino
                       mouse->value->current ? '*' : ' ',
118 e235cec3 Luiz Capitulino
                       mouse->value->index, mouse->value->name,
119 e235cec3 Luiz Capitulino
                       mouse->value->absolute ? " (absolute)" : "");
120 e235cec3 Luiz Capitulino
    }
121 e235cec3 Luiz Capitulino
122 e235cec3 Luiz Capitulino
    qapi_free_MouseInfoList(mice_list);
123 e235cec3 Luiz Capitulino
}
124 e235cec3 Luiz Capitulino
125 791e7c82 Luiz Capitulino
void hmp_info_migrate(Monitor *mon)
126 791e7c82 Luiz Capitulino
{
127 791e7c82 Luiz Capitulino
    MigrationInfo *info;
128 791e7c82 Luiz Capitulino
129 791e7c82 Luiz Capitulino
    info = qmp_query_migrate(NULL);
130 791e7c82 Luiz Capitulino
131 791e7c82 Luiz Capitulino
    if (info->has_status) {
132 791e7c82 Luiz Capitulino
        monitor_printf(mon, "Migration status: %s\n", info->status);
133 791e7c82 Luiz Capitulino
    }
134 791e7c82 Luiz Capitulino
135 791e7c82 Luiz Capitulino
    if (info->has_ram) {
136 791e7c82 Luiz Capitulino
        monitor_printf(mon, "transferred ram: %" PRIu64 " kbytes\n",
137 791e7c82 Luiz Capitulino
                       info->ram->transferred >> 10);
138 791e7c82 Luiz Capitulino
        monitor_printf(mon, "remaining ram: %" PRIu64 " kbytes\n",
139 791e7c82 Luiz Capitulino
                       info->ram->remaining >> 10);
140 791e7c82 Luiz Capitulino
        monitor_printf(mon, "total ram: %" PRIu64 " kbytes\n",
141 791e7c82 Luiz Capitulino
                       info->ram->total >> 10);
142 791e7c82 Luiz Capitulino
    }
143 791e7c82 Luiz Capitulino
144 791e7c82 Luiz Capitulino
    if (info->has_disk) {
145 791e7c82 Luiz Capitulino
        monitor_printf(mon, "transferred disk: %" PRIu64 " kbytes\n",
146 791e7c82 Luiz Capitulino
                       info->disk->transferred >> 10);
147 791e7c82 Luiz Capitulino
        monitor_printf(mon, "remaining disk: %" PRIu64 " kbytes\n",
148 791e7c82 Luiz Capitulino
                       info->disk->remaining >> 10);
149 791e7c82 Luiz Capitulino
        monitor_printf(mon, "total disk: %" PRIu64 " kbytes\n",
150 791e7c82 Luiz Capitulino
                       info->disk->total >> 10);
151 791e7c82 Luiz Capitulino
    }
152 791e7c82 Luiz Capitulino
153 791e7c82 Luiz Capitulino
    qapi_free_MigrationInfo(info);
154 791e7c82 Luiz Capitulino
}
155 791e7c82 Luiz Capitulino
156 de0b36b6 Luiz Capitulino
void hmp_info_cpus(Monitor *mon)
157 de0b36b6 Luiz Capitulino
{
158 de0b36b6 Luiz Capitulino
    CpuInfoList *cpu_list, *cpu;
159 de0b36b6 Luiz Capitulino
160 de0b36b6 Luiz Capitulino
    cpu_list = qmp_query_cpus(NULL);
161 de0b36b6 Luiz Capitulino
162 de0b36b6 Luiz Capitulino
    for (cpu = cpu_list; cpu; cpu = cpu->next) {
163 de0b36b6 Luiz Capitulino
        int active = ' ';
164 de0b36b6 Luiz Capitulino
165 de0b36b6 Luiz Capitulino
        if (cpu->value->CPU == monitor_get_cpu_index()) {
166 de0b36b6 Luiz Capitulino
            active = '*';
167 de0b36b6 Luiz Capitulino
        }
168 de0b36b6 Luiz Capitulino
169 de0b36b6 Luiz Capitulino
        monitor_printf(mon, "%c CPU #%" PRId64 ": ", active, cpu->value->CPU);
170 de0b36b6 Luiz Capitulino
171 de0b36b6 Luiz Capitulino
        if (cpu->value->has_pc) {
172 de0b36b6 Luiz Capitulino
            monitor_printf(mon, "pc=0x%016" PRIx64, cpu->value->pc);
173 de0b36b6 Luiz Capitulino
        }
174 de0b36b6 Luiz Capitulino
        if (cpu->value->has_nip) {
175 de0b36b6 Luiz Capitulino
            monitor_printf(mon, "nip=0x%016" PRIx64, cpu->value->nip);
176 de0b36b6 Luiz Capitulino
        }
177 de0b36b6 Luiz Capitulino
        if (cpu->value->has_npc) {
178 de0b36b6 Luiz Capitulino
            monitor_printf(mon, "pc=0x%016" PRIx64, cpu->value->pc);
179 de0b36b6 Luiz Capitulino
            monitor_printf(mon, "npc=0x%016" PRIx64, cpu->value->npc);
180 de0b36b6 Luiz Capitulino
        }
181 de0b36b6 Luiz Capitulino
        if (cpu->value->has_PC) {
182 de0b36b6 Luiz Capitulino
            monitor_printf(mon, "PC=0x%016" PRIx64, cpu->value->PC);
183 de0b36b6 Luiz Capitulino
        }
184 de0b36b6 Luiz Capitulino
185 de0b36b6 Luiz Capitulino
        if (cpu->value->halted) {
186 de0b36b6 Luiz Capitulino
            monitor_printf(mon, " (halted)");
187 de0b36b6 Luiz Capitulino
        }
188 de0b36b6 Luiz Capitulino
189 de0b36b6 Luiz Capitulino
        monitor_printf(mon, " thread_id=%" PRId64 "\n", cpu->value->thread_id);
190 de0b36b6 Luiz Capitulino
    }
191 de0b36b6 Luiz Capitulino
192 de0b36b6 Luiz Capitulino
    qapi_free_CpuInfoList(cpu_list);
193 de0b36b6 Luiz Capitulino
}
194 de0b36b6 Luiz Capitulino
195 b2023818 Luiz Capitulino
void hmp_info_block(Monitor *mon)
196 b2023818 Luiz Capitulino
{
197 b2023818 Luiz Capitulino
    BlockInfoList *block_list, *info;
198 b2023818 Luiz Capitulino
199 b2023818 Luiz Capitulino
    block_list = qmp_query_block(NULL);
200 b2023818 Luiz Capitulino
201 b2023818 Luiz Capitulino
    for (info = block_list; info; info = info->next) {
202 b2023818 Luiz Capitulino
        monitor_printf(mon, "%s: removable=%d",
203 b2023818 Luiz Capitulino
                       info->value->device, info->value->removable);
204 b2023818 Luiz Capitulino
205 b2023818 Luiz Capitulino
        if (info->value->removable) {
206 b2023818 Luiz Capitulino
            monitor_printf(mon, " locked=%d", info->value->locked);
207 b2023818 Luiz Capitulino
            monitor_printf(mon, " tray-open=%d", info->value->tray_open);
208 b2023818 Luiz Capitulino
        }
209 b2023818 Luiz Capitulino
210 b2023818 Luiz Capitulino
        if (info->value->has_io_status) {
211 b2023818 Luiz Capitulino
            monitor_printf(mon, " io-status=%s",
212 b2023818 Luiz Capitulino
                           BlockDeviceIoStatus_lookup[info->value->io_status]);
213 b2023818 Luiz Capitulino
        }
214 b2023818 Luiz Capitulino
215 b2023818 Luiz Capitulino
        if (info->value->has_inserted) {
216 b2023818 Luiz Capitulino
            monitor_printf(mon, " file=");
217 b2023818 Luiz Capitulino
            monitor_print_filename(mon, info->value->inserted->file);
218 b2023818 Luiz Capitulino
219 b2023818 Luiz Capitulino
            if (info->value->inserted->has_backing_file) {
220 b2023818 Luiz Capitulino
                monitor_printf(mon, " backing_file=");
221 b2023818 Luiz Capitulino
                monitor_print_filename(mon, info->value->inserted->backing_file);
222 b2023818 Luiz Capitulino
            }
223 b2023818 Luiz Capitulino
            monitor_printf(mon, " ro=%d drv=%s encrypted=%d",
224 b2023818 Luiz Capitulino
                           info->value->inserted->ro,
225 b2023818 Luiz Capitulino
                           info->value->inserted->drv,
226 b2023818 Luiz Capitulino
                           info->value->inserted->encrypted);
227 727f005e Zhi Yong Wu
228 727f005e Zhi Yong Wu
            monitor_printf(mon, " bps=%" PRId64 " bps_rd=%" PRId64
229 727f005e Zhi Yong Wu
                            " bps_wr=%" PRId64 " iops=%" PRId64
230 727f005e Zhi Yong Wu
                            " iops_rd=%" PRId64 " iops_wr=%" PRId64,
231 727f005e Zhi Yong Wu
                            info->value->inserted->bps,
232 727f005e Zhi Yong Wu
                            info->value->inserted->bps_rd,
233 727f005e Zhi Yong Wu
                            info->value->inserted->bps_wr,
234 727f005e Zhi Yong Wu
                            info->value->inserted->iops,
235 727f005e Zhi Yong Wu
                            info->value->inserted->iops_rd,
236 727f005e Zhi Yong Wu
                            info->value->inserted->iops_wr);
237 b2023818 Luiz Capitulino
        } else {
238 b2023818 Luiz Capitulino
            monitor_printf(mon, " [not inserted]");
239 b2023818 Luiz Capitulino
        }
240 b2023818 Luiz Capitulino
241 b2023818 Luiz Capitulino
        monitor_printf(mon, "\n");
242 b2023818 Luiz Capitulino
    }
243 b2023818 Luiz Capitulino
244 b2023818 Luiz Capitulino
    qapi_free_BlockInfoList(block_list);
245 b2023818 Luiz Capitulino
}
246 b2023818 Luiz Capitulino
247 f11f57e4 Luiz Capitulino
void hmp_info_blockstats(Monitor *mon)
248 f11f57e4 Luiz Capitulino
{
249 f11f57e4 Luiz Capitulino
    BlockStatsList *stats_list, *stats;
250 f11f57e4 Luiz Capitulino
251 f11f57e4 Luiz Capitulino
    stats_list = qmp_query_blockstats(NULL);
252 f11f57e4 Luiz Capitulino
253 f11f57e4 Luiz Capitulino
    for (stats = stats_list; stats; stats = stats->next) {
254 f11f57e4 Luiz Capitulino
        if (!stats->value->has_device) {
255 f11f57e4 Luiz Capitulino
            continue;
256 f11f57e4 Luiz Capitulino
        }
257 f11f57e4 Luiz Capitulino
258 f11f57e4 Luiz Capitulino
        monitor_printf(mon, "%s:", stats->value->device);
259 f11f57e4 Luiz Capitulino
        monitor_printf(mon, " rd_bytes=%" PRId64
260 f11f57e4 Luiz Capitulino
                       " wr_bytes=%" PRId64
261 f11f57e4 Luiz Capitulino
                       " rd_operations=%" PRId64
262 f11f57e4 Luiz Capitulino
                       " wr_operations=%" PRId64
263 f11f57e4 Luiz Capitulino
                       " flush_operations=%" PRId64
264 f11f57e4 Luiz Capitulino
                       " wr_total_time_ns=%" PRId64
265 f11f57e4 Luiz Capitulino
                       " rd_total_time_ns=%" PRId64
266 f11f57e4 Luiz Capitulino
                       " flush_total_time_ns=%" PRId64
267 f11f57e4 Luiz Capitulino
                       "\n",
268 f11f57e4 Luiz Capitulino
                       stats->value->stats->rd_bytes,
269 f11f57e4 Luiz Capitulino
                       stats->value->stats->wr_bytes,
270 f11f57e4 Luiz Capitulino
                       stats->value->stats->rd_operations,
271 f11f57e4 Luiz Capitulino
                       stats->value->stats->wr_operations,
272 f11f57e4 Luiz Capitulino
                       stats->value->stats->flush_operations,
273 f11f57e4 Luiz Capitulino
                       stats->value->stats->wr_total_time_ns,
274 f11f57e4 Luiz Capitulino
                       stats->value->stats->rd_total_time_ns,
275 f11f57e4 Luiz Capitulino
                       stats->value->stats->flush_total_time_ns);
276 f11f57e4 Luiz Capitulino
    }
277 f11f57e4 Luiz Capitulino
278 f11f57e4 Luiz Capitulino
    qapi_free_BlockStatsList(stats_list);
279 f11f57e4 Luiz Capitulino
}
280 f11f57e4 Luiz Capitulino
281 2b54aa87 Luiz Capitulino
void hmp_info_vnc(Monitor *mon)
282 2b54aa87 Luiz Capitulino
{
283 2b54aa87 Luiz Capitulino
    VncInfo *info;
284 2b54aa87 Luiz Capitulino
    Error *err = NULL;
285 2b54aa87 Luiz Capitulino
    VncClientInfoList *client;
286 2b54aa87 Luiz Capitulino
287 2b54aa87 Luiz Capitulino
    info = qmp_query_vnc(&err);
288 2b54aa87 Luiz Capitulino
    if (err) {
289 2b54aa87 Luiz Capitulino
        monitor_printf(mon, "%s\n", error_get_pretty(err));
290 2b54aa87 Luiz Capitulino
        error_free(err);
291 2b54aa87 Luiz Capitulino
        return;
292 2b54aa87 Luiz Capitulino
    }
293 2b54aa87 Luiz Capitulino
294 2b54aa87 Luiz Capitulino
    if (!info->enabled) {
295 2b54aa87 Luiz Capitulino
        monitor_printf(mon, "Server: disabled\n");
296 2b54aa87 Luiz Capitulino
        goto out;
297 2b54aa87 Luiz Capitulino
    }
298 2b54aa87 Luiz Capitulino
299 2b54aa87 Luiz Capitulino
    monitor_printf(mon, "Server:\n");
300 2b54aa87 Luiz Capitulino
    if (info->has_host && info->has_service) {
301 2b54aa87 Luiz Capitulino
        monitor_printf(mon, "     address: %s:%s\n", info->host, info->service);
302 2b54aa87 Luiz Capitulino
    }
303 2b54aa87 Luiz Capitulino
    if (info->has_auth) {
304 2b54aa87 Luiz Capitulino
        monitor_printf(mon, "        auth: %s\n", info->auth);
305 2b54aa87 Luiz Capitulino
    }
306 2b54aa87 Luiz Capitulino
307 2b54aa87 Luiz Capitulino
    if (!info->has_clients || info->clients == NULL) {
308 2b54aa87 Luiz Capitulino
        monitor_printf(mon, "Client: none\n");
309 2b54aa87 Luiz Capitulino
    } else {
310 2b54aa87 Luiz Capitulino
        for (client = info->clients; client; client = client->next) {
311 2b54aa87 Luiz Capitulino
            monitor_printf(mon, "Client:\n");
312 2b54aa87 Luiz Capitulino
            monitor_printf(mon, "     address: %s:%s\n",
313 2b54aa87 Luiz Capitulino
                           client->value->host, client->value->service);
314 2b54aa87 Luiz Capitulino
            monitor_printf(mon, "  x509_dname: %s\n",
315 2b54aa87 Luiz Capitulino
                           client->value->x509_dname ?
316 2b54aa87 Luiz Capitulino
                           client->value->x509_dname : "none");
317 2b54aa87 Luiz Capitulino
            monitor_printf(mon, "    username: %s\n",
318 2b54aa87 Luiz Capitulino
                           client->value->has_sasl_username ?
319 2b54aa87 Luiz Capitulino
                           client->value->sasl_username : "none");
320 2b54aa87 Luiz Capitulino
        }
321 2b54aa87 Luiz Capitulino
    }
322 2b54aa87 Luiz Capitulino
323 2b54aa87 Luiz Capitulino
out:
324 2b54aa87 Luiz Capitulino
    qapi_free_VncInfo(info);
325 2b54aa87 Luiz Capitulino
}
326 2b54aa87 Luiz Capitulino
327 d1f29646 Luiz Capitulino
void hmp_info_spice(Monitor *mon)
328 d1f29646 Luiz Capitulino
{
329 d1f29646 Luiz Capitulino
    SpiceChannelList *chan;
330 d1f29646 Luiz Capitulino
    SpiceInfo *info;
331 d1f29646 Luiz Capitulino
332 d1f29646 Luiz Capitulino
    info = qmp_query_spice(NULL);
333 d1f29646 Luiz Capitulino
334 d1f29646 Luiz Capitulino
    if (!info->enabled) {
335 d1f29646 Luiz Capitulino
        monitor_printf(mon, "Server: disabled\n");
336 d1f29646 Luiz Capitulino
        goto out;
337 d1f29646 Luiz Capitulino
    }
338 d1f29646 Luiz Capitulino
339 d1f29646 Luiz Capitulino
    monitor_printf(mon, "Server:\n");
340 d1f29646 Luiz Capitulino
    if (info->has_port) {
341 d1f29646 Luiz Capitulino
        monitor_printf(mon, "     address: %s:%" PRId64 "\n",
342 d1f29646 Luiz Capitulino
                       info->host, info->port);
343 d1f29646 Luiz Capitulino
    }
344 d1f29646 Luiz Capitulino
    if (info->has_tls_port) {
345 d1f29646 Luiz Capitulino
        monitor_printf(mon, "     address: %s:%" PRId64 " [tls]\n",
346 d1f29646 Luiz Capitulino
                       info->host, info->tls_port);
347 d1f29646 Luiz Capitulino
    }
348 d1f29646 Luiz Capitulino
    monitor_printf(mon, "        auth: %s\n", info->auth);
349 d1f29646 Luiz Capitulino
    monitor_printf(mon, "    compiled: %s\n", info->compiled_version);
350 d1f29646 Luiz Capitulino
351 d1f29646 Luiz Capitulino
    if (!info->has_channels || info->channels == NULL) {
352 d1f29646 Luiz Capitulino
        monitor_printf(mon, "Channels: none\n");
353 d1f29646 Luiz Capitulino
    } else {
354 d1f29646 Luiz Capitulino
        for (chan = info->channels; chan; chan = chan->next) {
355 d1f29646 Luiz Capitulino
            monitor_printf(mon, "Channel:\n");
356 d1f29646 Luiz Capitulino
            monitor_printf(mon, "     address: %s:%s%s\n",
357 d1f29646 Luiz Capitulino
                           chan->value->host, chan->value->port,
358 d1f29646 Luiz Capitulino
                           chan->value->tls ? " [tls]" : "");
359 d1f29646 Luiz Capitulino
            monitor_printf(mon, "     session: %" PRId64 "\n",
360 d1f29646 Luiz Capitulino
                           chan->value->connection_id);
361 d1f29646 Luiz Capitulino
            monitor_printf(mon, "     channel: %" PRId64 ":%" PRId64 "\n",
362 d1f29646 Luiz Capitulino
                           chan->value->channel_type, chan->value->channel_id);
363 d1f29646 Luiz Capitulino
        }
364 d1f29646 Luiz Capitulino
    }
365 d1f29646 Luiz Capitulino
366 d1f29646 Luiz Capitulino
out:
367 d1f29646 Luiz Capitulino
    qapi_free_SpiceInfo(info);
368 d1f29646 Luiz Capitulino
}
369 d1f29646 Luiz Capitulino
370 96637bcd Luiz Capitulino
void hmp_info_balloon(Monitor *mon)
371 96637bcd Luiz Capitulino
{
372 96637bcd Luiz Capitulino
    BalloonInfo *info;
373 96637bcd Luiz Capitulino
    Error *err = NULL;
374 96637bcd Luiz Capitulino
375 96637bcd Luiz Capitulino
    info = qmp_query_balloon(&err);
376 96637bcd Luiz Capitulino
    if (err) {
377 96637bcd Luiz Capitulino
        monitor_printf(mon, "%s\n", error_get_pretty(err));
378 96637bcd Luiz Capitulino
        error_free(err);
379 96637bcd Luiz Capitulino
        return;
380 96637bcd Luiz Capitulino
    }
381 96637bcd Luiz Capitulino
382 96637bcd Luiz Capitulino
    monitor_printf(mon, "balloon: actual=%" PRId64, info->actual >> 20);
383 96637bcd Luiz Capitulino
    if (info->has_mem_swapped_in) {
384 96637bcd Luiz Capitulino
        monitor_printf(mon, " mem_swapped_in=%" PRId64, info->mem_swapped_in);
385 96637bcd Luiz Capitulino
    }
386 96637bcd Luiz Capitulino
    if (info->has_mem_swapped_out) {
387 96637bcd Luiz Capitulino
        monitor_printf(mon, " mem_swapped_out=%" PRId64, info->mem_swapped_out);
388 96637bcd Luiz Capitulino
    }
389 96637bcd Luiz Capitulino
    if (info->has_major_page_faults) {
390 96637bcd Luiz Capitulino
        monitor_printf(mon, " major_page_faults=%" PRId64,
391 96637bcd Luiz Capitulino
                       info->major_page_faults);
392 96637bcd Luiz Capitulino
    }
393 96637bcd Luiz Capitulino
    if (info->has_minor_page_faults) {
394 96637bcd Luiz Capitulino
        monitor_printf(mon, " minor_page_faults=%" PRId64,
395 96637bcd Luiz Capitulino
                       info->minor_page_faults);
396 96637bcd Luiz Capitulino
    }
397 96637bcd Luiz Capitulino
    if (info->has_free_mem) {
398 96637bcd Luiz Capitulino
        monitor_printf(mon, " free_mem=%" PRId64, info->free_mem);
399 96637bcd Luiz Capitulino
    }
400 96637bcd Luiz Capitulino
    if (info->has_total_mem) {
401 96637bcd Luiz Capitulino
        monitor_printf(mon, " total_mem=%" PRId64, info->total_mem);
402 96637bcd Luiz Capitulino
    }
403 96637bcd Luiz Capitulino
404 96637bcd Luiz Capitulino
    monitor_printf(mon, "\n");
405 96637bcd Luiz Capitulino
406 96637bcd Luiz Capitulino
    qapi_free_BalloonInfo(info);
407 96637bcd Luiz Capitulino
}
408 96637bcd Luiz Capitulino
409 79627472 Luiz Capitulino
static void hmp_info_pci_device(Monitor *mon, const PciDeviceInfo *dev)
410 79627472 Luiz Capitulino
{
411 79627472 Luiz Capitulino
    PciMemoryRegionList *region;
412 79627472 Luiz Capitulino
413 79627472 Luiz Capitulino
    monitor_printf(mon, "  Bus %2" PRId64 ", ", dev->bus);
414 79627472 Luiz Capitulino
    monitor_printf(mon, "device %3" PRId64 ", function %" PRId64 ":\n",
415 79627472 Luiz Capitulino
                   dev->slot, dev->function);
416 79627472 Luiz Capitulino
    monitor_printf(mon, "    ");
417 79627472 Luiz Capitulino
418 79627472 Luiz Capitulino
    if (dev->class_info.has_desc) {
419 79627472 Luiz Capitulino
        monitor_printf(mon, "%s", dev->class_info.desc);
420 79627472 Luiz Capitulino
    } else {
421 79627472 Luiz Capitulino
        monitor_printf(mon, "Class %04" PRId64, dev->class_info.class);
422 79627472 Luiz Capitulino
    }
423 79627472 Luiz Capitulino
424 79627472 Luiz Capitulino
    monitor_printf(mon, ": PCI device %04" PRIx64 ":%04" PRIx64 "\n",
425 79627472 Luiz Capitulino
                   dev->id.vendor, dev->id.device);
426 79627472 Luiz Capitulino
427 79627472 Luiz Capitulino
    if (dev->has_irq) {
428 79627472 Luiz Capitulino
        monitor_printf(mon, "      IRQ %" PRId64 ".\n", dev->irq);
429 79627472 Luiz Capitulino
    }
430 79627472 Luiz Capitulino
431 79627472 Luiz Capitulino
    if (dev->has_pci_bridge) {
432 79627472 Luiz Capitulino
        monitor_printf(mon, "      BUS %" PRId64 ".\n",
433 79627472 Luiz Capitulino
                       dev->pci_bridge->bus.number);
434 79627472 Luiz Capitulino
        monitor_printf(mon, "      secondary bus %" PRId64 ".\n",
435 79627472 Luiz Capitulino
                       dev->pci_bridge->bus.secondary);
436 79627472 Luiz Capitulino
        monitor_printf(mon, "      subordinate bus %" PRId64 ".\n",
437 79627472 Luiz Capitulino
                       dev->pci_bridge->bus.subordinate);
438 79627472 Luiz Capitulino
439 79627472 Luiz Capitulino
        monitor_printf(mon, "      IO range [0x%04"PRIx64", 0x%04"PRIx64"]\n",
440 79627472 Luiz Capitulino
                       dev->pci_bridge->bus.io_range->base,
441 79627472 Luiz Capitulino
                       dev->pci_bridge->bus.io_range->limit);
442 79627472 Luiz Capitulino
443 79627472 Luiz Capitulino
        monitor_printf(mon,
444 79627472 Luiz Capitulino
                       "      memory range [0x%08"PRIx64", 0x%08"PRIx64"]\n",
445 79627472 Luiz Capitulino
                       dev->pci_bridge->bus.memory_range->base,
446 79627472 Luiz Capitulino
                       dev->pci_bridge->bus.memory_range->limit);
447 79627472 Luiz Capitulino
448 79627472 Luiz Capitulino
        monitor_printf(mon, "      prefetchable memory range "
449 79627472 Luiz Capitulino
                       "[0x%08"PRIx64", 0x%08"PRIx64"]\n",
450 79627472 Luiz Capitulino
                       dev->pci_bridge->bus.prefetchable_range->base,
451 79627472 Luiz Capitulino
                       dev->pci_bridge->bus.prefetchable_range->limit);
452 79627472 Luiz Capitulino
    }
453 79627472 Luiz Capitulino
454 79627472 Luiz Capitulino
    for (region = dev->regions; region; region = region->next) {
455 79627472 Luiz Capitulino
        uint64_t addr, size;
456 79627472 Luiz Capitulino
457 79627472 Luiz Capitulino
        addr = region->value->address;
458 79627472 Luiz Capitulino
        size = region->value->size;
459 79627472 Luiz Capitulino
460 79627472 Luiz Capitulino
        monitor_printf(mon, "      BAR%" PRId64 ": ", region->value->bar);
461 79627472 Luiz Capitulino
462 79627472 Luiz Capitulino
        if (!strcmp(region->value->type, "io")) {
463 79627472 Luiz Capitulino
            monitor_printf(mon, "I/O at 0x%04" PRIx64
464 79627472 Luiz Capitulino
                                " [0x%04" PRIx64 "].\n",
465 79627472 Luiz Capitulino
                           addr, addr + size - 1);
466 79627472 Luiz Capitulino
        } else {
467 79627472 Luiz Capitulino
            monitor_printf(mon, "%d bit%s memory at 0x%08" PRIx64
468 79627472 Luiz Capitulino
                               " [0x%08" PRIx64 "].\n",
469 79627472 Luiz Capitulino
                           region->value->mem_type_64 ? 64 : 32,
470 79627472 Luiz Capitulino
                           region->value->prefetch ? " prefetchable" : "",
471 79627472 Luiz Capitulino
                           addr, addr + size - 1);
472 79627472 Luiz Capitulino
        }
473 79627472 Luiz Capitulino
    }
474 79627472 Luiz Capitulino
475 79627472 Luiz Capitulino
    monitor_printf(mon, "      id \"%s\"\n", dev->qdev_id);
476 79627472 Luiz Capitulino
477 79627472 Luiz Capitulino
    if (dev->has_pci_bridge) {
478 79627472 Luiz Capitulino
        if (dev->pci_bridge->has_devices) {
479 79627472 Luiz Capitulino
            PciDeviceInfoList *cdev;
480 79627472 Luiz Capitulino
            for (cdev = dev->pci_bridge->devices; cdev; cdev = cdev->next) {
481 79627472 Luiz Capitulino
                hmp_info_pci_device(mon, cdev->value);
482 79627472 Luiz Capitulino
            }
483 79627472 Luiz Capitulino
        }
484 79627472 Luiz Capitulino
    }
485 79627472 Luiz Capitulino
}
486 79627472 Luiz Capitulino
487 79627472 Luiz Capitulino
void hmp_info_pci(Monitor *mon)
488 79627472 Luiz Capitulino
{
489 79627472 Luiz Capitulino
    PciInfoList *info;
490 79627472 Luiz Capitulino
    Error *err = NULL;
491 79627472 Luiz Capitulino
492 79627472 Luiz Capitulino
    info = qmp_query_pci(&err);
493 79627472 Luiz Capitulino
    if (err) {
494 79627472 Luiz Capitulino
        monitor_printf(mon, "PCI devices not supported\n");
495 79627472 Luiz Capitulino
        error_free(err);
496 79627472 Luiz Capitulino
        return;
497 79627472 Luiz Capitulino
    }
498 79627472 Luiz Capitulino
499 79627472 Luiz Capitulino
    for (; info; info = info->next) {
500 79627472 Luiz Capitulino
        PciDeviceInfoList *dev;
501 79627472 Luiz Capitulino
502 79627472 Luiz Capitulino
        for (dev = info->value->devices; dev; dev = dev->next) {
503 79627472 Luiz Capitulino
            hmp_info_pci_device(mon, dev->value);
504 79627472 Luiz Capitulino
        }
505 79627472 Luiz Capitulino
    }
506 79627472 Luiz Capitulino
507 79627472 Luiz Capitulino
    qapi_free_PciInfoList(info);
508 79627472 Luiz Capitulino
}
509 79627472 Luiz Capitulino
510 7a7f325e Luiz Capitulino
void hmp_quit(Monitor *mon, const QDict *qdict)
511 7a7f325e Luiz Capitulino
{
512 7a7f325e Luiz Capitulino
    monitor_suspend(mon);
513 7a7f325e Luiz Capitulino
    qmp_quit(NULL);
514 7a7f325e Luiz Capitulino
}
515 5f158f21 Luiz Capitulino
516 5f158f21 Luiz Capitulino
void hmp_stop(Monitor *mon, const QDict *qdict)
517 5f158f21 Luiz Capitulino
{
518 5f158f21 Luiz Capitulino
    qmp_stop(NULL);
519 5f158f21 Luiz Capitulino
}
520 38d22653 Luiz Capitulino
521 38d22653 Luiz Capitulino
void hmp_system_reset(Monitor *mon, const QDict *qdict)
522 38d22653 Luiz Capitulino
{
523 38d22653 Luiz Capitulino
    qmp_system_reset(NULL);
524 38d22653 Luiz Capitulino
}
525 5bc465e4 Luiz Capitulino
526 5bc465e4 Luiz Capitulino
void hmp_system_powerdown(Monitor *mon, const QDict *qdict)
527 5bc465e4 Luiz Capitulino
{
528 5bc465e4 Luiz Capitulino
    qmp_system_powerdown(NULL);
529 5bc465e4 Luiz Capitulino
}
530 755f1968 Luiz Capitulino
531 755f1968 Luiz Capitulino
void hmp_cpu(Monitor *mon, const QDict *qdict)
532 755f1968 Luiz Capitulino
{
533 755f1968 Luiz Capitulino
    int64_t cpu_index;
534 755f1968 Luiz Capitulino
535 755f1968 Luiz Capitulino
    /* XXX: drop the monitor_set_cpu() usage when all HMP commands that
536 755f1968 Luiz Capitulino
            use it are converted to the QAPI */
537 755f1968 Luiz Capitulino
    cpu_index = qdict_get_int(qdict, "index");
538 755f1968 Luiz Capitulino
    if (monitor_set_cpu(cpu_index) < 0) {
539 755f1968 Luiz Capitulino
        monitor_printf(mon, "invalid CPU index\n");
540 755f1968 Luiz Capitulino
    }
541 755f1968 Luiz Capitulino
}
542 0cfd6a9a Luiz Capitulino
543 0cfd6a9a Luiz Capitulino
void hmp_memsave(Monitor *mon, const QDict *qdict)
544 0cfd6a9a Luiz Capitulino
{
545 0cfd6a9a Luiz Capitulino
    uint32_t size = qdict_get_int(qdict, "size");
546 0cfd6a9a Luiz Capitulino
    const char *filename = qdict_get_str(qdict, "filename");
547 0cfd6a9a Luiz Capitulino
    uint64_t addr = qdict_get_int(qdict, "val");
548 0cfd6a9a Luiz Capitulino
    Error *errp = NULL;
549 0cfd6a9a Luiz Capitulino
550 0cfd6a9a Luiz Capitulino
    qmp_memsave(addr, size, filename, true, monitor_get_cpu_index(), &errp);
551 0cfd6a9a Luiz Capitulino
    hmp_handle_error(mon, &errp);
552 0cfd6a9a Luiz Capitulino
}
553 6d3962bf Luiz Capitulino
554 6d3962bf Luiz Capitulino
void hmp_pmemsave(Monitor *mon, const QDict *qdict)
555 6d3962bf Luiz Capitulino
{
556 6d3962bf Luiz Capitulino
    uint32_t size = qdict_get_int(qdict, "size");
557 6d3962bf Luiz Capitulino
    const char *filename = qdict_get_str(qdict, "filename");
558 6d3962bf Luiz Capitulino
    uint64_t addr = qdict_get_int(qdict, "val");
559 6d3962bf Luiz Capitulino
    Error *errp = NULL;
560 6d3962bf Luiz Capitulino
561 6d3962bf Luiz Capitulino
    qmp_pmemsave(addr, size, filename, &errp);
562 6d3962bf Luiz Capitulino
    hmp_handle_error(mon, &errp);
563 6d3962bf Luiz Capitulino
}
564 e42e818b Luiz Capitulino
565 e42e818b Luiz Capitulino
static void hmp_cont_cb(void *opaque, int err)
566 e42e818b Luiz Capitulino
{
567 e42e818b Luiz Capitulino
    Monitor *mon = opaque;
568 e42e818b Luiz Capitulino
569 e42e818b Luiz Capitulino
    if (!err) {
570 e42e818b Luiz Capitulino
        hmp_cont(mon, NULL);
571 e42e818b Luiz Capitulino
    }
572 e42e818b Luiz Capitulino
}
573 e42e818b Luiz Capitulino
574 e42e818b Luiz Capitulino
void hmp_cont(Monitor *mon, const QDict *qdict)
575 e42e818b Luiz Capitulino
{
576 e42e818b Luiz Capitulino
    Error *errp = NULL;
577 e42e818b Luiz Capitulino
578 e42e818b Luiz Capitulino
    qmp_cont(&errp);
579 e42e818b Luiz Capitulino
    if (error_is_set(&errp)) {
580 e42e818b Luiz Capitulino
        if (error_is_type(errp, QERR_DEVICE_ENCRYPTED)) {
581 e42e818b Luiz Capitulino
            const char *device;
582 e42e818b Luiz Capitulino
583 e42e818b Luiz Capitulino
            /* The device is encrypted. Ask the user for the password
584 e42e818b Luiz Capitulino
               and retry */
585 e42e818b Luiz Capitulino
586 e42e818b Luiz Capitulino
            device = error_get_field(errp, "device");
587 e42e818b Luiz Capitulino
            assert(device != NULL);
588 e42e818b Luiz Capitulino
589 e42e818b Luiz Capitulino
            monitor_read_block_device_key(mon, device, hmp_cont_cb, mon);
590 e42e818b Luiz Capitulino
            error_free(errp);
591 e42e818b Luiz Capitulino
            return;
592 e42e818b Luiz Capitulino
        }
593 e42e818b Luiz Capitulino
        hmp_handle_error(mon, &errp);
594 e42e818b Luiz Capitulino
    }
595 e42e818b Luiz Capitulino
}
596 ab49ab5c Luiz Capitulino
597 ab49ab5c Luiz Capitulino
void hmp_inject_nmi(Monitor *mon, const QDict *qdict)
598 ab49ab5c Luiz Capitulino
{
599 ab49ab5c Luiz Capitulino
    Error *errp = NULL;
600 ab49ab5c Luiz Capitulino
601 ab49ab5c Luiz Capitulino
    qmp_inject_nmi(&errp);
602 ab49ab5c Luiz Capitulino
    hmp_handle_error(mon, &errp);
603 ab49ab5c Luiz Capitulino
}
604 4b37156c Luiz Capitulino
605 4b37156c Luiz Capitulino
void hmp_set_link(Monitor *mon, const QDict *qdict)
606 4b37156c Luiz Capitulino
{
607 4b37156c Luiz Capitulino
    const char *name = qdict_get_str(qdict, "name");
608 4b37156c Luiz Capitulino
    int up = qdict_get_bool(qdict, "up");
609 4b37156c Luiz Capitulino
    Error *errp = NULL;
610 4b37156c Luiz Capitulino
611 4b37156c Luiz Capitulino
    qmp_set_link(name, up, &errp);
612 4b37156c Luiz Capitulino
    hmp_handle_error(mon, &errp);
613 4b37156c Luiz Capitulino
}
614 a4dea8a9 Luiz Capitulino
615 a4dea8a9 Luiz Capitulino
void hmp_block_passwd(Monitor *mon, const QDict *qdict)
616 a4dea8a9 Luiz Capitulino
{
617 a4dea8a9 Luiz Capitulino
    const char *device = qdict_get_str(qdict, "device");
618 a4dea8a9 Luiz Capitulino
    const char *password = qdict_get_str(qdict, "password");
619 a4dea8a9 Luiz Capitulino
    Error *errp = NULL;
620 a4dea8a9 Luiz Capitulino
621 a4dea8a9 Luiz Capitulino
    qmp_block_passwd(device, password, &errp);
622 a4dea8a9 Luiz Capitulino
    hmp_handle_error(mon, &errp);
623 a4dea8a9 Luiz Capitulino
}
624 d72f3264 Luiz Capitulino
625 d72f3264 Luiz Capitulino
void hmp_balloon(Monitor *mon, const QDict *qdict)
626 d72f3264 Luiz Capitulino
{
627 d72f3264 Luiz Capitulino
    int64_t value = qdict_get_int(qdict, "value");
628 d72f3264 Luiz Capitulino
    Error *errp = NULL;
629 d72f3264 Luiz Capitulino
630 d72f3264 Luiz Capitulino
    qmp_balloon(value, &errp);
631 d72f3264 Luiz Capitulino
    if (error_is_set(&errp)) {
632 d72f3264 Luiz Capitulino
        monitor_printf(mon, "balloon: %s\n", error_get_pretty(errp));
633 d72f3264 Luiz Capitulino
        error_free(errp);
634 d72f3264 Luiz Capitulino
    }
635 d72f3264 Luiz Capitulino
}
636 5e7caacb Luiz Capitulino
637 5e7caacb Luiz Capitulino
void hmp_block_resize(Monitor *mon, const QDict *qdict)
638 5e7caacb Luiz Capitulino
{
639 5e7caacb Luiz Capitulino
    const char *device = qdict_get_str(qdict, "device");
640 5e7caacb Luiz Capitulino
    int64_t size = qdict_get_int(qdict, "size");
641 5e7caacb Luiz Capitulino
    Error *errp = NULL;
642 5e7caacb Luiz Capitulino
643 5e7caacb Luiz Capitulino
    qmp_block_resize(device, size, &errp);
644 5e7caacb Luiz Capitulino
    hmp_handle_error(mon, &errp);
645 5e7caacb Luiz Capitulino
}
646 6106e249 Luiz Capitulino
647 6106e249 Luiz Capitulino
void hmp_snapshot_blkdev(Monitor *mon, const QDict *qdict)
648 6106e249 Luiz Capitulino
{
649 6106e249 Luiz Capitulino
    const char *device = qdict_get_str(qdict, "device");
650 6106e249 Luiz Capitulino
    const char *filename = qdict_get_try_str(qdict, "snapshot-file");
651 6106e249 Luiz Capitulino
    const char *format = qdict_get_try_str(qdict, "format");
652 6106e249 Luiz Capitulino
    Error *errp = NULL;
653 6106e249 Luiz Capitulino
654 6106e249 Luiz Capitulino
    if (!filename) {
655 6106e249 Luiz Capitulino
        /* In the future, if 'snapshot-file' is not specified, the snapshot
656 6106e249 Luiz Capitulino
           will be taken internally. Today it's actually required. */
657 6106e249 Luiz Capitulino
        error_set(&errp, QERR_MISSING_PARAMETER, "snapshot-file");
658 6106e249 Luiz Capitulino
        hmp_handle_error(mon, &errp);
659 6106e249 Luiz Capitulino
        return;
660 6106e249 Luiz Capitulino
    }
661 6106e249 Luiz Capitulino
662 6106e249 Luiz Capitulino
    qmp_blockdev_snapshot_sync(device, filename, !!format, format, &errp);
663 6106e249 Luiz Capitulino
    hmp_handle_error(mon, &errp);
664 6106e249 Luiz Capitulino
}
665 6cdedb07 Luiz Capitulino
666 6cdedb07 Luiz Capitulino
void hmp_migrate_cancel(Monitor *mon, const QDict *qdict)
667 6cdedb07 Luiz Capitulino
{
668 6cdedb07 Luiz Capitulino
    qmp_migrate_cancel(NULL);
669 6cdedb07 Luiz Capitulino
}
670 4f0a993b Luiz Capitulino
671 4f0a993b Luiz Capitulino
void hmp_migrate_set_downtime(Monitor *mon, const QDict *qdict)
672 4f0a993b Luiz Capitulino
{
673 4f0a993b Luiz Capitulino
    double value = qdict_get_double(qdict, "value");
674 4f0a993b Luiz Capitulino
    qmp_migrate_set_downtime(value, NULL);
675 4f0a993b Luiz Capitulino
}
676 3dc85383 Luiz Capitulino
677 3dc85383 Luiz Capitulino
void hmp_migrate_set_speed(Monitor *mon, const QDict *qdict)
678 3dc85383 Luiz Capitulino
{
679 3dc85383 Luiz Capitulino
    int64_t value = qdict_get_int(qdict, "value");
680 3dc85383 Luiz Capitulino
    qmp_migrate_set_speed(value, NULL);
681 3dc85383 Luiz Capitulino
}