1 /*
2  * qemu_monitor_json.h: interaction with QEMU monitor console
3  *
4  * Copyright (C) 2006-2009, 2011-2015 Red Hat, Inc.
5  * Copyright (C) 2006 Daniel P. Berrange
6  *
7  * This library is free software; you can redistribute it and/or
8  * modify it under the terms of the GNU Lesser General Public
9  * License as published by the Free Software Foundation; either
10  * version 2.1 of the License, or (at your option) any later version.
11  *
12  * This library is distributed in the hope that it will be useful,
13  * but WITHOUT ANY WARRANTY; without even the implied warranty of
14  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
15  * Lesser General Public License for more details.
16  *
17  * You should have received a copy of the GNU Lesser General Public
18  * License along with this library.  If not, see
19  * <http://www.gnu.org/licenses/>.
20  */
21 
22 #pragma once
23 
24 #include "internal.h"
25 
26 #include "qemu_monitor.h"
27 #include "virbitmap.h"
28 #include "cpu/cpu.h"
29 #include "util/virgic.h"
30 
31 int qemuMonitorJSONIOProcessLine(qemuMonitor *mon,
32                                  const char *line,
33                                  qemuMonitorMessage *msg) G_GNUC_NO_INLINE;
34 
35 int qemuMonitorJSONIOProcess(qemuMonitor *mon,
36                              const char *data,
37                              size_t len,
38                              qemuMonitorMessage *msg);
39 
40 int qemuMonitorJSONHumanCommand(qemuMonitor *mon,
41                                 const char *cmd,
42                                 char **reply);
43 
44 int qemuMonitorJSONSetCapabilities(qemuMonitor *mon);
45 
46 int qemuMonitorJSONStartCPUs(qemuMonitor *mon);
47 int qemuMonitorJSONStopCPUs(qemuMonitor *mon);
48 int qemuMonitorJSONGetStatus(qemuMonitor *mon,
49                              bool *running,
50                              virDomainPausedReason *reason);
51 
52 int qemuMonitorJSONSystemPowerdown(qemuMonitor *mon);
53 int qemuMonitorJSONSystemReset(qemuMonitor *mon);
54 
55 int qemuMonitorJSONQueryCPUs(qemuMonitor *mon,
56                              struct qemuMonitorQueryCpusEntry **entries,
57                              size_t *nentries,
58                              bool force,
59                              bool fast);
60 int qemuMonitorJSONUpdateVideoMemorySize(qemuMonitor *mon,
61                                          virDomainVideoDef *video,
62                                          char *path);
63 int qemuMonitorJSONUpdateVideoVram64Size(qemuMonitor *mon,
64                                          virDomainVideoDef *video,
65                                          char *path);
66 int qemuMonitorJSONGetBalloonInfo(qemuMonitor *mon,
67                                   unsigned long long *currmem);
68 int qemuMonitorJSONGetMemoryStats(qemuMonitor *mon,
69                                   char *balloonpath,
70                                   virDomainMemoryStatPtr stats,
71                                   unsigned int nr_stats);
72 int qemuMonitorJSONSetMemoryStatsPeriod(qemuMonitor *mon,
73                                         char *balloonpath,
74                                         int period);
75 int qemuMonitorJSONGetBlockInfo(qemuMonitor *mon,
76                                 GHashTable *table);
77 
78 virJSONValue *qemuMonitorJSONQueryBlockstats(qemuMonitor *mon,
79                                              bool queryNodes);
80 int qemuMonitorJSONGetAllBlockStatsInfo(qemuMonitor *mon,
81                                         GHashTable *hash);
82 int qemuMonitorJSONBlockStatsUpdateCapacity(qemuMonitor *mon,
83                                             GHashTable *stats);
84 int qemuMonitorJSONBlockStatsUpdateCapacityBlockdev(qemuMonitor *mon,
85                                                     GHashTable *stats);
86 
87 GHashTable *
88 qemuMonitorJSONBlockGetNamedNodeDataJSON(virJSONValue *nodes);
89 
90 GHashTable *
91 qemuMonitorJSONBlockGetNamedNodeData(qemuMonitor *mon,
92                                      bool supports_flat);
93 
94 int qemuMonitorJSONBlockResize(qemuMonitor *mon,
95                                const char *device,
96                                const char *nodename,
97                                unsigned long long size);
98 
99 int qemuMonitorJSONSetPassword(qemuMonitor *mon,
100                                const char *protocol,
101                                const char *password,
102                                const char *action_if_connected);
103 int qemuMonitorJSONExpirePassword(qemuMonitor *mon,
104                                   const char *protocol,
105                                   const char *expire_time);
106 int qemuMonitorJSONSetBalloon(qemuMonitor *mon,
107                               unsigned long long newmem);
108 
109 int qemuMonitorJSONEjectMedia(qemuMonitor *mon,
110                               const char *dev_name,
111                               bool force);
112 int qemuMonitorJSONChangeMedia(qemuMonitor *mon,
113                                const char *dev_name,
114                                const char *newmedia,
115                                const char *format);
116 
117 
118 int qemuMonitorJSONSaveVirtualMemory(qemuMonitor *mon,
119                                      unsigned long long offset,
120                                      unsigned long long length,
121                                      const char *path);
122 int qemuMonitorJSONSavePhysicalMemory(qemuMonitor *mon,
123                                       unsigned long long offset,
124                                       unsigned long long length,
125                                       const char *path);
126 
127 int qemuMonitorJSONSetMigrationSpeed(qemuMonitor *mon,
128                                      unsigned long bandwidth);
129 
130 int qemuMonitorJSONSetMigrationDowntime(qemuMonitor *mon,
131                                         unsigned long long downtime);
132 
133 int qemuMonitorJSONGetMigrationCacheSize(qemuMonitor *mon,
134                                          unsigned long long *cacheSize);
135 int qemuMonitorJSONSetMigrationCacheSize(qemuMonitor *mon,
136                                          unsigned long long cacheSize);
137 
138 int qemuMonitorJSONGetMigrationParams(qemuMonitor *mon,
139                                       virJSONValue **params);
140 int qemuMonitorJSONSetMigrationParams(qemuMonitor *mon,
141                                       virJSONValue **params);
142 
143 int qemuMonitorJSONGetMigrationStats(qemuMonitor *mon,
144                                      qemuMonitorMigrationStats *stats,
145                                      char **error);
146 
147 int qemuMonitorJSONGetMigrationCapabilities(qemuMonitor *mon,
148                                             char ***capabilities);
149 int qemuMonitorJSONSetMigrationCapabilities(qemuMonitor *mon,
150                                             virJSONValue **caps);
151 
152 int qemuMonitorJSONGetGICCapabilities(qemuMonitor *mon,
153                                       virGICCapability **capabilities);
154 
155 int qemuMonitorJSONGetSEVCapabilities(qemuMonitor *mon,
156                                       virSEVCapability **capabilities);
157 
158 int qemuMonitorJSONMigrate(qemuMonitor *mon,
159                            unsigned int flags,
160                            const char *uri);
161 int qemuMonitorJSONGetSpiceMigrationStatus(qemuMonitor *mon,
162                                            bool *spice_migrated);
163 
164 
165 int qemuMonitorJSONMigrateCancel(qemuMonitor *mon);
166 
167 int qemuMonitorJSONQueryDump(qemuMonitor *mon,
168                              qemuMonitorDumpStats *stats);
169 
170 int qemuMonitorJSONGetDumpGuestMemoryCapability(qemuMonitor *mon,
171                                                 const char *capability);
172 
173 int qemuMonitorJSONDump(qemuMonitor *mon,
174                         const char *protocol,
175                         const char *dumpformat,
176                         bool detach);
177 
178 int qemuMonitorJSONGraphicsRelocate(qemuMonitor *mon,
179                                     int type,
180                                     const char *hostname,
181                                     int port,
182                                     int tlsPort,
183                                     const char *tlsSubject);
184 
185 int qemuMonitorJSONAddPCIHostDevice(qemuMonitor *mon,
186                                     virPCIDeviceAddress *hostAddr,
187                                     virPCIDeviceAddress *guestAddr);
188 
189 int qemuMonitorJSONAddPCIDisk(qemuMonitor *mon,
190                               const char *path,
191                               const char *bus,
192                               virPCIDeviceAddress *guestAddr);
193 
194 int qemuMonitorJSONAddPCINetwork(qemuMonitor *mon,
195                                  const char *nicstr,
196                                  virPCIDeviceAddress *guestAddr);
197 
198 int qemuMonitorJSONRemovePCIDevice(qemuMonitor *mon,
199                                    virPCIDeviceAddress *guestAddr);
200 
201 int qemuMonitorJSONAddFileHandleToSet(qemuMonitor *mon,
202                                       int fd,
203                                       int fdset,
204                                       const char *opaque,
205                                       qemuMonitorAddFdInfo *info);
206 
207 int qemuMonitorJSONRemoveFdset(qemuMonitor *mon,
208                                int fdset);
209 
210 int qemuMonitorJSONQueryFdsets(qemuMonitor *mon,
211                                qemuMonitorFdsets **fdsets);
212 
213 int qemuMonitorJSONSendFileHandle(qemuMonitor *mon,
214                                   const char *fdname,
215                                   int fd);
216 
217 int qemuMonitorJSONCloseFileHandle(qemuMonitor *mon,
218                                    const char *fdname);
219 
220 int qemuMonitorJSONAddNetdev(qemuMonitor *mon,
221                              virJSONValue **props);
222 
223 int qemuMonitorJSONRemoveNetdev(qemuMonitor *mon,
224                                 const char *alias);
225 
226 int qemuMonitorJSONQueryRxFilter(qemuMonitor *mon, const char *alias,
227                                  virNetDevRxFilter **filter);
228 
229 int qemuMonitorJSONGetChardevInfo(qemuMonitor *mon,
230                                   GHashTable *info);
231 
232 int qemuMonitorJSONAttachPCIDiskController(qemuMonitor *mon,
233                                            const char *bus,
234                                            virPCIDeviceAddress *guestAddr);
235 
236 int qemuMonitorJSONAddDeviceProps(qemuMonitor *mon,
237                                   virJSONValue **props);
238 
239 int qemuMonitorJSONDelDevice(qemuMonitor *mon,
240                              const char *devalias);
241 
242 int qemuMonitorJSONAddObject(qemuMonitor *mon,
243                              virJSONValue **props);
244 
245 int qemuMonitorJSONDelObject(qemuMonitor *mon,
246                              const char *objalias,
247                              bool report_error);
248 
249 int qemuMonitorJSONTransaction(qemuMonitor *mon, virJSONValue **actions)
250     ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2);
251 int qemuMonitorJSONDriveMirror(qemuMonitor *mon,
252                                const char *device,
253                                const char *file,
254                                const char *format,
255                                unsigned long long speed,
256                                unsigned int granularity,
257                                unsigned long long buf_size,
258                                bool shallow,
259                                bool reuse)
260     ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2) ATTRIBUTE_NONNULL(3);
261 int qemuMonitorJSONBlockdevMirror(qemuMonitor *mon,
262                                   const char *jobname,
263                                   bool persistjob,
264                                   const char *device,
265                                   const char *target,
266                                   unsigned long long speed,
267                                   unsigned int granularity,
268                                   unsigned long long buf_size,
269                                   bool shallow)
270     ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(4) ATTRIBUTE_NONNULL(5);
271 int qemuMonitorJSONDrivePivot(qemuMonitor *mon,
272                               const char *jobname)
273     ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2);
274 
275 int qemuMonitorJSONBlockCommit(qemuMonitor *mon,
276                                const char *device,
277                                const char *jobname,
278                                bool persistjob,
279                                const char *top,
280                                const char *topNode,
281                                const char *base,
282                                const char *baseNode,
283                                const char *backingName,
284                                unsigned long long bandwidth)
285     ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2);
286 
287 char *qemuMonitorJSONDiskNameLookup(qemuMonitor *mon,
288                                     const char *device,
289                                     virStorageSource *top,
290                                     virStorageSource *target)
291     ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2) ATTRIBUTE_NONNULL(3)
292     ATTRIBUTE_NONNULL(4);
293 
294 int qemuMonitorJSONArbitraryCommand(qemuMonitor *mon,
295                                     const char *cmd_str,
296                                     char **reply_str);
297 
298 int qemuMonitorJSONInjectNMI(qemuMonitor *mon);
299 
300 int qemuMonitorJSONSendKey(qemuMonitor *mon,
301                            unsigned int holdtime,
302                            unsigned int *keycodes,
303                            unsigned int nkeycodes);
304 
305 int qemuMonitorJSONScreendump(qemuMonitor *mon,
306                               const char *device,
307                               unsigned int head,
308                               const char *file);
309 
310 int qemuMonitorJSONBlockStream(qemuMonitor *mon,
311                                const char *device,
312                                const char *jobname,
313                                bool persistjob,
314                                const char *base,
315                                const char *baseNode,
316                                const char *backingName,
317                                unsigned long long speed)
318     ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2);
319 
320 int qemuMonitorJSONBlockJobCancel(qemuMonitor *mon,
321                                   const char *jobname,
322                                   bool force)
323     ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2);
324 
325 int
326 qemuMonitorJSONGetJobInfo(qemuMonitor *mon,
327                           qemuMonitorJobInfo ***jobs,
328                           size_t *njobs);
329 
330 
331 int qemuMonitorJSONBlockJobSetSpeed(qemuMonitor *mon,
332                                     const char *jobname,
333                                     unsigned long long speed)
334     ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2);
335 
336 GHashTable *qemuMonitorJSONGetAllBlockJobInfo(qemuMonitor *mon,
337                                                   bool rawjobname)
338     ATTRIBUTE_NONNULL(1);
339 
340 int qemuMonitorJSONJobDismiss(qemuMonitor *mon,
341                               const char *jobname)
342     ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2);
343 
344 int qemuMonitorJSONJobComplete(qemuMonitor *mon,
345                                const char *jobname)
346     ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2);
347 
348 int qemuMonitorJSONSetLink(qemuMonitor *mon,
349                            const char *name,
350                            virDomainNetInterfaceLinkState state);
351 
352 int qemuMonitorJSONOpenGraphics(qemuMonitor *mon,
353                                 const char *protocol,
354                                 const char *fdname,
355                                 bool skipauth);
356 
357 int qemuMonitorJSONSetBlockIoThrottle(qemuMonitor *mon,
358                                       const char *drivealias,
359                                       const char *qomid,
360                                       virDomainBlockIoTuneInfo *info);
361 
362 int qemuMonitorJSONGetBlockIoThrottle(qemuMonitor *mon,
363                                       const char *drivealias,
364                                       const char *qdevid,
365                                       virDomainBlockIoTuneInfo *reply);
366 
367 int qemuMonitorJSONSystemWakeup(qemuMonitor *mon);
368 
369 char *qemuMonitorJSONGetSEVMeasurement(qemuMonitor *mon);
370 
371 int qemuMonitorJSONGetVersion(qemuMonitor *mon,
372                               int *major,
373                               int *minor,
374                               int *micro,
375                               char **package)
376     ATTRIBUTE_NONNULL(2) ATTRIBUTE_NONNULL(3) ATTRIBUTE_NONNULL(4);
377 
378 int qemuMonitorJSONGetMachines(qemuMonitor *mon,
379                                qemuMonitorMachineInfo ***machines)
380     ATTRIBUTE_NONNULL(2);
381 
382 int qemuMonitorJSONGetCPUDefinitions(qemuMonitor *mon,
383                                      qemuMonitorCPUDefs **cpuDefs)
384     ATTRIBUTE_NONNULL(2);
385 
386 int qemuMonitorJSONGetCPUModelExpansion(qemuMonitor *mon,
387                                         qemuMonitorCPUModelExpansionType type,
388                                         virCPUDef *cpu,
389                                         bool migratable,
390                                         bool fail_no_props,
391                                         qemuMonitorCPUModelInfo **model_info)
392     ATTRIBUTE_NONNULL(3) ATTRIBUTE_NONNULL(6);
393 
394 int qemuMonitorJSONGetCPUModelBaseline(qemuMonitor *mon,
395                                        virCPUDef *cpu_a,
396                                        virCPUDef *cpu_b,
397                                        qemuMonitorCPUModelInfo **baseline)
398     ATTRIBUTE_NONNULL(2) ATTRIBUTE_NONNULL(3) ATTRIBUTE_NONNULL(4);
399 
400 int qemuMonitorJSONGetCPUModelComparison(qemuMonitor *mon,
401                                          virCPUDef *cpu_a,
402                                          virCPUDef *cpu_b,
403                                          char **result)
404     ATTRIBUTE_NONNULL(2) ATTRIBUTE_NONNULL(3);
405 
406 int qemuMonitorJSONGetCommands(qemuMonitor *mon,
407                                char ***commands)
408     ATTRIBUTE_NONNULL(2);
409 GHashTable *qemuMonitorJSONGetCommandLineOptions(qemuMonitor *mon);
410 
411 int qemuMonitorJSONGetKVMState(qemuMonitor *mon,
412                                bool *enabled,
413                                bool *present)
414     ATTRIBUTE_NONNULL(2) ATTRIBUTE_NONNULL(3);
415 
416 int qemuMonitorJSONGetNVMMState(qemuMonitor *mon,
417                                bool *enabled,
418                                bool *present)
419     ATTRIBUTE_NONNULL(2) ATTRIBUTE_NONNULL(3);
420 
421 int qemuMonitorJSONGetObjectTypes(qemuMonitor *mon,
422                                   char ***types)
423     ATTRIBUTE_NONNULL(2);
424 
425 /* ListPath structures and API's are public only for qemumonitorjsontest */
426 typedef struct _qemuMonitorJSONListPath qemuMonitorJSONListPath;
427 struct _qemuMonitorJSONListPath {
428     char *name;
429     char *type;
430 };
431 
432 int qemuMonitorJSONGetObjectListPaths(qemuMonitor *mon,
433                                       const char *path,
434                                       qemuMonitorJSONListPath ***paths)
435     ATTRIBUTE_NONNULL(2) ATTRIBUTE_NONNULL(3);
436 
437 void qemuMonitorJSONListPathFree(qemuMonitorJSONListPath *paths);
438 
439 /* ObjectProperty structures and Get/Set API's are public only
440  * for qemumonitorjsontest
441  */
442 /* Flags for the 'type' field in _qemuMonitorJSONObjectProperty */
443 typedef enum {
444     QEMU_MONITOR_OBJECT_PROPERTY_BOOLEAN=1,
445     QEMU_MONITOR_OBJECT_PROPERTY_INT,
446     QEMU_MONITOR_OBJECT_PROPERTY_LONG,
447     QEMU_MONITOR_OBJECT_PROPERTY_UINT,
448     QEMU_MONITOR_OBJECT_PROPERTY_ULONG,
449     QEMU_MONITOR_OBJECT_PROPERTY_DOUBLE,
450     QEMU_MONITOR_OBJECT_PROPERTY_STRING,
451 
452     QEMU_MONITOR_OBJECT_PROPERTY_LAST
453 } qemuMonitorJSONObjectPropertyType;
454 
455 typedef struct _qemuMonitorJSONObjectProperty qemuMonitorJSONObjectProperty;
456 struct _qemuMonitorJSONObjectProperty {
457     int type;    /* qemuMonitorJSONObjectPropertyType */
458     union {
459         bool b;
460         int iv;
461         long long l;
462         unsigned int ui;
463         unsigned long long ul;
464         double d;
465         char *str;
466     } val;
467 };
468 
469 int qemuMonitorJSONGetObjectProperty(qemuMonitor *mon,
470                                      const char *path,
471                                      const char *property,
472                                      qemuMonitorJSONObjectProperty *prop)
473     ATTRIBUTE_NONNULL(2) ATTRIBUTE_NONNULL(3) ATTRIBUTE_NONNULL(4);
474 
475 int qemuMonitorJSONSetObjectProperty(qemuMonitor *mon,
476                                      const char *path,
477                                      const char *property,
478                                      qemuMonitorJSONObjectProperty *prop)
479     ATTRIBUTE_NONNULL(2) ATTRIBUTE_NONNULL(3) ATTRIBUTE_NONNULL(4);
480 
481 GHashTable *qemuMonitorJSONGetDeviceProps(qemuMonitor *mon,
482                                               const char *device)
483     ATTRIBUTE_NONNULL(2);
484 int qemuMonitorJSONGetObjectProps(qemuMonitor *mon,
485                                   const char *object,
486                                   char ***props)
487     ATTRIBUTE_NONNULL(2) ATTRIBUTE_NONNULL(3);
488 char *qemuMonitorJSONGetTargetArch(qemuMonitor *mon);
489 
490 int qemuMonitorJSONNBDServerStart(qemuMonitor *mon,
491                                   const virStorageNetHostDef *server,
492                                   const char *tls_alias);
493 int qemuMonitorJSONNBDServerAdd(qemuMonitor *mon,
494                                 const char *deviceID,
495                                 const char *export,
496                                 bool writable,
497                                 const char *bitmap);
498 int qemuMonitorJSONNBDServerStop(qemuMonitor *mon);
499 
500 int qemuMonitorJSONBlockExportAdd(qemuMonitor *mon,
501                                   virJSONValue **props);
502 
503 int qemuMonitorJSONGetTPMModels(qemuMonitor *mon,
504                                 char ***tpmmodels)
505     ATTRIBUTE_NONNULL(2);
506 
507 int qemuMonitorJSONGetTPMTypes(qemuMonitor *mon,
508                                char ***tpmtypes)
509     ATTRIBUTE_NONNULL(2);
510 
511 int qemuMonitorJSONAttachCharDev(qemuMonitor *mon,
512                                  const char *chrID,
513                                  virDomainChrSourceDef *chr);
514 int qemuMonitorJSONDetachCharDev(qemuMonitor *mon,
515                                  const char *chrID);
516 
517 int qemuMonitorJSONGetDeviceAliases(qemuMonitor *mon,
518                                     char ***aliases);
519 
520 int qemuMonitorJSONGetCPUx86Data(qemuMonitor *mon,
521                                  const char *property,
522                                  virCPUData **cpudata);
523 
524 int qemuMonitorJSONGetGuestCPUx86(qemuMonitor *mon,
525                                   virCPUData **data,
526                                   virCPUData **disabled);
527 
528 int qemuMonitorJSONGetGuestCPU(qemuMonitor *mon,
529                                virArch arch,
530                                qemuMonitorCPUFeatureTranslationCallback translate,
531                                void *opaque,
532                                virCPUData **enabled,
533                                virCPUData **disabled);
534 
535 int qemuMonitorJSONRTCResetReinjection(qemuMonitor *mon);
536 
537 int qemuMonitorJSONGetIOThreads(qemuMonitor *mon,
538                                 qemuMonitorIOThreadInfo ***iothreads,
539                                 int *niothreads)
540     ATTRIBUTE_NONNULL(2);
541 
542 int qemuMonitorJSONSetIOThread(qemuMonitor *mon,
543                                qemuMonitorIOThreadInfo *iothreadInfo)
544     ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2);
545 
546 int qemuMonitorJSONGetMemoryDeviceInfo(qemuMonitor *mon,
547                                        GHashTable *info)
548     ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2);
549 
550 int qemuMonitorJSONFindLinkPath(qemuMonitor *mon,
551                                 const char *name,
552                                 const char *alias,
553                                 char **path)
554     ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2) ATTRIBUTE_NONNULL(4);
555 
556 int qemuMonitorJSONMigrateIncoming(qemuMonitor *mon,
557                                    const char *uri)
558     ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2);
559 
560 int qemuMonitorJSONMigrateStartPostCopy(qemuMonitor *mon)
561     ATTRIBUTE_NONNULL(1);
562 
563 int qemuMonitorJSONMigrateContinue(qemuMonitor *mon,
564                                    qemuMonitorMigrationStatus status)
565     ATTRIBUTE_NONNULL(1);
566 
567 int qemuMonitorJSONGetRTCTime(qemuMonitor *mon,
568                               struct tm *tm)
569     ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2);
570 
571 int qemuMonitorJSONGetHotpluggableCPUs(qemuMonitor *mon,
572                                        struct qemuMonitorQueryHotpluggableCpusEntry **entries,
573                                        size_t *nentries)
574     ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2) ATTRIBUTE_NONNULL(3);
575 
576 virJSONValue *qemuMonitorJSONQueryQMPSchema(qemuMonitor *mon)
577     ATTRIBUTE_NONNULL(1);
578 
579 int qemuMonitorJSONSetBlockThreshold(qemuMonitor *mon,
580                                      const char *nodename,
581                                      unsigned long long threshold)
582     ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2);
583 
584 virJSONValue *qemuMonitorJSONQueryNamedBlockNodes(qemuMonitor *mon,
585                                                     bool flat)
586     ATTRIBUTE_NONNULL(1);
587 
588 int qemuMonitorJSONSetWatchdogAction(qemuMonitor *mon,
589                                      const char *action)
590     ATTRIBUTE_NONNULL(1);
591 
592 int qemuMonitorJSONBlockdevCreate(qemuMonitor *mon,
593                                   const char *jobname,
594                                   virJSONValue *props)
595     ATTRIBUTE_NONNULL(1);
596 
597 int qemuMonitorJSONBlockdevAdd(qemuMonitor *mon,
598                                virJSONValue **props)
599     ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2);
600 
601 int qemuMonitorJSONBlockdevReopen(qemuMonitor *mon,
602                                   virJSONValue **props)
603     ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2);
604 
605 int qemuMonitorJSONBlockdevDel(qemuMonitor *mon,
606                                const char *nodename)
607     ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2);
608 
609 int qemuMonitorJSONBlockdevTrayOpen(qemuMonitor *mon,
610                                     const char *id,
611                                     bool force)
612     ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2);
613 
614 int qemuMonitorJSONBlockdevTrayClose(qemuMonitor *mon,
615                                      const char *id)
616     ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2);
617 
618 int qemuMonitorJSONBlockdevMediumRemove(qemuMonitor *mon,
619                                         const char *id)
620     ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2);
621 
622 int qemuMonitorJSONBlockdevMediumInsert(qemuMonitor *mon,
623                                         const char *id,
624                                         const char *nodename)
625     ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2) ATTRIBUTE_NONNULL(3);
626 
627 int qemuMonitorJSONGetPRManagerInfo(qemuMonitor *mon,
628                                     GHashTable *info)
629     ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2);
630 
631 int
632 qemuMonitorJSONGetCurrentMachineInfo(qemuMonitor *mon,
633                                      qemuMonitorCurrentMachineInfo *info)
634     ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2);
635 
636 int
637 qemuMonitorJSONTransactionBitmapAdd(virJSONValue *actions,
638                                     const char *node,
639                                     const char *name,
640                                     bool persistent,
641                                     bool disabled,
642                                     unsigned long long granularity);
643 int
644 qemuMonitorJSONTransactionBitmapRemove(virJSONValue *actions,
645                                        const char *node,
646                                        const char *name);
647 
648 int
649 qemuMonitorJSONBitmapRemove(qemuMonitor *mon,
650                             const char *node,
651                             const char *name);
652 
653 int
654 qemuMonitorJSONTransactionBitmapEnable(virJSONValue *actions,
655                                        const char *node,
656                                        const char *name);
657 int
658 qemuMonitorJSONTransactionBitmapDisable(virJSONValue *actions,
659                                         const char *node,
660                                         const char *name);
661 int
662 qemuMonitorJSONTransactionBitmapMerge(virJSONValue *actions,
663                                       const char *node,
664                                       const char *target,
665                                       virJSONValue **sources);
666 
667 int
668 qemuMonitorJSONTransactionBitmapMergeSourceAddBitmap(virJSONValue *sources,
669                                                      const char *sourcenode,
670                                                      const char *sourcebitmap);
671 
672 int
673 qemuMonitorJSONTransactionSnapshotLegacy(virJSONValue *actions,
674                                          const char *device,
675                                          const char *path,
676                                          const char *format,
677                                          bool existing);
678 int
679 qemuMonitorJSONTransactionSnapshotBlockdev(virJSONValue *actions,
680                                            const char *node,
681                                            const char *overlay);
682 
683 int
684 qemuMonitorJSONTransactionBackup(virJSONValue *actions,
685                                  const char *device,
686                                  const char *jobname,
687                                  const char *target,
688                                  const char *bitmap,
689                                  qemuMonitorTransactionBackupSyncMode syncmode);
690 
691 int qemuMonitorJSONSetDBusVMStateIdList(qemuMonitor *mon,
692                                         const char *vmstatepath,
693                                         const char *idstr)
694     ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2) ATTRIBUTE_NONNULL(3);
695 
696 int
697 qemuMonitorJSONGetCPUMigratable(qemuMonitor *mon,
698                                 bool *migratable);
699 
700 int
701 qemuMonitorJSONStartDirtyRateCalc(qemuMonitor *mon,
702                                   int seconds);
703 
704 int
705 qemuMonitorJSONQueryDirtyRate(qemuMonitor *mon,
706                               qemuMonitorDirtyRateInfo *info);
707 
708 int
709 qemuMonitorJSONSetAction(qemuMonitor *mon,
710                          qemuMonitorActionShutdown shutdown,
711                          qemuMonitorActionReboot reboot,
712                          qemuMonitorActionWatchdog watchdog,
713                          qemuMonitorActionPanic panic);
714 
715 int
716 qemuMonitorJSONChangeMemoryRequestedSize(qemuMonitor *mon,
717                                          const char *alias,
718                                          unsigned long long requestedsize);
719