qemu_monitor.h 27.8 KB
Newer Older
1 2 3
/*
 * qemu_monitor.h: interaction with QEMU monitor console
 *
4
 * Copyright (C) 2006-2013 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 23 24 25
 *
 * Author: Daniel P. Berrange <berrange@redhat.com>
 */


#ifndef QEMU_MONITOR_H
26
# define QEMU_MONITOR_H
27

28
# include "internal.h"
29

30
# include "domain_conf.h"
31
# include "virbitmap.h"
32
# include "virhash.h"
33
# include "virjson.h"
34
# include "device_conf.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 struct _qemuMonitorCallbacks qemuMonitorCallbacks;
typedef qemuMonitorCallbacks *qemuMonitorCallbacksPtr;
struct _qemuMonitorCallbacks {
73 74 75
    void (*destroy)(qemuMonitorPtr mon,
                    virDomainObjPtr vm);

76
    void (*eofNotify)(qemuMonitorPtr mon,
77 78 79 80
                      virDomainObjPtr vm);
    void (*errorNotify)(qemuMonitorPtr mon,
                        virDomainObjPtr vm);
    /* XXX we'd really like to avoid virConnectPtr here
81 82 83 84 85 86 87 88 89 90
     * It is required so the callback can find the active
     * secret driver. Need to change this to work like the
     * security drivers do, to avoid this
     */
    int (*diskSecretLookup)(qemuMonitorPtr mon,
                            virConnectPtr conn,
                            virDomainObjPtr vm,
                            const char *path,
                            char **secret,
                            size_t *secretLen);
91 92 93 94 95 96 97 98 99

    int (*domainShutdown)(qemuMonitorPtr mon,
                          virDomainObjPtr vm);
    int (*domainReset)(qemuMonitorPtr mon,
                       virDomainObjPtr vm);
    int (*domainPowerdown)(qemuMonitorPtr mon,
                           virDomainObjPtr vm);
    int (*domainStop)(qemuMonitorPtr mon,
                      virDomainObjPtr vm);
100 101
    int (*domainResume)(qemuMonitorPtr mon,
                        virDomainObjPtr vm);
102 103 104
    int (*domainRTCChange)(qemuMonitorPtr mon,
                           virDomainObjPtr vm,
                           long long offset);
105 106 107
    int (*domainWatchdog)(qemuMonitorPtr mon,
                          virDomainObjPtr vm,
                          int action);
108 109 110
    int (*domainIOError)(qemuMonitorPtr mon,
                         virDomainObjPtr vm,
                         const char *diskAlias,
111 112
                         int action,
                         const char *reason);
113 114 115 116 117 118 119 120 121 122 123 124
    int (*domainGraphics)(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,
                          const char *saslUsername);
125 126 127 128 129
    int (*domainBlockJob)(qemuMonitorPtr mon,
                          virDomainObjPtr vm,
                          const char *diskAlias,
                          int type,
                          int status);
130 131 132 133
    int (*domainTrayChange)(qemuMonitorPtr mon,
                            virDomainObjPtr vm,
                            const char *devAlias,
                            int reason);
O
Osier Yang 已提交
134 135
    int (*domainPMWakeup)(qemuMonitorPtr mon,
                          virDomainObjPtr vm);
O
Osier Yang 已提交
136 137
    int (*domainPMSuspend)(qemuMonitorPtr mon,
                           virDomainObjPtr vm);
138 139 140
    int (*domainBalloonChange)(qemuMonitorPtr mon,
                               virDomainObjPtr vm,
                               unsigned long long actual);
141 142
    int (*domainPMSuspendDisk)(qemuMonitorPtr mon,
                               virDomainObjPtr vm);
143 144
    int (*domainGuestPanic)(qemuMonitorPtr mon,
                            virDomainObjPtr vm);
145 146 147
    int (*domainDeviceDeleted)(qemuMonitorPtr mon,
                               virDomainObjPtr vm,
                               const char *devAlias);
148 149
};

150
char *qemuMonitorEscapeArg(const char *in);
151
char *qemuMonitorUnescapeArg(const char *in);
152

153
qemuMonitorPtr qemuMonitorOpen(virDomainObjPtr vm,
154
                               virDomainChrSourceDefPtr config,
E
Eric Blake 已提交
155
                               bool json,
156 157
                               qemuMonitorCallbacksPtr cb)
    ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2) ATTRIBUTE_NONNULL(4);
158 159
qemuMonitorPtr qemuMonitorOpenFD(virDomainObjPtr vm,
                                 int sockfd,
E
Eric Blake 已提交
160
                                 bool json,
161 162
                                 qemuMonitorCallbacksPtr cb)
    ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(4);
163

164
void qemuMonitorClose(qemuMonitorPtr mon);
165

166
int qemuMonitorSetCapabilities(qemuMonitorPtr mon);
167

168 169
int qemuMonitorSetLink(qemuMonitorPtr mon,
                       const char *name,
170
                       enum virDomainNetInterfaceLinkState state);
171

172
/* These APIs are for use by the internal Text/JSON monitor impl code only */
173
char *qemuMonitorNextCommandID(qemuMonitorPtr mon);
174 175
int qemuMonitorSend(qemuMonitorPtr mon,
                    qemuMonitorMessagePtr msg);
176 177 178 179
virJSONValuePtr qemuMonitorGetOptions(qemuMonitorPtr mon)
    ATTRIBUTE_NONNULL(1);
void qemuMonitorSetOptions(qemuMonitorPtr mon, virJSONValuePtr options)
    ATTRIBUTE_NONNULL(1);
180 181 182 183 184 185
int qemuMonitorHMPCommandWithFd(qemuMonitorPtr mon,
                                const char *cmd,
                                int scm_fd,
                                char **reply);
# define qemuMonitorHMPCommand(mon, cmd, reply) \
    qemuMonitorHMPCommandWithFd(mon, cmd, -1, reply)
186

187
/* XXX same comment about virConnectPtr as above */
188 189 190 191 192
int qemuMonitorGetDiskSecret(qemuMonitorPtr mon,
                             virConnectPtr conn,
                             const char *path,
                             char **secret,
                             size_t *secretLen);
193

194 195 196 197
int qemuMonitorEmitShutdown(qemuMonitorPtr mon);
int qemuMonitorEmitReset(qemuMonitorPtr mon);
int qemuMonitorEmitPowerdown(qemuMonitorPtr mon);
int qemuMonitorEmitStop(qemuMonitorPtr mon);
198
int qemuMonitorEmitResume(qemuMonitorPtr mon);
199
int qemuMonitorEmitRTCChange(qemuMonitorPtr mon, long long offset);
200
int qemuMonitorEmitWatchdog(qemuMonitorPtr mon, int action);
201 202
int qemuMonitorEmitIOError(qemuMonitorPtr mon,
                           const char *diskAlias,
203 204
                           int action,
                           const char *reason);
205 206 207 208 209 210 211 212 213 214 215
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);
216 217 218
int qemuMonitorEmitTrayChange(qemuMonitorPtr mon,
                              const char *devAlias,
                              int reason);
O
Osier Yang 已提交
219
int qemuMonitorEmitPMWakeup(qemuMonitorPtr mon);
O
Osier Yang 已提交
220
int qemuMonitorEmitPMSuspend(qemuMonitorPtr mon);
221 222 223 224
int qemuMonitorEmitBlockJob(qemuMonitorPtr mon,
                            const char *diskAlias,
                            int type,
                            int status);
225 226
int qemuMonitorEmitBalloonChange(qemuMonitorPtr mon,
                                 unsigned long long actual);
227
int qemuMonitorEmitPMSuspendDisk(qemuMonitorPtr mon);
228
int qemuMonitorEmitGuestPanic(qemuMonitorPtr mon);
229 230
int qemuMonitorEmitDeviceDeleted(qemuMonitorPtr mon,
                                 const char *devAlias);
231

232 233 234
int qemuMonitorStartCPUs(qemuMonitorPtr mon,
                         virConnectPtr conn);
int qemuMonitorStopCPUs(qemuMonitorPtr mon);
235 236 237 238 239 240 241 242 243 244 245 246 247 248 249

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,
250
    QEMU_MONITOR_VM_STATUS_GUEST_PANICKED,
251 252 253 254 255 256 257 258 259

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

int qemuMonitorGetStatus(qemuMonitorPtr mon,
                         bool *running,
                         virDomainPausedReason *reason);
260

261
int qemuMonitorSystemReset(qemuMonitorPtr mon);
262 263 264 265
int qemuMonitorSystemPowerdown(qemuMonitorPtr mon);

int qemuMonitorGetCPUInfo(qemuMonitorPtr mon,
                          int **pids);
266 267
int qemuMonitorGetVirtType(qemuMonitorPtr mon,
                           int *virtType);
268
int qemuMonitorGetBalloonInfo(qemuMonitorPtr mon,
269
                              unsigned long long *currmem);
270 271 272
int qemuMonitorGetMemoryStats(qemuMonitorPtr mon,
                              virDomainMemoryStatPtr stats,
                              unsigned int nr_stats);
273 274
int qemuMonitorSetMemoryStatsPeriod(qemuMonitorPtr mon,
                                    int period);
275

276
int qemuMonitorBlockIOStatusToError(const char *status);
277 278 279 280 281
virHashTablePtr qemuMonitorGetBlockInfo(qemuMonitorPtr mon);
struct qemuDomainDiskInfo *
qemuMonitorBlockInfoLookup(virHashTablePtr blockInfo,
                           const char *devname);

282
int qemuMonitorGetBlockStatsInfo(qemuMonitorPtr mon,
283
                                 const char *dev_name,
284 285
                                 long long *rd_req,
                                 long long *rd_bytes,
286
                                 long long *rd_total_times,
287 288
                                 long long *wr_req,
                                 long long *wr_bytes,
289 290 291
                                 long long *wr_total_times,
                                 long long *flush_req,
                                 long long *flush_total_times,
292
                                 long long *errs);
293 294
int qemuMonitorGetBlockStatsParamsNumber(qemuMonitorPtr mon,
                                         int *nparams);
295

296
int qemuMonitorGetBlockExtent(qemuMonitorPtr mon,
297
                              const char *dev_name,
298
                              unsigned long long *extent);
299 300 301
int qemuMonitorBlockResize(qemuMonitorPtr mon,
                           const char *devname,
                           unsigned long long size);
302 303
int qemuMonitorSetVNCPassword(qemuMonitorPtr mon,
                              const char *password);
304 305 306 307 308 309 310
int qemuMonitorSetPassword(qemuMonitorPtr mon,
                           int type,
                           const char *password,
                           const char *action_if_connected);
int qemuMonitorExpirePassword(qemuMonitorPtr mon,
                              int type,
                              const char *expire_time);
311 312
int qemuMonitorSetBalloon(qemuMonitorPtr mon,
                          unsigned long newmem);
313
int qemuMonitorSetCPU(qemuMonitorPtr mon, int cpu, bool online);
314

315 316 317 318 319 320

/* XXX should we pass the virDomainDiskDefPtr instead
 * and hide devname details inside monitor. Reconsider
 * this when doing the QMP implementation
 */
int qemuMonitorEjectMedia(qemuMonitorPtr mon,
321
                          const char *dev_name,
322
                          bool force);
323
int qemuMonitorChangeMedia(qemuMonitorPtr mon,
324
                           const char *dev_name,
325 326
                           const char *newmedia,
                           const char *format);
327 328 329 330 331 332 333 334 335 336 337 338 339 340


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);

341 342 343
int qemuMonitorSetMigrationDowntime(qemuMonitorPtr mon,
                                    unsigned long long downtime);

344 345 346 347 348
int qemuMonitorGetMigrationCacheSize(qemuMonitorPtr mon,
                                     unsigned long long *cacheSize);
int qemuMonitorSetMigrationCacheSize(qemuMonitorPtr mon,
                                     unsigned long long cacheSize);

349 350 351 352 353 354 355 356 357 358
enum {
    QEMU_MONITOR_MIGRATION_STATUS_INACTIVE,
    QEMU_MONITOR_MIGRATION_STATUS_ACTIVE,
    QEMU_MONITOR_MIGRATION_STATUS_COMPLETED,
    QEMU_MONITOR_MIGRATION_STATUS_ERROR,
    QEMU_MONITOR_MIGRATION_STATUS_CANCELLED,

    QEMU_MONITOR_MIGRATION_STATUS_LAST
};

359 360
VIR_ENUM_DECL(qemuMonitorMigrationStatus)

361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389
typedef struct _qemuMonitorMigrationStatus qemuMonitorMigrationStatus;
typedef qemuMonitorMigrationStatus *qemuMonitorMigrationStatusPtr;
struct _qemuMonitorMigrationStatus {
    int status;
    unsigned long long total_time;
    /* total or expected depending on status */
    bool downtime_set;
    unsigned long long downtime;

    unsigned long long ram_transferred;
    unsigned long long ram_remaining;
    unsigned long long ram_total;
    bool ram_duplicate_set;
    unsigned long long ram_duplicate;
    unsigned long long ram_normal;
    unsigned long long ram_normal_bytes;

    unsigned long long disk_transferred;
    unsigned long long disk_remaining;
    unsigned long long disk_total;

    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;
};

390
int qemuMonitorGetMigrationStatus(qemuMonitorPtr mon,
391
                                  qemuMonitorMigrationStatusPtr status);
392 393
int qemuMonitorGetSpiceMigrationStatus(qemuMonitorPtr mon,
                                       bool *spice_migrated);
394

395 396 397 398 399 400 401 402 403 404 405 406 407
typedef enum {
    QEMU_MONITOR_MIGRATION_CAPS_XBZRLE,

    QEMU_MONITOR_MIGRATION_CAPS_LAST
} qemuMonitorMigrationCaps;

VIR_ENUM_DECL(qemuMonitorMigrationCaps);

int qemuMonitorGetMigrationCapability(qemuMonitorPtr mon,
                                      qemuMonitorMigrationCaps capability);
int qemuMonitorSetMigrationCapability(qemuMonitorPtr mon,
                                      qemuMonitorMigrationCaps capability);

408
typedef enum {
E
Eric Blake 已提交
409
  QEMU_MONITOR_MIGRATE_BACKGROUND	= 1 << 0,
410 411 412 413 414
  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 已提交
415 416 417 418
int qemuMonitorMigrateToFd(qemuMonitorPtr mon,
                           unsigned int flags,
                           int fd);

419
int qemuMonitorMigrateToHost(qemuMonitorPtr mon,
420
                             unsigned int flags,
421 422 423 424
                             const char *hostname,
                             int port);

int qemuMonitorMigrateToCommand(qemuMonitorPtr mon,
425
                                unsigned int flags,
426 427
                                const char * const *argv);

428 429 430 431 432 433 434
/* In general, BS is the smallest fundamental block size we can use to
 * access a block device; everything must be aligned to a multiple of
 * this.  Linux generally supports a BS as small as 512, but with
 * newer disks with 4k sectors, performance is better if we guarantee
 * alignment to the sector size.  However, operating on BS-sized
 * blocks is painfully slow, so we also have a transfer size that is
 * larger but only aligned to the smaller block size.
435
 */
436 437
# define QEMU_MONITOR_MIGRATE_TO_FILE_BS (1024llu * 4)
# define QEMU_MONITOR_MIGRATE_TO_FILE_TRANSFER_SIZE (1024llu * 1024)
438 439

int qemuMonitorMigrateToFile(qemuMonitorPtr mon,
440
                             unsigned int flags,
441 442 443
                             const char * const *argv,
                             const char *target,
                             unsigned long long offset);
444 445

int qemuMonitorMigrateToUnix(qemuMonitorPtr mon,
446
                             unsigned int flags,
447 448 449 450
                             const char *unixfile);

int qemuMonitorMigrateCancel(qemuMonitorPtr mon);

451
int qemuMonitorDumpToFd(qemuMonitorPtr mon,
452
                        int fd);
453

454 455 456 457 458 459
int qemuMonitorGraphicsRelocate(qemuMonitorPtr mon,
                                int type,
                                const char *hostname,
                                int port,
                                int tlsPort,
                                const char *tlsSubject);
460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475

/* XXX disk driver type eg,  qcow/etc.
 * XXX cache mode
 */
int qemuMonitorAddUSBDisk(qemuMonitorPtr mon,
                          const char *path);

int qemuMonitorAddUSBDeviceExact(qemuMonitorPtr mon,
                                 int bus,
                                 int dev);
int qemuMonitorAddUSBDeviceMatch(qemuMonitorPtr mon,
                                 int vendor,
                                 int product);


int qemuMonitorAddPCIHostDevice(qemuMonitorPtr mon,
476 477
                                virDevicePCIAddress *hostAddr,
                                virDevicePCIAddress *guestAddr);
478 479 480 481 482 483 484

/* XXX disk driver type eg,  qcow/etc.
 * XXX cache mode
 */
int qemuMonitorAddPCIDisk(qemuMonitorPtr mon,
                          const char *path,
                          const char *bus,
485
                          virDevicePCIAddress *guestAddr);
486 487 488 489 490 491

/* XXX do we really want to hardcode 'nicstr' as the
 * sendable item here
 */
int qemuMonitorAddPCINetwork(qemuMonitorPtr mon,
                             const char *nicstr,
492
                             virDevicePCIAddress *guestAddr);
493 494

int qemuMonitorRemovePCIDevice(qemuMonitorPtr mon,
495
                               virDevicePCIAddress *guestAddr);
496 497 498 499 500


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

503 504
/* These two functions preserve previous error and only set their own
 * error if no error was set before.
505
 */
506 507
int qemuMonitorCloseFileHandle(qemuMonitorPtr mon,
                               const char *fdname);
508
int qemuMonitorRemoveFd(qemuMonitorPtr mon, int fdset, int fd);
509 510 511 512 513

/* XXX do we really want to hardcode 'netstr' as the
 * sendable item here
 */
int qemuMonitorAddHostNetwork(qemuMonitorPtr mon,
514
                              const char *netstr,
515 516
                              int *tapfd, char **tapfdName, int tapfdSize,
                              int *vhostfd, char **vhostfdName, int vhostfdSize);
517 518 519 520 521

int qemuMonitorRemoveHostNetwork(qemuMonitorPtr mon,
                                 int vlan,
                                 const char *netname);

522
int qemuMonitorAddNetdev(qemuMonitorPtr mon,
523
                         const char *netdevstr,
524 525
                         int *tapfd, char **tapfdName, int tapfdSize,
                         int *vhostfd, char **vhostfdName, int vhostfdSize);
526 527 528 529

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

530 531
int qemuMonitorGetPtyPaths(qemuMonitorPtr mon,
                           virHashTablePtr paths);
532

533 534
int qemuMonitorAttachPCIDiskController(qemuMonitorPtr mon,
                                       const char *bus,
535
                                       virDevicePCIAddress *guestAddr);
536

537 538
int qemuMonitorAttachDrive(qemuMonitorPtr mon,
                           const char *drivestr,
539
                           virDevicePCIAddress *controllerAddr,
540 541
                           virDomainDeviceDriveAddress *driveAddr);

542 543 544 545 546

typedef struct _qemuMonitorPCIAddress qemuMonitorPCIAddress;
struct _qemuMonitorPCIAddress {
    unsigned int vendor;
    unsigned int product;
547
    virDevicePCIAddress addr;
548 549 550 551 552
};

int qemuMonitorGetAllPCIAddresses(qemuMonitorPtr mon,
                                  qemuMonitorPCIAddress **addrs);

553 554 555
int qemuMonitorAddDevice(qemuMonitorPtr mon,
                         const char *devicestr);

556 557 558 559 560
int qemuMonitorAddDeviceWithFd(qemuMonitorPtr mon,
                               const char *devicestr,
                               int fd,
                               const char *fdname);

561
int qemuMonitorDelDevice(qemuMonitorPtr mon,
562
                         const char *devalias);
563

564 565 566
int qemuMonitorAddDrive(qemuMonitorPtr mon,
                        const char *drivestr);

567
int qemuMonitorDriveDel(qemuMonitorPtr mon,
568 569
                        const char *drivestr);

570 571 572 573
int qemuMonitorSetDrivePassphrase(qemuMonitorPtr mon,
                                  const char *alias,
                                  const char *passphrase);

C
Chris Lalancette 已提交
574 575 576 577
int qemuMonitorCreateSnapshot(qemuMonitorPtr mon, const char *name);
int qemuMonitorLoadSnapshot(qemuMonitorPtr mon, const char *name);
int qemuMonitorDeleteSnapshot(qemuMonitorPtr mon, const char *name);

578
int qemuMonitorDiskSnapshot(qemuMonitorPtr mon,
579
                            virJSONValuePtr actions,
580
                            const char *device,
581 582 583
                            const char *file,
                            const char *format,
                            bool reuse);
584 585
int qemuMonitorTransaction(qemuMonitorPtr mon, virJSONValuePtr actions)
    ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2);
586 587 588 589 590 591 592 593 594 595 596 597
int qemuMonitorDriveMirror(qemuMonitorPtr mon,
                           const char *device,
                           const char *file,
                           const char *format,
                           unsigned long bandwidth,
                           unsigned int flags)
    ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2) ATTRIBUTE_NONNULL(3);
int qemuMonitorDrivePivot(qemuMonitorPtr mon,
                          const char *device,
                          const char *file,
                          const char *format)
    ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2) ATTRIBUTE_NONNULL(3);
598

599 600 601 602 603 604 605
int qemuMonitorBlockCommit(qemuMonitorPtr mon,
                           const char *device,
                           const char *top,
                           const char *base,
                           unsigned long bandwidth)
    ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2) ATTRIBUTE_NONNULL(3);

606 607 608 609
int qemuMonitorArbitraryCommand(qemuMonitorPtr mon,
                                const char *cmd,
                                char **reply,
                                bool hmp);
610

611 612
int qemuMonitorInjectNMI(qemuMonitorPtr mon);

613 614 615
int qemuMonitorScreendump(qemuMonitorPtr mon,
                          const char *file);

616 617 618 619 620
int qemuMonitorSendKey(qemuMonitorPtr mon,
                       unsigned int holdtime,
                       unsigned int *keycodes,
                       unsigned int nkeycodes);

621
typedef enum {
622 623 624 625 626
    BLOCK_JOB_ABORT,
    BLOCK_JOB_INFO,
    BLOCK_JOB_SPEED,
    BLOCK_JOB_PULL,
} qemuMonitorBlockJobCmd;
627 628 629

int qemuMonitorBlockJob(qemuMonitorPtr mon,
                        const char *device,
630
                        const char *back,
631 632
                        unsigned long bandwidth,
                        virDomainBlockJobInfoPtr info,
633 634
                        qemuMonitorBlockJobCmd mode,
                        bool modern)
635
    ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2);
636

637 638 639 640 641 642
int qemuMonitorOpenGraphics(qemuMonitorPtr mon,
                            const char *protocol,
                            int fd,
                            const char *fdname,
                            bool skipauth);

643 644 645 646 647 648 649 650
int qemuMonitorSetBlockIoThrottle(qemuMonitorPtr mon,
                                  const char *device,
                                  virDomainBlockIoTuneInfoPtr info);

int qemuMonitorGetBlockIoThrottle(qemuMonitorPtr mon,
                                  const char *device,
                                  virDomainBlockIoTuneInfoPtr reply);

651 652
int qemuMonitorSystemWakeup(qemuMonitorPtr mon);

653 654 655 656 657 658 659
int qemuMonitorGetVersion(qemuMonitorPtr mon,
                          int *major,
                          int *minor,
                          int *micro,
                          char **package)
    ATTRIBUTE_NONNULL(2) ATTRIBUTE_NONNULL(3) ATTRIBUTE_NONNULL(4);

660 661 662 663 664 665 666 667

typedef struct _qemuMonitorMachineInfo qemuMonitorMachineInfo;
typedef qemuMonitorMachineInfo *qemuMonitorMachineInfoPtr;

struct _qemuMonitorMachineInfo {
    char *name;
    bool isDefault;
    char *alias;
668
    unsigned int maxCpus;
669 670 671 672 673 674 675
};

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

void qemuMonitorMachineInfoFree(qemuMonitorMachineInfoPtr machine);

676 677 678
int qemuMonitorGetCPUDefinitions(qemuMonitorPtr mon,
                                 char ***cpus);

679 680
int qemuMonitorGetCommands(qemuMonitorPtr mon,
                           char ***commands);
681 682
int qemuMonitorGetEvents(qemuMonitorPtr mon,
                         char ***events);
683 684 685
int qemuMonitorGetCommandLineOptionParameters(qemuMonitorPtr mon,
                                              const char *option,
                                              char ***params);
686

687 688 689 690
int qemuMonitorGetKVMState(qemuMonitorPtr mon,
                           bool *enabled,
                           bool *present);

691 692
int qemuMonitorGetObjectTypes(qemuMonitorPtr mon,
                              char ***types);
693 694 695
int qemuMonitorGetObjectProps(qemuMonitorPtr mon,
                              const char *type,
                              char ***props);
696
char *qemuMonitorGetTargetArch(qemuMonitorPtr mon);
697

698 699 700
int qemuMonitorNBDServerStart(qemuMonitorPtr mon,
                              const char *host,
                              unsigned int port);
701 702 703
int qemuMonitorNBDServerAdd(qemuMonitorPtr mon,
                            const char *deviceID,
                            bool writable);
704
int qemuMonitorNBDServerStop(qemuMonitorPtr);
S
Stefan Berger 已提交
705 706 707 708 709 710
int qemuMonitorGetTPMModels(qemuMonitorPtr mon,
                            char ***tpmmodels);

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

711 712 713
int qemuMonitorAttachCharDev(qemuMonitorPtr mon,
                             const char *chrID,
                             virDomainChrSourceDefPtr chr);
714 715
int qemuMonitorDetachCharDev(qemuMonitorPtr mon,
                             const char *chrID);
716 717 718 719 720 721 722 723 724 725 726 727 728
/**
 * When running two dd process and using <> redirection, we need a
 * shell that will not truncate files.  These two strings serve that
 * purpose.
 */
# ifdef VIR_WRAPPER_SHELL
#  define VIR_WRAPPER_SHELL_PREFIX VIR_WRAPPER_SHELL " -c '"
#  define VIR_WRAPPER_SHELL_SUFFIX "'"
# else
#  define VIR_WRAPPER_SHELL_PREFIX /* nothing */
#  define VIR_WRAPPER_SHELL_SUFFIX /* nothing */
# endif

729
#endif /* QEMU_MONITOR_H */