qemu_monitor.h 30.5 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;
};

J
Jiri Denemark 已提交
70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 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

typedef void (*qemuMonitorDestroyCallback)(qemuMonitorPtr mon,
                                           virDomainObjPtr vm);
typedef void (*qemuMonitorEofNotifyCallback)(qemuMonitorPtr mon,
                                             virDomainObjPtr vm);
typedef void (*qemuMonitorErrorNotifyCallback)(qemuMonitorPtr mon,
                                               virDomainObjPtr vm);
/* XXX we'd really like to avoid virConnectPtr here
 * 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
 */
typedef int (*qemuMonitorDiskSecretLookupCallback)(qemuMonitorPtr mon,
                                                   virConnectPtr conn,
                                                   virDomainObjPtr vm,
                                                   const char *path,
                                                   char **secret,
                                                   size_t *secretLen);
typedef int (*qemuMonitorDomainShutdownCallback)(qemuMonitorPtr mon,
                                                 virDomainObjPtr vm);
typedef int (*qemuMonitorDomainResetCallback)(qemuMonitorPtr mon,
                                              virDomainObjPtr vm);
typedef int (*qemuMonitorDomainPowerdownCallback)(qemuMonitorPtr mon,
                                                  virDomainObjPtr vm);
typedef int (*qemuMonitorDomainStopCallback)(qemuMonitorPtr mon,
                                             virDomainObjPtr vm);
typedef int (*qemuMonitorDomainResumeCallback)(qemuMonitorPtr mon,
                                               virDomainObjPtr vm);
typedef int (*qemuMonitorDomainRTCChangeCallback)(qemuMonitorPtr mon,
                                                  virDomainObjPtr vm,
                                                  long long offset);
typedef int (*qemuMonitorDomainWatchdogCallback)(qemuMonitorPtr mon,
                                                 virDomainObjPtr vm,
                                                 int action);
typedef int (*qemuMonitorDomainIOErrorCallback)(qemuMonitorPtr mon,
                                                virDomainObjPtr vm,
                                                const char *diskAlias,
                                                int action,
                                                const char *reason);
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,
                                                 const char *saslUsername);
typedef int (*qemuMonitorDomainBlockJobCallback)(qemuMonitorPtr mon,
                                                 virDomainObjPtr vm,
                                                 const char *diskAlias,
                                                 int type,
                                                 int status);
typedef int (*qemuMonitorDomainTrayChangeCallback)(qemuMonitorPtr mon,
                                                   virDomainObjPtr vm,
                                                   const char *devAlias,
                                                   int reason);
typedef int (*qemuMonitorDomainPMWakeupCallback)(qemuMonitorPtr mon,
                                                 virDomainObjPtr vm);
typedef int (*qemuMonitorDomainPMSuspendCallback)(qemuMonitorPtr mon,
                                                  virDomainObjPtr vm);
typedef int (*qemuMonitorDomainBalloonChangeCallback)(qemuMonitorPtr mon,
                                                      virDomainObjPtr vm,
                                                      unsigned long long actual);
typedef int (*qemuMonitorDomainPMSuspendDiskCallback)(qemuMonitorPtr mon,
                                                      virDomainObjPtr vm);
typedef int (*qemuMonitorDomainGuestPanicCallback)(qemuMonitorPtr mon,
                                                   virDomainObjPtr vm);
typedef int (*qemuMonitorDomainDeviceDeletedCallback)(qemuMonitorPtr mon,
                                                      virDomainObjPtr vm,
                                                      const char *devAlias);

145 146 147
typedef struct _qemuMonitorCallbacks qemuMonitorCallbacks;
typedef qemuMonitorCallbacks *qemuMonitorCallbacksPtr;
struct _qemuMonitorCallbacks {
J
Jiri Denemark 已提交
148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168
    qemuMonitorDestroyCallback destroy;
    qemuMonitorEofNotifyCallback eofNotify;
    qemuMonitorErrorNotifyCallback errorNotify;
    qemuMonitorDiskSecretLookupCallback diskSecretLookup;
    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;
169 170
};

171
char *qemuMonitorEscapeArg(const char *in);
172
char *qemuMonitorUnescapeArg(const char *in);
173

174
qemuMonitorPtr qemuMonitorOpen(virDomainObjPtr vm,
175
                               virDomainChrSourceDefPtr config,
E
Eric Blake 已提交
176
                               bool json,
177 178
                               qemuMonitorCallbacksPtr cb)
    ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2) ATTRIBUTE_NONNULL(4);
179 180
qemuMonitorPtr qemuMonitorOpenFD(virDomainObjPtr vm,
                                 int sockfd,
E
Eric Blake 已提交
181
                                 bool json,
182 183
                                 qemuMonitorCallbacksPtr cb)
    ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(4);
184

185
void qemuMonitorClose(qemuMonitorPtr mon);
186

187
int qemuMonitorSetCapabilities(qemuMonitorPtr mon);
188

189 190
int qemuMonitorSetLink(qemuMonitorPtr mon,
                       const char *name,
191
                       enum virDomainNetInterfaceLinkState state);
192

193
/* These APIs are for use by the internal Text/JSON monitor impl code only */
194
char *qemuMonitorNextCommandID(qemuMonitorPtr mon);
195 196
int qemuMonitorSend(qemuMonitorPtr mon,
                    qemuMonitorMessagePtr msg);
197 198 199 200
virJSONValuePtr qemuMonitorGetOptions(qemuMonitorPtr mon)
    ATTRIBUTE_NONNULL(1);
void qemuMonitorSetOptions(qemuMonitorPtr mon, virJSONValuePtr options)
    ATTRIBUTE_NONNULL(1);
201 202 203 204 205 206
int qemuMonitorHMPCommandWithFd(qemuMonitorPtr mon,
                                const char *cmd,
                                int scm_fd,
                                char **reply);
# define qemuMonitorHMPCommand(mon, cmd, reply) \
    qemuMonitorHMPCommandWithFd(mon, cmd, -1, reply)
207

208
/* XXX same comment about virConnectPtr as above */
209 210 211 212 213
int qemuMonitorGetDiskSecret(qemuMonitorPtr mon,
                             virConnectPtr conn,
                             const char *path,
                             char **secret,
                             size_t *secretLen);
214

215 216 217 218
int qemuMonitorEmitShutdown(qemuMonitorPtr mon);
int qemuMonitorEmitReset(qemuMonitorPtr mon);
int qemuMonitorEmitPowerdown(qemuMonitorPtr mon);
int qemuMonitorEmitStop(qemuMonitorPtr mon);
219
int qemuMonitorEmitResume(qemuMonitorPtr mon);
220
int qemuMonitorEmitRTCChange(qemuMonitorPtr mon, long long offset);
221
int qemuMonitorEmitWatchdog(qemuMonitorPtr mon, int action);
222 223
int qemuMonitorEmitIOError(qemuMonitorPtr mon,
                           const char *diskAlias,
224 225
                           int action,
                           const char *reason);
226 227 228 229 230 231 232 233 234 235 236
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);
237 238 239
int qemuMonitorEmitTrayChange(qemuMonitorPtr mon,
                              const char *devAlias,
                              int reason);
O
Osier Yang 已提交
240
int qemuMonitorEmitPMWakeup(qemuMonitorPtr mon);
O
Osier Yang 已提交
241
int qemuMonitorEmitPMSuspend(qemuMonitorPtr mon);
242 243 244 245
int qemuMonitorEmitBlockJob(qemuMonitorPtr mon,
                            const char *diskAlias,
                            int type,
                            int status);
246 247
int qemuMonitorEmitBalloonChange(qemuMonitorPtr mon,
                                 unsigned long long actual);
248
int qemuMonitorEmitPMSuspendDisk(qemuMonitorPtr mon);
249
int qemuMonitorEmitGuestPanic(qemuMonitorPtr mon);
250 251
int qemuMonitorEmitDeviceDeleted(qemuMonitorPtr mon,
                                 const char *devAlias);
252

253 254 255
int qemuMonitorStartCPUs(qemuMonitorPtr mon,
                         virConnectPtr conn);
int qemuMonitorStopCPUs(qemuMonitorPtr mon);
256 257 258 259 260 261 262 263 264 265 266 267 268 269 270

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,
271
    QEMU_MONITOR_VM_STATUS_GUEST_PANICKED,
272 273 274 275 276 277 278 279 280

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

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

282
int qemuMonitorSystemReset(qemuMonitorPtr mon);
283 284 285 286
int qemuMonitorSystemPowerdown(qemuMonitorPtr mon);

int qemuMonitorGetCPUInfo(qemuMonitorPtr mon,
                          int **pids);
287 288
int qemuMonitorGetVirtType(qemuMonitorPtr mon,
                           int *virtType);
289
int qemuMonitorGetBalloonInfo(qemuMonitorPtr mon,
290
                              unsigned long long *currmem);
291 292 293
int qemuMonitorGetMemoryStats(qemuMonitorPtr mon,
                              virDomainMemoryStatPtr stats,
                              unsigned int nr_stats);
294 295
int qemuMonitorSetMemoryStatsPeriod(qemuMonitorPtr mon,
                                    int period);
296

297
int qemuMonitorBlockIOStatusToError(const char *status);
298 299 300 301 302
virHashTablePtr qemuMonitorGetBlockInfo(qemuMonitorPtr mon);
struct qemuDomainDiskInfo *
qemuMonitorBlockInfoLookup(virHashTablePtr blockInfo,
                           const char *devname);

303
int qemuMonitorGetBlockStatsInfo(qemuMonitorPtr mon,
304
                                 const char *dev_name,
305 306
                                 long long *rd_req,
                                 long long *rd_bytes,
307
                                 long long *rd_total_times,
308 309
                                 long long *wr_req,
                                 long long *wr_bytes,
310 311 312
                                 long long *wr_total_times,
                                 long long *flush_req,
                                 long long *flush_total_times,
313
                                 long long *errs);
314 315
int qemuMonitorGetBlockStatsParamsNumber(qemuMonitorPtr mon,
                                         int *nparams);
316

317
int qemuMonitorGetBlockExtent(qemuMonitorPtr mon,
318
                              const char *dev_name,
319
                              unsigned long long *extent);
320 321 322
int qemuMonitorBlockResize(qemuMonitorPtr mon,
                           const char *devname,
                           unsigned long long size);
323 324
int qemuMonitorSetVNCPassword(qemuMonitorPtr mon,
                              const char *password);
325 326 327 328 329 330 331
int qemuMonitorSetPassword(qemuMonitorPtr mon,
                           int type,
                           const char *password,
                           const char *action_if_connected);
int qemuMonitorExpirePassword(qemuMonitorPtr mon,
                              int type,
                              const char *expire_time);
332 333
int qemuMonitorSetBalloon(qemuMonitorPtr mon,
                          unsigned long newmem);
334
int qemuMonitorSetCPU(qemuMonitorPtr mon, int cpu, bool online);
335

336 337 338 339 340 341

/* XXX should we pass the virDomainDiskDefPtr instead
 * and hide devname details inside monitor. Reconsider
 * this when doing the QMP implementation
 */
int qemuMonitorEjectMedia(qemuMonitorPtr mon,
342
                          const char *dev_name,
343
                          bool force);
344
int qemuMonitorChangeMedia(qemuMonitorPtr mon,
345
                           const char *dev_name,
346 347
                           const char *newmedia,
                           const char *format);
348 349 350 351 352 353 354 355 356 357 358 359 360 361


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

362 363 364
int qemuMonitorSetMigrationDowntime(qemuMonitorPtr mon,
                                    unsigned long long downtime);

365 366 367 368 369
int qemuMonitorGetMigrationCacheSize(qemuMonitorPtr mon,
                                     unsigned long long *cacheSize);
int qemuMonitorSetMigrationCacheSize(qemuMonitorPtr mon,
                                     unsigned long long cacheSize);

370 371 372 373 374 375 376 377 378 379
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
};

380 381
VIR_ENUM_DECL(qemuMonitorMigrationStatus)

382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410
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;
};

411
int qemuMonitorGetMigrationStatus(qemuMonitorPtr mon,
412
                                  qemuMonitorMigrationStatusPtr status);
413 414
int qemuMonitorGetSpiceMigrationStatus(qemuMonitorPtr mon,
                                       bool *spice_migrated);
415

416 417 418 419 420 421 422 423 424 425 426 427 428
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);

429
typedef enum {
E
Eric Blake 已提交
430
  QEMU_MONITOR_MIGRATE_BACKGROUND	= 1 << 0,
431 432 433 434 435
  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 已提交
436 437 438 439
int qemuMonitorMigrateToFd(qemuMonitorPtr mon,
                           unsigned int flags,
                           int fd);

440
int qemuMonitorMigrateToHost(qemuMonitorPtr mon,
441
                             unsigned int flags,
442 443 444 445
                             const char *hostname,
                             int port);

int qemuMonitorMigrateToCommand(qemuMonitorPtr mon,
446
                                unsigned int flags,
447 448
                                const char * const *argv);

449 450 451 452 453 454 455
/* 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.
456
 */
457 458
# define QEMU_MONITOR_MIGRATE_TO_FILE_BS (1024llu * 4)
# define QEMU_MONITOR_MIGRATE_TO_FILE_TRANSFER_SIZE (1024llu * 1024)
459 460

int qemuMonitorMigrateToFile(qemuMonitorPtr mon,
461
                             unsigned int flags,
462 463 464
                             const char * const *argv,
                             const char *target,
                             unsigned long long offset);
465 466

int qemuMonitorMigrateToUnix(qemuMonitorPtr mon,
467
                             unsigned int flags,
468 469 470 471
                             const char *unixfile);

int qemuMonitorMigrateCancel(qemuMonitorPtr mon);

472
int qemuMonitorDumpToFd(qemuMonitorPtr mon,
473
                        int fd);
474

475 476 477 478 479 480
int qemuMonitorGraphicsRelocate(qemuMonitorPtr mon,
                                int type,
                                const char *hostname,
                                int port,
                                int tlsPort,
                                const char *tlsSubject);
481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496

/* 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,
497 498
                                virDevicePCIAddress *hostAddr,
                                virDevicePCIAddress *guestAddr);
499 500 501 502 503 504 505

/* XXX disk driver type eg,  qcow/etc.
 * XXX cache mode
 */
int qemuMonitorAddPCIDisk(qemuMonitorPtr mon,
                          const char *path,
                          const char *bus,
506
                          virDevicePCIAddress *guestAddr);
507 508 509 510 511 512

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

int qemuMonitorRemovePCIDevice(qemuMonitorPtr mon,
516
                               virDevicePCIAddress *guestAddr);
517 518 519 520 521


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

524 525
/* These two functions preserve previous error and only set their own
 * error if no error was set before.
526
 */
527 528
int qemuMonitorCloseFileHandle(qemuMonitorPtr mon,
                               const char *fdname);
529
int qemuMonitorRemoveFd(qemuMonitorPtr mon, int fdset, int fd);
530 531 532 533 534

/* XXX do we really want to hardcode 'netstr' as the
 * sendable item here
 */
int qemuMonitorAddHostNetwork(qemuMonitorPtr mon,
535
                              const char *netstr,
536 537
                              int *tapfd, char **tapfdName, int tapfdSize,
                              int *vhostfd, char **vhostfdName, int vhostfdSize);
538 539 540 541 542

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

543
int qemuMonitorAddNetdev(qemuMonitorPtr mon,
544
                         const char *netdevstr,
545 546
                         int *tapfd, char **tapfdName, int tapfdSize,
                         int *vhostfd, char **vhostfdName, int vhostfdSize);
547 548 549 550

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

551 552
int qemuMonitorGetPtyPaths(qemuMonitorPtr mon,
                           virHashTablePtr paths);
553

554 555
int qemuMonitorAttachPCIDiskController(qemuMonitorPtr mon,
                                       const char *bus,
556
                                       virDevicePCIAddress *guestAddr);
557

558 559
int qemuMonitorAttachDrive(qemuMonitorPtr mon,
                           const char *drivestr,
560
                           virDevicePCIAddress *controllerAddr,
561 562
                           virDomainDeviceDriveAddress *driveAddr);

563 564 565 566 567

typedef struct _qemuMonitorPCIAddress qemuMonitorPCIAddress;
struct _qemuMonitorPCIAddress {
    unsigned int vendor;
    unsigned int product;
568
    virDevicePCIAddress addr;
569 570 571 572 573
};

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

574 575 576
int qemuMonitorAddDevice(qemuMonitorPtr mon,
                         const char *devicestr);

577 578 579 580 581
int qemuMonitorAddDeviceWithFd(qemuMonitorPtr mon,
                               const char *devicestr,
                               int fd,
                               const char *fdname);

582
int qemuMonitorDelDevice(qemuMonitorPtr mon,
583
                         const char *devalias);
584

585 586 587
int qemuMonitorAddDrive(qemuMonitorPtr mon,
                        const char *drivestr);

588
int qemuMonitorDriveDel(qemuMonitorPtr mon,
589 590
                        const char *drivestr);

591 592 593 594
int qemuMonitorSetDrivePassphrase(qemuMonitorPtr mon,
                                  const char *alias,
                                  const char *passphrase);

C
Chris Lalancette 已提交
595 596 597 598
int qemuMonitorCreateSnapshot(qemuMonitorPtr mon, const char *name);
int qemuMonitorLoadSnapshot(qemuMonitorPtr mon, const char *name);
int qemuMonitorDeleteSnapshot(qemuMonitorPtr mon, const char *name);

599
int qemuMonitorDiskSnapshot(qemuMonitorPtr mon,
600
                            virJSONValuePtr actions,
601
                            const char *device,
602 603 604
                            const char *file,
                            const char *format,
                            bool reuse);
605 606
int qemuMonitorTransaction(qemuMonitorPtr mon, virJSONValuePtr actions)
    ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2);
607 608 609 610 611 612 613 614 615 616 617 618
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);
619

620 621 622 623 624 625 626
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);

627 628 629 630
int qemuMonitorArbitraryCommand(qemuMonitorPtr mon,
                                const char *cmd,
                                char **reply,
                                bool hmp);
631

632 633
int qemuMonitorInjectNMI(qemuMonitorPtr mon);

634 635 636
int qemuMonitorScreendump(qemuMonitorPtr mon,
                          const char *file);

637 638 639 640 641
int qemuMonitorSendKey(qemuMonitorPtr mon,
                       unsigned int holdtime,
                       unsigned int *keycodes,
                       unsigned int nkeycodes);

642
typedef enum {
643 644 645 646 647
    BLOCK_JOB_ABORT,
    BLOCK_JOB_INFO,
    BLOCK_JOB_SPEED,
    BLOCK_JOB_PULL,
} qemuMonitorBlockJobCmd;
648 649 650

int qemuMonitorBlockJob(qemuMonitorPtr mon,
                        const char *device,
651
                        const char *back,
652 653
                        unsigned long bandwidth,
                        virDomainBlockJobInfoPtr info,
654 655
                        qemuMonitorBlockJobCmd mode,
                        bool modern)
656
    ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2);
657

658 659 660 661 662 663
int qemuMonitorOpenGraphics(qemuMonitorPtr mon,
                            const char *protocol,
                            int fd,
                            const char *fdname,
                            bool skipauth);

664 665 666 667 668 669 670 671
int qemuMonitorSetBlockIoThrottle(qemuMonitorPtr mon,
                                  const char *device,
                                  virDomainBlockIoTuneInfoPtr info);

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

672 673
int qemuMonitorSystemWakeup(qemuMonitorPtr mon);

674 675 676 677 678 679 680
int qemuMonitorGetVersion(qemuMonitorPtr mon,
                          int *major,
                          int *minor,
                          int *micro,
                          char **package)
    ATTRIBUTE_NONNULL(2) ATTRIBUTE_NONNULL(3) ATTRIBUTE_NONNULL(4);

681 682 683 684 685 686 687 688

typedef struct _qemuMonitorMachineInfo qemuMonitorMachineInfo;
typedef qemuMonitorMachineInfo *qemuMonitorMachineInfoPtr;

struct _qemuMonitorMachineInfo {
    char *name;
    bool isDefault;
    char *alias;
689
    unsigned int maxCpus;
690 691 692 693 694 695 696
};

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

void qemuMonitorMachineInfoFree(qemuMonitorMachineInfoPtr machine);

697 698 699
int qemuMonitorGetCPUDefinitions(qemuMonitorPtr mon,
                                 char ***cpus);

700 701
int qemuMonitorGetCommands(qemuMonitorPtr mon,
                           char ***commands);
702 703
int qemuMonitorGetEvents(qemuMonitorPtr mon,
                         char ***events);
704 705 706
int qemuMonitorGetCommandLineOptionParameters(qemuMonitorPtr mon,
                                              const char *option,
                                              char ***params);
707

708 709 710 711
int qemuMonitorGetKVMState(qemuMonitorPtr mon,
                           bool *enabled,
                           bool *present);

712 713
int qemuMonitorGetObjectTypes(qemuMonitorPtr mon,
                              char ***types);
714 715 716
int qemuMonitorGetObjectProps(qemuMonitorPtr mon,
                              const char *type,
                              char ***props);
717
char *qemuMonitorGetTargetArch(qemuMonitorPtr mon);
718

719 720 721
int qemuMonitorNBDServerStart(qemuMonitorPtr mon,
                              const char *host,
                              unsigned int port);
722 723 724
int qemuMonitorNBDServerAdd(qemuMonitorPtr mon,
                            const char *deviceID,
                            bool writable);
725
int qemuMonitorNBDServerStop(qemuMonitorPtr);
S
Stefan Berger 已提交
726 727 728 729 730 731
int qemuMonitorGetTPMModels(qemuMonitorPtr mon,
                            char ***tpmmodels);

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

732 733 734
int qemuMonitorAttachCharDev(qemuMonitorPtr mon,
                             const char *chrID,
                             virDomainChrSourceDefPtr chr);
735 736
int qemuMonitorDetachCharDev(qemuMonitorPtr mon,
                             const char *chrID);
737 738 739 740

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

741 742 743 744 745 746 747 748 749 750 751 752 753
/**
 * 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

754
#endif /* QEMU_MONITOR_H */