qemu_domain.h 22.3 KB
Newer Older
1 2 3
/*
 * qemu_domain.h: QEMU domain private state
 *
4
 * Copyright (C) 2006-2016 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 26
 *
 * Author: Daniel P. Berrange <berrange@redhat.com>
 */

#ifndef __QEMU_DOMAIN_H__
# define __QEMU_DOMAIN_H__

27
# include "virthread.h"
28
# include "vircgroup.h"
29
# include "virperf.h"
30
# include "domain_addr.h"
31
# include "domain_conf.h"
32
# include "snapshot_conf.h"
33
# include "qemu_monitor.h"
D
Daniel P. Berrange 已提交
34
# include "qemu_agent.h"
35
# include "qemu_conf.h"
36
# include "qemu_capabilities.h"
37
# include "virchrdev.h"
38
# include "virobject.h"
39
# include "logging/log_manager.h"
40

41 42 43 44
# define QEMU_DOMAIN_FORMAT_LIVE_FLAGS      \
    (VIR_DOMAIN_XML_SECURE |                \
     VIR_DOMAIN_XML_UPDATE_CPU)

45 46 47
# if ULONG_MAX == 4294967295
/* Qemu has a 64-bit limit, but we are limited by our historical choice of
 * representing bandwidth in a long instead of a 64-bit int.  */
48
#  define QEMU_DOMAIN_MIG_BANDWIDTH_MAX ULONG_MAX
49
# else
50
#  define QEMU_DOMAIN_MIG_BANDWIDTH_MAX (INT64_MAX / (1024 * 1024))
51
# endif
52

53
# define JOB_MASK(job)                  (1 << (job - 1))
54
# define QEMU_JOB_DEFAULT_MASK          \
55 56 57
    (JOB_MASK(QEMU_JOB_QUERY) |         \
     JOB_MASK(QEMU_JOB_DESTROY) |       \
     JOB_MASK(QEMU_JOB_ABORT))
58

59 60 61 62 63
/* Jobs which have to be tracked in domain state XML. */
# define QEMU_DOMAIN_TRACK_JOBS         \
    (JOB_MASK(QEMU_JOB_DESTROY) |       \
     JOB_MASK(QEMU_JOB_ASYNC))

64 65 66
/* Only 1 job is allowed at any time
 * A job includes *all* monitor commands, even those just querying
 * information, not merely actions */
67
typedef enum {
68
    QEMU_JOB_NONE = 0,  /* Always set to 0 for easy if (jobActive) conditions */
69 70 71 72
    QEMU_JOB_QUERY,         /* Doesn't change any state */
    QEMU_JOB_DESTROY,       /* Destroys the domain (cannot be masked out) */
    QEMU_JOB_SUSPEND,       /* Suspends (stops vCPUs) the domain */
    QEMU_JOB_MODIFY,        /* May change state */
73
    QEMU_JOB_ABORT,         /* Abort current async job */
74
    QEMU_JOB_MIGRATION_OP,  /* Operation influencing outgoing migration */
75

76
    /* The following two items must always be the last items before JOB_LAST */
77 78
    QEMU_JOB_ASYNC,         /* Asynchronous job */
    QEMU_JOB_ASYNC_NESTED,  /* Normal job within an async job */
79 80

    QEMU_JOB_LAST
81
} qemuDomainJob;
82
VIR_ENUM_DECL(qemuDomainJob)
83 84 85 86 87

/* Async job consists of a series of jobs that may change state. Independent
 * jobs that do not change state (and possibly others if explicitly allowed by
 * current async job) are allowed to be run even if async job is active.
 */
88
typedef enum {
89 90 91 92 93
    QEMU_ASYNC_JOB_NONE = 0,
    QEMU_ASYNC_JOB_MIGRATION_OUT,
    QEMU_ASYNC_JOB_MIGRATION_IN,
    QEMU_ASYNC_JOB_SAVE,
    QEMU_ASYNC_JOB_DUMP,
94
    QEMU_ASYNC_JOB_SNAPSHOT,
95
    QEMU_ASYNC_JOB_START,
96 97

    QEMU_ASYNC_JOB_LAST
98
} qemuDomainAsyncJob;
99
VIR_ENUM_DECL(qemuDomainAsyncJob)
100

J
Jiri Denemark 已提交
101 102 103 104 105
typedef struct _qemuDomainJobInfo qemuDomainJobInfo;
typedef qemuDomainJobInfo *qemuDomainJobInfoPtr;
struct _qemuDomainJobInfo {
    virDomainJobType type;
    unsigned long long started; /* When the async job started */
106
    unsigned long long stopped; /* When the domain's CPUs were stopped */
107 108 109 110
    unsigned long long sent; /* When the source sent status info to the
                                destination (only for migrations). */
    unsigned long long received; /* When the destination host received status
                                    info from the source (migrations only). */
J
Jiri Denemark 已提交
111 112 113
    /* Computed values */
    unsigned long long timeElapsed;
    unsigned long long timeRemaining;
J
Jiri Denemark 已提交
114
    long long timeDelta; /* delta = received - sent, i.e., the difference
115 116 117 118 119
                            between the source and the destination time plus
                            the time between the end of Perform phase on the
                            source and the beginning of Finish phase on the
                            destination. */
    bool timeDeltaSet;
J
Jiri Denemark 已提交
120
    /* Raw values from QEMU */
121
    qemuMonitorMigrationStats stats;
J
Jiri Denemark 已提交
122 123
};

124
struct qemuDomainJobObj {
125
    virCond cond;                       /* Use to coordinate jobs */
126
    qemuDomainJob active;               /* Currently running job */
127
    unsigned long long owner;           /* Thread id which set current job */
128
    const char *ownerAPI;               /* The API which owns the job */
J
Jiri Denemark 已提交
129
    unsigned long long started;         /* When the current job started */
130

131
    virCond asyncCond;                  /* Use to coordinate with async jobs */
132
    qemuDomainAsyncJob asyncJob;        /* Currently active async job */
133
    unsigned long long asyncOwner;      /* Thread which set current async job */
134
    const char *asyncOwnerAPI;          /* The API which owns the async job */
J
Jiri Denemark 已提交
135
    unsigned long long asyncStarted;    /* When the current async job started */
J
Jiri Denemark 已提交
136
    int phase;                          /* Job phase (mainly for migrations) */
137
    unsigned long long mask;            /* Jobs allowed during async job */
138
    bool dump_memory_only;              /* use dump-guest-memory to do dump */
J
Jiri Denemark 已提交
139
    qemuDomainJobInfoPtr current;       /* async job progress data */
140
    qemuDomainJobInfoPtr completed;     /* statistics data of a recently completed job */
141
    bool abortJob;                      /* abort of the job requested */
142 143
    bool spiceMigration;                /* we asked for spice migration and we
                                         * should wait for it to finish */
144
    bool spiceMigrated;                 /* spice migration completed */
145
    bool postcopyEnabled;               /* post-copy migration was enabled */
146 147
};

148
typedef void (*qemuDomainCleanupCallback)(virQEMUDriverPtr driver,
149 150
                                          virDomainObjPtr vm);

151 152 153
typedef struct _qemuDomainObjPrivate qemuDomainObjPrivate;
typedef qemuDomainObjPrivate *qemuDomainObjPrivatePtr;
struct _qemuDomainObjPrivate {
154
    struct qemuDomainJobObj job;
155 156

    qemuMonitorPtr mon;
157
    virDomainChrSourceDefPtr monConfig;
E
Eric Blake 已提交
158
    bool monJSON;
159 160
    bool monError;
    unsigned long long monStart;
D
Daniel P. Berrange 已提交
161 162 163 164 165

    qemuAgentPtr agent;
    bool agentError;
    unsigned long long agentStart;

166
    bool gotShutdown;
167
    bool beingDestroyed;
168
    char *pidfile;
169 170 171 172

    int nvcpupids;
    int *vcpupids;

173
    virDomainPCIAddressSetPtr pciaddrs;
J
Ján Tomko 已提交
174
    virDomainCCWAddressSetPtr ccwaddrs;
175
    virDomainVirtioSerialAddrSetPtr vioserialaddrs;
176
    int persistentAddrs;
177

178
    virQEMUCapsPtr qemuCaps;
179
    char *lockState;
180 181

    bool fakeReboot;
182 183

    int jobs_queued;
184 185

    unsigned long migMaxBandwidth;
J
Jiri Denemark 已提交
186
    char *origname;
187
    int nbdPort; /* Port used for migration with NBD */
188
    unsigned short migrationPort;
189
    int preMigrationState;
190

191
    virChrdevsPtr devs;
192 193 194 195

    qemuDomainCleanupCallback *cleanupCallbacks;
    size_t ncleanupCallbacks;
    size_t ncleanupCallbacks_max;
196 197

    virCgroupPtr cgroup;
198

199 200
    virPerfPtr perf;

201 202
    virCond unplugFinished; /* signals that unpluggingDevice was unplugged */
    const char *unpluggingDevice; /* alias of the device that is being unplugged */
203
    char **qemuDevices; /* NULL-terminated list of devices aliases known to QEMU */
204 205

    bool hookRun;  /* true if there was a hook run over this domain */
206 207

    /* Bitmaps below hold data from the auto NUMA feature */
208
    virBitmapPtr autoNodeset;
209
    virBitmapPtr autoCpuset;
210 211 212

    bool signalIOError; /* true if the domain condition should be signalled on
                           I/O error */
213 214
    bool signalStop; /* true if the domain condition should be signalled on
                        QMP STOP event */
215
    char *machineName;
216 217
    char *libDir;            /* base path for per-domain files */
    char *channelTargetDir;  /* base path for per-domain channel targets */
218 219
};

220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236
# define QEMU_DOMAIN_DISK_PRIVATE(disk)	\
    ((qemuDomainDiskPrivatePtr) (disk)->privateData)

typedef struct _qemuDomainDiskPrivate qemuDomainDiskPrivate;
typedef qemuDomainDiskPrivate *qemuDomainDiskPrivatePtr;
struct _qemuDomainDiskPrivate {
    virObject parent;

    /* ideally we want a smarter way to interlock block jobs on single qemu disk
     * in the future, but for now we just disallow any concurrent job on a
     * single disk */
    bool blockjob;

    /* for some synchronous block jobs, we need to notify the owner */
    int blockJobType;   /* type of the block job from the event */
    int blockJobStatus; /* status of the finished block job */
    bool blockJobSync; /* the block job needs synchronized termination */
237 238

    bool migrating; /* the disk is being migrated */
239 240 241 242

    /* information about the device */
    bool tray; /* device has tray */
    bool removable; /* device media can be removed/changed */
243 244
};

245 246 247
struct qemuDomainDiskInfo {
    bool removable;
    bool locked;
248
    bool tray;
249
    bool tray_open;
250
    bool empty;
251 252 253
    int io_status;
};

C
Chen Fan 已提交
254 255
typedef enum {
    QEMU_PROCESS_EVENT_WATCHDOG = 0,
256
    QEMU_PROCESS_EVENT_GUESTPANIC,
257
    QEMU_PROCESS_EVENT_DEVICE_DELETED,
258
    QEMU_PROCESS_EVENT_NIC_RX_FILTER_CHANGED,
259
    QEMU_PROCESS_EVENT_SERIAL_CHANGED,
260
    QEMU_PROCESS_EVENT_BLOCK_JOB,
261
    QEMU_PROCESS_EVENT_MONITOR_EOF,
C
Chen Fan 已提交
262 263 264 265 266

    QEMU_PROCESS_EVENT_LAST
} qemuProcessEventType;

struct qemuProcessEvent {
267
    virDomainObjPtr vm;
C
Chen Fan 已提交
268
    qemuProcessEventType eventType;
269
    int action;
270
    int status;
271
    void *data;
272 273
};

274 275 276
typedef struct _qemuDomainLogContext qemuDomainLogContext;
typedef qemuDomainLogContext *qemuDomainLogContextPtr;

277
const char *qemuDomainAsyncJobPhaseToString(qemuDomainAsyncJob job,
J
Jiri Denemark 已提交
278
                                            int phase);
279
int qemuDomainAsyncJobPhaseFromString(qemuDomainAsyncJob job,
J
Jiri Denemark 已提交
280 281
                                      const char *phase);

282
void qemuDomainEventFlush(int timer, void *opaque);
283

284
void qemuDomainEventQueue(virQEMUDriverPtr driver,
285
                          virObjectEventPtr event);
286 287
void qemuDomainEventEmitJobCompleted(virQEMUDriverPtr driver,
                                     virDomainObjPtr vm);
288

289
int qemuDomainObjBeginJob(virQEMUDriverPtr driver,
290
                          virDomainObjPtr obj,
291
                          qemuDomainJob job)
292
    ATTRIBUTE_RETURN_CHECK;
293
int qemuDomainObjBeginAsyncJob(virQEMUDriverPtr driver,
294
                               virDomainObjPtr obj,
295
                               qemuDomainAsyncJob asyncJob)
296
    ATTRIBUTE_RETURN_CHECK;
297 298 299 300
int qemuDomainObjBeginNestedJob(virQEMUDriverPtr driver,
                                virDomainObjPtr obj,
                                qemuDomainAsyncJob asyncJob)
    ATTRIBUTE_RETURN_CHECK;
301

302 303 304 305
void qemuDomainObjEndJob(virQEMUDriverPtr driver,
                         virDomainObjPtr obj);
void qemuDomainObjEndAsyncJob(virQEMUDriverPtr driver,
                              virDomainObjPtr obj);
306
void qemuDomainObjAbortAsyncJob(virDomainObjPtr obj);
307
void qemuDomainObjSetJobPhase(virQEMUDriverPtr driver,
J
Jiri Denemark 已提交
308 309
                              virDomainObjPtr obj,
                              int phase);
310 311
void qemuDomainObjSetAsyncJobMask(virDomainObjPtr obj,
                                  unsigned long long allowedJobs);
312 313
void qemuDomainObjRestoreJob(virDomainObjPtr obj,
                             struct qemuDomainJobObj *job);
314
void qemuDomainObjDiscardAsyncJob(virQEMUDriverPtr driver,
315
                                  virDomainObjPtr obj);
316
void qemuDomainObjReleaseAsyncJob(virDomainObjPtr obj);
317

318 319
qemuMonitorPtr qemuDomainGetMonitor(virDomainObjPtr vm)
    ATTRIBUTE_NONNULL(1);
320
void qemuDomainObjEnterMonitor(virQEMUDriverPtr driver,
321 322
                               virDomainObjPtr obj)
    ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2);
323 324
int qemuDomainObjExitMonitor(virQEMUDriverPtr driver,
                             virDomainObjPtr obj)
325 326
    ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2)
    ATTRIBUTE_RETURN_CHECK;
327
int qemuDomainObjEnterMonitorAsync(virQEMUDriverPtr driver,
328
                                   virDomainObjPtr obj,
329
                                   qemuDomainAsyncJob asyncJob)
330
    ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2) ATTRIBUTE_RETURN_CHECK;
D
Daniel P. Berrange 已提交
331 332


333
qemuAgentPtr qemuDomainGetAgent(virDomainObjPtr vm);
334 335 336 337
void qemuDomainObjEnterAgent(virDomainObjPtr obj)
    ATTRIBUTE_NONNULL(1);
void qemuDomainObjExitAgent(virDomainObjPtr obj)
    ATTRIBUTE_NONNULL(1);
D
Daniel P. Berrange 已提交
338 339


340 341 342 343
void qemuDomainObjEnterRemote(virDomainObjPtr obj)
    ATTRIBUTE_NONNULL(1);
void qemuDomainObjExitRemote(virDomainObjPtr obj)
    ATTRIBUTE_NONNULL(1);
344

345 346 347 348
virDomainDefPtr qemuDomainDefCopy(virQEMUDriverPtr driver,
                                  virDomainDefPtr src,
                                  unsigned int flags);

349
int qemuDomainDefFormatBuf(virQEMUDriverPtr driver,
350 351 352 353
                           virDomainDefPtr vm,
                           unsigned int flags,
                           virBuffer *buf);

354
char *qemuDomainDefFormatXML(virQEMUDriverPtr driver,
355
                             virDomainDefPtr vm,
356
                             unsigned int flags);
357

358
char *qemuDomainFormatXML(virQEMUDriverPtr driver,
359
                          virDomainObjPtr vm,
360
                          unsigned int flags);
361

362
char *qemuDomainDefFormatLive(virQEMUDriverPtr driver,
363
                              virDomainDefPtr def,
364 365
                              bool inactive,
                              bool compatible);
366

367
void qemuDomainObjTaint(virQEMUDriverPtr driver,
368
                        virDomainObjPtr obj,
369
                        virDomainTaintFlags taint,
370
                        qemuDomainLogContextPtr logCtxt);
371

372
void qemuDomainObjCheckTaint(virQEMUDriverPtr driver,
373
                             virDomainObjPtr obj,
374
                             qemuDomainLogContextPtr logCtxt);
375
void qemuDomainObjCheckDiskTaint(virQEMUDriverPtr driver,
376
                                 virDomainObjPtr obj,
377
                                 virDomainDiskDefPtr disk,
378
                                 qemuDomainLogContextPtr logCtxt);
379 380 381
void qemuDomainObjCheckHostdevTaint(virQEMUDriverPtr driver,
                                    virDomainObjPtr obj,
                                    virDomainHostdevDefPtr disk,
382
                                    qemuDomainLogContextPtr logCtxt);
383
void qemuDomainObjCheckNetTaint(virQEMUDriverPtr driver,
384
                                virDomainObjPtr obj,
385
                                virDomainNetDefPtr net,
386
                                qemuDomainLogContextPtr logCtxt);
387

388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404
typedef enum {
    QEMU_DOMAIN_LOG_CONTEXT_MODE_START,
    QEMU_DOMAIN_LOG_CONTEXT_MODE_ATTACH,
    QEMU_DOMAIN_LOG_CONTEXT_MODE_STOP,
} qemuDomainLogContextMode;

qemuDomainLogContextPtr qemuDomainLogContextNew(virQEMUDriverPtr driver,
                                                virDomainObjPtr vm,
                                                qemuDomainLogContextMode mode);
int qemuDomainLogContextWrite(qemuDomainLogContextPtr ctxt,
                              const char *fmt, ...) ATTRIBUTE_FMT_PRINTF(2, 3);
ssize_t qemuDomainLogContextRead(qemuDomainLogContextPtr ctxt,
                                 char **msg);
int qemuDomainLogContextGetWriteFD(qemuDomainLogContextPtr ctxt);
void qemuDomainLogContextMarkPosition(qemuDomainLogContextPtr ctxt);
void qemuDomainLogContextRef(qemuDomainLogContextPtr ctxt);
void qemuDomainLogContextFree(qemuDomainLogContextPtr ctxt);
405

406 407
virLogManagerPtr qemuDomainLogContextGetManager(qemuDomainLogContextPtr ctxt);

408
const char *qemuFindQemuImgBinary(virQEMUDriverPtr driver);
409 410 411

int qemuDomainSnapshotWriteMetadata(virDomainObjPtr vm,
                                    virDomainSnapshotObjPtr snapshot,
412
                                    virCapsPtr caps,
413 414
                                    char *snapshotDir);

415
int qemuDomainSnapshotForEachQcow2(virQEMUDriverPtr driver,
416 417 418 419 420
                                   virDomainObjPtr vm,
                                   virDomainSnapshotObjPtr snap,
                                   const char *op,
                                   bool try_all);

421
int qemuDomainSnapshotDiscard(virQEMUDriverPtr driver,
422 423 424 425 426
                              virDomainObjPtr vm,
                              virDomainSnapshotObjPtr snap,
                              bool update_current,
                              bool metadata_only);

427 428 429
typedef struct _virQEMUSnapRemove virQEMUSnapRemove;
typedef virQEMUSnapRemove *virQEMUSnapRemovePtr;
struct _virQEMUSnapRemove {
430
    virQEMUDriverPtr driver;
431 432 433 434 435 436
    virDomainObjPtr vm;
    int err;
    bool metadata_only;
    bool current;
};

437 438 439
int qemuDomainSnapshotDiscardAll(void *payload,
                                 const void *name,
                                 void *data);
440

441
int qemuDomainSnapshotDiscardAllMetadata(virQEMUDriverPtr driver,
442 443
                                         virDomainObjPtr vm);

444
void qemuDomainRemoveInactive(virQEMUDriverPtr driver,
445 446
                              virDomainObjPtr vm);

447
void qemuDomainSetFakeReboot(virQEMUDriverPtr driver,
448 449 450
                             virDomainObjPtr vm,
                             bool value);

451
bool qemuDomainJobAllowed(qemuDomainObjPrivatePtr priv,
452
                          qemuDomainJob job);
M
Michal Privoznik 已提交
453

454
int qemuDomainCheckDiskPresence(virQEMUDriverPtr driver,
M
Michal Privoznik 已提交
455 456
                                virDomainObjPtr vm,
                                bool start_with_state);
457

458
int qemuDomainDetermineDiskChain(virQEMUDriverPtr driver,
459
                                 virDomainObjPtr vm,
460
                                 virDomainDiskDefPtr disk,
461 462
                                 bool force_probe,
                                 bool report_broken);
463

464 465 466 467
bool qemuDomainDiskSourceDiffers(virConnectPtr conn,
                                 virDomainDiskDefPtr disk,
                                 virDomainDiskDefPtr origDisk);

468 469 470
bool qemuDomainDiskChangeSupported(virDomainDiskDefPtr disk,
                                   virDomainDiskDefPtr orig_disk);

471 472 473
int qemuDomainStorageFileInit(virQEMUDriverPtr driver,
                              virDomainObjPtr vm,
                              virStorageSourcePtr src);
474
char *qemuDomainStorageAlias(const char *device, int depth);
475

476 477 478 479 480 481 482 483
void qemuDomainDiskChainElementRevoke(virQEMUDriverPtr driver,
                                      virDomainObjPtr vm,
                                      virStorageSourcePtr elem);
int qemuDomainDiskChainElementPrepare(virQEMUDriverPtr driver,
                                      virDomainObjPtr vm,
                                      virStorageSourcePtr elem,
                                      bool readonly);

484 485 486 487
int qemuDomainCleanupAdd(virDomainObjPtr vm,
                         qemuDomainCleanupCallback cb);
void qemuDomainCleanupRemove(virDomainObjPtr vm,
                             qemuDomainCleanupCallback cb);
488
void qemuDomainCleanupRun(virQEMUDriverPtr driver,
489 490
                          virDomainObjPtr vm);

491 492
extern virDomainXMLPrivateDataCallbacks virQEMUDriverPrivateDataCallbacks;
extern virDomainXMLNamespace virQEMUDriverDomainXMLNamespace;
493
extern virDomainDefParserConfig virQEMUDriverDomainDefParserConfig;
494

495
int qemuDomainUpdateDeviceList(virQEMUDriverPtr driver,
496
                               virDomainObjPtr vm, int asyncJob);
497

498 499 500 501
int qemuDomainUpdateMemoryDeviceInfo(virQEMUDriverPtr driver,
                                     virDomainObjPtr vm,
                                     int asyncJob);

502 503 504
bool qemuDomainDefCheckABIStability(virQEMUDriverPtr driver,
                                    virDomainDefPtr src,
                                    virDomainDefPtr dst);
505

506
bool qemuDomainAgentAvailable(virDomainObjPtr vm,
507 508
                              bool reportError);

J
Jiri Denemark 已提交
509 510
int qemuDomainJobInfoUpdateTime(qemuDomainJobInfoPtr jobInfo)
    ATTRIBUTE_NONNULL(1);
511 512
int qemuDomainJobInfoUpdateDowntime(qemuDomainJobInfoPtr jobInfo)
    ATTRIBUTE_NONNULL(1);
J
Jiri Denemark 已提交
513 514 515 516 517 518 519 520 521 522
int qemuDomainJobInfoToInfo(qemuDomainJobInfoPtr jobInfo,
                            virDomainJobInfoPtr info)
    ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2);
int qemuDomainJobInfoToParams(qemuDomainJobInfoPtr jobInfo,
                              int *type,
                              virTypedParameterPtr *params,
                              int *nparams)
    ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2)
    ATTRIBUTE_NONNULL(3) ATTRIBUTE_NONNULL(4);

523 524
int qemuDomainSupportsBlockJobs(virDomainObjPtr vm, bool *modern)
    ATTRIBUTE_NONNULL(1);
525
bool qemuDomainDiskBlockJobIsActive(virDomainDiskDefPtr disk);
526 527
bool qemuDomainHasBlockjob(virDomainObjPtr vm, bool copy_only)
    ATTRIBUTE_NONNULL(1);
528

529
int qemuDomainAlignMemorySizes(virDomainDefPtr def);
530 531
void qemuDomainMemoryDeviceAlignSize(virDomainDefPtr def,
                                     virDomainMemoryDefPtr mem);
532

533
virDomainChrDefPtr qemuFindAgentConfig(virDomainDefPtr def);
534

535 536
bool qemuDomainMachineIsQ35(const virDomainDef *def);
bool qemuDomainMachineIsI440FX(const virDomainDef *def);
537
bool qemuDomainMachineNeedsFDC(const virDomainDef *def);
538
bool qemuDomainMachineIsS390CCW(const virDomainDef *def);
539
bool qemuDomainMachineHasBuiltinIDE(const virDomainDef *def);
540

541 542 543
int qemuDomainUpdateCurrentMemorySize(virQEMUDriverPtr driver,
                                      virDomainObjPtr vm);

544 545
unsigned long long qemuDomainGetMemLockLimitBytes(virDomainDefPtr def);
bool qemuDomainRequiresMemLock(virDomainDefPtr def);
546
int qemuDomainAdjustMaxMemLock(virDomainObjPtr vm);
547

548 549 550 551
int qemuDomainDefValidateMemoryHotplug(const virDomainDef *def,
                                       virQEMUCapsPtr qemuCaps,
                                       const virDomainMemoryDef *mem);

552
bool qemuDomainHasVcpuPids(virDomainObjPtr vm);
553
pid_t qemuDomainGetVcpuPid(virDomainObjPtr vm, unsigned int vcpu);
554 555
int qemuDomainDetectVcpuPids(virQEMUDriverPtr driver, virDomainObjPtr vm,
                             int asyncJob);
556

557 558 559 560 561 562 563 564
bool qemuDomainSupportsNicdev(virDomainDefPtr def,
                              virQEMUCapsPtr qemuCaps,
                              virDomainNetDefPtr net);

bool qemuDomainSupportsNetdev(virDomainDefPtr def,
                              virQEMUCapsPtr qemuCaps,
                              virDomainNetDefPtr net);

J
John Ferlan 已提交
565
int qemuDomainNetVLAN(virDomainNetDefPtr def);
566

567 568 569
int qemuDomainSetPrivatePaths(virQEMUDriverPtr driver,
                              virDomainObjPtr vm);

570
void qemuDomainClearPrivatePaths(virDomainObjPtr vm);
P
Peter Krempa 已提交
571 572 573

virDomainDiskDefPtr qemuDomainDiskByName(virDomainDefPtr def, const char *name);

574
#endif /* __QEMU_DOMAIN_H__ */