qemu_monitor.h 31.9 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

typedef void (*qemuMonitorDestroyCallback)(qemuMonitorPtr mon,
72 73
                                           virDomainObjPtr vm,
                                           void *opaque);
J
Jiri Denemark 已提交
74
typedef void (*qemuMonitorEofNotifyCallback)(qemuMonitorPtr mon,
75 76
                                             virDomainObjPtr vm,
                                             void *opaque);
J
Jiri Denemark 已提交
77
typedef void (*qemuMonitorErrorNotifyCallback)(qemuMonitorPtr mon,
78 79
                                               virDomainObjPtr vm,
                                               void *opaque);
J
Jiri Denemark 已提交
80 81 82 83 84 85 86 87 88 89
/* 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,
90 91
                                                   size_t *secretLen,
                                                   void *opaque);
J
Jiri Denemark 已提交
92
typedef int (*qemuMonitorDomainShutdownCallback)(qemuMonitorPtr mon,
93 94
                                                 virDomainObjPtr vm,
                                                 void *opaque);
J
Jiri Denemark 已提交
95
typedef int (*qemuMonitorDomainResetCallback)(qemuMonitorPtr mon,
96 97
                                              virDomainObjPtr vm,
                                              void *opaque);
J
Jiri Denemark 已提交
98
typedef int (*qemuMonitorDomainPowerdownCallback)(qemuMonitorPtr mon,
99 100
                                                  virDomainObjPtr vm,
                                                  void *opaque);
J
Jiri Denemark 已提交
101
typedef int (*qemuMonitorDomainStopCallback)(qemuMonitorPtr mon,
102 103
                                             virDomainObjPtr vm,
                                             void *opaque);
J
Jiri Denemark 已提交
104
typedef int (*qemuMonitorDomainResumeCallback)(qemuMonitorPtr mon,
105 106
                                               virDomainObjPtr vm,
                                               void *opaque);
J
Jiri Denemark 已提交
107 108
typedef int (*qemuMonitorDomainRTCChangeCallback)(qemuMonitorPtr mon,
                                                  virDomainObjPtr vm,
109 110
                                                  long long offset,
                                                  void *opaque);
J
Jiri Denemark 已提交
111 112
typedef int (*qemuMonitorDomainWatchdogCallback)(qemuMonitorPtr mon,
                                                 virDomainObjPtr vm,
113 114
                                                 int action,
                                                 void *opaque);
J
Jiri Denemark 已提交
115 116 117 118
typedef int (*qemuMonitorDomainIOErrorCallback)(qemuMonitorPtr mon,
                                                virDomainObjPtr vm,
                                                const char *diskAlias,
                                                int action,
119 120
                                                const char *reason,
                                                void *opaque);
J
Jiri Denemark 已提交
121 122 123 124 125 126 127 128 129 130 131
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,
132 133
                                                 const char *saslUsername,
                                                 void *opaque);
J
Jiri Denemark 已提交
134 135 136 137
typedef int (*qemuMonitorDomainBlockJobCallback)(qemuMonitorPtr mon,
                                                 virDomainObjPtr vm,
                                                 const char *diskAlias,
                                                 int type,
138 139
                                                 int status,
                                                 void *opaque);
J
Jiri Denemark 已提交
140 141 142
typedef int (*qemuMonitorDomainTrayChangeCallback)(qemuMonitorPtr mon,
                                                   virDomainObjPtr vm,
                                                   const char *devAlias,
143 144
                                                   int reason,
                                                   void *opaque);
J
Jiri Denemark 已提交
145
typedef int (*qemuMonitorDomainPMWakeupCallback)(qemuMonitorPtr mon,
146 147
                                                 virDomainObjPtr vm,
                                                 void *opaque);
J
Jiri Denemark 已提交
148
typedef int (*qemuMonitorDomainPMSuspendCallback)(qemuMonitorPtr mon,
149 150
                                                  virDomainObjPtr vm,
                                                  void *opaque);
J
Jiri Denemark 已提交
151 152
typedef int (*qemuMonitorDomainBalloonChangeCallback)(qemuMonitorPtr mon,
                                                      virDomainObjPtr vm,
153 154
                                                      unsigned long long actual,
                                                      void *opaque);
J
Jiri Denemark 已提交
155
typedef int (*qemuMonitorDomainPMSuspendDiskCallback)(qemuMonitorPtr mon,
156 157
                                                      virDomainObjPtr vm,
                                                      void *opaque);
J
Jiri Denemark 已提交
158
typedef int (*qemuMonitorDomainGuestPanicCallback)(qemuMonitorPtr mon,
159 160
                                                   virDomainObjPtr vm,
                                                   void *opaque);
J
Jiri Denemark 已提交
161 162
typedef int (*qemuMonitorDomainDeviceDeletedCallback)(qemuMonitorPtr mon,
                                                      virDomainObjPtr vm,
163 164
                                                      const char *devAlias,
                                                      void *opaque);
J
Jiri Denemark 已提交
165

166 167 168
typedef struct _qemuMonitorCallbacks qemuMonitorCallbacks;
typedef qemuMonitorCallbacks *qemuMonitorCallbacksPtr;
struct _qemuMonitorCallbacks {
J
Jiri Denemark 已提交
169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189
    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;
190 191
};

192
char *qemuMonitorEscapeArg(const char *in);
193
char *qemuMonitorUnescapeArg(const char *in);
194

195
qemuMonitorPtr qemuMonitorOpen(virDomainObjPtr vm,
196
                               virDomainChrSourceDefPtr config,
E
Eric Blake 已提交
197
                               bool json,
198 199
                               qemuMonitorCallbacksPtr cb,
                               void *opaque)
200
    ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2) ATTRIBUTE_NONNULL(4);
201 202
qemuMonitorPtr qemuMonitorOpenFD(virDomainObjPtr vm,
                                 int sockfd,
E
Eric Blake 已提交
203
                                 bool json,
204 205
                                 qemuMonitorCallbacksPtr cb,
                                 void *opaque)
206
    ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(4);
207

208
void qemuMonitorClose(qemuMonitorPtr mon);
209

210
int qemuMonitorSetCapabilities(qemuMonitorPtr mon);
211

212 213
int qemuMonitorSetLink(qemuMonitorPtr mon,
                       const char *name,
214
                       enum virDomainNetInterfaceLinkState state);
215

216
/* These APIs are for use by the internal Text/JSON monitor impl code only */
217
char *qemuMonitorNextCommandID(qemuMonitorPtr mon);
218 219
int qemuMonitorSend(qemuMonitorPtr mon,
                    qemuMonitorMessagePtr msg);
220 221 222 223
virJSONValuePtr qemuMonitorGetOptions(qemuMonitorPtr mon)
    ATTRIBUTE_NONNULL(1);
void qemuMonitorSetOptions(qemuMonitorPtr mon, virJSONValuePtr options)
    ATTRIBUTE_NONNULL(1);
224 225 226 227 228 229
int qemuMonitorHMPCommandWithFd(qemuMonitorPtr mon,
                                const char *cmd,
                                int scm_fd,
                                char **reply);
# define qemuMonitorHMPCommand(mon, cmd, reply) \
    qemuMonitorHMPCommandWithFd(mon, cmd, -1, reply)
230

231
/* XXX same comment about virConnectPtr as above */
232 233 234 235 236
int qemuMonitorGetDiskSecret(qemuMonitorPtr mon,
                             virConnectPtr conn,
                             const char *path,
                             char **secret,
                             size_t *secretLen);
237

238 239 240 241
int qemuMonitorEmitShutdown(qemuMonitorPtr mon);
int qemuMonitorEmitReset(qemuMonitorPtr mon);
int qemuMonitorEmitPowerdown(qemuMonitorPtr mon);
int qemuMonitorEmitStop(qemuMonitorPtr mon);
242
int qemuMonitorEmitResume(qemuMonitorPtr mon);
243
int qemuMonitorEmitRTCChange(qemuMonitorPtr mon, long long offset);
244
int qemuMonitorEmitWatchdog(qemuMonitorPtr mon, int action);
245 246
int qemuMonitorEmitIOError(qemuMonitorPtr mon,
                           const char *diskAlias,
247 248
                           int action,
                           const char *reason);
249 250 251 252 253 254 255 256 257 258 259
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);
260 261 262
int qemuMonitorEmitTrayChange(qemuMonitorPtr mon,
                              const char *devAlias,
                              int reason);
O
Osier Yang 已提交
263
int qemuMonitorEmitPMWakeup(qemuMonitorPtr mon);
O
Osier Yang 已提交
264
int qemuMonitorEmitPMSuspend(qemuMonitorPtr mon);
265 266 267 268
int qemuMonitorEmitBlockJob(qemuMonitorPtr mon,
                            const char *diskAlias,
                            int type,
                            int status);
269 270
int qemuMonitorEmitBalloonChange(qemuMonitorPtr mon,
                                 unsigned long long actual);
271
int qemuMonitorEmitPMSuspendDisk(qemuMonitorPtr mon);
272
int qemuMonitorEmitGuestPanic(qemuMonitorPtr mon);
273 274
int qemuMonitorEmitDeviceDeleted(qemuMonitorPtr mon,
                                 const char *devAlias);
275

276 277 278
int qemuMonitorStartCPUs(qemuMonitorPtr mon,
                         virConnectPtr conn);
int qemuMonitorStopCPUs(qemuMonitorPtr mon);
279 280 281 282 283 284 285 286 287 288 289 290 291 292 293

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,
294
    QEMU_MONITOR_VM_STATUS_GUEST_PANICKED,
295 296 297 298 299 300 301 302 303

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

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

305
int qemuMonitorSystemReset(qemuMonitorPtr mon);
306 307 308 309
int qemuMonitorSystemPowerdown(qemuMonitorPtr mon);

int qemuMonitorGetCPUInfo(qemuMonitorPtr mon,
                          int **pids);
310 311
int qemuMonitorGetVirtType(qemuMonitorPtr mon,
                           int *virtType);
312
int qemuMonitorGetBalloonInfo(qemuMonitorPtr mon,
313
                              unsigned long long *currmem);
314 315 316
int qemuMonitorGetMemoryStats(qemuMonitorPtr mon,
                              virDomainMemoryStatPtr stats,
                              unsigned int nr_stats);
317 318
int qemuMonitorSetMemoryStatsPeriod(qemuMonitorPtr mon,
                                    int period);
319

320
int qemuMonitorBlockIOStatusToError(const char *status);
321 322 323 324 325
virHashTablePtr qemuMonitorGetBlockInfo(qemuMonitorPtr mon);
struct qemuDomainDiskInfo *
qemuMonitorBlockInfoLookup(virHashTablePtr blockInfo,
                           const char *devname);

326
int qemuMonitorGetBlockStatsInfo(qemuMonitorPtr mon,
327
                                 const char *dev_name,
328 329
                                 long long *rd_req,
                                 long long *rd_bytes,
330
                                 long long *rd_total_times,
331 332
                                 long long *wr_req,
                                 long long *wr_bytes,
333 334 335
                                 long long *wr_total_times,
                                 long long *flush_req,
                                 long long *flush_total_times,
336
                                 long long *errs);
337 338
int qemuMonitorGetBlockStatsParamsNumber(qemuMonitorPtr mon,
                                         int *nparams);
339

340
int qemuMonitorGetBlockExtent(qemuMonitorPtr mon,
341
                              const char *dev_name,
342
                              unsigned long long *extent);
343 344 345
int qemuMonitorBlockResize(qemuMonitorPtr mon,
                           const char *devname,
                           unsigned long long size);
346 347
int qemuMonitorSetVNCPassword(qemuMonitorPtr mon,
                              const char *password);
348 349 350 351 352 353 354
int qemuMonitorSetPassword(qemuMonitorPtr mon,
                           int type,
                           const char *password,
                           const char *action_if_connected);
int qemuMonitorExpirePassword(qemuMonitorPtr mon,
                              int type,
                              const char *expire_time);
355 356
int qemuMonitorSetBalloon(qemuMonitorPtr mon,
                          unsigned long newmem);
357
int qemuMonitorSetCPU(qemuMonitorPtr mon, int cpu, bool online);
358

359 360 361 362 363 364

/* XXX should we pass the virDomainDiskDefPtr instead
 * and hide devname details inside monitor. Reconsider
 * this when doing the QMP implementation
 */
int qemuMonitorEjectMedia(qemuMonitorPtr mon,
365
                          const char *dev_name,
366
                          bool force);
367
int qemuMonitorChangeMedia(qemuMonitorPtr mon,
368
                           const char *dev_name,
369 370
                           const char *newmedia,
                           const char *format);
371 372 373 374 375 376 377 378 379 380 381 382 383 384


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

385 386 387
int qemuMonitorSetMigrationDowntime(qemuMonitorPtr mon,
                                    unsigned long long downtime);

388 389 390 391 392
int qemuMonitorGetMigrationCacheSize(qemuMonitorPtr mon,
                                     unsigned long long *cacheSize);
int qemuMonitorSetMigrationCacheSize(qemuMonitorPtr mon,
                                     unsigned long long cacheSize);

393 394 395 396 397 398 399 400 401 402
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
};

403 404
VIR_ENUM_DECL(qemuMonitorMigrationStatus)

405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433
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;
};

434
int qemuMonitorGetMigrationStatus(qemuMonitorPtr mon,
435
                                  qemuMonitorMigrationStatusPtr status);
436 437
int qemuMonitorGetSpiceMigrationStatus(qemuMonitorPtr mon,
                                       bool *spice_migrated);
438

439 440 441 442 443 444 445 446 447 448 449 450 451
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);

452
typedef enum {
E
Eric Blake 已提交
453
  QEMU_MONITOR_MIGRATE_BACKGROUND	= 1 << 0,
454 455 456 457 458
  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 已提交
459 460 461 462
int qemuMonitorMigrateToFd(qemuMonitorPtr mon,
                           unsigned int flags,
                           int fd);

463
int qemuMonitorMigrateToHost(qemuMonitorPtr mon,
464
                             unsigned int flags,
465 466 467 468
                             const char *hostname,
                             int port);

int qemuMonitorMigrateToCommand(qemuMonitorPtr mon,
469
                                unsigned int flags,
470 471
                                const char * const *argv);

472 473 474 475 476 477 478
/* 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.
479
 */
480 481
# define QEMU_MONITOR_MIGRATE_TO_FILE_BS (1024llu * 4)
# define QEMU_MONITOR_MIGRATE_TO_FILE_TRANSFER_SIZE (1024llu * 1024)
482 483

int qemuMonitorMigrateToFile(qemuMonitorPtr mon,
484
                             unsigned int flags,
485 486 487
                             const char * const *argv,
                             const char *target,
                             unsigned long long offset);
488 489

int qemuMonitorMigrateToUnix(qemuMonitorPtr mon,
490
                             unsigned int flags,
491 492 493 494
                             const char *unixfile);

int qemuMonitorMigrateCancel(qemuMonitorPtr mon);

495
int qemuMonitorDumpToFd(qemuMonitorPtr mon,
496
                        int fd);
497

498 499 500 501 502 503
int qemuMonitorGraphicsRelocate(qemuMonitorPtr mon,
                                int type,
                                const char *hostname,
                                int port,
                                int tlsPort,
                                const char *tlsSubject);
504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519

/* 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,
520 521
                                virDevicePCIAddress *hostAddr,
                                virDevicePCIAddress *guestAddr);
522 523 524 525 526 527 528

/* XXX disk driver type eg,  qcow/etc.
 * XXX cache mode
 */
int qemuMonitorAddPCIDisk(qemuMonitorPtr mon,
                          const char *path,
                          const char *bus,
529
                          virDevicePCIAddress *guestAddr);
530 531 532 533 534 535

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

int qemuMonitorRemovePCIDevice(qemuMonitorPtr mon,
539
                               virDevicePCIAddress *guestAddr);
540 541 542 543 544


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

547 548
/* These two functions preserve previous error and only set their own
 * error if no error was set before.
549
 */
550 551
int qemuMonitorCloseFileHandle(qemuMonitorPtr mon,
                               const char *fdname);
552
int qemuMonitorRemoveFd(qemuMonitorPtr mon, int fdset, int fd);
553 554 555 556 557

/* XXX do we really want to hardcode 'netstr' as the
 * sendable item here
 */
int qemuMonitorAddHostNetwork(qemuMonitorPtr mon,
558
                              const char *netstr,
559 560
                              int *tapfd, char **tapfdName, int tapfdSize,
                              int *vhostfd, char **vhostfdName, int vhostfdSize);
561 562 563 564 565

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

566
int qemuMonitorAddNetdev(qemuMonitorPtr mon,
567
                         const char *netdevstr,
568 569
                         int *tapfd, char **tapfdName, int tapfdSize,
                         int *vhostfd, char **vhostfdName, int vhostfdSize);
570 571 572 573

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

574 575
int qemuMonitorGetPtyPaths(qemuMonitorPtr mon,
                           virHashTablePtr paths);
576

577 578
int qemuMonitorAttachPCIDiskController(qemuMonitorPtr mon,
                                       const char *bus,
579
                                       virDevicePCIAddress *guestAddr);
580

581 582
int qemuMonitorAttachDrive(qemuMonitorPtr mon,
                           const char *drivestr,
583
                           virDevicePCIAddress *controllerAddr,
584 585
                           virDomainDeviceDriveAddress *driveAddr);

586 587 588 589 590

typedef struct _qemuMonitorPCIAddress qemuMonitorPCIAddress;
struct _qemuMonitorPCIAddress {
    unsigned int vendor;
    unsigned int product;
591
    virDevicePCIAddress addr;
592 593 594 595 596
};

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

597 598 599
int qemuMonitorAddDevice(qemuMonitorPtr mon,
                         const char *devicestr);

600 601 602 603 604
int qemuMonitorAddDeviceWithFd(qemuMonitorPtr mon,
                               const char *devicestr,
                               int fd,
                               const char *fdname);

605
int qemuMonitorDelDevice(qemuMonitorPtr mon,
606
                         const char *devalias);
607

608 609 610
int qemuMonitorAddDrive(qemuMonitorPtr mon,
                        const char *drivestr);

611
int qemuMonitorDriveDel(qemuMonitorPtr mon,
612 613
                        const char *drivestr);

614 615 616 617
int qemuMonitorSetDrivePassphrase(qemuMonitorPtr mon,
                                  const char *alias,
                                  const char *passphrase);

C
Chris Lalancette 已提交
618 619 620 621
int qemuMonitorCreateSnapshot(qemuMonitorPtr mon, const char *name);
int qemuMonitorLoadSnapshot(qemuMonitorPtr mon, const char *name);
int qemuMonitorDeleteSnapshot(qemuMonitorPtr mon, const char *name);

622
int qemuMonitorDiskSnapshot(qemuMonitorPtr mon,
623
                            virJSONValuePtr actions,
624
                            const char *device,
625 626 627
                            const char *file,
                            const char *format,
                            bool reuse);
628 629
int qemuMonitorTransaction(qemuMonitorPtr mon, virJSONValuePtr actions)
    ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2);
630 631 632 633 634 635 636 637 638 639 640 641
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);
642

643 644 645 646 647 648 649
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);

650 651 652 653
int qemuMonitorArbitraryCommand(qemuMonitorPtr mon,
                                const char *cmd,
                                char **reply,
                                bool hmp);
654

655 656
int qemuMonitorInjectNMI(qemuMonitorPtr mon);

657 658 659
int qemuMonitorScreendump(qemuMonitorPtr mon,
                          const char *file);

660 661 662 663 664
int qemuMonitorSendKey(qemuMonitorPtr mon,
                       unsigned int holdtime,
                       unsigned int *keycodes,
                       unsigned int nkeycodes);

665
typedef enum {
666 667 668 669 670
    BLOCK_JOB_ABORT,
    BLOCK_JOB_INFO,
    BLOCK_JOB_SPEED,
    BLOCK_JOB_PULL,
} qemuMonitorBlockJobCmd;
671 672 673

int qemuMonitorBlockJob(qemuMonitorPtr mon,
                        const char *device,
674
                        const char *back,
675 676
                        unsigned long bandwidth,
                        virDomainBlockJobInfoPtr info,
677 678
                        qemuMonitorBlockJobCmd mode,
                        bool modern)
679
    ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2);
680

681 682 683 684 685 686
int qemuMonitorOpenGraphics(qemuMonitorPtr mon,
                            const char *protocol,
                            int fd,
                            const char *fdname,
                            bool skipauth);

687 688 689 690 691 692 693 694
int qemuMonitorSetBlockIoThrottle(qemuMonitorPtr mon,
                                  const char *device,
                                  virDomainBlockIoTuneInfoPtr info);

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

695 696
int qemuMonitorSystemWakeup(qemuMonitorPtr mon);

697 698 699 700 701 702 703
int qemuMonitorGetVersion(qemuMonitorPtr mon,
                          int *major,
                          int *minor,
                          int *micro,
                          char **package)
    ATTRIBUTE_NONNULL(2) ATTRIBUTE_NONNULL(3) ATTRIBUTE_NONNULL(4);

704 705 706 707 708 709 710 711

typedef struct _qemuMonitorMachineInfo qemuMonitorMachineInfo;
typedef qemuMonitorMachineInfo *qemuMonitorMachineInfoPtr;

struct _qemuMonitorMachineInfo {
    char *name;
    bool isDefault;
    char *alias;
712
    unsigned int maxCpus;
713 714 715 716 717 718 719
};

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

void qemuMonitorMachineInfoFree(qemuMonitorMachineInfoPtr machine);

720 721 722
int qemuMonitorGetCPUDefinitions(qemuMonitorPtr mon,
                                 char ***cpus);

723 724
int qemuMonitorGetCommands(qemuMonitorPtr mon,
                           char ***commands);
725 726
int qemuMonitorGetEvents(qemuMonitorPtr mon,
                         char ***events);
727 728 729
int qemuMonitorGetCommandLineOptionParameters(qemuMonitorPtr mon,
                                              const char *option,
                                              char ***params);
730

731 732 733 734
int qemuMonitorGetKVMState(qemuMonitorPtr mon,
                           bool *enabled,
                           bool *present);

735 736
int qemuMonitorGetObjectTypes(qemuMonitorPtr mon,
                              char ***types);
737 738 739
int qemuMonitorGetObjectProps(qemuMonitorPtr mon,
                              const char *type,
                              char ***props);
740
char *qemuMonitorGetTargetArch(qemuMonitorPtr mon);
741

742 743 744
int qemuMonitorNBDServerStart(qemuMonitorPtr mon,
                              const char *host,
                              unsigned int port);
745 746 747
int qemuMonitorNBDServerAdd(qemuMonitorPtr mon,
                            const char *deviceID,
                            bool writable);
748
int qemuMonitorNBDServerStop(qemuMonitorPtr);
S
Stefan Berger 已提交
749 750 751 752 753 754
int qemuMonitorGetTPMModels(qemuMonitorPtr mon,
                            char ***tpmmodels);

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

755 756 757
int qemuMonitorAttachCharDev(qemuMonitorPtr mon,
                             const char *chrID,
                             virDomainChrSourceDefPtr chr);
758 759
int qemuMonitorDetachCharDev(qemuMonitorPtr mon,
                             const char *chrID);
760 761 762 763

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

764 765
int qemuMonitorSetDomainLog(qemuMonitorPtr mon, int logfd);

766 767 768 769 770 771 772 773 774 775 776 777 778
/**
 * 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

779
#endif /* QEMU_MONITOR_H */