qemu_monitor.h 54.1 KB
Newer Older
1 2 3
/*
 * qemu_monitor.h: interaction with QEMU monitor console
 *
4
 * Copyright (C) 2006-2015 Red Hat, Inc.
5 6 7 8 9 10 11 12 13 14 15 16 17
 * Copyright (C) 2006 Daniel P. Berrange
 *
 * This library is free software; you can redistribute it and/or
 * modify it under the terms of the GNU Lesser General Public
 * License as published by the Free Software Foundation; either
 * version 2.1 of the License, or (at your option) any later version.
 *
 * This library is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 * Lesser General Public License for more details.
 *
 * You should have received a copy of the GNU Lesser General Public
18
 * License along with this library.  If not, see
O
Osier Yang 已提交
19
 * <http://www.gnu.org/licenses/>.
20 21
 */

22
#pragma once
23

24
#include "internal.h"
25

26 27 28 29 30 31 32 33 34
#include "domain_conf.h"
#include "virbitmap.h"
#include "virhash.h"
#include "virjson.h"
#include "virnetdev.h"
#include "device_conf.h"
#include "cpu/cpu.h"
#include "util/virgic.h"
#include "virenum.h"
35

36 37
typedef struct _qemuMonitor qemuMonitor;
typedef qemuMonitor *qemuMonitorPtr;
38

39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54
typedef struct _qemuMonitorMessage qemuMonitorMessage;
typedef qemuMonitorMessage *qemuMonitorMessagePtr;

typedef int (*qemuMonitorPasswordHandler)(qemuMonitorPtr mon,
                                          qemuMonitorMessagePtr msg,
                                          const char *data,
                                          size_t len,
                                          void *opaque);

struct _qemuMonitorMessage {
    int txFD;

    char *txBuffer;
    int txOffset;
    int txLength;

55
    /* Used by the text monitor reply / error */
56 57
    char *rxBuffer;
    int rxLength;
58 59
    /* Used by the JSON monitor to hold reply / error */
    void *rxObject;
60

61 62 63 64
    /* True if rxBuffer / rxObject are ready, or a
     * fatal error occurred on the monitor channel
     */
    bool finished;
65 66 67 68 69

    qemuMonitorPasswordHandler passwordHandler;
    void *passwordOpaque;
};

70 71 72
typedef enum {
    QEMU_MONITOR_EVENT_PANIC_INFO_TYPE_NONE = 0,
    QEMU_MONITOR_EVENT_PANIC_INFO_TYPE_HYPERV,
73
    QEMU_MONITOR_EVENT_PANIC_INFO_TYPE_S390,
74 75 76 77 78 79 80 81 82 83 84 85 86 87 88

    QEMU_MONITOR_EVENT_PANIC_INFO_TYPE_LAST
} qemuMonitorEventPanicInfoType;

typedef struct _qemuMonitorEventPanicInfoHyperv qemuMonitorEventPanicInfoHyperv;
typedef qemuMonitorEventPanicInfoHyperv *qemuMonitorEventPanicInfoHypervPtr;
struct _qemuMonitorEventPanicInfoHyperv {
    /* Hyper-V specific guest panic information (HV crash MSRs) */
    unsigned long long arg1;
    unsigned long long arg2;
    unsigned long long arg3;
    unsigned long long arg4;
    unsigned long long arg5;
};

89 90 91 92 93 94 95 96 97 98
typedef struct _qemuMonitorEventPanicInfoS390 qemuMonitorEventPanicInfoS390;
typedef qemuMonitorEventPanicInfoS390 *qemuMonitorEventPanicInfoS390Ptr;
struct _qemuMonitorEventPanicInfoS390 {
    /* S390 specific guest panic information */
    int core;
    unsigned long long psw_mask;
    unsigned long long psw_addr;
    char *reason;
};

99 100 101 102 103 104
typedef struct _qemuMonitorEventPanicInfo qemuMonitorEventPanicInfo;
typedef qemuMonitorEventPanicInfo *qemuMonitorEventPanicInfoPtr;
struct _qemuMonitorEventPanicInfo {
    qemuMonitorEventPanicInfoType type;
    union {
        qemuMonitorEventPanicInfoHyperv hyperv;
105
        qemuMonitorEventPanicInfoS390 s390;
106 107 108
    } data;
};

109 110 111 112 113 114 115 116 117 118 119

typedef struct _qemuMonitorRdmaGidStatus qemuMonitorRdmaGidStatus;
typedef qemuMonitorRdmaGidStatus *qemuMonitorRdmaGidStatusPtr;
struct _qemuMonitorRdmaGidStatus {
    char *netdev;
    bool gid_status;
    unsigned long long subnet_prefix;
    unsigned long long interface_id;
};


120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161
typedef enum {
    QEMU_MONITOR_JOB_TYPE_UNKNOWN, /* internal value, not exposed by qemu */
    QEMU_MONITOR_JOB_TYPE_COMMIT,
    QEMU_MONITOR_JOB_TYPE_STREAM,
    QEMU_MONITOR_JOB_TYPE_MIRROR,
    QEMU_MONITOR_JOB_TYPE_BACKUP,
    QEMU_MONITOR_JOB_TYPE_CREATE,
    QEMU_MONITOR_JOB_TYPE_LAST
} qemuMonitorJobType;

VIR_ENUM_DECL(qemuMonitorJob);

typedef enum {
    QEMU_MONITOR_JOB_STATUS_UNKNOWN, /* internal value, not exposed by qemu */
    QEMU_MONITOR_JOB_STATUS_CREATED,
    QEMU_MONITOR_JOB_STATUS_RUNNING,
    QEMU_MONITOR_JOB_STATUS_PAUSED,
    QEMU_MONITOR_JOB_STATUS_READY,
    QEMU_MONITOR_JOB_STATUS_STANDBY,
    QEMU_MONITOR_JOB_STATUS_WAITING,
    QEMU_MONITOR_JOB_STATUS_PENDING,
    QEMU_MONITOR_JOB_STATUS_ABORTING,
    QEMU_MONITOR_JOB_STATUS_CONCLUDED,
    QEMU_MONITOR_JOB_STATUS_UNDEFINED, /* the job states below should not be visible outside of qemu */
    QEMU_MONITOR_JOB_STATUS_NULL,
    QEMU_MONITOR_JOB_STATUS_LAST
} qemuMonitorJobStatus;

VIR_ENUM_DECL(qemuMonitorJobStatus);

typedef struct _qemuMonitorJobInfo qemuMonitorJobInfo;
typedef qemuMonitorJobInfo *qemuMonitorJobInfoPtr;
struct _qemuMonitorJobInfo {
    char *id;
    qemuMonitorJobType type;
    qemuMonitorJobStatus status;
    char *error;
    long long progressCurrent;
    long long progressTotal;
};


162
char *qemuMonitorGuestPanicEventInfoFormatMsg(qemuMonitorEventPanicInfoPtr info);
163
void qemuMonitorEventPanicInfoFree(qemuMonitorEventPanicInfoPtr info);
164
void qemuMonitorEventRdmaGidStatusFree(qemuMonitorRdmaGidStatusPtr info);
J
Jiri Denemark 已提交
165 166

typedef void (*qemuMonitorDestroyCallback)(qemuMonitorPtr mon,
167 168
                                           virDomainObjPtr vm,
                                           void *opaque);
J
Jiri Denemark 已提交
169
typedef void (*qemuMonitorEofNotifyCallback)(qemuMonitorPtr mon,
170 171
                                             virDomainObjPtr vm,
                                             void *opaque);
J
Jiri Denemark 已提交
172
typedef void (*qemuMonitorErrorNotifyCallback)(qemuMonitorPtr mon,
173 174
                                               virDomainObjPtr vm,
                                               void *opaque);
175 176 177 178 179 180 181
typedef int (*qemuMonitorDomainEventCallback)(qemuMonitorPtr mon,
                                              virDomainObjPtr vm,
                                              const char *event,
                                              long long seconds,
                                              unsigned int micros,
                                              const char *details,
                                              void *opaque);
J
Jiri Denemark 已提交
182
typedef int (*qemuMonitorDomainShutdownCallback)(qemuMonitorPtr mon,
183
                                                 virDomainObjPtr vm,
184
                                                 virTristateBool guest,
185
                                                 void *opaque);
J
Jiri Denemark 已提交
186
typedef int (*qemuMonitorDomainResetCallback)(qemuMonitorPtr mon,
187 188
                                              virDomainObjPtr vm,
                                              void *opaque);
J
Jiri Denemark 已提交
189
typedef int (*qemuMonitorDomainPowerdownCallback)(qemuMonitorPtr mon,
190 191
                                                  virDomainObjPtr vm,
                                                  void *opaque);
J
Jiri Denemark 已提交
192
typedef int (*qemuMonitorDomainStopCallback)(qemuMonitorPtr mon,
193 194
                                             virDomainObjPtr vm,
                                             void *opaque);
J
Jiri Denemark 已提交
195
typedef int (*qemuMonitorDomainResumeCallback)(qemuMonitorPtr mon,
196 197
                                               virDomainObjPtr vm,
                                               void *opaque);
J
Jiri Denemark 已提交
198 199
typedef int (*qemuMonitorDomainRTCChangeCallback)(qemuMonitorPtr mon,
                                                  virDomainObjPtr vm,
200 201
                                                  long long offset,
                                                  void *opaque);
J
Jiri Denemark 已提交
202 203
typedef int (*qemuMonitorDomainWatchdogCallback)(qemuMonitorPtr mon,
                                                 virDomainObjPtr vm,
204 205
                                                 int action,
                                                 void *opaque);
J
Jiri Denemark 已提交
206 207 208
typedef int (*qemuMonitorDomainIOErrorCallback)(qemuMonitorPtr mon,
                                                virDomainObjPtr vm,
                                                const char *diskAlias,
209
                                                const char *nodename,
J
Jiri Denemark 已提交
210
                                                int action,
211 212
                                                const char *reason,
                                                void *opaque);
J
Jiri Denemark 已提交
213 214 215 216 217 218 219 220 221 222 223
typedef int (*qemuMonitorDomainGraphicsCallback)(qemuMonitorPtr mon,
                                                 virDomainObjPtr vm,
                                                 int phase,
                                                 int localFamily,
                                                 const char *localNode,
                                                 const char *localService,
                                                 int remoteFamily,
                                                 const char *remoteNode,
                                                 const char *remoteService,
                                                 const char *authScheme,
                                                 const char *x509dname,
224 225
                                                 const char *saslUsername,
                                                 void *opaque);
J
Jiri Denemark 已提交
226 227 228 229
typedef int (*qemuMonitorDomainBlockJobCallback)(qemuMonitorPtr mon,
                                                 virDomainObjPtr vm,
                                                 const char *diskAlias,
                                                 int type,
230
                                                 int status,
231
                                                 const char *error,
232
                                                 void *opaque);
J
Jiri Denemark 已提交
233 234 235
typedef int (*qemuMonitorDomainTrayChangeCallback)(qemuMonitorPtr mon,
                                                   virDomainObjPtr vm,
                                                   const char *devAlias,
236
                                                   const char *devid,
237 238
                                                   int reason,
                                                   void *opaque);
J
Jiri Denemark 已提交
239
typedef int (*qemuMonitorDomainPMWakeupCallback)(qemuMonitorPtr mon,
240 241
                                                 virDomainObjPtr vm,
                                                 void *opaque);
J
Jiri Denemark 已提交
242
typedef int (*qemuMonitorDomainPMSuspendCallback)(qemuMonitorPtr mon,
243 244
                                                  virDomainObjPtr vm,
                                                  void *opaque);
J
Jiri Denemark 已提交
245 246
typedef int (*qemuMonitorDomainBalloonChangeCallback)(qemuMonitorPtr mon,
                                                      virDomainObjPtr vm,
247 248
                                                      unsigned long long actual,
                                                      void *opaque);
J
Jiri Denemark 已提交
249
typedef int (*qemuMonitorDomainPMSuspendDiskCallback)(qemuMonitorPtr mon,
250 251
                                                      virDomainObjPtr vm,
                                                      void *opaque);
J
Jiri Denemark 已提交
252
typedef int (*qemuMonitorDomainGuestPanicCallback)(qemuMonitorPtr mon,
253
                                                   virDomainObjPtr vm,
254
                                                   qemuMonitorEventPanicInfoPtr info,
255
                                                   void *opaque);
J
Jiri Denemark 已提交
256 257
typedef int (*qemuMonitorDomainDeviceDeletedCallback)(qemuMonitorPtr mon,
                                                      virDomainObjPtr vm,
258 259
                                                      const char *devAlias,
                                                      void *opaque);
260 261 262 263
typedef int (*qemuMonitorDomainNicRxFilterChangedCallback)(qemuMonitorPtr mon,
                                                           virDomainObjPtr vm,
                                                           const char *devAlias,
                                                           void *opaque);
J
Jiri Denemark 已提交
264

265 266 267 268 269 270
typedef int (*qemuMonitorDomainSerialChangeCallback)(qemuMonitorPtr mon,
                                                     virDomainObjPtr vm,
                                                     const char *devAlias,
                                                     bool connected,
                                                     void *opaque);

271 272 273 274
typedef int (*qemuMonitorDomainSpiceMigratedCallback)(qemuMonitorPtr mon,
                                                      virDomainObjPtr vm,
                                                      void *opaque);

275 276 277 278 279
typedef int (*qemuMonitorDomainMigrationStatusCallback)(qemuMonitorPtr mon,
                                                        virDomainObjPtr vm,
                                                        int status,
                                                        void *opaque);

280 281 282 283 284
typedef int (*qemuMonitorDomainMigrationPassCallback)(qemuMonitorPtr mon,
                                                      virDomainObjPtr vm,
                                                      int pass,
                                                      void *opaque);

285 286 287 288 289 290 291 292 293 294
typedef int (*qemuMonitorDomainAcpiOstInfoCallback)(qemuMonitorPtr mon,
                                                    virDomainObjPtr vm,
                                                    const char *alias,
                                                    const char *slotType,
                                                    const char *slot,
                                                    unsigned int source,
                                                    unsigned int status,
                                                    void *opaque);


295 296 297 298 299 300 301 302
typedef int (*qemuMonitorDomainBlockThresholdCallback)(qemuMonitorPtr mon,
                                                       virDomainObjPtr vm,
                                                       const char *nodename,
                                                       unsigned long long threshold,
                                                       unsigned long long excess,
                                                       void *opaque);


303 304 305 306 307 308 309 310 311
typedef enum {
    QEMU_MONITOR_DUMP_STATUS_NONE,
    QEMU_MONITOR_DUMP_STATUS_ACTIVE,
    QEMU_MONITOR_DUMP_STATUS_COMPLETED,
    QEMU_MONITOR_DUMP_STATUS_FAILED,

    QEMU_MONITOR_DUMP_STATUS_LAST,
} qemuMonitorDumpStatus;

312
VIR_ENUM_DECL(qemuMonitorDumpStatus);
313 314 315 316 317 318 319 320 321

typedef struct _qemuMonitorDumpStats qemuMonitorDumpStats;
typedef qemuMonitorDumpStats *qemuMonitorDumpStatsPtr;
struct _qemuMonitorDumpStats {
    int status; /* qemuMonitorDumpStatus */
    unsigned long long completed; /* bytes written */
    unsigned long long total; /* total bytes to be written */
};

322 323 324 325 326 327 328
typedef int (*qemuMonitorDomainDumpCompletedCallback)(qemuMonitorPtr mon,
                                                      virDomainObjPtr vm,
                                                      int status,
                                                      qemuMonitorDumpStatsPtr stats,
                                                      const char *error,
                                                      void *opaque);

329 330 331 332 333 334
typedef int (*qemuMonitorDomainPRManagerStatusChangedCallback)(qemuMonitorPtr mon,
                                                               virDomainObjPtr vm,
                                                               const char *prManager,
                                                               bool connected,
                                                               void *opaque);

335 336 337 338
typedef int (*qemuMonitorDomainRdmaGidStatusChangedCallback)(qemuMonitorPtr mon,
                                                             virDomainObjPtr vm,
                                                             const char *netdev,
                                                             bool gid_status,
339 340
                                                             unsigned long long subnet_prefix,
                                                             unsigned long long interface_id,
341 342
                                                             void *opaque);

343 344 345
typedef struct _qemuMonitorCallbacks qemuMonitorCallbacks;
typedef qemuMonitorCallbacks *qemuMonitorCallbacksPtr;
struct _qemuMonitorCallbacks {
J
Jiri Denemark 已提交
346 347 348
    qemuMonitorDestroyCallback destroy;
    qemuMonitorEofNotifyCallback eofNotify;
    qemuMonitorErrorNotifyCallback errorNotify;
349
    qemuMonitorDomainEventCallback domainEvent;
J
Jiri Denemark 已提交
350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366
    qemuMonitorDomainShutdownCallback domainShutdown;
    qemuMonitorDomainResetCallback domainReset;
    qemuMonitorDomainPowerdownCallback domainPowerdown;
    qemuMonitorDomainStopCallback domainStop;
    qemuMonitorDomainResumeCallback domainResume;
    qemuMonitorDomainRTCChangeCallback domainRTCChange;
    qemuMonitorDomainWatchdogCallback domainWatchdog;
    qemuMonitorDomainIOErrorCallback domainIOError;
    qemuMonitorDomainGraphicsCallback domainGraphics;
    qemuMonitorDomainBlockJobCallback domainBlockJob;
    qemuMonitorDomainTrayChangeCallback domainTrayChange;
    qemuMonitorDomainPMWakeupCallback domainPMWakeup;
    qemuMonitorDomainPMSuspendCallback domainPMSuspend;
    qemuMonitorDomainBalloonChangeCallback domainBalloonChange;
    qemuMonitorDomainPMSuspendDiskCallback domainPMSuspendDisk;
    qemuMonitorDomainGuestPanicCallback domainGuestPanic;
    qemuMonitorDomainDeviceDeletedCallback domainDeviceDeleted;
367
    qemuMonitorDomainNicRxFilterChangedCallback domainNicRxFilterChanged;
368
    qemuMonitorDomainSerialChangeCallback domainSerialChange;
369
    qemuMonitorDomainSpiceMigratedCallback domainSpiceMigrated;
370
    qemuMonitorDomainMigrationStatusCallback domainMigrationStatus;
371
    qemuMonitorDomainMigrationPassCallback domainMigrationPass;
372
    qemuMonitorDomainAcpiOstInfoCallback domainAcpiOstInfo;
373
    qemuMonitorDomainBlockThresholdCallback domainBlockThreshold;
374
    qemuMonitorDomainDumpCompletedCallback domainDumpCompleted;
375
    qemuMonitorDomainPRManagerStatusChangedCallback domainPRManagerStatusChanged;
376
    qemuMonitorDomainRdmaGidStatusChangedCallback domainRdmaGidStatusChanged;
377 378
};

379
char *qemuMonitorEscapeArg(const char *in);
380
char *qemuMonitorUnescapeArg(const char *in);
381

382
qemuMonitorPtr qemuMonitorOpen(virDomainObjPtr vm,
383
                               virDomainChrSourceDefPtr config,
384
                               bool retry,
385
                               unsigned long long timeout,
386 387
                               qemuMonitorCallbacksPtr cb,
                               void *opaque)
J
John Ferlan 已提交
388
    ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2) ATTRIBUTE_NONNULL(5);
389 390
qemuMonitorPtr qemuMonitorOpenFD(virDomainObjPtr vm,
                                 int sockfd,
391 392
                                 qemuMonitorCallbacksPtr cb,
                                 void *opaque)
393
    ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(4);
394

395 396
bool qemuMonitorRegister(qemuMonitorPtr mon)
    ATTRIBUTE_NONNULL(1);
397 398
void qemuMonitorUnregister(qemuMonitorPtr mon)
    ATTRIBUTE_NONNULL(1);
399
void qemuMonitorClose(qemuMonitorPtr mon);
400

401 402
virErrorPtr qemuMonitorLastError(qemuMonitorPtr mon);

403
int qemuMonitorSetCapabilities(qemuMonitorPtr mon);
404

405 406
int qemuMonitorSetLink(qemuMonitorPtr mon,
                       const char *name,
407 408
                       virDomainNetInterfaceLinkState state)
    ATTRIBUTE_NONNULL(2);
409

410
/* These APIs are for use by the internal Text/JSON monitor impl code only */
411
char *qemuMonitorNextCommandID(qemuMonitorPtr mon);
412 413
int qemuMonitorSend(qemuMonitorPtr mon,
                    qemuMonitorMessagePtr msg);
414 415 416 417
virJSONValuePtr qemuMonitorGetOptions(qemuMonitorPtr mon)
    ATTRIBUTE_NONNULL(1);
void qemuMonitorSetOptions(qemuMonitorPtr mon, virJSONValuePtr options)
    ATTRIBUTE_NONNULL(1);
418 419
int qemuMonitorUpdateVideoMemorySize(qemuMonitorPtr mon,
                                     virDomainVideoDefPtr video,
C
Cao jin 已提交
420
                                     const char *videoName)
421
    ATTRIBUTE_NONNULL(2) ATTRIBUTE_NONNULL(3);
422 423 424
int qemuMonitorUpdateVideoVram64Size(qemuMonitorPtr mon,
                                     virDomainVideoDefPtr video,
                                     const char *videoName)
425
    ATTRIBUTE_NONNULL(2) ATTRIBUTE_NONNULL(3);
426 427 428 429
int qemuMonitorHMPCommandWithFd(qemuMonitorPtr mon,
                                const char *cmd,
                                int scm_fd,
                                char **reply);
430
#define qemuMonitorHMPCommand(mon, cmd, reply) \
431
    qemuMonitorHMPCommandWithFd(mon, cmd, -1, reply)
432

433 434 435
int qemuMonitorEmitEvent(qemuMonitorPtr mon, const char *event,
                         long long seconds, unsigned int micros,
                         const char *details);
436
int qemuMonitorEmitShutdown(qemuMonitorPtr mon, virTristateBool guest);
437 438 439
int qemuMonitorEmitReset(qemuMonitorPtr mon);
int qemuMonitorEmitPowerdown(qemuMonitorPtr mon);
int qemuMonitorEmitStop(qemuMonitorPtr mon);
440
int qemuMonitorEmitResume(qemuMonitorPtr mon);
441
int qemuMonitorEmitRTCChange(qemuMonitorPtr mon, long long offset);
442
int qemuMonitorEmitWatchdog(qemuMonitorPtr mon, int action);
443 444
int qemuMonitorEmitIOError(qemuMonitorPtr mon,
                           const char *diskAlias,
445
                           const char *nodename,
446 447
                           int action,
                           const char *reason);
448 449 450 451 452 453 454 455 456 457 458
int qemuMonitorEmitGraphics(qemuMonitorPtr mon,
                            int phase,
                            int localFamily,
                            const char *localNode,
                            const char *localService,
                            int remoteFamily,
                            const char *remoteNode,
                            const char *remoteService,
                            const char *authScheme,
                            const char *x509dname,
                            const char *saslUsername);
459 460
int qemuMonitorEmitTrayChange(qemuMonitorPtr mon,
                              const char *devAlias,
461
                              const char *devid,
462
                              int reason);
O
Osier Yang 已提交
463
int qemuMonitorEmitPMWakeup(qemuMonitorPtr mon);
O
Osier Yang 已提交
464
int qemuMonitorEmitPMSuspend(qemuMonitorPtr mon);
465 466 467
int qemuMonitorEmitBlockJob(qemuMonitorPtr mon,
                            const char *diskAlias,
                            int type,
468 469
                            int status,
                            const char *error);
470 471
int qemuMonitorEmitBalloonChange(qemuMonitorPtr mon,
                                 unsigned long long actual);
472
int qemuMonitorEmitPMSuspendDisk(qemuMonitorPtr mon);
473 474
int qemuMonitorEmitGuestPanic(qemuMonitorPtr mon,
                              qemuMonitorEventPanicInfoPtr info);
475 476
int qemuMonitorEmitDeviceDeleted(qemuMonitorPtr mon,
                                 const char *devAlias);
477 478
int qemuMonitorEmitNicRxFilterChanged(qemuMonitorPtr mon,
                                      const char *devAlias);
479 480 481
int qemuMonitorEmitSerialChange(qemuMonitorPtr mon,
                                const char *devAlias,
                                bool connected);
482
int qemuMonitorEmitSpiceMigrated(qemuMonitorPtr mon);
483 484
int qemuMonitorEmitMigrationStatus(qemuMonitorPtr mon,
                                   int status);
485 486
int qemuMonitorEmitMigrationPass(qemuMonitorPtr mon,
                                 int pass);
487

488 489 490 491 492 493 494
int qemuMonitorEmitAcpiOstInfo(qemuMonitorPtr mon,
                               const char *alias,
                               const char *slotType,
                               const char *slot,
                               unsigned int source,
                               unsigned int status);

495 496 497 498 499
int qemuMonitorEmitBlockThreshold(qemuMonitorPtr mon,
                                  const char *nodename,
                                  unsigned long long threshold,
                                  unsigned long long excess);

500 501 502 503 504
int qemuMonitorEmitDumpCompleted(qemuMonitorPtr mon,
                                 int status,
                                 qemuMonitorDumpStatsPtr stats,
                                 const char *error);

505 506 507 508
int qemuMonitorEmitPRManagerStatusChanged(qemuMonitorPtr mon,
                                          const char *prManager,
                                          bool connected);

509 510 511 512 513
int qemuMonitorEmitRdmaGidStatusChanged(qemuMonitorPtr mon,
                                        const char *netdev,
                                        bool gid_status,
                                        unsigned long long subnet_prefix,
                                        unsigned long long interface_id);
514

515
int qemuMonitorStartCPUs(qemuMonitorPtr mon);
516
int qemuMonitorStopCPUs(qemuMonitorPtr mon);
517 518 519 520 521 522 523 524 525 526 527 528 529 530 531

typedef enum {
    QEMU_MONITOR_VM_STATUS_DEBUG,
    QEMU_MONITOR_VM_STATUS_INMIGRATE,
    QEMU_MONITOR_VM_STATUS_INTERNAL_ERROR,
    QEMU_MONITOR_VM_STATUS_IO_ERROR,
    QEMU_MONITOR_VM_STATUS_PAUSED,
    QEMU_MONITOR_VM_STATUS_POSTMIGRATE,
    QEMU_MONITOR_VM_STATUS_PRELAUNCH,
    QEMU_MONITOR_VM_STATUS_FINISH_MIGRATE,
    QEMU_MONITOR_VM_STATUS_RESTORE_VM,
    QEMU_MONITOR_VM_STATUS_RUNNING,
    QEMU_MONITOR_VM_STATUS_SAVE_VM,
    QEMU_MONITOR_VM_STATUS_SHUTDOWN,
    QEMU_MONITOR_VM_STATUS_WATCHDOG,
532
    QEMU_MONITOR_VM_STATUS_GUEST_PANICKED,
533 534 535

    QEMU_MONITOR_VM_STATUS_LAST
} qemuMonitorVMStatus;
536
VIR_ENUM_DECL(qemuMonitorVMStatus);
537 538
int qemuMonitorVMStatusToPausedReason(const char *status);

539
int qemuMonitorCheck(qemuMonitorPtr mon);
540 541
int qemuMonitorGetStatus(qemuMonitorPtr mon,
                         bool *running,
542 543
                         virDomainPausedReason *reason)
    ATTRIBUTE_NONNULL(2);
544

545
int qemuMonitorSystemReset(qemuMonitorPtr mon);
546 547
int qemuMonitorSystemPowerdown(qemuMonitorPtr mon);

548
struct qemuMonitorQueryCpusEntry {
549
    int qemu_id; /* id of the cpu as reported by qemu */
550
    pid_t tid;
551
    char *qom_path;
552
    bool halted;
553 554 555 556
};
void qemuMonitorQueryCpusFree(struct qemuMonitorQueryCpusEntry *entries,
                              size_t nentries);

557

558 559 560 561 562 563 564 565 566 567 568
struct qemuMonitorQueryHotpluggableCpusEntry {
    char *type; /* name of the cpu to use with device_add */
    unsigned int vcpus; /* count of virtual cpus in the guest this entry adds */
    char *qom_path; /* full device qom path only present for online cpus */
    char *alias; /* device alias, may be NULL for non-hotpluggable entities */

    /* topology information -1 if qemu didn't report given parameter */
    int node_id;
    int socket_id;
    int core_id;
    int thread_id;
569 570 571

    /* internal data */
    int enable_id;
572 573 574 575 576
};
void qemuMonitorQueryHotpluggableCpusFree(struct qemuMonitorQueryHotpluggableCpusEntry *entries,
                                          size_t nentries);


577 578
struct _qemuMonitorCPUInfo {
    pid_t tid;
579
    int id; /* order of enabling of the given cpu */
580
    int qemu_id; /* identifier of the cpu as reported by query-cpus */
581

582 583 584 585
    /* state data */
    bool online;
    bool hotpluggable;

586 587 588 589 590
    /* topology info for hotplug purposes. Hotplug of given vcpu impossible if
     * all entries are -1 */
    int socket_id;
    int core_id;
    int thread_id;
591
    int node_id;
592 593 594 595 596 597 598 599 600 601
    unsigned int vcpus; /* number of vcpus added if given entry is hotplugged */

    /* name of the qemu type to add in case of hotplug */
    char *type;

    /* alias of an hotpluggable entry. Entries with alias can be hot-unplugged */
    char *alias;

    /* internal for use in the matching code */
    char *qom_path;
602 603

    bool halted;
604 605 606 607 608 609
};
typedef struct _qemuMonitorCPUInfo qemuMonitorCPUInfo;
typedef qemuMonitorCPUInfo *qemuMonitorCPUInfoPtr;

void qemuMonitorCPUInfoFree(qemuMonitorCPUInfoPtr list,
                            size_t nitems);
610
int qemuMonitorGetCPUInfo(qemuMonitorPtr mon,
611
                          qemuMonitorCPUInfoPtr *vcpus,
612
                          size_t maxvcpus,
613 614 615 616 617
                          bool hotplug,
                          bool fast);
virBitmapPtr qemuMonitorGetCpuHalted(qemuMonitorPtr mon,
                                     size_t maxvcpus,
                                     bool fast);
618

619
int qemuMonitorGetVirtType(qemuMonitorPtr mon,
620
                           virDomainVirtType *virtType);
621
int qemuMonitorGetBalloonInfo(qemuMonitorPtr mon,
622
                              unsigned long long *currmem);
623
int qemuMonitorGetMemoryStats(qemuMonitorPtr mon,
624
                              virDomainMemballoonDefPtr balloon,
625 626
                              virDomainMemoryStatPtr stats,
                              unsigned int nr_stats);
627
int qemuMonitorSetMemoryStatsPeriod(qemuMonitorPtr mon,
628
                                    virDomainMemballoonDefPtr balloon,
629
                                    int period);
630

631
int qemuMonitorBlockIOStatusToError(const char *status);
632 633
virHashTablePtr qemuMonitorGetBlockInfo(qemuMonitorPtr mon);

634
virJSONValuePtr qemuMonitorQueryBlockstats(qemuMonitorPtr mon);
635

636 637 638 639 640 641 642 643 644 645 646
typedef struct _qemuBlockStats qemuBlockStats;
typedef qemuBlockStats *qemuBlockStatsPtr;
struct _qemuBlockStats {
    long long rd_req;
    long long rd_bytes;
    long long wr_req;
    long long wr_bytes;
    long long rd_total_times;
    long long wr_total_times;
    long long flush_req;
    long long flush_total_times;
647 648
    unsigned long long capacity;
    unsigned long long physical;
649 650 651

    /* value of wr_highest_offset is valid if it's non 0 or
     * if wr_highest_offset_valid is true */
652
    unsigned long long wr_highest_offset;
653
    bool wr_highest_offset_valid;
654 655 656

    /* write_threshold is valid only if it's non-zero, conforming to qemu semantics */
    unsigned long long write_threshold;
657 658 659
};

int qemuMonitorGetAllBlockStatsInfo(qemuMonitorPtr mon,
660 661
                                    virHashTablePtr *ret_stats,
                                    bool backingChain)
662
    ATTRIBUTE_NONNULL(2);
663

664
int qemuMonitorBlockStatsUpdateCapacity(qemuMonitorPtr mon,
665 666
                                        virHashTablePtr stats,
                                        bool backingChain)
667
    ATTRIBUTE_NONNULL(2);
668

669 670 671 672
int qemuMonitorBlockStatsUpdateCapacityBlockdev(qemuMonitorPtr mon,
                                                virHashTablePtr stats)
    ATTRIBUTE_NONNULL(2);

673
int qemuMonitorBlockResize(qemuMonitorPtr mon,
674 675
                           const char *device,
                           const char *nodename,
676
                           unsigned long long size);
677 678 679 680 681 682 683
int qemuMonitorSetPassword(qemuMonitorPtr mon,
                           int type,
                           const char *password,
                           const char *action_if_connected);
int qemuMonitorExpirePassword(qemuMonitorPtr mon,
                              int type,
                              const char *expire_time);
684
int qemuMonitorSetBalloon(qemuMonitorPtr mon,
685
                          unsigned long long newmem);
686
int qemuMonitorSetCPU(qemuMonitorPtr mon, int cpu, bool online);
687

E
Eric Blake 已提交
688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706
int qemuMonitorAddBitmap(qemuMonitorPtr mon,
                         const char *node,
                         const char *bitmap,
                         bool persistent)
    ATTRIBUTE_NONNULL(2) ATTRIBUTE_NONNULL(3);
int qemuMonitorEnableBitmap(qemuMonitorPtr mon,
                            const char *node,
                            const char *bitmap)
    ATTRIBUTE_NONNULL(2) ATTRIBUTE_NONNULL(3);
int qemuMonitorMergeBitmaps(qemuMonitorPtr mon,
                            const char *node,
                            const char *dst,
                            virJSONValuePtr *src)
    ATTRIBUTE_NONNULL(2) ATTRIBUTE_NONNULL(3) ATTRIBUTE_NONNULL(4);
int qemuMonitorDeleteBitmap(qemuMonitorPtr mon,
                            const char *node,
                            const char *bitmap)
    ATTRIBUTE_NONNULL(2) ATTRIBUTE_NONNULL(3);

707 708

/* XXX should we pass the virDomainDiskDefPtr instead
709
 * and hide dev_name details inside monitor. Reconsider
710 711 712
 * this when doing the QMP implementation
 */
int qemuMonitorEjectMedia(qemuMonitorPtr mon,
713
                          const char *dev_name,
714
                          bool force);
715
int qemuMonitorChangeMedia(qemuMonitorPtr mon,
716
                           const char *dev_name,
717 718
                           const char *newmedia,
                           const char *format);
719 720 721 722 723 724 725 726 727 728 729 730 731 732


int qemuMonitorSaveVirtualMemory(qemuMonitorPtr mon,
                                 unsigned long long offset,
                                 size_t length,
                                 const char *path);
int qemuMonitorSavePhysicalMemory(qemuMonitorPtr mon,
                                  unsigned long long offset,
                                  size_t length,
                                  const char *path);

int qemuMonitorSetMigrationSpeed(qemuMonitorPtr mon,
                                 unsigned long bandwidth);

733 734 735
int qemuMonitorSetMigrationDowntime(qemuMonitorPtr mon,
                                    unsigned long long downtime);

736 737 738 739 740
int qemuMonitorGetMigrationCacheSize(qemuMonitorPtr mon,
                                     unsigned long long *cacheSize);
int qemuMonitorSetMigrationCacheSize(qemuMonitorPtr mon,
                                     unsigned long long cacheSize);

741
int qemuMonitorGetMigrationParams(qemuMonitorPtr mon,
742
                                  virJSONValuePtr *params);
743
int qemuMonitorSetMigrationParams(qemuMonitorPtr mon,
744
                                  virJSONValuePtr params);
745

746
typedef enum {
747
    QEMU_MONITOR_MIGRATION_STATUS_INACTIVE,
748
    QEMU_MONITOR_MIGRATION_STATUS_SETUP,
749
    QEMU_MONITOR_MIGRATION_STATUS_ACTIVE,
750 751
    QEMU_MONITOR_MIGRATION_STATUS_PRE_SWITCHOVER,
    QEMU_MONITOR_MIGRATION_STATUS_DEVICE,
752
    QEMU_MONITOR_MIGRATION_STATUS_POSTCOPY,
753 754
    QEMU_MONITOR_MIGRATION_STATUS_COMPLETED,
    QEMU_MONITOR_MIGRATION_STATUS_ERROR,
755
    QEMU_MONITOR_MIGRATION_STATUS_CANCELLING,
756 757 758
    QEMU_MONITOR_MIGRATION_STATUS_CANCELLED,

    QEMU_MONITOR_MIGRATION_STATUS_LAST
759
} qemuMonitorMigrationStatus;
760

761
VIR_ENUM_DECL(qemuMonitorMigrationStatus);
762

763 764 765
typedef struct _qemuMonitorMigrationStats qemuMonitorMigrationStats;
typedef qemuMonitorMigrationStats *qemuMonitorMigrationStatsPtr;
struct _qemuMonitorMigrationStats {
766
    int status; /* qemuMonitorMigrationStatus */
767 768 769 770
    unsigned long long total_time;
    /* total or expected depending on status */
    bool downtime_set;
    unsigned long long downtime;
771 772 773 774 775 776 777
    /*
     * Duration of the QEMU 'setup' state.
     * for RDMA, this may be on the order of several seconds
     * if pinning support is requested before the migration begins.
     */
    bool setup_time_set;
    unsigned long long setup_time;
778 779 780 781

    unsigned long long ram_transferred;
    unsigned long long ram_remaining;
    unsigned long long ram_total;
782
    unsigned long long ram_bps;
783 784 785 786
    bool ram_duplicate_set;
    unsigned long long ram_duplicate;
    unsigned long long ram_normal;
    unsigned long long ram_normal_bytes;
787
    unsigned long long ram_dirty_rate;
788
    unsigned long long ram_page_size;
789
    unsigned long long ram_iteration;
790
    unsigned long long ram_postcopy_reqs;
791 792 793 794

    unsigned long long disk_transferred;
    unsigned long long disk_remaining;
    unsigned long long disk_total;
795
    unsigned long long disk_bps;
796 797 798 799 800 801 802

    bool xbzrle_set;
    unsigned long long xbzrle_cache_size;
    unsigned long long xbzrle_bytes;
    unsigned long long xbzrle_pages;
    unsigned long long xbzrle_cache_miss;
    unsigned long long xbzrle_overflow;
803 804

    int cpu_throttle_percentage;
805 806
};

807
int qemuMonitorGetMigrationStats(qemuMonitorPtr mon,
808 809
                                 qemuMonitorMigrationStatsPtr stats,
                                 char **error);
810

811 812
int qemuMonitorGetMigrationCapabilities(qemuMonitorPtr mon,
                                        char ***capabilities);
813
int qemuMonitorSetMigrationCapabilities(qemuMonitorPtr mon,
814
                                        virJSONValuePtr caps);
815

A
Andrea Bolognani 已提交
816 817 818
int qemuMonitorGetGICCapabilities(qemuMonitorPtr mon,
                                  virGICCapability **capabilities);

819 820 821
int qemuMonitorGetSEVCapabilities(qemuMonitorPtr mon,
                                  virSEVCapability **capabilities);

822
typedef enum {
823
  QEMU_MONITOR_MIGRATE_BACKGROUND       = 1 << 0,
824 825 826 827 828
  QEMU_MONITOR_MIGRATE_NON_SHARED_DISK  = 1 << 1, /* migration with non-shared storage with full disk copy */
  QEMU_MONITOR_MIGRATE_NON_SHARED_INC   = 1 << 2, /* migration with non-shared storage with incremental copy */
  QEMU_MONITOR_MIGRATION_FLAGS_LAST
} QEMU_MONITOR_MIGRATE;

E
Eric Blake 已提交
829 830 831 832
int qemuMonitorMigrateToFd(qemuMonitorPtr mon,
                           unsigned int flags,
                           int fd);

833
int qemuMonitorMigrateToHost(qemuMonitorPtr mon,
834
                             unsigned int flags,
835
                             const char *protocol,
836 837 838 839 840
                             const char *hostname,
                             int port);

int qemuMonitorMigrateCancel(qemuMonitorPtr mon);

841 842 843
int qemuMonitorGetDumpGuestMemoryCapability(qemuMonitorPtr mon,
                                            const char *capability);

844 845 846
int qemuMonitorQueryDump(qemuMonitorPtr mon,
                         qemuMonitorDumpStatsPtr stats);

847
int qemuMonitorDumpToFd(qemuMonitorPtr mon,
848
                        int fd,
849 850
                        const char *dumpformat,
                        bool detach);
851

852 853 854 855 856 857
int qemuMonitorGraphicsRelocate(qemuMonitorPtr mon,
                                int type,
                                const char *hostname,
                                int port,
                                int tlsPort,
                                const char *tlsSubject);
858 859 860 861

int qemuMonitorSendFileHandle(qemuMonitorPtr mon,
                              const char *fdname,
                              int fd);
862
int qemuMonitorAddFd(qemuMonitorPtr mon, int fdset, int fd, const char *name);
863

864 865
/* These two functions preserve previous error and only set their own
 * error if no error was set before.
866
 */
867 868
int qemuMonitorCloseFileHandle(qemuMonitorPtr mon,
                               const char *fdname);
869
int qemuMonitorRemoveFd(qemuMonitorPtr mon, int fdset, int fd);
870

871
int qemuMonitorAddNetdev(qemuMonitorPtr mon,
872
                         const char *netdevstr,
873 874
                         int *tapfd, char **tapfdName, int tapfdSize,
                         int *vhostfd, char **vhostfdName, int vhostfdSize);
875 876 877 878

int qemuMonitorRemoveNetdev(qemuMonitorPtr mon,
                            const char *alias);

879 880 881
int qemuMonitorQueryRxFilter(qemuMonitorPtr mon, const char *alias,
                             virNetDevRxFilterPtr *filter);

882 883 884 885 886 887
typedef struct _qemuMonitorChardevInfo qemuMonitorChardevInfo;
typedef qemuMonitorChardevInfo *qemuMonitorChardevInfoPtr;
struct _qemuMonitorChardevInfo {
    char *ptyPath;
    virDomainChrDeviceState state;
};
888
void qemuMonitorChardevInfoFree(void *data, const void *name);
889 890
int qemuMonitorGetChardevInfo(qemuMonitorPtr mon,
                              virHashTablePtr *retinfo);
891

892 893
int qemuMonitorAttachPCIDiskController(qemuMonitorPtr mon,
                                       const char *bus,
894
                                       virPCIDeviceAddress *guestAddr);
895

896 897
int qemuMonitorAddDeviceArgs(qemuMonitorPtr mon,
                             virJSONValuePtr args);
898 899 900
int qemuMonitorAddDevice(qemuMonitorPtr mon,
                         const char *devicestr);

901 902 903 904 905
int qemuMonitorAddDeviceWithFd(qemuMonitorPtr mon,
                               const char *devicestr,
                               int fd,
                               const char *fdname);

906
int qemuMonitorDelDevice(qemuMonitorPtr mon,
907
                         const char *devalias);
908

909 910 911 912 913 914 915 916 917 918 919
virJSONValuePtr qemuMonitorCreateObjectPropsWrap(const char *type,
                                                 const char *alias,
                                                 virJSONValuePtr *props);

int qemuMonitorCreateObjectProps(virJSONValuePtr *propsret,
                                 const char *type,
                                 const char *alias,
                                 ...);

int qemuMonitorAddObject(qemuMonitorPtr mon,
                         virJSONValuePtr *props,
920
                         char **alias)
921
    ATTRIBUTE_NONNULL(2);
922

923 924 925
int qemuMonitorDelObject(qemuMonitorPtr mon,
                         const char *objalias);

926 927 928
int qemuMonitorAddDrive(qemuMonitorPtr mon,
                        const char *drivestr);

929
int qemuMonitorDriveDel(qemuMonitorPtr mon,
930 931
                        const char *drivestr);

C
Chris Lalancette 已提交
932 933 934 935
int qemuMonitorCreateSnapshot(qemuMonitorPtr mon, const char *name);
int qemuMonitorLoadSnapshot(qemuMonitorPtr mon, const char *name);
int qemuMonitorDeleteSnapshot(qemuMonitorPtr mon, const char *name);

936
int qemuMonitorTransaction(qemuMonitorPtr mon, virJSONValuePtr *actions)
937
    ATTRIBUTE_NONNULL(2);
938 939 940 941
int qemuMonitorDriveMirror(qemuMonitorPtr mon,
                           const char *device,
                           const char *file,
                           const char *format,
942
                           unsigned long long bandwidth,
943 944
                           unsigned int granularity,
                           unsigned long long buf_size,
945 946
                           bool shallow,
                           bool reuse)
947
    ATTRIBUTE_NONNULL(2) ATTRIBUTE_NONNULL(3);
948 949
int qemuMonitorBlockdevMirror(qemuMonitorPtr mon,
                              const char *jobname,
950
                              bool persistjob,
951 952 953 954 955
                              const char *device,
                              const char *target,
                              unsigned long long bandwidth,
                              unsigned int granularity,
                              unsigned long long buf_size,
956
                              bool shallow)
957
    ATTRIBUTE_NONNULL(4) ATTRIBUTE_NONNULL(5);
958
int qemuMonitorDrivePivot(qemuMonitorPtr mon,
959
                          const char *jobname)
960
    ATTRIBUTE_NONNULL(2);
961

962 963
int qemuMonitorBlockCommit(qemuMonitorPtr mon,
                           const char *device,
964 965
                           const char *jobname,
                           bool persistjob,
966
                           const char *top,
967
                           const char *topNode,
968
                           const char *base,
969
                           const char *baseNode,
970
                           const char *backingName,
971
                           unsigned long long bandwidth)
972
    ATTRIBUTE_NONNULL(2);
973
bool qemuMonitorSupportsActiveCommit(qemuMonitorPtr mon);
974 975 976 977
char *qemuMonitorDiskNameLookup(qemuMonitorPtr mon,
                                const char *device,
                                virStorageSourcePtr top,
                                virStorageSourcePtr target)
978
    ATTRIBUTE_NONNULL(2) ATTRIBUTE_NONNULL(3) ATTRIBUTE_NONNULL(4);
979

980 981 982 983
int qemuMonitorArbitraryCommand(qemuMonitorPtr mon,
                                const char *cmd,
                                char **reply,
                                bool hmp);
984

985 986
int qemuMonitorInjectNMI(qemuMonitorPtr mon);

987
int qemuMonitorScreendump(qemuMonitorPtr mon,
988 989
                          const char *device,
                          unsigned int head,
990 991
                          const char *file);

992 993 994 995 996
int qemuMonitorSendKey(qemuMonitorPtr mon,
                       unsigned int holdtime,
                       unsigned int *keycodes,
                       unsigned int nkeycodes);

997 998
int qemuMonitorBlockStream(qemuMonitorPtr mon,
                           const char *device,
999 1000
                           const char *jobname,
                           bool persistjob,
1001
                           const char *base,
1002
                           const char *baseNode,
1003
                           const char *backingName,
1004
                           unsigned long long bandwidth)
1005
    ATTRIBUTE_NONNULL(2);
1006

1007
int qemuMonitorBlockJobCancel(qemuMonitorPtr mon,
1008
                              const char *jobname)
1009
    ATTRIBUTE_NONNULL(2);
1010

1011
int qemuMonitorBlockJobSetSpeed(qemuMonitorPtr mon,
1012
                                const char *jobname,
1013
                                unsigned long long bandwidth);
1014

1015 1016 1017 1018 1019 1020 1021
typedef struct _qemuMonitorBlockJobInfo qemuMonitorBlockJobInfo;
typedef qemuMonitorBlockJobInfo *qemuMonitorBlockJobInfoPtr;
struct _qemuMonitorBlockJobInfo {
    int type; /* virDomainBlockJobType */
    unsigned long long bandwidth; /* in bytes/s */
    virDomainBlockJobCursor cur;
    virDomainBlockJobCursor end;
1022
    int ready; /* -1 if unknown, 0 if not ready, 1 if ready */
1023 1024
};

1025 1026
virHashTablePtr qemuMonitorGetAllBlockJobInfo(qemuMonitorPtr mon,
                                              bool rawjobname);
1027 1028 1029
int qemuMonitorGetBlockJobInfo(qemuMonitorPtr mon,
                               const char *device,
                               qemuMonitorBlockJobInfoPtr info)
1030
    ATTRIBUTE_NONNULL(2) ATTRIBUTE_NONNULL(3);
1031

1032 1033 1034 1035
int qemuMonitorJobDismiss(qemuMonitorPtr mon,
                          const char *jobname)
    ATTRIBUTE_NONNULL(2);

1036 1037 1038 1039 1040
int qemuMonitorJobCancel(qemuMonitorPtr mon,
                         const char *jobname,
                         bool quiet)
    ATTRIBUTE_NONNULL(2);

1041 1042 1043 1044
int qemuMonitorJobComplete(qemuMonitorPtr mon,
                           const char *jobname)
    ATTRIBUTE_NONNULL(2);

1045 1046 1047 1048 1049 1050
int qemuMonitorOpenGraphics(qemuMonitorPtr mon,
                            const char *protocol,
                            int fd,
                            const char *fdname,
                            bool skipauth);

1051
int qemuMonitorSetBlockIoThrottle(qemuMonitorPtr mon,
1052 1053
                                  const char *drivealias,
                                  const char *qomid,
1054
                                  virDomainBlockIoTuneInfoPtr info,
1055
                                  bool supportMaxOptions,
1056
                                  bool supportGroupNameOption,
1057
                                  bool supportMaxLengthOptions);
1058 1059

int qemuMonitorGetBlockIoThrottle(qemuMonitorPtr mon,
1060 1061
                                  const char *drivealias,
                                  const char *qdevid,
1062
                                  virDomainBlockIoTuneInfoPtr reply);
1063

1064 1065
int qemuMonitorSystemWakeup(qemuMonitorPtr mon);

1066 1067 1068 1069 1070 1071 1072
int qemuMonitorGetVersion(qemuMonitorPtr mon,
                          int *major,
                          int *minor,
                          int *micro,
                          char **package)
    ATTRIBUTE_NONNULL(2) ATTRIBUTE_NONNULL(3) ATTRIBUTE_NONNULL(4);

1073 1074 1075 1076 1077 1078 1079 1080

typedef struct _qemuMonitorMachineInfo qemuMonitorMachineInfo;
typedef qemuMonitorMachineInfo *qemuMonitorMachineInfoPtr;

struct _qemuMonitorMachineInfo {
    char *name;
    bool isDefault;
    char *alias;
1081
    unsigned int maxCpus;
1082
    bool hotplugCpus;
1083 1084 1085 1086 1087 1088 1089
};

int qemuMonitorGetMachines(qemuMonitorPtr mon,
                           qemuMonitorMachineInfoPtr **machines);

void qemuMonitorMachineInfoFree(qemuMonitorMachineInfoPtr machine);

1090 1091 1092 1093
typedef struct _qemuMonitorCPUDefInfo qemuMonitorCPUDefInfo;
typedef qemuMonitorCPUDefInfo *qemuMonitorCPUDefInfoPtr;

struct _qemuMonitorCPUDefInfo {
1094
    virTristateBool usable;
1095
    char *name;
1096
    char **blockers; /* NULL-terminated string list */
1097 1098
};

1099
int qemuMonitorGetCPUDefinitions(qemuMonitorPtr mon,
1100 1101
                                 qemuMonitorCPUDefInfoPtr **cpus);
void qemuMonitorCPUDefInfoFree(qemuMonitorCPUDefInfoPtr cpu);
1102

1103 1104 1105 1106 1107 1108 1109 1110
typedef enum {
    QEMU_MONITOR_CPU_PROPERTY_BOOLEAN,
    QEMU_MONITOR_CPU_PROPERTY_STRING,
    QEMU_MONITOR_CPU_PROPERTY_NUMBER,

    QEMU_MONITOR_CPU_PROPERTY_LAST
} qemuMonitorCPUPropertyType;

1111
VIR_ENUM_DECL(qemuMonitorCPUProperty);
1112 1113 1114 1115 1116 1117 1118 1119 1120 1121 1122

typedef struct _qemuMonitorCPUProperty qemuMonitorCPUProperty;
typedef qemuMonitorCPUProperty *qemuMonitorCPUPropertyPtr;
struct _qemuMonitorCPUProperty {
    char *name;
    qemuMonitorCPUPropertyType type;
    union {
        bool boolean;
        char *string;
        long long number;
    } value;
1123
    virTristateBool migratable;
1124 1125
};

1126 1127 1128 1129 1130 1131
typedef struct _qemuMonitorCPUModelInfo qemuMonitorCPUModelInfo;
typedef qemuMonitorCPUModelInfo *qemuMonitorCPUModelInfoPtr;

struct _qemuMonitorCPUModelInfo {
    char *name;
    size_t nprops;
1132
    qemuMonitorCPUPropertyPtr props;
1133
    bool migratability;
1134 1135
};

1136 1137
typedef enum {
    QEMU_MONITOR_CPU_MODEL_EXPANSION_STATIC,
1138 1139
    QEMU_MONITOR_CPU_MODEL_EXPANSION_STATIC_FULL,
    QEMU_MONITOR_CPU_MODEL_EXPANSION_FULL,
1140 1141
} qemuMonitorCPUModelExpansionType;

1142
int qemuMonitorGetCPUModelExpansion(qemuMonitorPtr mon,
1143
                                    qemuMonitorCPUModelExpansionType type,
1144
                                    const char *model_name,
1145
                                    bool migratable,
1146 1147 1148 1149 1150 1151 1152
                                    qemuMonitorCPUModelInfoPtr *model_info);

void qemuMonitorCPUModelInfoFree(qemuMonitorCPUModelInfoPtr model_info);

qemuMonitorCPUModelInfoPtr
qemuMonitorCPUModelInfoCopy(const qemuMonitorCPUModelInfo *orig);

1153 1154
int qemuMonitorGetCommands(qemuMonitorPtr mon,
                           char ***commands);
1155 1156
int qemuMonitorGetEvents(qemuMonitorPtr mon,
                         char ***events);
1157 1158
int qemuMonitorGetCommandLineOptionParameters(qemuMonitorPtr mon,
                                              const char *option,
1159 1160
                                              char ***params,
                                              bool *found);
1161

1162 1163 1164 1165
int qemuMonitorGetKVMState(qemuMonitorPtr mon,
                           bool *enabled,
                           bool *present);

1166 1167
int qemuMonitorGetObjectTypes(qemuMonitorPtr mon,
                              char ***types);
1168 1169
int qemuMonitorGetDeviceProps(qemuMonitorPtr mon,
                              const char *device,
1170
                              char ***props);
1171 1172 1173
int qemuMonitorGetObjectProps(qemuMonitorPtr mon,
                              const char *object,
                              char ***props);
1174
char *qemuMonitorGetTargetArch(qemuMonitorPtr mon);
1175

1176
int qemuMonitorNBDServerStart(qemuMonitorPtr mon,
1177 1178 1179
                              const virStorageNetHostDef *server,
                              const char *tls_alias)
    ATTRIBUTE_NONNULL(2);
1180 1181
int qemuMonitorNBDServerAdd(qemuMonitorPtr mon,
                            const char *deviceID,
1182 1183 1184
                            const char *export,
                            bool writable,
                            const char *bitmap);
1185
int qemuMonitorNBDServerStop(qemuMonitorPtr);
S
Stefan Berger 已提交
1186 1187 1188 1189 1190 1191
int qemuMonitorGetTPMModels(qemuMonitorPtr mon,
                            char ***tpmmodels);

int qemuMonitorGetTPMTypes(qemuMonitorPtr mon,
                           char ***tpmtypes);

1192 1193 1194
int qemuMonitorAttachCharDev(qemuMonitorPtr mon,
                             const char *chrID,
                             virDomainChrSourceDefPtr chr);
1195 1196
int qemuMonitorDetachCharDev(qemuMonitorPtr mon,
                             const char *chrID);
1197 1198 1199 1200

int qemuMonitorGetDeviceAliases(qemuMonitorPtr mon,
                                char ***aliases);

1201 1202 1203
typedef void (*qemuMonitorReportDomainLogError)(qemuMonitorPtr mon,
                                                const char *msg,
                                                void *opaque);
1204 1205 1206 1207
void qemuMonitorSetDomainLogLocked(qemuMonitorPtr mon,
                                   qemuMonitorReportDomainLogError func,
                                   void *opaque,
                                   virFreeCallback destroy);
1208 1209 1210 1211
void qemuMonitorSetDomainLog(qemuMonitorPtr mon,
                             qemuMonitorReportDomainLogError func,
                             void *opaque,
                             virFreeCallback destroy);
1212

1213 1214 1215
int qemuMonitorGetGuestCPUx86(qemuMonitorPtr mon,
                              virCPUDataPtr *data,
                              virCPUDataPtr *disabled);
1216

1217 1218 1219 1220 1221 1222 1223 1224 1225 1226
typedef const char *(*qemuMonitorCPUFeatureTranslationCallback)(const char *name,
                                                                void *opaque);

int qemuMonitorGetGuestCPU(qemuMonitorPtr mon,
                           virArch arch,
                           qemuMonitorCPUFeatureTranslationCallback translate,
                           void *opaque,
                           virCPUDataPtr *enabled,
                           virCPUDataPtr *disabled);

1227 1228
int qemuMonitorRTCResetReinjection(qemuMonitorPtr mon);

1229 1230
typedef struct _qemuMonitorIOThreadInfo qemuMonitorIOThreadInfo;
typedef qemuMonitorIOThreadInfo *qemuMonitorIOThreadInfoPtr;
1231

1232
struct _qemuMonitorIOThreadInfo {
1233
    unsigned int iothread_id;
1234
    int thread_id;
1235 1236 1237 1238
    bool poll_valid;
    unsigned long long poll_max_ns;
    unsigned int poll_grow;
    unsigned int poll_shrink;
1239 1240 1241
    bool set_poll_max_ns;
    bool set_poll_grow;
    bool set_poll_shrink;
1242 1243
};
int qemuMonitorGetIOThreads(qemuMonitorPtr mon,
1244
                            qemuMonitorIOThreadInfoPtr **iothreads);
1245 1246
int qemuMonitorSetIOThread(qemuMonitorPtr mon,
                           qemuMonitorIOThreadInfoPtr iothreadInfo);
1247

1248 1249 1250 1251 1252 1253 1254 1255 1256 1257 1258 1259 1260 1261
typedef struct _qemuMonitorMemoryDeviceInfo qemuMonitorMemoryDeviceInfo;
typedef qemuMonitorMemoryDeviceInfo *qemuMonitorMemoryDeviceInfoPtr;

struct _qemuMonitorMemoryDeviceInfo {
    unsigned long long address;
    unsigned int slot;
    bool hotplugged;
    bool hotpluggable;
};

int qemuMonitorGetMemoryDeviceInfo(qemuMonitorPtr mon,
                                   virHashTablePtr *info)
    ATTRIBUTE_NONNULL(2);

1262 1263 1264
int qemuMonitorMigrateIncoming(qemuMonitorPtr mon,
                               const char *uri);

1265 1266
int qemuMonitorMigrateStartPostCopy(qemuMonitorPtr mon);

1267 1268 1269
int qemuMonitorMigrateContinue(qemuMonitorPtr mon,
                               qemuMonitorMigrationStatus status);

1270 1271 1272
int qemuMonitorGetRTCTime(qemuMonitorPtr mon,
                          struct tm *tm);

1273
virJSONValuePtr qemuMonitorQueryQMPSchema(qemuMonitorPtr mon);
1274

1275 1276 1277 1278
int qemuMonitorSetBlockThreshold(qemuMonitorPtr mon,
                                 const char *nodename,
                                 unsigned long long threshold);

1279
virJSONValuePtr qemuMonitorQueryNamedBlockNodes(qemuMonitorPtr mon);
1280

M
Michal Privoznik 已提交
1281 1282
int qemuMonitorSetWatchdogAction(qemuMonitorPtr mon,
                                 const char *action);
1283 1284 1285 1286 1287 1288 1289

int qemuMonitorBlockdevAdd(qemuMonitorPtr mon,
                           virJSONValuePtr props);

int qemuMonitorBlockdevDel(qemuMonitorPtr mon,
                           const char *nodename);

1290 1291 1292 1293 1294 1295 1296 1297 1298 1299 1300 1301 1302 1303
int qemuMonitorBlockdevTrayOpen(qemuMonitorPtr mon,
                                const char *id,
                                bool force);

int qemuMonitorBlockdevTrayClose(qemuMonitorPtr mon,
                                 const char *id);

int qemuMonitorBlockdevMediumRemove(qemuMonitorPtr mon,
                                    const char *id);

int qemuMonitorBlockdevMediumInsert(qemuMonitorPtr mon,
                                    const char *id,
                                    const char *nodename);

1304 1305 1306
char *
qemuMonitorGetSEVMeasurement(qemuMonitorPtr mon);

1307 1308 1309 1310 1311 1312 1313 1314 1315
typedef struct _qemuMonitorPRManagerInfo qemuMonitorPRManagerInfo;
typedef qemuMonitorPRManagerInfo *qemuMonitorPRManagerInfoPtr;
struct _qemuMonitorPRManagerInfo {
    bool connected;
};

int qemuMonitorGetPRManagerInfo(qemuMonitorPtr mon,
                                virHashTablePtr *retinfo);

1316 1317 1318 1319 1320 1321 1322 1323
typedef struct  _qemuMonitorCurrentMachineInfo qemuMonitorCurrentMachineInfo;
typedef qemuMonitorCurrentMachineInfo *qemuMonitorCurrentMachineInfoPtr;
struct _qemuMonitorCurrentMachineInfo {
    bool wakeupSuspendSupport;
};

int qemuMonitorGetCurrentMachineInfo(qemuMonitorPtr mon,
                                     qemuMonitorCurrentMachineInfoPtr info);
1324 1325 1326 1327 1328 1329 1330
void qemuMonitorJobInfoFree(qemuMonitorJobInfoPtr job);

VIR_DEFINE_AUTOPTR_FUNC(qemuMonitorJobInfo, qemuMonitorJobInfoFree);

int qemuMonitorGetJobInfo(qemuMonitorPtr mon,
                          qemuMonitorJobInfoPtr **jobs,
                          size_t *njobs);